再回首RSA~

40 阅读3分钟

3年前,我其实在 手把手带你探寻数据加密的奥秘😉~ 有聊过RSA的具体实现过程,但现在回过头来看,那篇文章讲的有点啰嗦(哈哈,自己吐槽自己),所以我准备在这篇文章里更加简洁地去把RSA的原理讲明白,那么废话不多说,开搞!

image.png

正文

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准

RSA最核心的内容分为两大部分,一个是 密钥的生成,另一个则是 加解密的过程,下面我会分别进行说明

密钥的生成

密钥的生成总共分为5步,列举如下

  • 选择两个大素数,设为p和q
  • 拿到p和q的乘积,设为n
  • 拿到p-1和q-1的乘积,设为φ(n)
  • 选取一个正整数e,1<e<φ(n)
  • 根据ed = 1 mod φ(n),求出d,求解方法:ed = φ(n) * x + 1 (x=1,2,3,4,5)

通过上述5个步骤,我们就能拿到p、q、n、φ(n)、e,d,公钥部分包括n、e,私钥部分包括p、q、φ(n)、d

加密与解密

我们知道RSA的加密是用公钥,解密是用私钥,对应的过程如下所示

  • 加密:密文C = M^e mod n
  • 解密:明文M = C^d mod n

可以看到,加解密的公式其实并不复杂,但想要破解却很困难,因为就算知道了n,但因为两个大素数的乘积极难因式分解出来,所以也就推导不出p和q,后续的φ(n)和d就更妄想拿到了

亿点点小拓展

上述内容其实就是整个RSA最核心的内容了,但这里我还想再多聊一点

image.png

  • 上文提到可以用公钥加密,私钥解密,这样可以保证数据的机密性。其实反过来,用私钥加密,公钥解密也是可以的,只是适用的场景不一样,这种方式多用在数字签名的场景,结合md5之类的hash算法,可以保证数据的完整性以及真实性
  • 需要加密的明文数据量如果大于n,那么是没法去加密的,此时会发生回绕现象,导致加密失败。所谓的“密钥长度”其实就是指n的位数,目前主流的长度都是1024位以上,因为如果小于1024位的话,会存在被破解的风险