鱼跃此时海,花开彼岸天
算法分析
- RSA是最早的公钥密码系统之一, 广泛用于安全数据传输。
- RSA的基础是数论的欧拉定理,它的安全性依赖于大整数因式分解的困难性。
- RSA算法主要由密钥生成、加密和解密三个部分组成。
- 密钥生成:
a 选择两个大素数𝑝和𝑞
,(𝑝≠𝑞
,需要保密,步骤4以后建议销毁)
b 计算𝑛=𝑝×𝑞,
φ(n) =(𝑝-1)×(𝑞-1)
c 选择整数 𝑒 使(φ(n),𝑒) =1
,1<𝑒< φ(n)
d 计算𝑑,使𝑑 = e^(-1) (modφ(n))
, 得到:公钥为{𝑒, 𝑛}
; 私钥为{𝑑}
- 加密:
用𝒆,𝒏
: 明文𝑀<𝑛
, 密文𝐶=M^e (𝑚𝑜𝑑 𝑛)
- 解密:
用𝒅,𝒏
: 密文𝐶
, 明文𝑀 =C^d (𝑚𝑜𝑑 𝑛)
算法实现
1 | # 欧几里得算法求两个数字的最大公约数 |
加密与解密
公钥私钥中用到的两个大素数数p,q,都是1024位,首先生成相应的公钥和私钥。然后,将需要被加密的信息转化成十进制,长度小于n的长度,如果信息长度大于n的长度,那么分段进行加密,分段解密即可。具体例子如下:
正确性
证明接收者可以使用私钥及解密算法恢复出明文。分两种情况讨论:
安全性分析
- RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。
- 对于RSA的攻击,存在以下攻击:
- 针对𝑛分解的攻击,需要完全尝试所有小于√n的素数。
- 循环攻击:攻击者得到密文𝑐后,对密文𝑐依次进行如下变换:
- 共模攻击:假设𝑚是明文,两用户的公钥分别是𝑒1和𝑒2,且(𝑒1,𝑒2)=1,共同的模数𝑁,两个密文分别为:
知道𝑁,𝑒1,𝑒2,𝑐1
和𝑐2
,可如下恢复明文𝑚。(𝑒1,𝑒2)=1
,由欧几里德算法可找出𝑟,𝑠
满足𝑟𝑒1+𝑠𝑒2=1
。
无需秘密密钥𝑑,就可以得到明文𝑚 - 选择密文攻击:需要破译密文和骗取签名。
RSA模幂运算的性质:
- 用户A公钥为
(𝑒,𝑛)
,攻击者监听到发给A的密文𝑐=𝑚^𝑒 𝑚𝑜𝑑 𝑛
- 攻击者随机选取一个
𝑟 <𝑛
,计算𝑦=𝑟^𝑒 𝑚𝑜𝑑 𝑛,𝑡=𝑦𝑐 (𝑚𝑜𝑑 𝑛)
- 攻击者发送𝑡给A,要求A对消息𝑡签名(A用私钥签名)
- A把签名返回给攻击者,攻击者就得到了
𝑠=𝑡^𝑑 𝑚𝑜𝑑 𝑛
攻击者计算:
于是攻击者获得了明文𝑚
- 低加密指数攻击:小的公钥可加快加密的速度,但过小的公钥易受到攻击。
- 如果3个用户都使用3作为公钥,对同一个明文𝑚加密,则
c1=m3 (mod n1),c2=m3 (mod n2),c3=m3 (mod n3), gcd(n1,n2,n3)=1
,且𝑚<𝑛1,𝑚<𝑛2,𝑚<𝑛3
- 由中国剩余定理可从
𝑐1,𝑐2,𝑐3
计算出𝑐,且c=m3 mod (n1n2n3 )
,显然m3<n1n2n3
,所以m=c^(1/3)
- 时间攻击:时间攻击主要针对RSA核心运算是非常耗时的模乘,只要能够精确监视RSA的解密过程,就能估算出私有密钥𝑑。