RSA核心思想
郝伟 2020/07/23
RSA算法核心的思想只有两部分:
- Alice随机生成两个数作为解密,一个被称为公钥发布给所有人,另一个作为私钥只有自己持有;
- 任何人可以使用公钥对数据加密,只有Alice可以使用私钥解密获得原数据。
这样,Bob就可以使用公钥对要传输的数据加密再发给Alice,即便Bob加密后的数据泄露也不怕,因为别人没有密钥,无法解开。
所以RSA算法的神奇之处有两点:
- 数据只能使用公钥加密,必需使用私钥才能解开
这种加密方式称之为非对称加密,即加密和解密的密钥是不相同的。对应的有对称加密,即加密和解密的解密是一样的。对称加密容易实现,比如我们可以在加密时,对数据加上1,解密时再减去1,此时1就是密钥(当然这样安全性很弱,只是演示)。非对称加密相对困难,比如2002年计算机领域的最高奖图灵奖就发给了RSA算法,2015年发给了另一种非对称加密算法ECDH。
- 只要密钥长度足够,目前无法破解
如果加解密的强度不够,易被暴力破解,那么实际的应用性也不够强。RSA算法的好处在于,可以通过增加密钥长度来提高其安全性。密钥本质上就是数,所以所谓增加密钥长度,就是使用更大的数来表示,这样在暴力破解时,运算量可以极大地提高。比如,来自Wikipedia的数据显示,在 Intel Dual-Core i7-4500U 1.80GHz 处理器上,破解128位要2秒,192位要16秒,256位35分钟,260位1小时。即便有些算法能够加速破解过程,但是仍然需要大量的时间,比如一款名为 YAFU 的软件使用相同的硬件破解320位需要5720秒。目前,已知的被破解的RSA密钥长度在2016年是768位,2018年达到795位,随时破解算法和计算机能力的提升,这个数字在未来还会继续提高。但是无法如何,这个过程进展是越来越缓慢的,目前推荐的密钥长度是1024位,而在一些安全极高的场合,已经是2048位了。
RSA的核心思想是基于欧拉定理:aφ(n)≡1 (mod n),其中 a,n 都是大于1的自然数且两者互质,φ(n) 是求[1, n) 区间上与 n 互质的个数,如 φ(8)=4,因为在 [1, 8) 区间上,1,3,5,7都与8互质。对欧拉定义举例说明,如取 a=3,n=8,那么 3φ(8)≡1 (mod 8),即 34=81,81 对 8 取余等于 1,满足公式。欧拉定理的详细说明可参见此链接:点击我。
前文已经说过,RSA分为两步,分别有密钥生成算法和加解密算法,我们先从密钥生成算法说起。
密钥的本质就是数,所以公私钥分别是两个数。基于RSA算法,这两个数都是正整数。那么这两个数是如何计算来的都是基于欧拉函数,即φ(n),下面我们就说一下详细计算过程。
- 取两个质数 p 和 q,如 p=61,q=53;
- 计算 n=qp,如 n=61∗53=3233;
- 根据欧拉函数计算 φ(n)=φ(qp)=φ(p)∗φ(q)=(p−1)∗(q−1)=60∗52=3120;
- 计算公钥因子 e 满足 1<e<φ(n) 且与 φ(n) 互质,如 e=17;
- 计算私钥因子 d 满足 ed=k(φ(n)−1),其中 k 为正整数,比如可如 k=1,d=413。
经过以上的计算,我们最终完成了密钥生成计算,其中公钥为 (n,e) 密钥为 (n,d),如公钥为 (3233,17),私钥为 (3233,413)。
设明文为 M,密文为 m,那么计算公式分别如下:
- 加密:m=Me mod n …… ①
- 密钥:M=md mod n …… ②
这个过程是不是很简洁,举例说明,假设 M=65,那么
- 加密:m=6517 mod 3233=2790
- 解密:M=2790413 mod 3233=65
可见,原文65在使用公钥(3233,17)加密后,得到2790,然后再使用私钥(3233,413)解密后,又得到了原文。为什么可以相等呢,我们可以简单证明。
联合①②式可得:
m=(md mod n)e mod n=med mod n=mφ(n)+1 mod n根据余数性质三,可得:mφ(n)+1 mod n=(m mod n)∗(mφ(n) mod n) mod n根据欧拉定理易知,中间一项为1,所以mφ(n)+1 mod n=m mod n又因为 m<n,所以mφ(n)+1 mod n=m即加密后的数据最终等于m,证毕。