公开密钥加密

公开密钥加密是加密和解密使用不同密钥的一种加密方法。由于使用的密钥不同,所以这种算法也被称为“非对称加密”。加密用的密钥叫作“公开密钥”,解密用的叫作“私有密钥”。

 

加密处理流程

假设A准备通过互联网向B发送数据。

 

首先,需要由接收方B来生成公开密钥和私有密钥。

然后把公开密钥发送给A。

A使用B发来的公开密钥加密数据。

A将密文发送给B, B再使用私有密钥对密文进行解密。这样,B就得到了原本的数据。

 

 公开密钥和密文都是通过互联网传输的,因此可能会被X窃听。但是,使用公开密钥无法解密密文,因此X也无法得到原本的数据。

 

存在的问题

公开密钥加密存在公开密钥可靠性的问题。让我们回到B生成公开密钥和私有密钥的时候。在接下来的说明中,B生成的公开密钥用PB来表示、私有密钥用SB来表示。

X想要窃听A发给B的数据,于是他也准备了公开密钥PX和私有密钥SX。

 

在B把公开密钥PB发给A的时候

X把公开密钥PB替换成自己的公开密钥PX

于是公开密钥PX传到了A那里。由于公开密钥无法显示自己是由谁生成的,所以A不会发现自己收到的公开密钥已经被人替换。

A使用公开密钥PX对数据加密。

当A把想要给B的密文发送出去后,X接收了这个密文。

这个密文由X生成的公开密钥PX加密而成,所以X可以用自己的私有密钥SX对密文进行解密。

接下来,X用B生成的公开密钥PB加密数据。

X把密文发送给B,这个密文由B发出的公开密钥PB加密而成,所以B可以用自己的私有密钥SB来解密。从收到密文到解密密文都没发生任何问题,因此B也意识不到数据已经被窃听。这种通过中途替换公开密钥来窃听数据的攻击方法叫作“中间人攻击”(man-in-the-middle attack)。

 

公开密钥的可靠性会出现问题,就是因为A无法判断收到的公开密钥是否来自B。要想解决这个问题,就要用到之后会讲到的“数字证书”。

公开密钥加密还有一个问题,那就是加密和解密都比较耗时,所以这种方法不适用于持续发送零碎数据的情况。要想解决这个问题,就要用到“混合加密”。

 

公开密钥加密的算法

实现公开密钥加密的算法有RAS算法、椭圆曲线加密算法等,其中使用最为广泛的是RSA算法。

 

参考: 我的第一本算法书 5-5 公开密钥加密

 

posted @ 2022-01-19 09:27  草木物语  阅读(716)  评论(0编辑  收藏  举报