RSA演算法應用及證明

sushauai發表於2015-12-26

最近在搞hadoop,因為它用到了ssh,上網查了查,順便把ssh所用到的RSA演算法看了看,覺得很不錯,寫下來梳理一下,也算作備忘。


RSA定理

若P和Q是兩個相異質數(即都為質數且最大公約數為1),另有正整數e和d,其中d的值與( P - 1 )( Q - 1 )的值互質(即最大公約數為1),並使得( ed ) mod ( P - 1 )( Q - 1 ) = 1。有正整數A,且A < PQ,設C = A^e mod PQ,B = C^d mod PQ則有:A = B。


應用:公鑰-私鑰機制

公鑰為一個整數對(N, e);私鑰也是整數對(N, d)。

例:P=101,Q=113,則N=11413,e=3533,d=6597。

滿足RSA定理的各個關係:gcd[d, (P-1)*(Q-1)] = gcd(6597, 100*112) = gcd(6597, 11200) = 1;

(ed)mod[(P-1)(Q-1)] = (3533*6597)mod(100*112) = 23307201 mod 11200 = 1;


那麼,我們就有了公鑰(11413, 3533),和私鑰(11413, 6597)。


可以由RSA定理得知:對於任何小於11413的正整數a,都有:(a^3533)mod 11413 = c, (c^6597)mod 11413 = a。

比如:a=9726時,(9726^3533)mod 11413 = 5761 = c;(5791^6597)mod 11413 = 9726 = a。


這樣的話,規定郵件接收者擁有公鑰(11413, 3533)和私鑰(11413, 6597),公鑰可以公開給任何人,而私鑰由此人保管,不洩漏給任何人。

當傳送者要向接收者傳送一封郵件,內容是9726時,他向接收者申請,讓接收者把他的公鑰(11413, 3533)發給傳送者,傳送者做了運算(9726^3533)mod 11413 = 5761,將內容9726加密成為5761,傳送給接收者。

因為只有私鑰可以解密這一郵件,而且無法從公鑰推匯出私鑰的內容,所以即使其他人知道公鑰是(11413, 3533),電文是5761,仍然無法知道內容是什麼。

在接收者收到5761後,做運算(5791^6597)mod 11413 = 9726,即還原出原文內容,達到保密的目的。


下面是RSA定理的證明,出自http://blog.csdn.net/fireseed/archive/2005/03/23/327444.aspx,作者很強大,這裡謝謝了。

RSA定理

若P和Q是兩個相異質數,另有正整數R和M,其中M的值與( P - 1 )( Q - 1 )的值互質,並使得( RM ) mod ( P - 1 )( Q - 1 ) = 1。有正整數A,且A < PQ,設C = AR mod PQ,B = CM mod PQ則有:A = B


證明:

將C = AR mod PQ代入B = CM mod PQ得:

B = ( ( AR mod PQ )M ) mod PQ

根據積模分解公式,可變形為:

B = ( AR )M mod PQ

B = ARM mod PQ                      (1)

因為有( RM ) mod ( P - 1 )( Q - 1 ) = 1,所以有:

RM = K ( P - 1 )( Q - 1 ) + 1,K為正整數。

代入(1)得:

B = AK ( P - 1 )( Q - 1 ) + 1 mod PQ                 (2)

如果ARM < PQ時,明顯有B = A。

如果ARM > PQ,且A不是P的倍數也不是Q的倍數時,(2)可變形為:

B = ( AAK ( P - 1 )( Q - 1 ) ) mod PQ

根據積模分解公式可變形為:

B = ( ( A mod PQ )( AK ( P - 1 )( Q - 1 ) mod PQ ) ) mod PQ                   (3)

根據定理三的逆定理:

AK ( P - 1 )( Q - 1 ) mod PQ = ( AK ( P - 1 ) ( Q - 1 ) mod Q

根據費馬小定理可得:

( AK ( P - 1 ) ( Q - 1 ) mod Q = 1,則

AK ( P - 1 )( Q - 1 ) mod PQ = 1

故( 3 )可轉化為:

B = ( A mod PQ ) mod PQ

因為A < PQ,所以B = A成立。

在述證明過程中可以總結一點:

當P為素數且A和P互質時,那麼當N為任意自然數時都有AN( P - 1 ) mod P = 1成立,這個定理下面還要用到,我們稱之為定理四。 

如果ARM > PQ,且A不是P的倍數而是Q的倍數時,A可表示為A = NQ,N為一小於A的整數。

那麼(2)式可變形為:

B = ( NQ )K ( P - 1 )( Q - 1 ) + 1 mod PQ

B = ( NK ( P - 1 )( Q - 1 ) + 1 )( QK ( P - 1 )( Q - 1 ) + 1 ) mod PQ

把Q作為公因子提出來,得:

B = ( ( NNK ( P - 1 )( Q - 1 ) ) ( QK ( P - 1 )( Q - 1 ) mod P ) ) Q

用積模分解公式進行分解,得:

B = ( ( NNK ( P - 1 )( Q - 1 ) mod P )( QK ( P - 1 )( Q - 1 ) mod P ) mod P ) Q

跟據定理四,NK ( P - 1 )( Q - 1 )和QK ( P - 1 )( Q - 1 )的值都為1,所以有:

B = ( ( ( N mod P ) mod P ) mod P ) Q

B = NQ mod PQ mod PQ mod PQ

B = A mod PQ mod PQ mod PQ

因為A < PQ,所以B = A成立

同理,當A是P的倍數而不是Q的倍數時,B = A也成立。

 又因為A小於PQ,而P和Q又都是質數,所以A既是P的倍數又是Q的倍數的情況不存在。

 RSA定理成立。

相關文章