

非对称加密算法是什么?这可能是习大大1025讲话彻底把区块链带火之后,一些新入门区块链的读者可能会问到的问题。
在百度百科对区块链的解释中,就有提到非对称加密算法:
简单来说,区块链就是计算机技术、密码学原理和金融三个领域的结合,上面百度百科对区块链的介绍中也离不开一个关键词——加密算法,区块链的底层实现离不开各种加密算法,因此对密码学技术的了解将会更有助于对区块链的学习和理解。
加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密算法以及对称加密和非对称加密算法的结合。
对称加密算法
顾名思义,对称加密顾名思义就是加密和解密的密钥是相同的,在这个过程中用到的是公钥。过程如下图所示:
代表算法包括DES、3DES、AES、IDEA等。
对称加密的优点是加解密效率高(速度快,空间占用小),加密强度高。 缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道下分发密钥也是个问题
非对称加密算法
非对称加密算法的加密密钥和解密密钥是不同的,分别称为公钥和私钥。 公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。 优点是公私钥分开,不安全通道也可使用。
缺点是加解密速度慢,一般比对称加解密算法慢两到三个数量级;同时加密强度相比对称加密要差。
我们先假设A给B发送信息,A拥有自己的私钥(PRI_A)和公钥(PUB_A),B拥有自己的私钥(PRI_B)和公钥(PUB_B)。 B接收到消息,要怎样才能知道消息是谁发出的。或者换句话说,A发出一则消息,要怎样让接收方知道是A发出的。这时就需要A用PRI_A对信息进行签名,相当于生成了唯一的身份证。
可以这样描述以上图示过程,A向B发送信息的整个签名和加密的过程:1、A先用自己的私钥(PRI_A)对信息(一般是信息的摘要)进行签名;2、A接着使用B的公钥(PUB_B)对信息内容和签名信息进行加密。
这样当B接收到A的信息后,获取信息内容的过程:1、用自己的私钥(PRI_B)解密A用B的公钥(PUB_B)加密的内容;2、得到解密后的明文后用A的公钥(PUB_A)解签A用A自己的私钥(PRI_A)的签名。
注意,公钥是公开出去的,但是私钥只能是自己拥有。以上图示过程和签名加密机制保证了端到端的唯一确认。A的签名只有A的公钥才能解签,这样B就能确定是A发出的信息;A的加密只有B的私钥才能解密,因为是用B的公钥加密的,这样保证了信息只能被B读取。
目前非对称加密算法应用最广泛的是银行,银行把每个人的私钥存储在每个人的U盾里,这就相当于,只有解密方自己拥有自己的私钥,银行用你设置的公钥对你的账户进行加密,要解密必须用到自己U盾里的私钥。这就是非对称加密算法的广泛使用原理。
代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)系列算法。
RSA:经典的公钥算法,1978 年由Ron Rivest、Adi Shamir、Leonard Adleman 共同提出,三人于2002 年获得图灵奖。算法利用了对大数进行质因数分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密。
ElGamal:由TaherElGamal 设计,利用了模运算下求离散对数困难的特性。
椭圆曲线算法:现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运 算难以计算的特性。
RSA算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。比特币的秘钥对就是使用椭圆曲线密码学(Elliptic Curve Cryptography)生成的。
参考资料:





