公钥密码又称为非对称密码,拥有公钥密码的用户分别拥有加密密钥和解密密钥。通过加密密钥不能得到解密密钥。并且加密密钥是公开的。
什么是密钥配送问题
在现实世界中使用对称密码时,我们一定会遇到密钥配送问题( key distribution problem)。
假如 A 给 B 写了一封情书,并使用对称加密,如果不讲加密密钥发送给B,B是无法查看情书的,如果将密钥和情书一起发送给B,就容易被攻击者截获。
密钥必须要发送,但又不能发送,这就是对称密码的密钥配送问题。
解决密钥配送问题的方法:
- 通过事先共享密钥来解决
- 通过密钥分配中心来解决
- 通过Diffie-Hellman密钥交换来解决
- 通过公钥密码来解决
通过事先共享密钥来解决
密钥配送问题最简单的一种解决方法,就是事先用安全的方式将密钥交给对方,这称为密钥的事先共享。 事先共享的局限性:
- 需要一种安全的方式将密钥交给对方。
- 即便能够实现事先共享密钥,但在人数很多的情况下,通信所需要的密钥数量也会增大。
通过密钥分配中心来解决
如果所有参与加密通信的人都需要事先共享密钥,则密钥的数量会变得巨大,这样额情况下就可以使用密钥分配中心(Key Distribution Center,KDC)来解决密钥配送问题。当需要进行加密通信时,密钥分配中心会生成一个通信密钥,每个人只要和密钥分配中心事先共享密钥就可以了。有多少个人进行通信分配中心就保存了多少密钥。
局限性:
随着通信人数的增加,密钥分配中心的负荷也会随之增加。如果密钥分配中心计算机发生故障,所有的加密通信就会瘫痪。
如果主动攻击者入侵了密钥分配中心计算机,并盗取了密钥数据库,所有人的加密通信都会被破译。
通过Diffie-Hellman密钥交换来解决
在Diffie-Hellman密钥交换中,进行加密通信的双方需要交换一些信息,而这些信息即便被窃听者听到也没有关系。
根据所交换的信息,双方可以各自生成相同的密钥,而窃听者却无法生成相同的密钥。窃听者虽然能够窃听到双方交换的信息但却无法根据这些信息生成和双方相同的密钥。
通过公钥密码来解决
什么是公钥密码
公钥密码( public-key cryptography),又称为非对称密码,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。
加密密钥和解密密钥的区别:
- 发送者只需要加密密钥
- 接收者只需要解密密钥
- 解密密钥不可以被窃听者获取
- 加密密钥被窃听者获取也没问题
解密密钥从一开始就是由接收者自己保管的,因此只要将加密密钥发给发送者就可以解决密钥配送问题了,而根本不需要配送解密密钥。
公钥通信的流程
我们还是假设Alice要给Bob发送一条消息,Alice是发送者,Bob 是接收者,而这次窃听者Eve依然能够窃听到他们之间
的通信内容。
在公钥密码通信中,通信过程是由接收者Bob来启动的。
Bob生成一个包含公钥和私钥的密钥对。私钥由Bob自行妥善保管。
Bob 将自己的公钥发送给Alice。
Bob的公钥被窃听者Eve截获也没关系。
将公钥发送给Alice,表示Bob请Alice用这个公钥对消息进行加密并发送给他。Alice用Bob的公钥对消息进行加密。
加密后的消息只有用Bob的私钥才能够解密。虽然Alice拥有Bob 的公钥,但用Bob的公钥是无法对密文进行解密的。
Alice将密文发送给Bob。
密文被窃听者Eve截获也没关系。Eve可能拥有Bob的公钥,但是用Bob的公钥是无法进行解密的。
Bob用自己的私钥对密文进行解密
公钥通信的流程图: