2010-07-09 15 views
14

RSA için, gizli üssü nasıl hesaplarım?RSA için, gizli üssü nasıl hesaplarım?

P ve q iki prim ve phi = (p-1) (q-1) ve genel üs (0x10001) verildiğinde, gizli üssü 'd' nasıl alabilirim?

Ben yapmak zorunda olduğunu okudum

: d = e -1 mod phimodular inversion ve euclidean equation kullanarak ama anlayamıyorum nasıl ya bir -1 ≡ x yukarıdaki formül harita modüler inversiyon wiki sayfasındaki mod m formülü veya bunun öklid GCD denklemiyle nasıl eşleştiği. Birisi lütfen yardım edebilir

, şerefe

+1

En azından java'ya benziyor, tek ihtiyacım olan şey d = (java.math.BigInteger) e.modInverse (phi); – Chris

+0

evet, bunu yapmalı ... iyi şanslar! –

+0

Bu soruyu off-topic olarak kapatmak için oy veriyorum çünkü matematik, programlama değil. –

cevap

17

Sen yaraşır d için çözmeye extended Euclidean algorithm kullanabilirsiniz

RSA şifreleme için
de = 1 mod phi(m) 

, e şifreleme anahtarı, d şifre çözme anahtarı olduğunu ve şifreleme ve şifre çözme, her ikisi de modülasyon modu m tarafından gerçekleştirilir. Anahtar e ile bir mesaj a şifrelemek ve ardından anahtar d kullanarak şifresini çözmek için, hesaplamak (a e) d bir de mod m =. Ama de = 1 mod phi(m) beri Euler's totient theorem de bir bir mod m uyumlu olduğunu söyler - diğer bir deyişle, orijinal a geri almak.

yüzden RSA şifreleme güvenli olduğuna inanılan çarpanlara m = pq, bilmeden, sadece e anahtar şifreleme ve modül m bilerek şifre çözme anahtarı d elde etmek bilinen hiçbir verimli yolu vardır.

+1

Buradaki kodla iyi şanslar elde ettim: http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm#Recursive_method_2 Bu işleve a = e, b = phi girilmesi bana x, y - y atılır. ve x gizli üssüdür d! – Chris

+1

@Chris: Euler ve Euclid, patent gelirlerinden paylarını almak için hayatta kalmadı. Çok uzun, ve tüm matematik için teşekkürler! –

+0

Sadece bütünlük için, aynı temel performansla hesaplamayı yapmanın başka bir yolu d = e ** dir (phi (phi (m)) - 1) mod phi (m). –