1.Electronic CodeBlock(ECB)
块加密模式是最简单的加密模式。信息被分割成单独的块,每一块单独加密。
算法特点:
1.因为每一块单独加密,所以不能很好的隐藏数据的模式,特别是在加密bitmap图像数据时。
2.每次Key、明文、密文的长度都必须是64位。
2.Cipher Block Chaining(CBC)
每一块明文在加密前会和前一块明文进行异或处理。为了使每个信息独一无二,第一个块信息会被一个初始化向量(initialization vector)
ECB加密算法可表示为:
C0 = Enc(Key, XOR(IV, P0)
Ci = Enc(Key, XOR(Ci-1, Pi)
ECB解密算法可以表示为:
P0 = XOR(IV, Dec(Key, C0))
Pi = XOR(Ci-1, Dec(Key,Ci))
算法特点:
3.Cipher Feedback(CFB)
CFB模式和CBC模式相似,使块加密变成一个自同步的流加密。操作也十分相似,特别的是,CFB模式加密几乎是倒置的CBC模式加密。
Ci = Ek(Ci-1) XOR Pi
Pi = Ek(Ci-1) XOR Ci
Co = IV
注:Ci表示第i块数据块的密文,Ek表示加密过程,Pi表示第i块明文,IV 表示初始化向量
扩展:根据一个自同步密码的定义:如果有一部分密文丢失(例如:传输错误),只会出现一部分的原内容错误,并且在执行一段解密步骤后能继续正常解密。使用CFB模式加密后,解密将不再向CBC一样可以自同步。只有在一整数据块密文丢失时,CBC和CFB可以自同步;但是在丢失一个字节或者一个比特位时将会彻底是解密崩溃。为了解决好这种情况,需要依次加密一个字节或比特位。连通一个移位寄存器,CFB可以实现自同步。
标注:Si表示移位寄存器的第i次状态值;a<<x 表示a左移x位;head(a, x)表示a的高x位,n表示IV的比特位数。
算法特点:
4.Output Feedback(OFB)
与CFB模式不同之处在于,加密移位寄存器与密文无关了,仅与加密key和加密算法有关;做法不再是将密文输入到加密移位寄存器中,而是把输出的分组密文(Oi)输入到移位寄存器中。
特点:
ECB是不推荐的方式,Key相同时,相同的明文在不同的时候产生相同的明文,容易遭到字典攻击;
CBC由于加入了向量参数,一定程度上抵御了字典工具,但缺点也随之而来,一旦中间一个数据出错或丢失,后面的数据将受到影响;
CFB与CBC类似,好处是明文和密文不用是8bit的整数倍,中间一个数据出错,只影响后面的几个块的数据;
OFB比CFB方式,一旦一个数据出错,不会影响后面的数据,但安全性降低;
因此,推荐使用CFB方式,但每个数据包单独加密,否则一个数据包丢失,需要做很多容错处理;
当然,具体问题也要具体分析,对于只需要”特定安全性”①,不需要”计算安全性”以上的软件,也可以使用ECB模式;
参考文献:
wiki:http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
sianblog:http://blog.sina.com.cn/s/blog_4c6e822d0102dwfd.html