2010-09-18 166 views
6

我的值爲p,q,ne並且想要計算私鑰d。我怎麼能這樣做,有人可以給我的例子C#代碼?我正在使用BigInteger類來表示p,q,ne的值,所以我假設d也將是BigInteger在C中生成私有RSA密鑰#

回答

1

短方式是計算È模的逆(P-1)*(Q-1)。其實你只需要p-1q-1的最小公倍數,但這不會給你買太多(是的,d有幾個可能的值,這是正常的,它們都是等價的) 。

如果您的BigInteger類具有模塊化逆方法,那麼這將很容易:只需調用它即可。否則,你將不得不使用擴展歐幾里德算法自己計算它(這是BigInteger類傾向於用來計算模塊反轉的東西)。

3

Wikipedia

確定d(使用模算術)滿足全等關係alt text

  • 換句話說,ED - 1可以被均勻地由歐拉除以(P - 1) (q - 1)。
  • 這通常使用擴展的歐幾里得算法來計算。
  • d保持爲私鑰指數。

擴展歐幾里德算法可以讓你找到整數,這樣使得下式成立:

alt text

擴展歐幾里德算法是特別有用,當a和b是互質,因爲x是模b的模乘法逆。

在這個公式設置aeb(p-1)(q-1)gcd(a, b)爲1(因爲需要e和φ(PQ)在RSA算法進行互質)和解決x,讓你的d。 維基百科頁面extended Euclidean algorithm有關於如何編寫算法來解決x和y的更多細節。例如,你可以使用這個遞歸函數(僞代碼):

function extended_gcd(a, b) 
    if a mod b = 0 
     return {0, 1} 
    else 
     {x, y} := extended_gcd(b, a mod b) 
     return {y, x-(y*(a div b))} 

在.NET中,如果你只是想生成你不必自己實現RSA算法的一些RSA密鑰。在.NET框架中已經有了一個可以使用的RSA實現。

+0

我知道如何從頭開始生成密鑰,但出於好奇心我試圖從上述值恢復d。 – b3n 2010-09-18 08:54:46

1

這是我做到了。

素數p = 7和q = 17

計算N = P * Q = 119

計算F(N)=(P-1)*(Q-1)= 96

計算d = e^-1 mod f(n),例如峯,d = 77