跳到主要内容

对称加密-分组密码的模式

DES、3DES 和 AES 都属于分组密码,它们只能加密固定长度的明文。如果需要加密更长的明文,就需要对分组密码进行迭代,而分组密码的迭代方法称为分组密码的模式(Model)。简而一句话:分组密码的模式,就是分组密码的迭代方式。

分组密码有很多种模式,这里主要介绍以下几种:ECB、CBC、CFB、OFB、CTR。

ECB 模式

ECB(Electronic CodeBook)模式,即电子密码本模式。该模式是将明文分组,加密后直接成为密文分组,分组之间没有关系。

ECB 模式是所有模式中最简单的一种,该模式的明文分组与密文分组是一一对应的关系,若明文分组相同,其密文分组也一定相同。因此,ECB 模式也是最不安全的模式。

CBC 模式

CBC(Cipher Block Chaining)模式,即密码分组链接模式。该模式首先将明文分组与前一个密文分组进行 XOR 运算,然后再进行加密。只有第一个明文分组特殊,需要提前为其生成一个与分组长度相同的比特序列,进行 XOR 运算,这个比特序列称为初始化向量(Initialization Vector),简称 IV。

CFB 模式

CFB(Cipher FeedBack)模式,即密文反馈模式。该模式首先将前一个密文分组进行加密,再与当前明文分组进行 XOR 运算,来生成密文分组。同样 CFB 模式也需要一个 IV。

OFB 模式

OFB(Output FeedBack)模式,即输出反馈模式。该模式会产生一个密钥流,即将密码算法的前一个输出值,做为当前密码算法的输入值。该输入值再与明文分组进行 XOR 运行,计算得出密文分组。该模式需要一个 IV,进行加密后做为第一个分组的输入。

CTR 模式

CTR(CounTeR)模式,即计数器模式。该模式也会产生一个密钥流,它通过递增一个计数器来产生连续的密钥流。对该计数器进行加密,再与明文分组进行 XOR 运算,计算得出密文分组。

分组密码的填充

在分组密码中,当数据长度不符合分组长度时,需要按一定的方式,将尾部明文分组进行填充,这种将尾部分组数据填满的方法称为填充(Padding)。

No Padding

即不填充,要求明文的长度,必须是加密算法分组长度的整数倍。

ANSI X9.23

在填充字节序列中,最后一个字节填充为需要填充的字节长度,其余字节填充 0。

ISO 10126

在填充字节序列中,最后一个字节填充为需要填充的字节长度,其余字节填充随机数。

PKCS#5 和 PKCS#7

在填充字节序列中,每个字节填充为需要填充的字节长度。

ISO/IEC 7816-4

在填充字节序列中,第一个字节填充固定值 80,其余字节填充 0。若只需填充一个字节,则直接填充 80。

Zero Padding

在填充字节序列中,每个字节填充为 0。