CBC模式与CFB模式都有这样一个问题:不能通过随机顺序进行加密数据的访问,由于当前密文数据块的解密依靠前面的密文块。而这个问题对于很多应用来说,特别是数据库的应用,是很难接受的。因此,又出现了另一种工作模式,也就是计数器(CTR)模式。
CTR模式本质上和OFB模式非常类似,均是把分组密码变成流密码。两者的区别在于:CTR模式由递增一个加密计数器得到连续的密钥流,密钥流的产生之间无关系,不过是通过计数器提供的。
CTR模式中计数器可以是任意保证不产生长时间重复输出的函数,不过用一个普通的计数器为最简单与常见的举措。
CTR模式需计数器序列T1…,Ti,…,Tm,利用对计数器序列调用分组加密算法产生密钥流,然后与明文异或得到密文。对计数器序列的要求是两两不同,而且不仅是在一个消息的操作中,而且是在同一密钥的所有操作中均要求所用计数器序列两两不同。
可能有人会问,为什么需要这么多模式?CTR模式最吸引人的一个特点就是可以并行化,因为CTR模式不需要任何反馈,这与OFB或CFB模式完全不同。所以可以让两个分组密码引擎同时并行工作,即让两个引擎同时使用第一个分组密码加密计数器值CTR1和CTR2。等这两个分组密码引擎完成后,第一个引擎将继续加密值CTR3,而另一个引擎则继续加密CTR4,如此循环。这种方案的加密速率是单个实现方式的两倍。当然,也可以同时运行多个分组密码引擎,这也会使加密速率按比例增加,对吞吐率要求严格的应用,并行化的加密模式非常合适。CTR模式在ATM网络安全与IPSec应用中被广泛应用。