分组加密的四种模式(ECB、CBC、CFB、OFB)

加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)。
对称加密又分为分组加密和序列password。
分组password。也叫块加密(block cyphers)。一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。


序列password。也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(password算法)产生大量的伪随机位流,用于对明文位流的加密。
解密是指用相同的密钥和password算法及与加密相同的伪随机位流,用以还原明文位流。

分组加密算法中,有ECB,CBC,CFB,OFB这几种算法模式。

1)ECB(Electronic Code Book)/电码本模式



DES ECB(电子密本方式)事实上很easy。就是将数据依照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,依照需求补足8个字节进行计算,之后依照顺序将计算所得的数据连在一起就可以。各段数据之间互不影响。


特点:

1.简单。有利于并行计算。误差不会被传送。
2.不能隐藏明文的模式;
repetitions in message may show in cipher text/在密文中出现明文消息的反复 
3.可能对明文进行主动攻击;
加密消息块相互独立成为被攻击的弱点/weakness due to encrypted message blocks being independent

2)CBC(Cipher Block Chaining)/密文分组链接方式


DES CBC(密文分组链接方式)有点麻烦。它的实现机制使加密的各段数据之间有了联系。事实上现的机理例如以下:

加密过程例如以下:

1)首先将数据依照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,用指定的PADDING数据补位)

2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)

3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

4)之后的数据以此类推,得到Cn

5)按顺序连为C1C2C3......Cn即为加密结果。

解密是加密的逆过程。过程例如以下:

1)首先将数据依照8个字节一组进行分组得到C1C2C3......Cn

2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)

3)将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2

4)之后依此类推。得到Dn

5)按顺序连为D1D2D3......Dn即为解密结果。

这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有你补得位。一定要把补位去掉才是你的原来的数据。

特点:
1. 不easy主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
each ciphertext block depends on all message blocks/每一个密文块依赖于全部的信息块
thus a change in the message affects all ciphertext blocks/明文消息中一个改变会影响全部密文块
2. need Initial Vector (IV) known to sender & receiver/发送方和接收方都须要知道初始化向量 
3.加密过程是串行的,无法被并行化(在解密时,从两个邻接的密文块中就可以得到一个平文块。因此。解密过程能够被并行化)。



3)Cipher Feedback (CFB)/密文反馈模式


密文反馈(CFB,Cipher feedback)模式类似于CBC。能够将块password变为自同步的流password;工作过程亦很相似,CFB的解密过程差点儿就是颠倒的CBC的加密过程:
须要使用一个与块的大小同样的移位寄存器。并用IV将寄存器初始化。然后。将寄存器内容使用块password加密,然后将结果的最高x位与平文的x进行异或,以产生密文的x位。

下一步将生成的x位密文移入寄存器中。并对以下的x位平文反复这一过程。

解密过程与加密过程相似,以IV開始,对寄存器加密,将结果的高x与密文异或,产生x位平文。再将密文的以下x位移入寄存器。
与CBC相似,平文的改变会影响接下来全部的密文,因此加密过程不能并行化;而相同的,与CBC类似,解密过程是能够并行化的。


4)Output Feedback (OFB)/输出反馈模式


输出反馈模式(Output feedback, OFB)能够将块password变成同步的流password。它产生密钥流的块,然后将其与平文块进行异或。得到密文。

与其他流password一样,密文中一个位的翻转会使平文中相同位置的位也产生翻转。

这样的特性使得很多错误校正码,比如奇偶校验位。即使在加密前计算而在加密后进行校验也能够得出正确结果。
每一个使用OFB的输出块与其前面全部的输出块相关。因此不能并行化处理。

然而,因为平文和密文仅仅在终于的异或过程中使用。因此能够事先对IV进行加密。最后并行的将平文或密文进行并行的异或处理。
能够利用输入全0的CBC模式产生OFB模式的密钥流。这样的方法十分有用。由于能够利用高速的CBC硬件实现来加速OFB模式的加密过程。




原文地址:https://www.cnblogs.com/clnchanpin/p/7162334.html