在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式)、CBC(Cipher-block chaining,密码块连接模式)、PCBC(Propagating cipher-block chaining,填充密码块链接模式)、CFB(Cipher feedback,密文反馈模式)、OFB(Output feedback,输出反馈模式)、CTR(Counter mode,计数器模式)。
注意这几种模式适用于对称加密算法中,对称加密算法的特点是密文长度等于密文长度;加解密用同一组秘钥。在CFB、OFB、CTR模式中需要涉及到流密码(序列密码)的概念,这里先给出,摘自百度百科序列密码。
序列密码也称为流密码(Stream Cipher),它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。 1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特。
在序列密码中,密钥流由密钥流发生器f产生:zi=f(k,si),这里的si是加密器中存储器(记忆元件)在i时刻的状态。根据加密器中的记忆元件si的存贮状态是否依赖于明文字符,序列密码可进一步分成同步和自同步两种。如果si独立于明文字符则称为同步流密码,否则称为自同步流密码。
序列密码与分组密码的对比
分组密码以一定大小作为每次处理的基本单元,而序列密码则是以一个元素(一个字母或一个比特)作为基本的处理单元。
序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性。
分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是:加解密处理速度慢、存在错误传播。
序列密码涉及到大量的理论知识,提出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开,这也许是因为序列密码目前主要应用于军事和外交等机密部门的缘故。目前,公开的序列密码算法主要有RC4、SEAL等。
Electronic CodeBook,电子密码本模式,这种模式的特点是每一个明文块对应一个密文块,是最简单的对称加密模式。
缺点:ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的。
如:某银行的转账请求数据由以下3个分组构成。
分组1=付款人的银行账号
分组2=收款人的银行账号
分组3=转账金额。
现在需要A账户给B账户转账100,但是如果将分组1和分组2的密文进行调换,就会使账户B给账户A转账100。这种情况就是在不需要破解密文的情况下,就能操纵明文。
Cipher-block chaining,密码块连接模式。这种模式需要将每一个明文块与前一个密文块进行异或后在进行加密操作。第一个块需要初始向量IV。加解密流程如下图所示:
优点:①每一次加密都需要前一个密文块参与,明文中微小的改变都会使后续所有密文改变;②无法从密文看出明文的规律。安全性得以提高。目前,CBC是最为常用的工作模式。
缺点:①由于每次加密都需要前一个密文参与,所以无法并行加密,只能串行加密,加密速度受到限制。但是只要有两个相邻的密文块,就可以解密出后一个密文块的明文,比如知道密文2和密文3,就可以解密出明文3。所以解密是可以并行执行的。②改变某个密文块,只会影响当前和下一个解密出的明文,不会影响后续解密过程。
Propagating cipher-block chaining,填充密码块链接模式,又称为明文密码块链接(Plaintext cipher-block chaining)。它与CBC模式类似,只是在加解密时,不但要与上一个密文异或,还要与上一个明文进行异或。加解密流程如下图所示:
优点:PCBC模式优点与CBC模式基本一致。①每一次加密都需要前一个密文块与明文块参与,明文中微小的改变都会使后续所有密文改变,同样密文的改变也使解密出的明文变化很大;②无法从密文看出明文的规律;③明文的任意改动会使后续密文都改变,同样密文的任意改动会使后续解密出的明文全部改变。安全性得以提高。
缺点:由于每次加密都需要前一个密文参与,所以无法并行加密,只能串行加密,加密速度受到限制。
Cipher feedback,密文反馈模式。CFB模式与前3种模式都不同,CFB模式不直接加密明文,而是将前一个密文使用秘钥Key再加密后,与明文异或,得到密文。同样,第一个密文需要初始向量IV加密得到。
CFB模式加密过程如下图所示。
加密过程具体如下:
由于CFB模式是对密文进行加密,故解密时,同样使用加密器进行解密。CFB模式解密过程如下图所示,注意与加密过程箭头指向不同。
解密过程具体如下:
观察解密步骤,可以发现与CB解密步骤类似,直到两个相邻的密文就可以解密出后一个明文,所以解密过程可以并行。
CFB将块加密变成自同步流密码模式(关于流密码可参考文章最开始部分)。在CFB模式中,明文数据可以是任意比特长度m,相应得到的密文也是m比特,因此明文不用分成固定比特的数据块,整体明文也不用填充。CFB模式可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式。
优点:①.隐藏了明文模式;②分组密码转化为流模式;③可以及时加密传送小于分组的数据;
缺点:①不利于并行计算;②误差传送:一个明文单元损坏影响多个单元;③唯一的IV;
Output feedback,输出反馈模式。输出反馈模式与密文反馈模式类似,只不过返回的是输出。OFB模式同样将块加密转换成流密码模式。
OFB模式加密流程图如下图所示:
加密过程具体如下:
OFB模式解密时,同样使用加密器进行解密。OFB模式解密过程如下图所示,注意与加密过程箭头指向不同。
解密过程具体如下:
优点:1.隐藏了明文模式;2.分组密码转化为流模式;3.可以及时加密传送小于分组的数据;
缺点:1.不利于并行计算;2.对明文的主动攻击是可能的;3.误差传送:一个明文单元损坏影响多个单元;
Counter mode,计数器模式。CTR模式与OFB模式类似,它通过加密“计数器”的连续值来生成下一个密钥流块。计数器可以是任何保证长时间不会产生重复序列的函数。使用简单的确定性输入函数曾经是有争议的;批评者认为,“故意将密码系统暴露在已知的系统输入中是一种不必要的风险。”然而,目前CTR模式被广泛接受,任何问题都被认为是底层分组密码的一个弱点,无论其输入是否存在系统偏差,这种分组密码都是安全的。
CTR模式具有类似于OFB的特性,但在解密期间也允许随机访问属性。CTR模式非常适合在可以并行加密块的多处理器机器上运行。此外,它不存在影响OFB的短周期问题。
CTR模式加密过程如下图所示。其中Nonce和前文所述的初始向量IV一样,由于密文需要Nonce和计数器Counter共同计算所得,故如果计数器出错,则不能得到正确的密文。
CTR模式解密过程如下图所示:
CTR 模式被广泛用于 ATM 网络安全和 IPSec应用中,相对于其它模式而言,CRT模式具有如下特点:
■ 硬件效率:允许同时处理多块明文 / 密文。
■ 软件效率:允许并行计算,可以很好地利用 CPU 流水等并行技术。
■ 预处理:算法和加密盒的输出不依靠明文和密文的输入,因此如果有足够的保证安全的存储器,加密算法将仅仅是一系列异或运算,这将极大地提高吞吐量。
■ 随机访问:第 i 块密文的解密不依赖于第 i-1 块密文,提供很高的随机访问能力。
■ 可证明的安全性:能够证明 CTR 至少和其他模式一样安全(CBC, CFB, OFB, ...)
■ 简单性:与其它模式不同,CTR模式仅要求实现加密算法,但不要求实现解密算法。对于 AES 等加/解密本质上不同的算法来说,这种简化是巨大的。
■ 无填充,可以高效地作为流式加密使用。
参考文献:
[1]https://blog.csdn.net/chengqiuming/article/details/82262417
[2]https://blog.csdn.net/sunqiujing/article/details/75065218
[3]https://www.cnblogs.com/gaozhang12345/p/5913771.html
[4]https://blog.csdn.net/jerry81333/article/details/78336616
[5]https://en.m.wikipedia.org/wiki/Block_cipher_mode_of_operation#CFB
[6]https://blog.csdn.net/includeiostream123/article/details/51066799