You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程作业技术问询:AES-CBC场景下如何篡改密文提高转账金额

解决思路:AES-CBC比特翻转攻击 + 完整性标签篡改

首先,你遇到的问题核心是利用AES-CBC模式的固有漏洞(比特翻转攻击)来篡改明文内容,同时适配SHA256完整性验证的要求。下面是分步可行的思路:

1. 先搞懂AES-CBC的篡改特性(核心原理)

CBC模式的解密公式是:明文块P_i = 密钥解密(密文块C_i) XOR 前一个密文块C_{i-1}(其中第一个明文块的C_{i-1}就是IV)。根据异或的特性:

如果你修改C_{i-1}的某几个字节,那么解密后的P_i对应字节会被精准翻转(等于原明文字节 XOR 修改的差值),而后续的明文块不会受到影响(因为后续块依赖的是未修改的C_i)。

这意味着你不需要破解密钥,只需要通过修改目标明文块的前一个密文块/IV,就能让解密后的明文变成你想要的内容。

2. 定位目标字段,计算篡改所需的异或值

已知原始明文、密文、IV,先做这些操作:

  • 把原始明文按AES分组长度拆分(比如AES-128是16字节一组),找到转账金额所在的明文块,比如叫P_target。
  • 构造你想要的目标明文块P_target_new(比如把"100"改成"999",对应修改P_target里的金额字符)。
  • 计算两个块的逐字节异或差值:delta[i] = P_target[i] XOR P_target_new[i]。
  • 找到P_target对应的前一个密文块:如果P_target是第一个明文块,就修改IV;否则修改C_{target-1}(目标块的前一个密文块),逐字节异或delta,得到新的IV/密文块。

到这一步,解密后的明文已经包含了你想要的金额,但还过不了SHA256验证——因为你需要同时让标签匹配修改后的明文。

3. 适配SHA256完整性验证

你之前修改密文后重算标签失败,说明标签是基于原始明文计算,并且和明文一起被加密了(比如加密内容是明文 + SHA256(明文))。这时候需要同步篡改标签对应的明文块:

  • 用修改后的完整明文(包含新金额)计算新的SHA256标签H_new。
  • 找到原始标签在明文中的位置(通常是最后2个AES分组,因为SHA256是32字节),记为H_old_1和H_old_2。
  • 计算delta_h1[i] = H_old_1[i] XOR H_new[i]、delta_h2[i] = H_old_2[i] XOR H_new[16+i]。
  • 修改H_old_1对应的前一个密文块,逐字节异或delta_h1;修改H_old_2对应的前一个密文块,逐字节异或delta_h2。

这样操作后,解密出来的内容会是修改后的明文 + SHA256(修改后的明文),decrypt类计算SHA256时就会和标签匹配,验证通过。

4. 验证攻击流程

把修改后的IV(如果改了的话)、所有密文块组合起来,发送给decrypt类即可。整个过程不需要破解密钥,完全利用CBC模式的异或特性完成篡改。

内容的提问来源于stack exchange,提问作者HummaMumma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:42:50