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