基于2^26基数优化Poly1305在ARM Cortex-M4上的实现故障排查
关于ARM Cortex-M4上Poly1305算法2^26基数实现的问题
实现背景与问题
我正在ARM Cortex-M4微控制器上实现Poly1305算法,初始采用28基数表示,后修改为226基数并保留原有实现逻辑,但修改后生成的认证标签不符合预期,测试用例失败。
实现思路
- 累加器h以5个26位整数存储
- 加法和乘法后进行进位传播,确保值在26位范围内
- 乘法步骤
mulmod()遵循标准模2^130−5约简规则 - 最终步骤
freeze()确保值处于正确范围
问题现象
函数可正常执行,但生成的Poly1305认证标签与预期不符。我怀疑问题出在进位传播、模约简或密钥解析环节,但尚未定位具体原因,已检查位运算、进位处理和约简逻辑仍未解决。
怀疑方向
- 进位传播:
squeeze()函数可能存在未覆盖的边界情况 - 乘法步骤
mulmod():部分乘积和进位处理可能有误 - 最终步骤
freeze():模2^130−5的条件减法逻辑可能异常 - 密钥解析:从密钥提取r并掩码的方式可能存在问题
调试尝试
- 打印h和r的中间值,与预期结果不符
- 怀疑问题出在
mulmod()、freeze()或密钥最终加法环节 - 与参考实现对比,结果存在差异
问题咨询
- 我的进位处理是否存在错误?
squeeze()或freeze()中的模约简逻辑是否有误?- 在ARM Cortex-M4上实现Poly1305有哪些已知陷阱?
恳请提供问题定位或进一步调试的指导!
内容的提问来源于stack exchange,提问作者Mbah Romarick
相关产品推荐
相关产品推荐

