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.

[参考译文] AM6421:OTP KeyWriter 无法对自定义证书进行编程

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1505548/am6421-customized-certificate-can-not-be-programmed-by-otp-keywriter

器件型号:AM6421

工具/软件:

尊敬的 TI 专家:

我使用 MCU SDK: mcu_plus_sdk_am64x_10_00_00_20。 并在此处安装 OTP KeyWriter: ti.com/secureresources/AM64X-HS-RESTRICTED-SW?

我自定义了'MPK'和'MEK'以生成我的 X509证书、但未能通过 OTP KeyWriter 对其进行编程。 以下是控制台的输出:

'

正在启动密钥写入
启动启用的 VPP
启用 VPP 后

DMSC 固件版本10.0.8-v10.00.8_am64x_keywrite
DMSC 固件版本0xA
DMSC ABI 修订版4.0

找到的密钥证书:0x70018600
Keywriter 调试响应:0x80020
发生错误...

'

错误位19显示"验证 SMPK 单个证书时出错"。 但我已经检查了所有内容、任何签名和加密过程看起来都可以。

我想知道我还能做什么吗? 或者是否有任何诊断工具可用于挖掘 x509证书中的错误。

我已经通过以下命令成功验证了证书:

'OpenSSL x509 -in final_certificate.bin.se -inform der -noout -text > final_certificate.bin.se.verify.results'

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

    您好:

    您使用的 OpenSSL 版本是什么? 您是否也可以共享用于生成证书的命令?

    谢谢!

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

    您好、Prashant、

    感谢您的关注。

    我的 OpenSSL 版本是:3.2.4

    由于公司的签名要求、我们的开发团队无法直接获取签名私钥。 我们只能提供要签名给公司的字段以供签名并将其嵌入到最终的 x509证书中。

    以下是命令:

    ./gen_keywr_cert.sh -t tifek/ti_FEK_public.pem --mSv 0xC0FFE -a keys_devel/aes256.key --smpk-def --smek keys_devel/aes256.key --keycnt 1 --keyrev 1.

    以及对"gen_keywr_cert.sh"进行的更改:

    'AES256.key.hash.sigraw'是签名的 AES256.key.hash。

    "keys_devel/ARK_AM64_rot.pubkey"是公钥。

    此命令将生成 x509证书、但使用默认 SMPK 密钥进行签名。 因此、之后、我们将提取 TBS 字段、并由我们公司签名、替换相应的签名字段。  

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

    感谢您的澄清、Jenny! 我将在今天的 EOD 之前回复您。

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

    您好、Prashant、

    感谢您的关注、尽管我已经将问题切入根部。 "keys_devel/ARK_AM64_rot.pubkey"与"gen_keywr_cert.sh"所需的 publickey 之间存在差异

    具体而言、需要添加额外的"rsaEncryptionDes "条目。

    通过这种更改、OTP KeyWriter 可以成功对 OPT 进行编程。 我今天将尝试保护引导 SBL。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    通过此更改、OTP KeyWriter 可以成功地对 OPT 进行编程。 我今天将尝试保护引导 SBL。

    好极了。 如果您需要安全启动方面的任何帮助、请告诉我。

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

    您好、Prashant、

    我确实需要您的帮助来确保安全启动 SBL。

    我尝试在 SBL 的 x509中修改'publicke'和'TBS 的签名'、但无法启动器件。  

    下面是"parse_uart_boot_socid.py"的输出、我想 opt 已成功编程、因为"EC 客户 MPK 哈希"与我的客户哈希匹配。

    $ python parse_uart_boot_socid.py socid.txt
    ----------------------------
    SOC ID 标头信息:
    ----------------------------
    第2章:我的心
    ----------------------------
    SOC ID 公共 ROM 信息:
    ----------------------------
    第1章:一个秘密
    第二十六章
    DeviceName:am64x
    设备类型:HSSE
    DMSC ROM 版本:[0、2、0、0]
    R5 ROM 版本:[0、2、0、0]
    ----------------------------
    SOC ID 安全 ROM 信息:
    ----------------------------
    SEC SubBlockId:2.
    第166章,我是你的女人
    SEC Prime:0
    安全密钥版本:1.
    SEC 密钥计数:1.
    SEC TI MPK 哈希:b018658ad99dc903c8bfb27b12751099920a042ad1dfea7b7ba57369f15546de285edde6a7b39a8bdc40a27b237f8fb1e57f245e80b929c1e28c0242c6
    SEC 客户 MPK 哈希:d248d61ff31637daa7e8053e83e8ea3a868c39319783620af7b0dd74c8ef5c97d2e0df51c12b0654a56dfca1a565b1601492f16c7595278003e59a72267ae3
    SEC 唯一 ID:13f8f762ee412cd0d0d0c741127b1bf893c841afe076755aee1b6c5bf40040374c

    我将公钥替换为"dd if=./ARK_AM64_rot.pubkey of=sbl_qspi.Debug.hs.tiimage bs=1 see=376 count=550 conv=notrunc"

    在对提取的 TBS 区域签名后、我将 TBS 签名替换为"dd if=sbl_tbs_certificate.bin.hash.sigraw of=sbl_qspi.Debug.hs.tiimage bs=1 see=1588 count=512 conv=notrunc"

    我上传了重要文件、包括、如果有任何问题、您是否会帮助审核?

    sbl_qspi.Debug.hs.tiimage.before_customized -- SBL 由 TI-Dummy MPK 生产

    sbl_qspi.Debug.hs.tiimage --------------------------------  SBL 由我修改

    temp_cert739 ------------------------------------------------------------ X509证书配置

    ARK_AM64_ROT.pubkey------------------------------------ 公钥

    是否有办法知道 RBL 为何无法引导 SBL?

    e2e.ti.com/.../Debug_5F00_for_5F00_sbl_5F00_secure_5F00_boot.zip

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

    如果您仅操作证书、则大小不应不同。

    ❯ /usr/bin/ls -l sbl_qspi.Debug.hs.tiimage*
    -rw-r--r-- 1 p-shivhare p-shivhare 388552 Apr 25 17:46 sbl_qspi.Debug.hs.tiimage
    -rw-r--r-- 1 p-shivhare p-shivhare 383208 Apr 25 17:43 sbl_qspi.Debug.hs.tiimage.bk

    出现大小差异的原因似乎是在您自己签名的密钥的最后一个证书中附加了额外的证书。

    ❯ binwalk sbl_qspi.Debug.hs.tiimage
    
    DECIMAL       HEXADECIMAL     DESCRIPTION
    --------------------------------------------------------------------------------
    0             0x0             Certificate in DER format (x509 v3), header length: 4, sequence length: 2012
    383208        0x5D8E8         Certificate in DER format (x509 v3), header length: 4, sequence length: 1680
    
    ❯ binwalk sbl_qspi.Debug.hs.tiimage.bk
    
    DECIMAL       HEXADECIMAL     DESCRIPTION
    --------------------------------------------------------------------------------
    0             0x0             Certificate in DER format (x509 v3), header length: 4, sequence length: 2012

    您能否删除此额外证书并尝试引导?

    此外、您应该创建 OpenSSL 配置文件并 对其签名、而不是直接处理证书字节。

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

    您好、Prashant、

    非常感谢您的帮助、在我修复了额外的证书问题后、SBL 可以 Ben 引导。