为了参加区块链相关比赛并学习编写区块链项目,我打算学习一下区块链的一些基础知识,今天我就学习了密码学中的非对称加密。
个人理解
非对称加密是相对于对称加密的,打个比方:
一般情况下,如果我租了间房子,那么包租婆就会把房门钥匙复刻一份给我,因此,这间房是我跟包租婆都可以打开的。
但是,如果包租婆的这把钥匙被小偷偷走了,那小偷就能用包租婆的那把钥匙来开我的房门,从而窃走我的物品。
这就是对称加密,双方共用同一个密钥来进行加密通信,那么在不信任对方的条件下,协商密钥的这个过程就十分的危险。如果双方中的任何一方泄露了密钥,那么双方的通信暴露无遗。
那么,非对称加密是什么情形呢?
想到一半,发现打的比方不太合理,就不献丑了hhh
简单来说,非对称加密拥有两个不同的密钥,即公钥(Public key)和私钥(Private Key),任意一方想要和对方通信,那么先通过非对称加密算法生成一个密钥对,一个公钥,一个私钥,通信时,将公钥先发送给对方,对方使用公钥将明文加密后传送给自己(由于哈希算法的不可逆性,中间人无法通过公钥推算出明文),这个时候,对方可以生成自己的密钥对,再将对方生成的公钥发送给自己,于是,双方的加密通信就建立了。
这个加密通信过程的关键是双方都不能泄露自己的私钥,因为只有私钥才能解密使用对应公钥加密的密文。
对称加密
优点
加密速度快,需要的算力少。
缺点
若通信双方任意一方泄露密钥,整个通信暴露无遗,任何知道该密钥的第三方都能够窃听到明文数据。
非对称加密
优点
安全性高,即使双方互相泄露公钥,第三方仍然无法窃听到数据。
缺点
加解密速度较慢,需要的算力更多。
看来,两种加密都有优缺点,并且优缺点互补,作为成年人,当然是两个都要啦!于是就有了:混合加密
混合加密
双方先通过非对称加密通信建立起安全的通信渠道,然后在非对称加密通信中交换对称加密的密钥,当双方协商完毕后,就可以进行对称加密通信了。这种方式既兼顾了加密通信时的性能,又能保证通信时的安全性(保证对称加密的密钥在交换的过程中不会泄露)。
但混合加密还是不够安全,因为没能够解决非对称加密时,中间人伪装成通信目标的问题,如果中间人伪装成通信目标,那么通信内容还是会被中间人窃取,这就非常麻烦了。
为了解决双方都不能互相信任对方的问题,自然又引入了第三方,若我能够确认对方发来的消息是通过自己信任的第三方传来的,那么,我就能信任对方,同理,对方也是如此,前提是他们都要拥有信任的第三方。于是,就引入了数字签名,虽然还没有深入学习,但我已经感受它的用途之广了:HTTPS、驱动验证等等。
理解后的我只能感叹一句,密码学真伟大!
非对称加密基本原理(摘自百度百科)
- 乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
- 得到该公钥的甲方使用该公钥对机密信息进行加密后再发送给乙方。
- 乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。
一些常用的非对称加密算法
- RSA:RSA 是一种目前应用非常广泛、历史也比较悠久的非对称秘钥加密技术,在1977年被麻省理工学院的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)三位科学家提出,由于难于破解,RSA 是目前应用最广泛的数字加密和签名技术,比如国内的支付宝就是通过RSA算法来进行签名验证。它的安全程度取决于秘钥的长度,目前主流可选秘钥长度为 1024位、2048位、4096位等,理论上秘钥越长越难于破解,按照维基百科上的说法,小于等于256位的秘钥,在一台个人电脑上花几个小时就能被破解,512位的秘钥和768位的秘钥也分别在1999年和2009年被成功破解,虽然目前还没有公开资料证实有人能够成功破解1024位的秘钥,但显然距离这个节点也并不遥远,所以目前业界推荐使用 2048 位或以上的秘钥,不过目前看 2048 位的秘钥已经足够安全了,支付宝的官方文档上推荐也是2048位,当然更长的秘钥更安全,但也意味着会产生更大的性能开销。
- DSA:既 Digital Signature Algorithm,数字签名算法,他是由美国国家标准与技术研究所(NIST)与1991年提出。和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。
- ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC(Elliptic curve cryptography,椭圆曲线密码学)和 DSA 的结合,椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障,据称256位的ECC秘钥的安全性等同于3072位的RSA秘钥,和普通DSA相比,ECDSA在计算秘钥的过程中,部分因子使用了椭圆曲线算法。
文章参考: