在对称密码中,由于加密和解密的密钥是相同的,因此必须向接收者配送密钥。
什么是密钥配送问题?
在现实世界中使用对称密码时,我们一定会遇到密钥配送问题。尽管一开始可能觉得这并不是什么大问题,但这个问题却是很难从根本上得到解决的。
小发前几天在网上认识了小接,现在她想给小接发一封邮件,而且不想让别人知道邮件的内容,因此小发决定使用对称密码进行加密,这样即便被窃听者小窃听到通信内容也没有问题。
小发将邮件内容进行加密,生成了密文。那么是不是只要将这份密文用邮件发送给小发就可以了呢?不行,因为这样小接是无法对密文进行解密的。要使用对称密码进行解密,就必须使用和加密时相同的密钥才行。也就是说,只有同时将密钥也发送给小接才能够完成解密。
那么,将密文和密钥都通过邮件发送给小接行不行呢?也不行。如果密文和密钥都通过邮件发送,两者就都会被小窃听到。这样一来,同时得到密文和密钥的小窃就能够解密并看到明文的内容了。
当然,如果小窃无法推测出通信中使用的是什么密码算法,那么即便得到了密文和密钥也是无法解密的。然而,密码算法本来就应该是以公开为前提的,隐蔽式安全性是非常危险的。
不发送密钥吧,接收者无法解密;发送密钥吧,连窃听者也可以解密了。密钥必须要发送,但又不能发送,这就是对称密码的密钥配送问题。
解决密钥配送问题的方法有以下几种。
1:通过事先共享密钥来解决
2:通过密钥分配中心来解决
3:通过Diffie-Hellman密钥交换来解决
4:使用非对称密码来解决
下面我们对这些方法逐一进行讲解。
1:通过事先共享密钥来解决
这是最简单的一种解决方法,就是事先用安全的方式将密钥交给对方,这称为密钥的事先共享。
这可以说是一种理所当然的方法吧。事先共享密钥尽管有效,但却有一定的局限性。
首先,要想事先共享密钥,就需要用一种安全的方式将密钥交给对方。如果是公司里坐在你旁边的同事,要事先共享密钥可能非常容易,只要将密钥保存在存储卡中交给他就可以了。
然而,要将密钥安全地交给一个前几天刚刚在网上认识的朋友就非常困难。如果用邮件等方式发送,则密钥可能会被窃听。此外,即便能够实现事先共享密钥,但在人数很多的情况下,相互通信所需要的密钥数量也会增大,这就产生了问题。
例如,小A 和 小B 通信需要共享一个密钥,小A 和 小C 通信需要共享一个密钥,小B 和 小C 通信需要共享一个密钥,现在是3个人,假如是 1000 人呢?更多呢? 因此,事先共享密钥尽管有效,但依然有一定的局限性。
2:通过密钥分配中心来解决
如果所有参与加密通信的人都需要事先共享密钥,则密钥的数量会变得巨大,在这样的情况下,我们可以使用密钥分配中心来解决密钥配送问题。
当需要进行加密通信时,密钥分配中心会生成一个通信密钥,每个人只要和密钥分配中心事先共享密钥就可以了。
在公司中,我们先配置一台充当密钥分配中心的计算机。这台计算机中有一个数据库,其中保存了小A 的密钥、小B 的密钥…等所有员工的密钥。也就是说,如果公司有1000名员工,那么数据库中就会保存1000个密钥。
当有新员工入职时,密钥分配中心会为该员工生成一个新的密钥,并保存在数据库中。这样一来,密钥分配中心就拥有了所有员工的密钥,而每个员工则拥有自己的密钥。
那么,现在小发再向小接发送加密邮件时,就需要进行以下步骤。
1:小发向密钥分配中心发出希望与小接进行通信的请求。
2:密钥分配中心生成一个会话密钥,这个密钥是供小发与小接在本次通信中使用的临时密钥。
3:密钥分配中心从数据库中取出小发的密钥和小接的密钥。
4:密钥分配中心用小发的密钥对会话密钥进行加密,并发送给小发。
5:密钥分配中心用小接的密钥对会话密钥进行加密,并发送给小接。
6:小发对来自密钥分配中心的会话密钥(已使用小发的密钥加密)进行解密(用小发的密钥解密),得到会话密钥。
7:小发用会话密钥对邮件进行加密,并将邮件发送给小接。
8:小接对来自密钥分配中心的会话密钥(已使用小接的密钥加密)进行解密,得到会话密钥。
9:小接用会话密钥对来自小发的密文进行解密。
10:小发和小接删除会话密钥。
以上就是通过密钥分配中心完成小发与小接的通信的过程。
密钥分配中心尽管有效,但也有局限。首先,每当员工进行加密通信时,密钥分配中心计算机都需要进行上述处理。随着员工数量的增加,密钥分配中心的负荷也会随之增加。如果密钥分配中心计算机发生故障,全公司的加密通信就会瘫痪。
此外,如果主动攻击者入侵了密钥分配中心计算机,并盗取了密钥数据库,则后果会十分严重,因为全公司所有的加密通信都会被破译。因此,如果要使用密钥分配中心,就必须妥善处理上述问题。
问:当小发发出希望与小接进行通信的请求时,密钥分配中心会生成一个全新的会话密钥,并将其加密后发送给小发。为什么密钥分配中心不直接将小接的密钥用小发的密钥加密之后发送给小发呢?
这是因为如果将小接的密钥交给小发,从此之后(即在本次通信结束之后)小发就能够对小接的密文进行解密。也就是说,对于小接来说,小发有可能成为一个窃听者。因此对通信双方生成一个全新的密钥,用他们的密钥分别加密返给他们,再各自解密得到同一个新密钥。
3:通过Diffie-Hellman密钥交换来解决
这里的交换,并不是指东西坏了需要换一个,而是指发送者和接收者之间相互传递信息的意思。
在Diffie-Hellman密钥交换中,进行加密通信的双方需要交换一些信息,而这些信息即便被窃听者窃听到也没有问题。
根据所交换的信息,双方可以各自生成相同的密钥,而窃听者却无法生成相同的密钥。窃听者虽然能够窃听到双方所交换的信息,但却无法根据这些信息生成和双方相同的密钥。关于这些,我们将在后面详细探讨。
4:使用非对称密码来解决
在对称密码中,加密密钥和解密密钥是相同的,但非对称密码中,加密密钥和解密密钥却是不同的。只要拥有加密密钥,任何人都可以进行加密,但没有解密密钥是无法解密的。因此,非对称密码的一个重要性质,就是只有拥有解密密钥的人才能够进行解密。
接收者事先将加密密钥发送给发送者,自己保留解密密钥,这个加密密钥即便被窃听者获取也没有问题。发送者使用加密密钥对通信内容进行加密并发送给接收者,接收者本人有解密密钥才能够进行解密。这样一来,就用不着将解密密钥配送给接收者了,也就没有密钥配送问题了。关于非对称密码在在后面详细探讨