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