器件型号: AM263P4
我们使用 CI 系统来生成我们的生成,在 mcelf 输出上运行 md5sum 检查显示出差异,尽管没有代码更改。
我已经跟踪到 __add_rs_note_segment mcelf 生成中的函数、该函数附加 32 字节的随机数据。
此函数为哪些数据提供该数据?不应用 RS 注释句段或使用固定数字会产生什么后果?
测试表明、这允许重现构建。
此致
Neil
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号: AM263P4
我们使用 CI 系统来生成我们的生成,在 mcelf 输出上运行 md5sum 检查显示出差异,尽管没有代码更改。
我已经跟踪到 __add_rs_note_segment mcelf 生成中的函数、该函数附加 32 字节的随机数据。
此函数为哪些数据提供该数据?不应用 RS 注释句段或使用固定数字会产生什么后果?
测试表明、这允许重现构建。
此致
Neil
您好 Neil、
随机数据的用途
_add_rs_note_segment 函数有两个用途:
1. AES-CBC 对齐
它将程序段有效载荷零填充到 16 字节边界。 AES-CBC 用于 AM263Px 安全启动加密流程、它是一种分组密码、要求输入数据是 16 字节的精确倍数。 这种填充是一项功能要求。
2.随机随机随机随机随机随机随机随机
填充之后附加 32 个随机字节。 它们充当加密步骤的熵/随机数材料。 目的是、即使是两个基于相同源代码的构建、也会生成不同的加密映像。 这是一种有意的加密设计选择。 它可防止捕获多个固件映像的攻击者执行模式分析以提取敏感信息。
每种选择的后果
完全删除 RS 注释句段
不建议在生产使用中使用。 删除该段也会删除对齐填充。 如果下游签名或加密工具需要一个 16 字节对齐的有效载荷、这将导致硬故障、更糟糕的是、以静默方式生成无法在器件上启动的加密映像。
使用固定值而不是随机值
这解决了在保持校准填充完好的同时出现的重现性问题。 缺点是降低了加密安全性、固定随机数意味着相同的源总是产生相同的密文、这会削弱加密保护。 但是、如果这些映像从未部署到生产硬件中、那么这对于 CI 和开发构建是可以接受的折衷。
您可以遵循以下方法
CI/开发构建
使用固定的确定性 32 字节值(例如,从构建哈希派生或只是全零)。 这恢复了 MD5 的可重现性并使您的管道检查可靠。
生产/发布版本
保留当前随机生成、以保留安全启动流程的完整安全属性。