分组算法
Definition
- 定义
- 模式
- ECB模式
- CBC模式
- 填充提示攻击
- CFB模式
- OFB模式
分组密码(Block Cipher)是一种常用的对称加密算法,把原始数据(明文)分为等长的小块(分组),然后在同一密钥控制下,用固定的算法依次对每一个分组进行加密和解密操作。
分组密码的模式(Block Cipher Mode)是密码学中描述如何安全且高效使用分组密码算法(如AES、DES)加密大量或变长数据的技术方案与流程标准。模式不仅仅是算法本身,还包括每一块数据加密的流程细节、块之间的关联方式、初始值的选用,以及如何实现机密性或真实性等安全服务。
- 分组密码算法只能加密固定长度的数据块(如AES只能加密16字节一块),但实际应用往往需要保护更长或不规则长度的数据(如文件、音视频流、消息等)。
- 模式就是预先约定好“一大段数据怎么拆成块、每块如何串联加密、初始块怎么设置”,包括数据填充、分组链接、密钥流生成等环节。
分组密码的主要模式有以下5种。
- ECB模式: Electronic CodeBook mode (电子密码本模式)
- CBC模式: Cipher Block Chaining mode (密码分组链接模式)
- CFB模式: Cipher FeedBack mode (密文反馈模式)
- OFB模式: Output FeedBack mode (输出反馈模式)
- CTR模式: CounTeR mode (计数器模式)
ECB模式(Electronic Codebook Book,电子密码本模式)是分组加密算法中最简单、最直观的一种工作模式。
原理和流程
- 明文被切分成若干固定长度的分组(如128位),每个分组单独、独立用同一个密钥加密,输出对应的密文分组。
- 解密时,也是对应地用相同密钥对每个密文分组独立还原为明文。
- 对于最后不足一整分组的数据,需要补齐到指定长度再加密(即填充)。
安全隐患:
- 明文模式暴露:当明文存在相同内容时,加密后的密文分组也完全相同,攻击者仅观察密文即可推测明文的重复结构或格式信息。
- 分组替换与拼接攻击:攻击者可以复制、剪接、重组密文分组,成功构造伪造的密文,而受害方解密时会得到对应的改组明文。例如,支付系统的密文记录可以被复制或重新排序,无需知道密钥即可伪造“合法”的转账。
- 不适合长消息加密:对于较长的消息,重复的分组模式会暴露更多信息,增加被分析和破解的风险。
- 不可抵抗已知明文攻击:如攻击者知晓部分明文内容,可以分析密文分组,从而进一步推断其它分组规律,实现密码学分析或暴力破解。

CBC模式(Cipher Block Chaining,密文分组链接模式)是一种广泛应用于分组加密的安全工作模式,通过将每个明文分组与前一个密文分组进行异或后再加密,实现了高度的扩散和信息混淆。
工作原理
- 首先,将明文划分为多个固定长度的分组。
- 第一个明文分组与初始化向量(IV, Initialization Vector)进行异或,然后加密,得到第一个密文分组。
- 第二个和之后的明文分组,每个都与前一个密文分组进行异或,然后再加密,得到对应密文分组。
- 解密时,每个密文分组先被解密,再与前一个密文分组异或,复原明文。第一个分组用IV异或。
安全与性能
- 有效消除了ECB模式下的模式泄漏问题,即使明文重复,密文分组也不一样。
- 明文的微小变化会影响后续所有密文分组,实现较强的扩散性。
- 需要一个随机且唯一的初始化向量(IV)来保证每次加密的不同,IV通常与密文一起传输。需要安全管理和传递IV,IV不能重复使用,否则存在安全风险。
- CBC模式不支持并行加密,因为每个分组的加密依赖于前一个分组的密文。

填充提示攻击(Padding Oracle Attack)是一种针对采用分组加密(如CBC模式)且填充机制有回馈信息的系统的攻击方式。攻击者通过精心篡改密文,并根据系统返回的“填充是否合法”的提示,逐步还原密文所对应的明文内容。
攻击原理:
- CBC等分组加密模式下,明文长度不是分组整数倍时必须填充(如PKCS#7,一种分组加密的填充标准)。
- 解密后,系统首先检查填充是否合法。如果填充不合法,往往会返回专门的错误提示(比如“填充错误”)。
- 攻击者可以不断修改密文的某些字节,反复提交给服务器,只需根据服务器响应判断填充是否合法即可。
- 如果某次修改后返回“填充合法”,攻击者就能推算出当前明文字节的真实值。利用这一原理可循环恢复整个明文,甚至进一步伪造新的加密数据。
CFB(Cipher Feedback,密文反馈模式)是一种可以将分组加密算法转变为“流加密”形式的工作模式,支持无须填充地加密任意长度的数据流。
工作原理
- 首先选定一个初始化向量(IV)。
- 每一轮,将上轮的密文分组(第一轮用IV)加密,得到一个加密输出。
- 用这个加密输出与本轮明文做按位异或(XOR),就得到本轮的密文分组。
- 下一轮再以刚得到的密文分组作为输入循环进行。
- 解密时,流程与加密类似,只需用“上一个密文分组加密后结果”与当前密文分组异或,就还原出明文
安全与性能
- 不需要数据长度为块长整数倍,适合任意长度、实时数据流加密(如通信流和文件流)。
- 常用于需要在线加密、流式通信等场景,没填充漏洞风险,适合实时数据。
- 由于每个分组的加密依赖于前一个分组的密文,CFB模式不支持并行加密。

OFB模式(Output Feedback,输出反馈模式)是一种将分组密码算法“变身”为同步流密码的工作模式,主要用于高效、等长地加密任意长度数据,且能事先生成密钥流,便于流式处理。
工作原理
- 初始化:将初始化向量(IV)作为分组密码算法的第一个输入。
- 密钥流生成:每一次都用前一次加密的输出作为下次分组加密的输入。
- 流式异或:生成的密钥流与明文流(按块分组)逐块异或,得到密文;解密同理,只需密钥流与密文异或,便还原明文。
- 流程特点:加密和解密过程结构完全一样,密钥流可以提前生成,明文块长度可小于算法分组长度,且两者处理是并行独立的。
安全与性能
- 明文不会暴露重复块模式(与CFB类似),安全性比ECB高。
- 若IV重复,密钥流会重复,存在安全隐患,因此IV必须唯一且随机。
- 不具备篡改检测能力,如果密文被主动篡改,只影响对应明文块的同一位置,不会影响其它块,这既是优点也是风险。
- 可以事先生成全部密钥流,随后以极快的XOR速率进行加密解密,可高效并行处理。
- 性能优于CBC、CFB等串行链式模式,适合大流量、高实时性的传输场景。

