非对称加密简介
非对称加密又叫做公开密钥加密(Public key cryptography)或公钥加密。指加密和解密使用不同密钥的加密算法。公钥加密需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。其他常见的公钥加密算法有:ElGamal、背包算法、Rabin(RSA的特例)、椭圆曲线加密算法(Elliptic Curve Cryptography, ECC)。
非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。非对称加密与对称加密的对比如表所示。
对称加密与非对称加密的区别
算法类型特点优势缺陷代表算法
对称加密加解密密钥相同或可推算计算效率高,加密强度高需提前共享密钥;易泄露DES、3DES、AES、IDEA
非对称加密加解密密钥不相关无需提前共享密钥计算效率低,中间人攻击可能性低RSA、ElGamal、椭圆曲线系列算法ECC
非对称加密算法实现数字签名
非对称加密不同于加密和解密都使用同一个密钥的对称加密,虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个。加密消息的密钥是不能解密消息的。因此两个密钥中,其中一个可以公开,称为公钥,可以向外公布;不公开的密钥称为私钥,必须由用户自行严格秘密保管,绝不通过任何途径向任何人提供。
非对称加密算法分为两种:公钥加密、私钥解密和私钥加密、公钥解密。前者是普通的非对称算法的加密和解密,而后者被称为数字签名。目前主流的数字签名算法是椭圆曲线数字签名算法(ECDSA)。具体内容在下一节讲解。
总之,非对称加密算法中,公钥的作用是加密消息和验证签名,而私钥的作用是用来解密信息和进行数字签名。
RSA原理
RSA算法基于一个十分简单的数论事实。将两个大素数相乘十分容易,想要对其乘积进行因式分解极其困难,因此可以将乘积公开作为加密密钥。密钥对的生成步骤如下。
随机选择两个不相等的质数p和q(比特币中P长度为512位二进制数值,Q长度为1024位)
计算p和q的乘积N
计算p-1和q-1的乘积φ(N)
随机选个整数e,e与m要互质,且0<e<φ(N)
计算e的模反元素d
公钥是(N,e),私钥是(N,d)
加解密步骤如下。
假设一个明文数m(0<=m<N)
对明文m加密成密文c,算法如下所示。
a. c=m^e mod N
对密文c解密成明文m,算法如下所示。
a. m=c^d mod N
举例说明如下所示。
p=11 , q=3
N=pq = 33
φ(N) =(p-1)(1-1)=20
选择20的互质数e=3
计算满足ed=1 mod 20的d,也就是模反元素d=7
公钥为(33,3),私钥为(33,7)
假设明文m=8 , (0<8<33)
密文c=m^e mod N = 8 ^ 3 mod 33 = 512 mod 33 = 17 mod 33 , 得出c=17
明文m=c^d mod N = 17 ^ 7 mod 33 = 8 mod 33 , 得出m=8