公开密钥加密是加密和解密使用不同密钥的一种加密方法。
由于使用的密钥不同,这种算法也被叫作非对称加密。加密用的密钥叫做公开密钥,解密用的密钥叫作私有密钥。
整体流程:
首先要从数据接收方B来生成公开密钥Public Key 和私有密钥Secret Key。
然后B把公开密钥pk发送给A。
A使用pk加密数据,得到密文。
A将密文发送给B,B再使用私有密钥sk对密文进行解密。
这样,B就得到了原本的数据。
实现公开密钥加密的算法有RSA算法、椭圆曲线加密算法等,常用的是RSA算法,这是三个开发者的名字命名的Rivest、Shamir、Adleman。
公开密钥和密文都是通过互联网传输的,因此可能会被X窃听。但是,使用公开密钥无法解密密文,因此X也无法得出原本的数据。
此外,在和多人传输数据时候,使用公开密钥加密十分方便。
假设一种场景例子:
假设B预先准备好了公开密钥pk和私有密钥sk。
公开密钥是不怕被人知道的,所以可以把公开密钥发布到网上,与此相反,私有密钥不能被人知道,必须严密保管。
假设很多人想向B发送数据。
想发数据的人首先在网上取得B发布的公开密钥。
然后用它来加密发送的数据。
最后把密文发送给B。
B使用私有密钥对收到的密文进行解密,取得原本的数据。
这种情况下不需要为每个发送对象都准备相应的密钥了。
需要保密的私钥仅仅由数据接收方来保管,所以安全性也高。
不过,公开密钥加密存在可靠性问题。
当B生成公钥PB和私钥PA之后,X想要窃听A发送给B的数据,于是他准备了公开密钥PX和私有密钥SX.
在B把公开密钥PB发送给A的时候,X把公开密钥PB替换成自己的公开密钥PX
这时候,A使用X的公钥Px对数据进行加密,当A想要把密文发送给B的时候,X接收到了这个密文。
这个密文由X生成的公开密钥PX加密而成,所以X可以使用自己的私有密钥Sx,对密文进行解密。
这样的话,X就成功窃听了A准备发送给B的数据。
接下来,X用B生成的公开密钥PB加密数据成为密文。
X把密文发送给B.
这时候B用自己的私有密钥对密文进行解密。
这样的流程,从收到数据到密文解密没有发生任何问题,因此B也意识不到数据已经被窃听。
这种通过中途替换公开密钥来窃听数据的攻击方法叫作“中间人攻击”man-in-the-middle attack.
公开密钥的可靠性会出现问题,就是因为A无法判断收到的公开密钥是否来自于B.
想解决这个问题,需要用到数字证书。
公开密钥加密还有一个问题,就是加密和解密的时候都比较耗时,所以这种方式不适用于持续发送灵素数据的情况。
解决这个问题需要使用到混合加密。
实际上想要找到实现公开密钥加密的算法并不容易。考虑到加密所需的计算流程。
1可以使用某个数值对数据进行加密
2.使用另一个数值对加密数据进行计算就可以让数据恢复原样
3.无法从一种密钥推算出另一种密钥。
想要找找到满足以上条件的算法难度很大。因此RSA等可以实现公开密钥加密的算法提出对当今互联网社会的安全有着重要的意义。
网友评论