14.3 对称密钥加密技术

我们来更详细地看看密钥和密码是怎样配合工作的。很多数字加密算法都被称为对称密钥(symmetric-key)加密技术,这是因为它们在编码时使用的密钥值和解码时一样(e=d)。我们就将其统称为密钥 k。

在对称密钥加密技术中,发送端和接收端要共享相同的密钥 k 才能进行通信。发送端用共享的密钥来加密报文,并将得到的密文发送给接收端。接收端收到密文,并对其应用解密函数和相同的共享密钥,恢复出原始的明文(参见图 14-7)。

14.3 对称密钥加密技术 - 图1

图 14-7 对称密钥加密算法为编 / 解码使用相同的密钥

流行的对称密钥加密算法包括:DES、Triple-DES、RC2 和 RC4。

14.3.1 密钥长度与枚举攻击

保持密钥的机密状态是很重要的。在很多情况下,编 / 解码算法都是众所周知的,因此密钥就是唯一保密的东西了。

好的加密算法会迫使攻击者试遍每一个可能的密钥,才能破解代码。用暴力去尝试所有的密钥值称为枚举攻击(enumeration attack)。如果只有几种可能的密钥值,居心不良的人通过暴力遍历所有值,就能最终破解代码了。但如果有大量可能的密钥值,他可能就要花费数天、数年,甚至无限长的时间来遍历所有的密钥,去查找能够破解密码的那一个。

可用密钥值的数量取决于密钥中的位数,以及可能的密钥中有多少是有效的。就对称密钥加密技术来说,通常所有的密钥值都是有效的。1 8 位的密钥只有 256 个可能的密钥值,40 位的密钥可以有 240 个可能的密钥值(大约是一万亿个密钥),128 位的密钥可以产生大约 340 000 000 000 000 000 000 000 000 000 000 000 000 个可能的密钥值。

1 有些加密技术中只有部分密钥值是有效的。比如,在最知名的非对称加密算法 RSA 中,有效密钥 必须以某种方式与质数相关。可能的密钥值中只有少量密钥具备此特性。

在传统的对称密钥加密技术中,对小型的、不太重要的事务来说,40 位的密钥就足够安全了。但现在的高速工作站就可以将其破解,这些工作站每秒可以进行数十亿次计算。

相比之下,对于对称密钥加密技术,128 位的密钥被认为是非常强大的。实际上,长密钥对密码安全有着非常重要的影响,美国政府甚至对使用长密钥的加密软件实施了出口控制,以防止潜在的敌对组织创建出美国国家安全局(National Security Agency,NSA)自己都无法破解的秘密代码。

Bruce Schneier 编写的 Applied Cryptography(John Wiley & Sons 出版社)是一本很棒的书,书中有一张表,表中对使用 1995 年的技术和耗费,通过猜测所有的密钥来破解一个 DES 密码所需的时间进行了描述。2 表 14-1 摘录了这张表。

2 1995 年之后,计算速度得到了飞速的提高,费用也降低了。你越晚读到这本书,计算的速度就会越快! 但即使所需的时间会成 5 倍、10 倍或更多倍的减少,这张表仍然是有参考价值的。

表14-1 较长的密钥要花费更多的精力去破解(来自Applied Cryptography一书,1995年的数据)

攻击耗费 40位密钥 56位密钥 64位密钥 80位密钥 128位密钥
100 000 美元 2 秒 35 小时 1 年 70 000 年 1019
1 000 000 美元 200 毫秒 3.5 小时 37 天 7 000 年 1018
10 000 000 美元 20 毫秒 21 分钟 4 天 700 年 1017
100 000 000 美元 2 毫秒 2 分钟 9 小时 70 年 1016
1 000 000 000 美元 200 微秒 13 秒 1 小时 7 年 1015

根据 1995 年微处理器的速度,愿意花费 100 000 美元的攻击者可以在大约 2 秒内破解一个 40 位的 DES 代码。2002 年的计算机就已经比 1995 年的快 20 倍了。除非用户经常修改密钥,否则对于别有用心的攻击者来说,40 位的密钥是不安全的。

DES 的 56 位标准密钥长度就更安全一些。从 1995 年的经济水平来说,花费 100 万美元进行的攻击还是要几个小时才能破解密码。但可使用超级计算机的用户则只需数秒钟即可通过暴力方法破解密码。与之相对的是,通常大家都认为长度与 Triple-DES 密钥相当的 128 位 DES 密钥实际上是任何人以任何代价都无法通过暴力攻击破解的。3

3 但是,长的密钥并不意味着可以高枕无忧了!加密算法或实现中可能会有不为人注意的缺陷,为攻击者提供了可攻击的弱点。攻击者也可能会有一些与密钥产生方式有关的信息,这样他就会知道使用某些密钥的可能性比另一些要大,从而有助于进行有目的的暴力攻击。或者用户可能将保密的密钥落在了什么地方,被攻击者偷走了。

14.3.2 建立共享密钥

对称密钥加密技术的缺点之一就是发送者和接收者在互相对话之前,一定要有一个共享的保密密钥。

如果想要与 Joe 的五金商店进行保密的对话,可能是在看了公共电视台的家装节目之后,想要订购一些木工工具,那么在安全地订购任何东西之前,要先在你和 www.joes-hardware.com 之间建立一个私有的保密密钥。你需要一种产生保密密钥并将其记住的方式。你和 Joe 的五金商店,以及因特网上所有其他人,都要产生并记住数千个密钥。

比如 Alice(A)、Bob(B)和 Chris(C)都想与 Joe 的五金商店(J)对话。A、B 和 C 都要建立自己与 J 之间的保密密钥。A 可能需要密钥 KAJ,B 可能需要密钥 KBJ,C 可能需要密钥 KCJ。每对通信实体都需要自己的私有密钥。如果有 N 个节点, 每个节点都要和其他所有 N-1 个节点进行安全对话,总共大概会有 N2 个保密密钥: 这将是一个管理噩梦。