9.11 选择密码模式

    如果你所关心的主要是简单和速度的话,ECB是最简单和最快的分组密码的模式,当然也是最弱的。除了容易受到重放攻击外,ECB模式中的算法也是最易分析的。建议不要使用ECB作为信息加密。

    加密随机数据,如别的密钥,ECB是一个很好的模式。由于数据短而随机,对这种应用ECB几乎没什么缺点。

    对一般的明文,请使用CBC,CFB或OFB模式。所选择的模式依赖于你的特殊需要。表9.1列出了各种模式的安全性和效率。

表 9.1 分组密码模式一览表

ECB:

     安全性

—不能隐藏明文模式

—分组密码的输入并不是随机的,它与明文一样

+ 一个密钥可以加密一个或多个消息

—明文很容易窜改,分组可被删除,再现或互换

     效率:

+ 速度跟分组密码一样

—由于填充,密文比明文长

—不可能进行预处理

+ 处理过程并行进行

     容错性:

—一个密文错误会影响整个明文分组

—同步错误不可恢复

CBC:

     安全性:

+ 通过跟前一个密文分组相异或明文模式被隐藏

+ 与前一个密文分组异或后分组密码的输入是随机的

+ 用同一个密钥可以加密多个消息

+/— 篡改明文稍有点难度;分组可以被从消息头和尾处删除,第一块分组的数据可被更换,并且复制允许控制的改变

      效率:

+ 速度同分组密码一样

—密文比明文长,不计算IV

—不能进行预处理

+/— 加密不是并行的,解密是并行的且有随机存取特性

      容错性:

—一个密文错误会影响正个明文分组以及下一个分组的相应位

—同步错误不可恢复

CFB:

     安全性:

+ 可以隐藏明文模式

+ 密文块的输入是随机的

+ 假设用不同的IV ,同一个密钥可加密多个消息

+/-对明文的篡改稍难;分组可以被从消息头和尾处删除,第一块分组的数据可被更换,并且复制允许控制的改变

效率:

+ 速度同分组密码相同

- 密文与明文同大小,不计算IV

+/-  加密不是并行的,解密是并行的且有随机存取特性

-          在分组出现之前作些预处理是可能的,前面的密文分组可以被加密

容错性:

-          一个密文错误会影响明文的相应位及下一整个分组

+  同步错误是可恢复的,1-比特CFB能够恢复单独位的添加或丢失

OFB/Counter:

      安全性:

+ 明文模式被隐藏

+ 密文分组的输入是随机的

+ 用不同的IV,同一个密钥可以加密多个消息

-          明文很容易被控制篡改,任何对密文的改变都会直接影响明文

      效率:

+ 速度同分组密码一样

-          密文跟明文有同样大小,不计算IV

+ 消息出现前作些预处理是可能的

-/+ OFB处理过程不是并行的,计数器处理是并行的

     容错性:

+ 一个密文错误仅影响明文的响应位

- 同步错误不可恢复

    CBC最好用来加密文件。安全性增加是很有意义的;并且当存储数据中有某些错误位时,同步错误几乎从不发生。如果你的应用是基于软件的,CBC总是最好的选择。

    CFB——特别是8-比特CFB——通常是加密字符流所选择的模式,此时每个字符需要分别对待处理,比如在终端和主机链路中。OFB通常用在不能容忍错误扩散的高速同步系统中。如果需要预处理那么OFB 也是可以选择的模式。

    OFB是在容易出错的环境所选择的模式,因为它没有错误扩散。除了所谓“神奇”模式,ECB、CBC、OFB和CFB四种模式之一几乎能够满足任何应用需要,这些模式既不过分复杂也不会减少系统的安全性。尽管复杂的模式或许能增加安全性,大多数情况下它仅仅是增加复杂性。没有什么神奇模式具有好的错误扩散特性或错误恢复能力。