RSA

RSA

RSA加密算法科普版

Posted by D on January 12, 2020

RSA 属于加密算法里面的非对称加密,那么有非对称加密,应该有对称加密。 先来说一下对称加密。

对称加密

对称加密的现在比较流行的算法是 AES

假设有两个人A和B,A 要将信息 m 传递给 B. 明文:m 密钥:e (密钥只有A和B知道) 密文:c (m 和e 通过某种算法计算就能得到 c)

假设这个算法就是 m + e 吧. c = m + e (加密算法)

A 将加密后的密文 c 传递给 B , B 用解密算法即 c 减去 e 就能得到m, m = c - e

非对称加密

非对称加密算法比较流行的算法有RSA,ECC, RSA工程上比较容易实现,ECC算法破解难度更大.

假设有两个人A和B,A 要将信息 m 传递给 B. 如下表格,A 有要传递给 B的信息m, B 有两天钥匙,一条是公钥e,一条是私钥d.

A B
m(明文) e(公钥),d(私钥)

B 首先通过网络将公钥 d 通过网络传递给 A. A 通过公钥的某一个算法得到密文 c, 且把c通过网络传送给B. 假设这个算法是 c = m + e,通过拥有公钥e和密文c是解密不出明文m的, 得到密文 c 之后通过某一算法结合私钥 d 才能算出来m,这样只有B才能算出m.

假设这个算法是 m = c - d , 当然,公钥e和私钥d是有一定的关系的.

RSA加密

RSA 算法是由当时1977年在MIT工作的Rivest,Shamir,Adleman一起提出的, 故这个算法名称就是由他们三人姓开头字母拼凑在一起组成的.

它的基本原理如下:

  1. 先找出两个质数 p,q (质数:只有1和它本身两个约数的数, 约数,又称因数。 整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除, 或b能整除a。a称为b的倍数,b称为a的约数)

  2. n = p * q

  3. $\varphi$(n)=(p-1)(q-1) (欧拉函数)

  4. 公钥 e 条件 1 < e < $\varphi$(n) 是整数且 e 和 $\varphi$(n) 要互质 私钥d: e * d 除以 $\varphi$(n) 余数为1.(比如:$\varphi$(n)=20,e=3,d=7就成立).

  5. A 加密 $m^{e}$ 除以 n 求余数 c.
  6. B 解密 $c^{d}$ 除以 n 求余数 一定是 m.(可以从数学上证明)

  7. 安全性
    • 传播的数据:n,e,c
    • 解密需要的数据:n,d,c

就算是窃听者知道了n,c 但是他不知道私钥 d 无法解密. 那么如果窃听者可不可以算出 d来呢?那么我们下面看一下: 如果通过 e 求出 d,首先要知道 $\varphi$(n).要想求$\varphi$(n),必须要先知道 p 和 q. n = p*q, n是已知的(因为是在公开网络上传播了.)
那么通过n求p和q,就是质因数分解. 大数的质因数分解非常难,目前被破解的最长RSA密钥就是768位(二进制位).
目前推荐 n长度为 2048位,这个长度目前是比较安全的.
当然,当量子计算机可行之后,这个长度也是不保险的,可能整个密码系统都要改变来防止量子计算机的破解.

: