密码技术(四、五)之分组模式(CTR模式)
分组密码的模式之 CTR模式
CTR模式
CTR模式的全称 CountTeR模式(计数器模式)。CTR模式是一种通过将逐此累加的计数器进行加密来生成密钥流的流密码。
CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器得到的比特序列,与明文分组进行XOR而得到的。
计数器的生成方法
每次加密时都会生成一个不同值(nonce)来作为计数器的初始值。当分组长度为128比特(16字节)时,计数器的初始值可能像下面这样的形式
xxx.png
其中前8个字节为nonce,这个值在每次加密必须都是不同的。后8个字节为分组序号,这个部分会逐次累加的。在加密过程中,计数器的值会产生如下变化。
xxx.png
按照上述生成方法,可以保证计数器的值在每次都不同。由于计数器的值每次都不同,因此每个分组中将计数器进行加密所得到的密钥流也是不同的。也就是说,这种方法就是用分组密码来模拟生成随机的比特序列。
OFB模式与CTR模式的对比
CTR模式和OFB模式上一样,都属于流密码。如果我们将单个的分组的加密过程拿出来,那么OFB模式和CTR模式之间的差异还是很容易理解的。OFB模式是将加密的输出反馈到输入,而CTR模式则是将计数器的值用作输入。
OFB模式与CTR模式的对比.png
CTR模式的特点
CTR模式的加密和解密使用了完全相同的结构,因此在程序实现上比较容易。这一特点和同为流密码的OFB模式是一样的。
CTR模式中可以以任意顺序对分组进行加密和解密,因此在加密和解密时需要用到“计数器”的值可以由nonce和分组序号直接计算出来。这一性质是OFB模式所不具备的。
能够以任意顺序处理分组,就意味着能够实现并行计算。在职场并行计算的系统中,CTR模式的速度是非常快的。
错误与机密性
CTR模式也具备和OFB模式差不都的性质。假设CTR模式的密文分组有一个比特反转了,则解密后的明文分组中仅有与之对应的比特会被反转,这一错误不会放大。
换言之,在CTR模式中,主动攻击者Mallory可以通过反转密文分组中的某些比特,引起解密后明文中的相应比特也发生反转。这一弱点和OFB模式是相同的。
不过CTR模式模式具备一个比OFB模式要好的性质。在OFB模式中,如果对密钥流的一个分组进行加密后期结果碰巧和加密前是相同的,那么这一分组之后的密钥流就会变成同一值的不断反复。在CTR模式中就不存在这一问题。
扩展模式GCM模式
在CTR模式的基础上增加“认证”功能的模式成为GCM模式(Galois/Counter Mode)这一模式能够在CTR模式生成密文的同时生成用于认证的信息,从而判断“密文是否通过合法的加密过程”。通过这一机制,即便主动攻击者发送伪造的密文,我们也能够识别出“这密文是伪造的”。
该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著