算法模式
- 分组算法模式
-ECB模式
ECB(Electronic Code Book,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,明文数据被分为大小合适的分组,然后对每个分组独立进行加密或解密,如下图所示。
如果两个明文块相同(如明文块1和明文块2),则加密输出相同的密文块(如密文块1和密文块2)。
ECB模式的优点在于操作简单,易于实现。由于分组的独立性,利于实现并行处理,并能很好地防止误码扩散。由于所有分组的加密方式一致,明文中重复内容(即模式)会在密文中有所体现,因此难以抵抗统计分析攻击。
ECB模式一般用于小数据量的字符信息的安全性保护,例如密钥保护。
加密框架支持分组算法的ECB模式,实现源码为ecb.c。
-CBC模式
1976年,IBM发明了密码分组链接(CBC,cipher-block chaining)模式。在该模式中,每个明文块先与前一个密文块进行异或后,再进行加密,如下图所示。
如上图所示,每个密文块都依赖于它前面所有的明文块,同时为保证每条消息的唯一性,在第一个块中需要使用初始向量IV。若第一个块的下标为1,则CBC模式的加密过程为Ci=Ek(Pi⊕Ci-1),C0=IV,而其解密过程为Pi=Dk(Ci)⊕Ci-1,C0=IV,其中Pi表示第i个明文块,Ci表示第i个密文块,E和D分别为加密器和解密器,k为密钥。
CBC模式的主要缺点在于加密过程是串行的,无法被并行化,而且明文数据必须被填充到块大小的整数倍。加密时,明文中的微小改变会导致气候的全部密文块都发生变化(即误码扩散)。解密时,从两个邻接的密文块即可得到一个明文块,因此解密过程可以被并行化,而解密时密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其他明文块的内容。
加密框架支持分组算法的CBC模式,实现源码为cbc.c。
-CTR模式
CTR(Counter,计数器)模式将块密码变为流密码,通过一个递增的加密计数器以产生连续的密码流,其中计数器可以是任意保证不产生长时间重复输出的函数,使用要给普通的计数器是最简单和最常见的做法。
采用普通计数器的CTR加密流程如下所示。
图中Nonce(随机数)和计数器可以通过级联、相加或异或等运算使得相同的明文产生