RSA
RSA加密算法是一种非对称加密算法,是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。
RSA基于一个数学难题:
对两个质数相乘容易,而将其合数分解很难的这个特点进行的加密算法。 n=p1*p2,已知p1、p2求n简单,已知n求p1、p2困难。
例如很快就能算出53*61=3233, 但已知3233算出53和61恐怕得一会。目前已经算出最长RSA密钥长度为768位,目前使用的密钥长度一般为1024或2048位。
密钥生成
RSA密钥由一对公私钥组成,这对密钥如何生成,里头都包含什么?
密钥生成过程:
- 随机选择两个不相等的质数p和q,N = pq
- φ(n) = (p-1)(q-1)
- 随机选择一个整数E,条件是1< E < φ(n),且E与φ(n) 互质
- ED MOD φ(n) = 1 (扩展欧几里得算法)
- 将N和E封装成公钥,N和D封装成私钥
公钥 | E 和 N |
---|---|
私钥 | D 和 N |
加密 | 密文=明文^E % N |
解密 | 明文=密文^D % N |
这里不去推导数学公式)。
假设攻击者获取到公钥和密文,明文=密文^D % N。N=pq,由于大整数因数分解很难,所以攻击者无法获取到pq,同理也无法获取到D,如果有一天找到有效的方法计算出N=pq,那么RSA算法就被破解了。