RSA算法
明文和密文均是0至n-1之间的证书,n的大小通常为1024位的2进制,或309位的十进制。
生成RSA密钥
每个用户生成一个私钥/公钥对,通过:
随机选择两个大素数p,q;【保密的,选定的】
-
计算系统的模量:N=pq 【公开的,计算得到的】
- 注意有 =(p-1)(q-1)【比N小又与N互素的数的个数】
随机选择e,满足gcd()=1;1<e< 【公开的,选定的】
-
解出d,d满足【保密的,计算得出的(扩展欧几里得算法?)】
即 ed=1mod 且1<d< 【ed互为模的乘法逆】
公布公钥{e,N};保存私钥{d,N}
【乘法幂回顾】
如果a和b互素,则b有模a的乘法逆元。【注意:互素是前提】
即如果gcd(a,b)=1,那么b有模a的乘法逆元。对于b<a,存在,使
RSA的使用
明文分组M和密文分组C:
因此,有
另一种:
RSA浅析
【欧拉定理】数论中的欧拉定理(费马-欧拉定理),表明,若n,a为正整数,且n,a互质,则
在RSA中,N=pq,选择mod N互逆的ed,得到
RSA证明
1.M和p不互素,p可以整除M。则M mod p=0,
2.M和p互素,根据欧拉公式,
由于p和q对称,且p,q均为素数。
则同样有
由于pq互质,pq=N,则根据中国余数定理:
(0M<N,大于n(1024bit)可能会有部分解不出来)
【中国余数定理】
RSA安全性
关键在于大数的分解,当N(1024bit)很大时,分解成两个素数很难
如何选择素数pq? pq最好不相差太大
3种攻击:1.暴力密钥搜索:(找密钥d),但是e,dN位数较高,难以实现
2.数学攻击,分解N,暂无对大整数进行质因数分解的高效算法。【指在求pq】
3.时间攻击【通过隐藏时间信息防范】