You need to enable JavaScript to run this app. Python实现AES MixColumns列混合功能输出与预期不符问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python实现AES MixColumns列混合功能输出与预期不符问题咨询

AES MixColumns 实现偏差排查

测试场景

正在使用Python编写AES标准的MixColumns列混合函数,针对状态矩阵首列做单元测试时,程序输出与预期值存在偏差,无法定位错误来源。

测试基础参数

  • 标准MixColumns变换矩阵(按行展开):[2, 3, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 3, 1, 1, 2]
  • 测试用状态矩阵输入:[0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255]

测试代码

# 针对状态首列的逐行乘加验证
print((0*2)^(17*3)^(34*1)^(51*1))
print((0*1)^(17*2)^(34*3)^(51*1))
print((0*1)^(17*1)^(34*2)^(51*3))
print((0*3)^(17*1)^(34*1)^(51*2))

结果对比

  • 代码实际运行输出:
34
119
204
85
  • 预设的预期输出:
34
119
0
85

问题定位

  • 核心运算逻辑错误:AES规范中MixColumns的矩阵乘法,全部是GF(2^8)有限域上的多项式乘法,不能直接使用Python原生的整数乘法运算。当前代码用普通整数乘法代替域乘法,天然不符合算法规范。
  • 预期值与实际值的差异来源:
    代码中第三行的运算,对51 * 3的计算采用普通整数乘法得到结果153;但按GF(2^8)域规则,51乘3的正确结果是85。两者的差值直接导致最终异或的结果从预期的0变成了实际输出的204。

    第三行的正确GF域计算过程:

    1. 系数1乘输入17:结果为17
    2. 系数2乘输入34:GF域乘2等价于左移1位,34(0x22)左移为68(0x44),无高位溢出无需异或化简项0x1b
    3. 系数3乘输入51:GF域乘3等价于(乘2 异或原数),51(0x33)乘2为102(0x66),异或原数51后得到85(0x55)
    4. 所有项异或求和:0 ^ 17 ^ 68 ^ 85 = 0,和你预设的预期值完全一致
  • 其余输出值的巧合性:前三个输出中,其余乘法项的普通整数运算结果,刚好和GF域乘法结果一致,所以出现了前两个值和预期匹配、第三个值不匹配的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 01:24:01