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.

[参考译文] AM62P:[SDK 基准 11.0.09][Security][来自 Desay]通过 binman 工具链进行映像签名演示。

Guru**** 2826855 points

Other Parts Discussed in Thread: AM62P

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1627847/am62p-sdk-baseline-11-0-09-security-from-desay-image-signing-demo-via-binman-tool-chain

部件号: AM62P

你好、我是德赛的客户。

目前、我们一直在开发 SDK 11.0.09、在开发安全启动(尤其是在 tryna 执行 extern 映像签名过程的步骤中)时、我们避免了一些问题。 在上一个工程中、我们的目标是 SDK 9.0+、其中签名工具是基于纯 bash + python 脚本 组合方法实现的、这是用户很好且易于理解的。
但 在 SDK 11.0.0 相应的工具将程序更改为基于 binman 的实现, 我们想问什么具体的行(或者我们应该做什么额外的配置),我们应该添加在“k3-am625-sk-binman.dtsi"的“的文件中,当涉及到我们的特定要求时,“我们要签署以下映像 (tiboo3.bin, tispl.bin, u-boot.bin):

------------------------ 介绍要签署的联合文件 (开始)--------------
SBL1 - tiboot3.bin [ MCU 域安全内核(例如 Cortex-R5)]
内核函数:上电后由片上 ROM 引导加载程序加载的第一个映像。 它负责最基本的硬件初始化(例如电源和时钟)、并加载下一阶段的引导加载程序。
SBL2 - tispl.bin [主域应用内核(例如 Cortex-A53)]
核心功能:二级程序加载器。 它由 tiboot3.bin 加载、负责初始化外部存储器(如 DDR)并加载主 U-Boot。
SBL3 (U-Boot)- u-boot.img [主域应用程序内核(例如 Cortex-A53 和 A72)]
内核功能:完成 U-Boot 引导加载程序。 它提供命令行界面、加载操作系统内核(如 Linux)和设备树文件 (DTB)、最后将控制权转移给内核。
------------------------ 介绍将签署的文件 (完)------------
 
谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我正在将您的问题发送给我们的安全专家。 请等待几天后回复。

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

    请参阅常见问题解答
    【常见问题解答】如何在外部安全密钥服务器上对 u-boot 二进制文件进行签名 
    此致、
    - Hong

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

    谢谢 Hongguan,我认为这回答了“如何插入远程 HSM 签名“的问题。  好了。 但实际上,对于这个票我的问题是关于“如何选择特定的图像到 binman 一次性脱机签名“,就像 下面.

    ------------------------ 介绍要签署的联合文件 (开始)--------------
    SBL1 - tiboot3.bin [ MCU 域安全内核(例如 Cortex-R5)]
    内核函数:上电后由片上 ROM 引导加载程序加载的第一个映像。 它负责最基本的硬件初始化(例如电源和时钟)、并加载下一阶段的引导加载程序。
    SBL2 - tispl.bin [主域应用内核(例如 Cortex-A53)]
    核心功能:二级程序加载器。 它由 tiboot3.bin 加载、负责初始化外部存储器(如 DDR)并加载主 U-Boot。
    SBL3 (U-Boot)- u-boot.img [主域应用程序内核(例如 Cortex-A53 和 A72)]
    内核功能:完成 U-Boot 引导加载程序。 它提供命令行界面、加载操作系统内核(如 Linux)和设备树文件 (DTB)、最后将控制权转移给内核。
    ------------------------ 介绍将签署的文件 (完)------------

    我为什么要这样问呢? CUZ、对于当前情况、在我认为名为“k3-am625-sk-binman.dtsi"的“的核心配置文件的默认签名覆盖范围中未设置上述 3 个映像。

    您能回答一下吗? 或者、您可以向相应的合作伙伴透露信息吗?

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

    嗨、Jibin、

    我来添加有关构建/签名流程的更多详细信息。

    1/。 在 Linux 构建机器上进行预处理
    -使用测试/虚拟密钥运行 u-boot 构建/签名
    -使用 binman 在 u-boot 构建/签名中没有变化
    -生成要在下一步中使用的工件/二进制文件。

    2/。 通过 I/F 对外部安全密钥服务器进行后处理
    -使用安全密钥服务器上的密钥,使用预处理步骤中预先生成的 x.509 有效载荷签署 x.509 证书,其中第 40 行 在常见问题解答中、需要移植通用 openssl 命令、以便通过 HSM 提供的 I/F(即 PKCS.11 API)与外部安全密钥服务器(即 HSM)连接。
    “openssl req -new -x509 -key ${key_name}-nodes -outform der -out ./${CERT_name}-config ./${CERT_config}-SHA512“
    -在预处理步骤中将新签名的 x.509 证书重新打包回预生成的工件。

    此致、
    - Hong

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

    尊敬的 Guan:

    感谢您的答复。

    但重点更具体地说、我应该在“k3-am625-sk-binman.dtsi"中“中添加哪些确切的行(我需要如上所述的 SBL1、SBL2、SBL3 的演示/参考)。 就像 中第 3.4.2.4 章的简介一样  

    3.4.2.4.  k3-image-gen

    9.0 SDK 中不再使用 K3-image-gen。 现在使用 Binman 在 u-boot 源中打包映像。 如需更多信息、请参阅 /board-support/ti-u-boot/tools/binman/README.rst. 要了解 BINMAN 如何包装单个图像,请看 /board-support/ti-u-boot/arch/arm/dts/k3- -sk-binman.dtsi。

    以下是我之前添加的测试行:

    --------------------------------------------

    BINMAN{&BINMAN}
    /*=========== tiboot3 HS 版本========= */
    tiboot3_hs:tiboot3-hs{
    filename =“tiboot3_hs.bin";“;
    symlink =“tiboot3_hsTest.bin";“;

    TI-secure-ROM{
     内容=<&tiboot3>;/* Star 添加分号*/
    keyfile =“CustMpk.pem";“;
    sw-rev =<1>;
     Load =;/* Star 修改为有效 DDR 地址*/
    };

    tiboot3:tiboot3-bin{/* Star 节点名去掉.bin */
    文件名=“../../u-boot-build/r5/tiboot3.bin;
    Type =“blob-ext";“;
    };
    };

    /*=========== tispi HS 版本========== */
    tispi_hs:tispi-hs{
    filename =“tispi_hs.bin";“;
    symlink =“tispi_hsTest.bin";“;

    TI-secure-ROM{
     内容=<&tispi>;/* Star 添加分号*/
    keyfile =“CustMpk.pem";“;
    sw-rev =<1>;
     Load =;/* Star 修改为有效 DDR 地址*/
    };

    tispi:tispi-bin{/* Star 节点名去掉.bin */
    文件名=“../../u-boot-build/a53/tispi.bin;
    Type =“blob-ext";“;
    };
    };

    /*=========== u-boot HS 版本========== */
    UBOOT_hs:UBoot-hs{
    filename =“uboot_hs.bin";“;
    symlink =“uboot_hsTest.bin";“;

    TI-secure-ROM{
     内容=<&uboot>;/* Star 添加分号*/
    keyfile =“CustMpk.pem";“;
    sw-rev =<1>;
     Load =;/* Star 修改为有效 DDR 地址*/
    };

    Uboot:uBoot-img{/* Star 节点名去掉.img */
    文件名=“../../u-boot-build/a53/u-boot.img;
    Type =“blob-ext";“;
    };
    };
    };

    --------------------------------------------

    但事实证明,与 tiboot3_hsTest.bin 的输出二进制文件在 HS-SE-DEVICE 中不起作用(当演示 tiboot3-am62x-hs-fs-evm.bin 闪存到它工作的 ECU 时)。

    我的观点一再重复!!!

    我想说的是:“我希望 guanhong 可以告诉我、在 TI SDK 11.0 的 binMan 工具链下、如果我们需要添加我在文章中提到的三个映像 (tiboot3、uboot.img、tispl.bin)、如何在“k3-am62x-sk-binman.dtsi"等“等配置文件中添加配置信息?
    我一直在问的是如何添加预配置配置信息(因为此信息可以被签名工具链识别并用于签名)、而不是询问一般的 binman 构建/签名过程。 我首先需要知道如何在诸如“k3-am62x-sk-binman.dtsi"之类“之类的文件中添加配置、以便在未来的工程中、假设我的映像名称不同、我就知道如何添加这些配置。“

    ----------------------------------------

    ~我的理解有误、请纠正我的错误。

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

    对于 AM62P SoC、打包到 tiboot3.bin、tispl.bin 和 u-boot.img 中的所有条目都在*。dtsi 文件中进行了描述、即  
    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/arch/arm/dts/k3-binman.dtsi?h=11.02.08
    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/arch/arm/dts/k3-am62p-sk-binman.dtsi?h=11.02.08

    binman 是社区工具,这里是 binman 的参考
    https://docs.u-boot.org/en/latest/develop/package/binman.html

    我建议使用两个步骤的方法在常见问题解答中基于 binman 的代码签名与外部安全密钥服务器:
    -在 Linux 构建机器上进行预处理
    使用 binman 生成工件/二进制文件
    -使用 I/F 进行后期处理以保护密钥服务器
    使用安全密钥服务器上的密钥对 binman 预生成的工件/二进制签名。

    我们与多个客户合作、将常见问题解答中的脚本与代码签名上的外部安全密钥服务器(即 HSM)集成。

    此致、
    - Hong

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

    Hi Guanhong

    目前、Ima 正在研究“两步签署“解决方案。

    我目前的现状是:

    (1) 我能够基于某个二进制输入对新的 X509 cert 标头签名(是的,python 脚本将整个二进制输入)

    (2) 我只能将 X509 转换为二进制输入。

    但关键是:

    根据下面的模板:

     -----

    echo “cert-generate/ Re 重新打包带新 x.509 证书(${cert_name})的已签名二进制文件(${bin_sign_name})“
    CERT_SIZE=$(stat -c %s “${CERT_NAME}“)
    DD if=${CERT_NAME}of =${bin_sign_name}seek=$((CERT_CONFIG_OFFSET)) count=$((CERT_SIZE)) BS=1 conv=notrunc >>和/dev/null

    -----

    你的心态是替换/重新签署已经签署的图像, 首先我得到了这种方法。

    问题如下:

    (1) 如果我能够解析预签名映像的 X509 标头、则我的脚本可以工作。 (步骤 1:删除 X509 标头,然后根据纯原始二进制文件重新签名)

    (2) 但为了实现 (1) 我可以在哪里或应遵循什么具体步骤来检索 “CERT_CONFIG_OFFSET"和“和“CERT_SIZE"的“的值或信息

    哪项帮助我稍后对预先签名的映像执行更灵活的操作?

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

    -“CERT_CONFIG_OFFSET"是“是从 binman 预生成的*.map 文件中手动读取的,并将其作为参数传递给

    -“CERT_SIZE"是“是在中计算的
    CERT_SIZE=$(stat -c %s “${CERT_NAME}“)

    此致、
    - Hong

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

    嗨、关

    感谢您的答复。

    让我们举一个具体的例子。 假设我目前  在相应的输出文件夹中有一个名为 tiboot3-am62x-hs-evm.bin.map(用于 tiboot3-am62x-hs-evm.bin)的*。map、名为“output folder“、它测量构建过程输出路径。  

     

    ------------------------------------------------  tiboot3-am62x-hs-evm.bin.map ----------------------------------------------------------------  

    ImagePos 偏移大小名称
    00000000 00000000 0004c23e tiboot3-am62x-hs-evm.bin
    00000000 00000000 0000085c ti-secure-ROM
    0000085c 0000085c 0002a700 u-boot-spl
    0002af5c 0002af5c 00020020 ti-fs-enc.bin
    0004af7c 0004af7c 000006dc combined-tifs-cfg.bin
    0004b658 0004b658 00000694 sysfw-iner-cert
    0004bcec 0004bcec 00000552 combined-dm-cfg.bin

    ----------------------------------------------------  tiboot3-am62x-hs-evm.bin.map --------------------------------------------------------  

    如果我想执行 X509 更换操作、我该怎么办?

    比如、 CERT_CONFIG_OFFSET 的值是多少?  

    比如、 CERT_SIZE 的值是多少?   

    比如、我应该执行哪些地址范围的精确替换?

    谢谢。

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

    这一个更复杂的问题是什么?

    (Tispl.bin)

    ImagePos 偏移大小名称
    00000000 00000000 00117d2b ti-spl
    00000000 00000000 00117d2b 时基故障
    00000158 00000158 0000e544 ATF
    00000158 00000000 000006a4 ti 安全
    000007fc 000006a4 0000dea0 ATF-bl31
    0000e730 0000e730 000783f4 三通
    0000e730 00000000 000006a4 ti-secure
    0000edd4 000006a4 00077d50 tee-OS
    00086bc4 00086bc4 0002fc38 dm
    00086bc4 00000000 000006a4 ti-secure
    00087268 000006a4 0002f594 ti-dm
    000b68a4 000b68a4 00045e3c 端口
    000b68a4 00000000 000006a4 ti-secure
    000b6f48 000006a4 00045798 blob-ext
    000fc790 000fc790 00007d85 tifsstub-hs
    000fc790 00000000 00007d85 blob-ext
    001045c8 001045c8 000076b3 tifsstub-FS
    001045c8 00000000 000076b3 blob-ext
    0010bd2c 0010bd2c 000073cb tifsstub-gp
    0010bd2c 00000000 000073cb blob-ext
    00113164 00113164 000046af FDT-0
    00113164 00000000 000006a3 ti-secure
    00113807 000006a3 0000400c blob-ext

    似乎有一个“ti-secured"的“的块 导致了一个 X509? 对吗?

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

    另一个问题是:实际上我 在我的 SDK 11.0 中看不到任何原始/原始 binman_hsm_sign.sh , 因此我应该把 binman_hsm_sign.sh 放在哪里 。 因为我发现我也 不能得到 ${CERT_CONFIG}的参数详细信息。

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

    您将在常见问题解答中找到以下内容:

     【常见问题解答】如何在外部安全密钥服务器上对 u-boot 二进制文件进行签名 

    -
    - tiboot3.bin、tispl.bin 和 u-boot.img 的三个示例映射文件
    -三个示例命令 预生成的归档文件、映射文件的偏移量...
    -调用的三个示例日志

    是的参考脚本  

    -使用安全密钥服务器(中的第 40 行)上的密钥、使用预处理步骤中预生成的 x.509 有效载荷签署 x.509 证书 在常见问题解答中、需要移植通用 openssl 命令、以便通过 HSM 提供的 I/F(即 PKCS.11 API)与外部安全密钥服务器(即 HSM)连接。
    “openssl req -new -x509 -key ${key_name}-nodes -outform der -out ./${CERT_name}-config ./${CERT_config}-SHA512“
    -在预处理步骤中将新签名的 x.509 证书重新打包回预生成的工件。

    此致、
    - Hong