9.6 密码反馈模式
分组密码算法也可以用于自同步序列密码,就是所谓的密码反馈模式(CFB)。在CBC模式下,整个数据分组在接收完之后才能进行加密。对许多网络应用来说,这是一个问题。例如,在一个安全的网络环境中,当从某个终端输入时,它必须把每一个字符马上传给主机。当数据在一字节大小的分组里进行处理时,CBC模式就不能做到了。
在CFB模式下,数据可以在比分组小得多的单元里进行加密。下面这个例子就是一次加密一个ASCII字符(称为 8-比特CFB),这里数字“8”没任何特殊性,你可以用1-比特CFB一次加密一位数据。尽管用完整的分组加密算法对单独一位进行加密好象也能工作,但用序列密码算法更好。(并不提倡利用减少分组的大小来加快速度[1269])你也可以使用64-比特CFB或者任意n-比特CFB(其中n小于或等于分组大小)。
图9.9 8比特密码反馈方式
图9.9说明了64-比特分组算法下的8-比特CFB模式的工作原理。CFB模式下的分组算法对输入分组大小的队列进行操作。开始,该队列就象在CBC模式下一样用一个IV填充。整个队列被加密取其最左面8位与明文第一个8比特字符进行异或得到密文的第一个8比特字符。这个字符现在就可以传输了,同时该字符被移动到队列的最右边字节位置,然后其它字节向左移动8位。最左面8比特丢弃。其它明文字符如法炮制。解密是一个逆过程。在加密解密两端,分组算法用于其加密模式中。
如果算法的分组是n比特,那么n比特CFB就象(见图9.10):
Ci =Pi ⊕ EK(Ci -1 )
Pi =Ci ⊕ EK(Ci -1 )
图9.10 n-比特分组算法下的n-比特CFB模式
像CBC模式,CFB模式将明文字符连接起来以使密文依赖所有以前的明文。
初始化向量
为了初始化CFB过程,分组算法的输入必须用IV初始化。就象在CBC模式使用IV一样,它并不需要保密。
尽管那样,IV必须是唯一的。(这是与CBC模式不同的地方,CBC模式中IV应该唯一但不是必须。)如果在CFB模式下IV不是唯一的,密码分析者就可以恢复出相应的明文。对不同的消息,IV必须更换,它可以是一系列号,每一个消息后增大,以保证在密钥有效期内不会重复。对用于存储的信息加密,它可以是用来查找数据指针的函数。
错误扩散
CFB模式中,明文的一个错误就会影响所有后面的密文以及在解密过程中的逆。密文出现错误就更有趣了:首先,密文里单独一位的错误会引起明文的一个单独错误。除此之外,错误进入移位寄存器,导致密文变成无用的信息,直到该错误从移出寄存器的另一端移出。在8-比特CFB 模式中,密文中一比特的错误会使加密明文产生9字节的错误。之后,系统恢复正常,后面的密文也被重新正确解密。通常情况下,在n-比特CFB模式中单独的密文错误会影响当前和紧跟的m/n-1分组的解密,其中m是分组大小。
该类错误扩散的一个严重问题是如果Mallory熟悉某个正在传输的明文,他就可以窜改某个分组里的某些位,使它们解密成自己想要的信息。“下一分组”会被解密成“垃圾”,但破坏已经发生了。他还可以更改消息的最后一些位而不被发现。
CFB模式对同步错误来说同样是可以自我恢复的。错误位进入移动寄存器就可以使8字节的数据毁坏,直到它从另一端移出寄存器为止。CFB是分组密码算法用于自同步序列密码算法的一个实例(分组级)。