RSA原理说明

 

 

长度,建议至少1024。模数n(常取默认65537)两边都要用。

指数e,和n一起就是公钥。

指数d,和n一起就是私钥。

质数p和q用于生成密钥对,然后就丢弃不公开。

 

一。密钥对的生成步骤

1、随机选择两个不相等的质数p和q。

2、计算p和q的乘积n。

3、计算p-1和q-1的乘积m。

4、随机选个整数e,e与m要互质,且0<e<m。

5、计算e的模反元素d。

6、n,e组成公钥,n,d组成私钥。

 

 

用公钥(n, e)加密:明文e ≡ 密文 (mod n)

用私钥(n, d)解密:密文d ≡ 明文 (mod n)

上述表达式是同余式,也就是“≡”两边mod n是相等的。mod运算就是取被除数 / 除数得到的余数,运算符是%。比如5%3=2。所以上式也可表达成

用公钥(n, e)加密:密文 = 明文e % n

用私钥(n, d)解密:明文 = 密文d % n

 

一。

i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
i mod 4 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
i mod 7 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5

(a % 4)是以4为周期在循环,(a % 7)是以7为周期在循环,而且数对(a % 4, a % 7)在这个[0,21]之间并没有出现重复,也就是说由(a % 4, a % 7)可以确定a的值

如果n个数互质,且乘积为P,有一个未知数M,已知M分别除以n个数的余数,那个在0<M<P的范围内,可以确定唯一的M值。

二。

13 * 77 = 1001 => 1001 % 1000 = 1

=> 1001 ≡ 1 (mod 1000)

=> a * 1001 ≡ a (mod 1000)

就是说任何数乘以1001除以1000得到余数是本身。因此:

(a * 1001) % 1000 = (a * 13 * 77) % 1000 = ((a * 13) % 1000) * 77) % 1000

 

理解一下就能发现,我们并不需要知道a * 13的积是多少,而是知道它除以1000的余数就行了,因为反正最后都是要模1000,那事先拿一部分来模1000并不影响结果。

除法类似,两个数乘积除以另一个数,那事先用一个乘数除以除数,得到的值再乘以另一个乘数再除,并不影响结果。这个思想,也是RSA用来当被模数过大时优化计算力的算法。

 

你心想三位数,乘以13,告诉我乘积的后三位数,我就能知道你想的是哪个数!

假如你想的是233,233*13=3029,所以你告诉我的是029,我只要把29*77=2233,积的后三位数233就是你心想的数。

这里就有点非对称的影子了,(1000, 13)就是公钥,(1000, 77)就是私钥。

 

3.费马小定理

 

 ☆  p = 

2- 1 = 3,   2- 1 = 15 = 3×5,   2- 1 = 63 = 3×21,  2- 1 = 255 = 3×85,  210 - 1 = 1023 = 3×341, ...

费马指数:2, 4, 6, 8, 10, ......

☆  p = 

2- 1 = 15 = 5×3,   2- 1 = 255 = 5×51,   212 - 1 = 4095 = 5×819,   216 - 1 = 65535 = 5×13107, ...

费马指数:4, 8, 12, 16, ......

☆  p = 

2- 1 = 7 = 7×1,   2- 1 = 63 = 7×9,   2- 1 = 511 = 7×73,   212 - 1 = 4095 = 7×585,  ...

费马指数:3, 6, 9, 12, ......

☆  p = 11 

210 - 1 = 1023 = 11×93,   220 - 1 = 1048575 = 11×95325,   230 - 1 = 1073741823 = 11×797612893,   ...

费马指数:10, 20, 30,  ......

 

 

参考:

https://toutiao.io/posts/u6ehd/preview

图片:http://introcs.cs.princeton.edu/java/99crypto/

posted @ 2017-06-19 16:37  等风来。。  Views(403)  Comments(0Edit  收藏  举报
------------------------------------------------------------------------------------------------------------ --------------- 欢迎联系 x.guan.ling@gmail.com--------------- ------------------------------------------------------------------------------------------------------------