最近在搞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定理成立。