使用对称算法的保密-密码术的奥秘

时间:2023-12-05 01:29:01

使用对称算法的保密

我们已经认识到,如果使用分组密码以ECB模式加密数据,会出现一些安全隐患。一种可能的隐患是,某人掌握了对应的密文与明文区组后,可以巧妙处理密文区组来构作一篇新的密文,并使其在解密后呈现为有意义的信息。收信人将无法察觉其中的变化。我们在前文已经看到过这种行为的一个小例子。然而,这里要强调的是有意义这个词。如果按ECB模式使用分组密码,那么很清楚,解密算法可以按任意次序作用于密文区组,同时有可能单独破译每一个区组而得到潜在的信息。然而,最后得到的被破译的资料不太可能形成一个前后连贯的、可以理解的信息。虽然不能忽视这种攻击存在的可能性,但其成功的机会很校

使用对称算法的保密-密码术的奥秘

使用ECB模式的更严重缺陷是,攻击者针对一个固定的密钥,可能会编制一本已知明文区组与密文区组相对应的词典,而且ECB模式容易受到基于明文所用语言的统计特性所进行的攻击。这类攻击的“典型”例子是第三章中演示的对简单代换密码的攻击。

易受上述两种攻击的原因在于这些区组的加密都是相互独立进行的。所以,对于某个固定的密钥,相同的明文区组会导出相同的密文区组。克服这个缺点的一个办法是,让每个密文区组不仅随对应的明文区组而定,而且还取决于它在整篇文章中的位置。这就是维热纳尔密码所用的方法。这种技巧确实能够达到使语言统计数据“变平”的效果。但是,更常用也更有效的技巧是,设法使对应于任一给定明文区组的密文区组,随信息中所有位于它前面的明文区组的内容而定。为达到此目的,最常用的两种方法是使用密码分组链接(CBC)模式和密码反馈(CFB)模式。接下来我们描述一下CBC模式。

假定我们有一条信息,它由n个信息区组M1、M2、……、Mn组成,我们希望用密钥为K的区组密码来为其加密。在CBC模式下,所得的密文有n个区组:C1、C2、……、Cn,但此时每个密文区组都依赖于所有在它前面的信息区组。具体做法是这样的:除了C1之外的每个密文区组,都是先由对应的信息区组与它前面的一个密文区组作XOR运算后再进行加密而得到的。例如,C2是加密M2⊕C1之所得。如果我们用EK表示使用密钥K进行的加密,则可得出C2=EK(M2⊕C1)。显然,第一个信息区组需要与此不同的处理方法。一种办法是让C1等于EK(M1)。另一种常用的方法是使用一个初始化值(IV)并设C1是对(M1⊕IV)加密的结果。(注意,若IV区组中全是0,那么这两种方法是等同的。)因为C1依赖于M1,C2依赖于M2和C1,所以很清楚C2同时依赖于M1和M2。类似地,因为C3=EK(M3⊕C2),所以C3同时依赖于M1、M2和M3。总体上说,每个密文区组依赖于它所对应的明文区组以及所有位于它前面的明文区组。这样做的效果就是将所有的密文区组用一种合适而特定的次序连接起来。这不仅破坏了信息所用语言的统计特性,而且实际上还排除了他人对密文动手脚的可能性。

密码分组链接

现在我们用在第五章出现过的有关分组密码的小例子来解释CBC模式是如何运作的,并比较在使用同一算法和密钥时,EBC模式与CBC模式加密所得密文的异同。不幸的是这个例子表面看起来比实际上要复杂。所以我们鼓励读者坚持看完这个例子。当然,如果你跳过这段直接去读下一节也无碍大局。

这个例子中的明文用十六进制写为A23A9,密钥KB。加密算法是先对明文区组与密钥作XOR运算,然后再将M⊕K中的二进制数字向左移转一个位置,从而得到密文区组。对于CBC模式,我们使用全为0的IV,使得C1与ECB模式加密的所得相同。于是M1⊕K=A⊕B=1010+1011=0001,经移转后得到0010,这便是C1,所以C12

计算C2的过程如下:

M2⊕C122=0010⊕0010=0000

0000⊕K=0D=0000⊕1011=1011

施行移转后得C2=0111=7。C3是这样算出的:

M3⊕C237=0011⊕0111=0100

0100⊕K=0100⊕1011=1111

施行移转后得C3=1111=F。C4的计算过程是:

M4⊕C3AF=1010⊕1111=0101

0101⊕K=0101⊕1011=1110

施行移转后得C4=1101=B。我们请读者来计算出C5(答案在下面给出)。

这样,对同一个信息,我们用不同的加密模式得到两种密文。

即便是从这个小例子中我们也可以清楚地看到,CBC模式下相同的信息区组的位置与相同的密文区组的位置之间没有明显的关联。

CBC模式例子的图示

在CFB模式下使用分组密码时,运作过程与此不同;但最后的效果是类似的,即每个密文区组依赖于它所对应的明文区组以及所有原信息中依次出现在它前面的明文区组。关于CFB模式的详情,可参见梅内策斯、范·奥尔斯霍特和范斯通所著的《应用密码术手册》一书。