RSA算法个人理解整理
RSA算法个人理解整理
相关知识点
1.欧拉函数:
对于一个正整数n,小于n的正整数中与n互质的正整数个数(包括1)的个数,记作 φ(n)。
欧拉函数通式:
例如:10的质因数为2,5。那么欧拉函数:φ(10) = 10 × (1﹣1/2) × (1-1/5)。
再比如:28的质因数为2,7。那么28的欧拉函数:φ(28) = 28 × (1 -1/2) × (1-1/7) = 12
再比如:φ(11) = 11 × (1 -1/11) = 10 (特别规定:n是素数,则欧拉函数为n-1)
2.欧拉函数的一些性质:
a.若n为质数,则φ ( n ) = n - 1;
b.若m与n互质,则φ ( n*m ) = φ ( n ) * φ ( m );
c.若n为奇数时,φ ( 2n ) = φ ( n );
d.若正整数n与k互质,那么就有
RSA加密算法的基本特征:
1.公钥PK是公开的,私钥SK是保密的。
2.私钥SK是由公钥决定的。
(但是由于某个大数n的欧拉函数φ (n)目前无法直接计算得到,所以由公钥推导计算私钥几乎行不通!! )
3.加密算法E、解密算法D也都是公开的。
4.RSA的密钥长度一般:1024,2048,3072,7680等
RSA加密的描述
1.公钥 = (E,N)
2.私钥 = (D,N)
那么秘钥对表示为:(E,D,N)
秘钥对生成步骤:
① 求N ② 求L(L为中间过程的中间数) ③ 求E ④ 求D
①.求N: N = p × q
准备两个大的互质数p,q(这两个数太小则会容易破解)。将p乘以q就是N。
(如果互质数p和q足够大,那么根据目前的计算机技术和其他工具,至今也没能从N分解出p和q,
换句话说,不可能从公钥推出私钥。)
②.求L: L = lcm(p - 1, q - 1)
L 是p-1和q-1的最小公倍数。
③.求E: E比L小比1大,且E和L最大公约数为1(备注:互质)
1 < E < L
gcd(E,L)=1
(之所以需要E和L的最大公约数为1,是为了保证一定存在解密时需要使用的数D)
公钥对为 (E, N)
④.求D: 1 < D < L, 且E*D mod L = 1
1 < D < L
E*D mod L = 1
数D是由数E计算出来 (实际中,数D必须保证足够大)
私钥对为 (D, N)
最后
通过以上得到公钥对(E, N)进行加密的密文,可以用私钥对(D, N)解密
举个例子
第一步求N:
p=1001783
q=89787751
N=89,947,842,560,033 = p * q
第二步求L:
L= lcm(1001782, 89787750) 即(1001783 - 1) 与(89787751 - 1)的最小公倍数
L=44,973,875,885,250 = 2500891355513*9209
第三步求E:
E取值7
gcd(E, L)= gcd(7, 44,973,875,885,250)= 1
公钥对 = (E, N) = (7, 89,947,842,560,033)
第四步求D:
7 * D mod 44973875885250 = 1
得到 D = 32,124,197,060,893
私钥对 = (D, N) = (32,124,197,060,893, 89,947,842,560,033)
RSA加解密的要点
互质的p,q的选择:
① 保证互质,不能靠的太近
② p-1和q-1的因子不能太小,否则N可以很快被分解
③ 产生p、q的随机数,必须要求随机和不可预测。(开源的非常好的随机数算法不能使用)
小贴士
如何分解大整数 N?
1、当 N 的长度较小时,采用爆破
2、当 N 的因数p、q相差较小或相差很大时,可以采用离线工具yafu来分解
3、当 N 的位数过大时,且不满足上述条件,可以用在线网站 factordb。该网站类似于彩虹表,将已被分解的大数结果存储起来,只需要输入查询即可。
4、通常,通过优化处理降N简化过程,中国剩余定理(CRT)