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:RS 注释部分 — 构建再现性

Guru**** 2933630 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/1653785/am263p4-rs-note-segment---build-reproducibility

器件型号: 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 的可重现性并使您的管道检查可靠。

    生产/发布版本  
    保留当前随机生成、以保留安全启动流程的完整安全属性。