9.10 其他分组密码模式
分组链接模式
为了在分组链接(BC)模式中使用分组算法,可以简单地将分组密码算法的输入跟所有前面密文分组的异或值相异或。就象CBC算法一样,过程要从一个初始向量IV开始。
数学式表达如下:
C i = EK ( Pi Å Fi ) ; F i+1 = Fi Å C i
P i = Fi Å DK(C i); F i+1 = Fi Å C i
象CBC,BC模式的反馈过程具有扩散明文错误的性质,BC的这个问题是由于密文分组的解密依赖于所有前面的密文分组而引起的,密文中单一的错误都将导致所有后续密文分组在解密中出错。
扩散密码分组链接方式
“扩散密码分组链接(PCBC)”[1080]模式与CBC模式相似,只是它在加密前,前面的明文分组、密文分组(或解密后)都与当前明文分组相异或(见图9.15)。
C i = EK ( P i Å C i-1 Å P i-1 )
P i = C i-1 Å P i-1 Å D K (C i )
图 9.15 扩散密码分组链接方式
PCBC被用于Kerberos版本4(见24.5节)进行加密,并在一次传递中完成加密和完整性检查。在PCBC模式中,密文分组的一个错误将引起所有后续分组在解密时产生错误,这意味着检验消息尾的一个标准分组将能确保整个消息的完整性。
不幸的是这个模式有一个问题[875],交换两个密文分组,将使两个对应的明文分组不能正确解密,但根据明文和密文异或的性质,错误将抵消。所以,如果完整性检查只检查最后几个解密的明文分组,它可能欺骗接收者接收部分错误的消息。尽管现在还没有人对这个弱点进行“开发使用”,但Kerberos版本5还是在发现上述缺点后以CBC模式取代了它。
带校验和的密码分组链接
带校验和的密码分组链接(CBCC)是CBC的一个变体[1618]。该模式保存所有明文分组的异或,并在加密前与最后的明文分组异或。CBCC保证任何对密文的改动都将引起最后分组解密输出的改动。如果最后分组包含某种完整校验或常数,那么用很小的额外操作就能检验解密明文的完整性。
带非线性函数的输出反馈
带非线性函数的输出反馈(OFBNLF)[777]是OFB和ECB的一个变体,它的密钥随每一个分组而改变:
C i =E Ki(P i) ;K i = E K(K i-1 )
P i =D Ki(C i) ;K i = E K(K i-1 )
密文的一个比特错误扩散到一个明文分组。然而,如果一位丢失或增加,那就有无限的错误扩散。使用一个有复杂的密钥编排算法的分组算法(如DES),该模式是很慢的。据我所知还没有对该模式的密码分析。
更多的模式
可能还有其它的模式,虽然它们并没有被广泛应用。“明文分组链接(PBC)”模式与CBC相似,只是前一明文分组与当前明文分组进行异或,而不是与密文分组异或,明文反馈(PFB)与CFB相似,只是明文而非密文用于反馈。为了抵制已知明文攻击,这两中模式准许采用选择明文攻击。还有“明文差分密文分组链接(CBCPD)”模式,我肯定它会变得更加离奇。
如果密码分析者有一台穷举密钥搜索机器,如果能猜出一个明文分组的话,那么就能恢复出密钥。在使用加密算法之前利用一些陌生的模式对加密可以起到奇妙的作用:如将文本与一确定秘密串进行异或,或者对文本进行置换。几乎任何非标准的东西都将有助于挫败这类密码分析。