本文由币乎(bihu.com)优质内容计划支持
在区块链世界中,我们都能经常看到一个词,叫非对称加密,究竟什么是非对称加密呢?
非对称加密,又称为公开密钥加密,是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密;
由私钥可以推算出公钥,但是知道公钥,在实际情况中不可能推算出私钥,所以公钥是公开的,而私钥由用户自行秘密保管。
非对称加密类似于一个公开的邮箱,投递口是任何人都可以寄信进去的,这可视为公钥;而只有邮箱主人拥有钥匙可以打开邮箱,这就视为私钥。
在了解非对称加密前,我们需要了解什么是对称加密?
对称加密,也称为单密钥加密,是指采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密。
用一个现实世界上的例子是,一个传统保管箱,开门和关门都是使用同一条钥匙,这是对称加密;
但是对称加密在互联网中传输信息,就会产生两个问题:
- 没有创建安全通道前,如何实现安全通讯?
这是一个先有鸡还是先有蛋的问题,如果在先发送加密数据,但是不知道解密密钥,无法正确解密数据;如果先明文发送密钥,这种加密又有什么意义呢?
- 如何确保是由发送人发出的信息?
在这个虚拟的互联网中,就算把数据加密,但是如果黑客劫持了你的网络,发送加密信息,这种数据又有什么意义呢?
为了解决这两个问题,所以产生了非对称加密,这个加密思想是 1974 年由 Merkle 提出,1976 年由斯坦福大学的两位教授 Diffie 和 Hellman 完善。
我们先来看看第一个问题,如何实现安全通讯?
维基百科上举了一个爱丽丝与鲍伯的例子:
非对称加密- 爱丽丝与鲍伯事先互不认识,也没有可靠安全的沟通渠道,但爱丽丝现在却要通过不安全的互联网向鲍伯发送信息
- 爱丽丝撰写好原文,原文在未加密的状态下称之为明文 x
- 鲍伯使用密码学伪随机数产生一对密钥,其中一个作为公钥为 c,另一个作为私钥 d
- 鲍伯可以用任何方法发送公钥 c 给爱丽丝,即使黑客在中间窃听到 c 也没问题
- 爱丽丝用公钥 c 把明文 x 进行加密,得到密文 c(x)
- 爱丽丝可以用任何方法传输密文 c(x) 给鲍伯,即使伊夫在中间窃听到密文 c(x) 也没问题
- 鲍伯收到密文,用私钥 d 对密文进行解密 d(c(x)),得到爱丽丝撰写的明文 x
- 由于黑客没有得到鲍伯的私钥 d,所以无法得知明文 x
这个过程简单来说就是公钥加密明文 c(x) 只有用私钥才能解密,即 d(c(x)),最终得出了明文 x。
我们再来看第二个问题,如何确保是由发送人发出的信息?
如果某一用户使用他的私钥加密明文,任何人都可以用该用户的公钥解密密文;由于私钥只由该用户自己持有,故可以肯定该文件必定出自于该用户。
这就引申了一个概念叫:数字签名,即只有信息的发送者才能产生的,别人无法伪造的数据,这段数据同时也是对信息的发送者,发送信息真实性的一个有效证明。
由此可见非对称加密的优点:
- 创建了一个信息安全通道
- 为信息发送者提供数字身份的认证
但是缺点也很明显,计算太复杂,性能欠佳。
常见的公钥加密算法有:RSA、椭圆曲线加密算法、ElGamal等等,使用最广泛的是RSA算法。
由公钥为什么不能推算出私钥呢?RSA 算法又究竟是怎么实现的呢?这个问题比较复杂,有兴趣可以去看一下,华南理工大学的计算机网络安全课程 公开密钥密码学。
网友评论