1. 基础
1.1 对称与不对称加密
发送端加密和接收端解密使用相同密钥,则为对称加密,否则为不对称加密。
1.2 欧拉函数
对于正整数n, 欧拉函数f(n)是小于n的正整数中与n互质的数的个数。
具有性质:对于互质的两个数p和q, f(p*q)=f(p)*f(q)=( p - 1 ) * ( q - 1 )
1.3 模逆
如果两个正整数a和n互质,那么一定可以找到一个整数b,使得a*b-1可以被n整除,即
(a * b) mod n = 1
2. RSA密钥生成步骤
(1) 随机生成两个不相等的质数p和q
一般使用硬件随机数生成器(TRNG/PRNG)生成一个数然后判断该数是否为质数,若不是则继续生成直至找到这两个数。
(2) 计算乘积n = p * q,n的长度就是密钥的长度.
(3) 计算欧拉函数f(n) = (p - 1) * (q - 1)
(4) 随机选取一个整数e,使其满足1 < e < f(n),且e要与f(n)互质
一般而言会选取65535,即2^16-1,这个数对于硬件运算很方便。
(5) 计算e关于f(n)的模反元素d,使得 : e * d - 1 = k * f(n) ,其中k为正整数
(6) 公钥定义为:( e , n ) , 私钥定义为:( d , n )
3. 实现步骤
设明文为m,密文为c
(1) 对于发送端:
a. 传递公钥(e,n)至接收端,
b. 发送密文c = ( m ^ e ) mod n;
(2) 对于接收端
解密明文m = ( c ^ d ) mod n ;
4. 分析
传输过程可能泄露的值为:e, n , c
模逆运算 e * d - 1 = k * f(n)中, 想要得到私钥d,则必须知道f(n)的值,即必须知道p和q的值。而对于大数n(p*q)的分解的实现是十分困难的,且复杂程度随n的长度增加而增加。
因此RSA算法的安全性很高。
以上内容参考来源为百度来的信息拼凑。