分组密码(ECB模式)-密码术的奥秘

时间:2023-12-05 00:59:02

分组密码(ECB模式)

在使用分组密码时,比特串被分为一定长度的区组,加密算法作用于区组并产生密文区组。对于大多数对称密码而言,密文区组与原来的区组长度相同。

分组密码(ECB模式)-密码术的奥秘

分组密码有很多实际用途。它们可以用来提供机密性、数据完整性或用户认证,甚至可以用来为流密码提供密钥流生成程序。和流密码一样,人们很难对它们的安全性作出准确评价。正如我们已看到的,密钥的数量决定了算法的加密强度的上界。然而,就像简单代换密码所表明的那样,大量的密钥并不能保证它的强度。对于一个对称算法来说,若密钥穷举搜索法成为其最简单的攻击形式,那么该算法可以说设计得很好。当然,即便一个算法设计得很好,但如果密钥数目太少,也容易被破译。

设计强大的加密算法是一种专业性很强的技巧。当然,强分组密码还是具有若干明显的、同时也很容易解释的性质。如果一个攻击者已经得到一个已知明文与密文的对应,但不知其密钥,那么攻击者应该并不能由此轻易地推论出对应于任一其他明文区组的密文。例如,若一个算法以一种已知的方法改变明文区组时,密文的变化是可预计的,此时的算法就不具备上述那种性质。这是要求分组密码满足扩散性的理由之一。所谓扩散性是指:明文中的微小变化,比如一两个位置上的变化,将引起密文出现无法预计的改变。

我们已经讨论了密钥穷举搜索法所带来的威胁。在这种搜索过程中,攻击者可能会试到一个只是在少数几个位置上与正确的值不同的密钥。例如,若攻击者发现了某种迹象表明他尝试的密钥仅在一个位置上与正确的密钥不一致,那么,攻击者可能停止他的搜索并转而只对这个特定的错误密钥的每个位置挨个作变动。这样可以大大减少找出正确密钥所需的时间。这是另一个需要避免的缺陷。所以,分组密码又需要满足含混性。从本质上讲,含混性是指:攻击者在实施密钥穷举搜索的过程中无法得到任何有关正在“接近”正确密钥的提示。

在讨论如何攻击简单代换密码时,我们介绍了一个逐步构造出密钥的攻击方法:首先找出字母E的代换者,然后找T的代换者,以此类推。如果攻击者能够独立于其他部分而确定出部分密钥,则我们称他们实施的是分而胜之的攻击。为了防止这种情况出现,我们需要分组密码具有完备性,这意味着密文的每一个比特都必须依赖于密钥的每一个比特。

统计检验是评价分组密码是否具有上述三种性质和其他性质的基本要素。所以,在对所有的对称密码的性能进行分析时,统计检验都是必不可少的。

分组密码用于长信息的加密时,最简单而且也许是最自然的途径是将二进制序列分为适当大小的区组,然后逐个独立地加密每个区组。出现这种情形时,我们说我们使用的是电子码本模式,或称ECB模式。当我们选定一个密钥并使用ECB模式时,相同的信息区组会产出相同的密文区组。这意味着攻击者一旦得到一对互相对应的明文与密文区组时,他们就能通过寻找相应的密文比特而确定原信息中所有类似明文区组。由此,对于他们来说编出一本已知密文与明文的对应区组的字典是很有价值的。此外,要是存在一些占主导地位的信息区组,那么它们定会引出同样占主导地位的密文区组。这可能招致我们在介绍简单代换密码时讲过的那种基于频率分析的攻击。这是激发我们采用长度较长的区组的动力之一,诸如使用有64个比特的区组,它通常对应8个字符。使用ECB还存在另一种隐患,下面我们用例子来说明。

假定一种未知的分组密码和未知的密钥被用来加密“The price is four thousand pounds”(价格为四千英镑)这一信息。我们只知道每个信息区组由两个字母组成,标点、空格等都省略,密文是:

c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14

假设一个攻击者知道了这条信息,他们已想办法掌握了c1代表Th、c2代表ep,等等。于是,他们可以巧妙地处理密文,使得只有c1,c2,c3,c4,c5,c6,c7,c12,c13,c14可以被收到。真正的接收者使用正确的密钥和解密算法将收到的密文译出得到:“The price is four pounds”(价格为四英镑)。因为解密奏效并得到了有意义的信息,接收者没有理由怀疑密文已被处理过,并以为这个价格是正确无误的。

一组ECB模式的分组密码

使用ECB模式的分组密码所带来的这些潜在危险,可以通过重新安排每个区组的加密而得以消除,办法是让每个区组的加密依赖于所有位于它前面的信息区组。如能做到这一点,那么相同的信息区组几乎必定会引出全然不同的密文区组。这样一来,经过第三方处理过的密文,在解密后将不大可能得出有意义的信息。实现这一点有两种标准手法。一种叫密码反馈(CFB)模式,另一种叫密码分组链接(CBC)模式,后面我们会讨论这两种模式。

为了解释在ECB模式中是如何使用分组密码的,我们举一个小例子来加以说明。出于举例需要,我们这里所用的算法都是比较弱的。在我们的例子中,明文区组、密文区组和密钥都由4个比特组成,我们用十六进制表示法描述它们。对任一给定的密钥K,密文区组C对应于明文区组M,C是由M与K作XOR运算后再将M⊕K所得比特向左移转一个位置而得的。

我们来加密明文比特串10100010001110101001,当密钥K=B(即1011)时,使用十六进制表示法则密文变成A23A9,具体过程如下:

记住我们使用的是十六进制表示法,第一个区组M=1010,K=1011,于是M⊕K=0001。它移转后密文区组变成0010,是十六进制中的2

类似地,第二区组M=2,K=B,即M=0010,K=1011,所以M⊕K=1001。如果将1001移转,则此密文区组在十六进制中就是3

重复这类计算,我们看到如果信息是A23A9,以ECB模式使用我们的密码且密钥K=B,则密文为23124

对此,一个明显的现象是重复的信息区组会引出重复的密文区组。