加密算法是现在IT互联网,区块链的重要基石构建,在讲非对称加密算法之前,我们先了解下密码学中的对称加密。所谓的对称加密就是在加密和解密的过程中使用相同的密钥,即信息的发送方和接收方使用同一个密钥去加密和解密数据。
对称加密的优势是加解密速度快,但由于密钥是介于加解者之间共享使用,所以安全性就没有保障,一旦密钥泄露那加密的文件就相当于是明文。常见的对称加密算法有:DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
密码学历史
1976年,美国的两位计算机科学家Whitfield Diffie和Martin Hellman在论文“密码学新方向”介绍了一种分发加密密钥的全新方法,它有助于解决密钥分发 - 这种技术被称为 Diffie-Hellman密钥交换。
其中DH密钥交换协议的Whitfield Diffie 迪菲教授今年在浙大公开讲授密码学课程,同时他还是“区块链网络公链NKN”的顾问。
非对称加密
受DH密钥交换协议的启发,后来人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种新的加密方式叫"非对称加密算法"。
非对称加密算法,需要一组密钥对,一个是公开密钥(Public key)公开对外发布,另一个是私有密钥(Private key)用户自己保存。信息发送者用公钥去加密,而信息接收者则用私钥去解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密。在这里需要解释下:加密和签名的概念。加密:是对明文做加密处理。签名:是一种身份证明的签署。其中加密的过程,是用公钥加密,私钥解密。而签名是私钥签名,公钥验证。
下图是公私钥加密和签名的过程
常用的非对称加密算法有 RSA、Elgamal、ECC(椭圆曲线加密),其中最著名的就是RSA加密算法,ECC也处于强势发展当中,本篇主要介绍RSA非对称加密算法。
RSA
RSA算法是1977年由 MIT 的 Ron Rivest、Adi Shamir 和 Leonard Adleman 一起提出,以他们三人姓氏开头字母命名,是一种获得广泛使用的非对称加密算法。像服务器登录用的SSH密钥对,https中SSL协议都是使用RSA非对称加密算法。下面看下日常用的百度https安全证书,使用的就是RSA加密算法。
要深入理解RSA算法过程,需要从小学的质数开始说起。
质数
在正整数中除了1和它本身没有其他公约数的数叫质数,如1,2,3,5,7,11,13.....
互质:指两个整数只有1是公约数的两个数称为互质。如,2,3,5,7... 可以看出任意两个质数都互质。
欧拉函数
瑞士数学家,自然科学家 莱昂哈德·欧拉(Leonhard Euler),在数论中引入了它的欧拉函数。是这样定义的:对于正整数n,在小于n的正整数中与n互质的数的个数。函数以欧拉命名叫:Euler's totient function ,又称φ函数。例如:φ(8)=4,因为1,3,5,7均和8互质。对于欧拉φ函数,其中的n有几种情况。本篇只介绍跟下文与RSA算法解析相关的性质。
(1) n为质数时。φ(n)=n-1,因为质数与小于他的每个数都构成互质的关系。如φ(5)=4
(2) n为质数的幂次方时。 如:
(3) n为质数的乘积。n=p*q,其中p与q互质(p⊥q),应用(1)的性质:φ(p*q)=φ(p)*φ(q)=(p-1)*(q-1) 如:φ(15)=φ(3*5)=φ(3)*φ(5)=8
模(mod)
模就是余数,如:n = a%p 或 (a mod p) 表示a除以p余数是n,这个过程就是取模。当一个整数a被m除时,得到商k1 和唯一一个余数r,另一个整数b也被m除时,得到商k2,得到的唯一余数也是r,其中(0≤r<m),则有:
用同余式记作:a ≡ b%m 或者 a ≡ b(mod m),读作对于正整数a,b对m取模,他们的余数相同。对于上式,我们相减可以得到
a - b = (k1-k2) * m ==> a - b = K * m
所以对于正整数a,b对m取模,则有:a - b = k * m
模逆元
假设 ed ≡ 1(mod n),ed与1对n取模有同样的余数,已知e为3,求d。那么这里的d就是e取模n的模逆元。那么上式可以写成:
3*d ≡ 1(mod 11) ,记作:3*d = 11*k + 1
简单穷举下,3关于11的模逆元d 有 {...,-18,-7,4,15,26...},我们可以发现d是以11为公差的等差数列。
费马小定理
法国律师和业余数学家 皮埃尔·德·费马(Pierre de Fermat),他有个猜想,说有个整数a∈z ,p是一个质数。则有:
记作:
转换下可以得到
模两边同时消去a
这就是费马最终的猜想,他说具体对不对呢?我就不证明了,后来欧拉在此基础上进行了验证。
欧拉-费马定理
欧拉在费马的猜想基础上进行了拓展,他说有正整数a∈z,n∈z 并且a与n互质(a⊥n)
则有:
可以理解成:a的φ(n)次方减去1是n的倍数。
当n为质数时,上式可以记作:
这个不就是上述的费马小定理吗?至此欧拉-费马定理形成:
充分必要条件是:正整数a∈z,n∈z 并且a与n互质(a⊥n)
RSA公私钥生成
介绍了这么多概念定理,下面就可以使用这些定理生成RSA公私钥了。
(1) 取两个大整数p,q 令N=p*q,其中p与q互质(p⊥q)
(2) 根据欧拉函数:r=φ(N)=φ(p*q)=φ(p)*φ(q)=(p-1)*(q-1)
(3) 选择一个正整数e, 其中e与φ(N)互质,并且e<φ(N)
(4) e*d≡1(mod φ(N)),在已知e和φ(N)的条件下求d。就是求e对于取模φ(N)的模逆元d
(5) 其中(N,e)作为公钥,上述解出来的d使用(N,d)作为私钥。公钥公开给发送方,私钥自己保存
(6) 将p和q销毁,密钥生成者只记录φ(N),N,e,d.当N足够大时,想要通过N做质数分解,是一件很困难的事
RSA加密与解密
中国古代有梁山伯和祝英台,密码学的悄悄话有Alice和Bob。Alice已经使用了RSA算法生成了密钥对,将(N,e) 公钥给了Bob,Bob现在想要在不太可信的网络里给Alice发送消息m,他就需要用Alice的公钥(N,e)对m进行加密,这里m必须是整数(字符串可以取ascii值或unicode值),如果m消息比较长可以分成几段发送。并且m<N。
加密可得:
通过加密后,Bob取得密文c,然后发给Alice。Alice拿到密文c后,使用自己保存的私钥d进行解密。
解密过程:
那为什么Alice用私钥d,可以计算得出明文m呢?下面我们就来证明下
简化下可得
交换参数
等式两边同时用指数d运算,k*N的d次方后其实大数还是k*N,将它记作(1)式
写成等式
将上式代入(1)式,并记作(2)式
等式拆解,记作(3)式
由费马定理可知
简化成等式
将上式代入(3)式
简化等式
简单记作
转换成模形式
最终得证解密的模运算算法。
在这篇技术文章里涉及了很多数学定理公式,多位数学家、计算机专家。由于他们的卓越贡献研究,才有了今天较为安全可靠的“非对称加密算法”。因为加密使得信息传输安全可信,给互联网科技带来了蓬勃的发展,同时加密算法也是区块链科技发展的重要基石。如果你觉得本篇文章对你有帮助,请关注微信公众号“刻意链习”,持续带你理解更多的区块链技术。