ZHCAEV6 December   2024 F29H850TU , F29H859TU-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1编程基础知识
  5. 2引言
    1. 2.1 硬件安全模块
    2. 2.2 ROM 引导加载程序
    3. 2.3 带有 X.509 证书的合并映像
  6. 3闪存内核实现
    1. 3.1 CPU1 固件升级 (HS-FS)
    2. 3.2 密钥预置(HS-FS 至 HS-KP)
    3. 3.3 CPU1 安全固件升级(HS-KP/SE 至 HS-SE)
    4. 3.4 HSM 固件升级(HS-KP/SE 至 HS-SE)
    5. 3.5 SECCFG 代码预置(HS-KP/SE 至 HS-SE)
  7. 4主机应用程序:UART 闪存编程器
    1. 4.1 概述
    2. 4.2 使用 Visual Studio 构建 UART 闪存编程器
    3. 4.3 使用 CMake 构建 UART 闪存编程器
    4. 4.4 数据包格式
    5. 4.5 内核命令
  8. 5示例用法
    1. 5.1 将闪存内核加载到器件中
      1. 5.1.1 硬件设置
      2. 5.1.2 运行 UART 闪存编程器
    2. 5.2 CPU1 器件固件升级(仅限 HS-FS)
    3. 5.3 将 HS-FS 转换为 HS-SE
    4. 5.4 加载基于 RAM 的 HSMRt 映像
    5. 5.5 密钥预置(HS-FS 至 HS-KP)
    6. 5.6 代码预置(HS-KP/SE 至 HS-SE)
  9. 6故障排除
    1. 6.1 一般信息
    2. 6.2 UART 引导
    3. 6.3 应用程序加载
  10. 7总结
  11. 8参考资料

密钥预置(HS-FS 至 HS-KP)

要在 HS-FS 器件的 CPU1 上执行密钥预置,请编译工程的 KP_APP 构建配置。可以通过右键点击工程,将鼠标悬停在 Build Configurations 上并选择 KP_APP 来完成此操作。

密钥预置将 HS-FS 器件转换为 HS-KP 器件,并且发生以下事件:

  1. UART 启动模式下的 BootROM 接收 UART 闪存内核并启动内核。
  2. CPU1 中的内核接收一个命令数据包,从而接收 HSMRt 映像。
  3. 内核准备作为合并映像的一部分从主机接收 X.509 证书。
  4. 内核确认传入证书具有适当的大小和格式,并得出传入映像的大小。证书暂时存储在 RAM 中。
  5. 内核将 HSMRt 映像存储在共享 LDAx RAM 中,并请求 HSM 进行身份验证。
  6. 身份验证成功后,HSM 开始在共享 LDAx RAM 中执行 HSMRt。
  7. 然后,内核接收一个命令数据包,从而接收 HSM 密钥。
  8. 内核接收密钥证书并放置在共享 LDAx RAM 中。
  9. 内核会通知 HSM 已收到密钥。
  10. 成功验证密钥证书的身份后,HSMRt 会将密钥编程到 OTP 中。
  11. 执行上电复位以将器件转换为 HS-KP。
警告: 需要将节 2.1中所述的 Keywriter 二进制映像用作 HSMRt。

请参阅节 5.5,了解在主机应用程序中执行这些操作的步骤。

节 2.1中所述,Keywriter 固件用于对客户密钥进行编程并从 HS-FS 转换到 HS-KP。Keywriter 固件支持对以下密钥类型和字段进行编程:

密钥

说明

KeyWriter 使用说明

对 HS-SE 器件的影响

SMPKH

次级制造商公钥哈希

SMPKH 长度:512 位

BCH 长度:64 位

  • 客户主密钥集:公钥哈希

  • SMPK 是 4096 位客户 RSA 公钥,用于验证引导映像中包含的 RSA 签名。

  • SMPKH 值:通过 SHA512 哈希算法生成 SMPK 的 512 位哈希,分为 256 位的两个部分。即 SMPKH_P1/SMPKH_P2
  • BCH 值:对于 SMPKH_P1 和 SMPKH_P2 的每个部分,使用算法 (288, 261, 7) 计算 32 位 BCH。此算法支持 3 位纠错
  • KeyWriter 强制执行的检查:不适用

当密钥配置字段 KEYREV=1 时,安全启动的活动密钥用于验证启动映像 x.509 证书的信任根

SMEK

次级制造商加密密钥

SMEK 长度:256 位

BCH 长度:32 位

  • 客户主密钥集:加密密钥

  • SMEK 是用于引导映像加密的 256 位客户加密密钥

  • SMEK 值:用于引导映像 AES-CBC 加密的初始 256 位对称密钥

  • BCH 值:对于 256 位 SMEK,使用算法 (288, 261, 7) 计算 32 位 BCH。此算法支持 3 位纠错

  • KeyWriter 强制执行的检查:不适用

当密钥配置字段 KEYREV=1 时,如果通过 x509 证书加密和启用,则安全启动的活动密钥用于为引导映像解密

BMPKH

备份制造商公钥哈希

BMPKH 长度:512 位

BCH 长度:64 位

  • 客户备份密钥集:公钥哈希

  • 注: 器件支持备份密钥对,该密钥对必须由 Keywriter 预置,并且在现场部署产品后,就可以通过在现场对 KEVREV 字段进行增量编程来激活。请注意,如果 Keywriter 未在 HS-FS 器件上预置备份密钥对,则在器件转换到 HS-SE 后,无法对备份密钥对进行编程。
  • BMPK 是 4096 位客户 RSA 公钥,用于验证引导映像中包含的 RSA 签名。

  • BMPKH 值:通过 SHA512 哈希算法生成 BMPK 的 512 位哈希,分为 256 位的两个部分。即 BMPKH_P1/BMPKH_P2

  • BCH 值:对于 BMPKH_P1 和 BMPKH_P2 的每个部分,使用算法 (288, 261, 7) 计算 32 位 BCH。此算法支持 3 位纠错

  • KeyWriter 强制执行的检查:不适用

当密钥配置字段 KEYREV=2 时,安全启动的活动密钥用于验证启动映像 x.509 证书的信任根

BMEK

备份制造商加密密钥

BMEK 长度:256 位

BCH 长度:32 位

  • 客户备份密钥集:加密密钥

  • BMEK 是用于引导映像加密的 256 位客户加密密钥

  • BMEK 值:用于引导映像 AES-CBC 加密的初始 256 位对称密钥

  • BCH 值:对于 256 位 BMEK,使用算法 (288, 261, 7) 计算 32 位 BCH。此算法支持 3 位纠错

  • KeyWriter 强制执行的检查:不适用

当密钥配置字段 KEYREV=2 时,如果通过 x.509 证书加密和启用,则安全启动的活动密钥用于为引导映像解密

KEYCNT

密钥计数配置字段

长度:16 位

  • 器件中预置的活动密钥集,支持以下值

  • 如果只有主密钥集是器件的记录计划 (SMPKH/SMEK)

  • 如果主密钥集和备份密钥集均为器件的记录计划(SMPKH/SMEK 和 BMPKH/BMEK)

  • 注: 该字段控制器件中的活动密钥集。如果用户希望启用备份密钥集,则强制性要求是预置备份密钥对并通过 Keywriter 将 KEYCNT 设置为 2。如果此字段设置为 1,则器件只能支持将主密钥集用于安全启动,并且以后无法更新该字段。
  • KeyWriter 强制执行的检查:不适用

器件中预置的活动密钥集可供密钥管理器用于解码和设置密钥。

KEYREV

密钥版本配置字段

长度:16 位

  • 器件中用于信任根的当前活动密钥版本,支持以下值

  • 用于安全启动的主密钥集 (SMPK/SMEK)(KeyWriter 的建议配置)
  • 用于安全启动的备份密钥集 (BMPK/BMEK)
  • KeyWriter 强制执行的检查:不适用

安全启动的当前活动密钥版本

MSV

特定于型号的值

长度:24 位

BCH:8 位

  • 24 位特定于型号的值,客户可以对 24 位值进行编程,以便在器件的生产流程或启动流程中区分使用相同 SoC 的产品型号。
  • BCH 值:对于 24 位 MSV,使用算法 (32, 24, 8) 计算 8 位 BCH。此算法支持 2 位纠错

对启动 ROM 没有影响,SW 需要理解此字段的使用方法

SWREV-SBL

SBL 软件版本

长度:64 位

  • 支持 32 个值(1 至 32 个状态,具有双重冗余)

  • 建议将初始值设置为 0x1

通过 SWRV 扩展为 SBL 映像 x.509 证书启用防回滚功能

SWREV-HSM

TIFS-MCU 软件版本

长度:64 位

  • 支持 32 个值(1 至 32 个状态,具有双重冗余)

  • 建议将初始值设置为 0x1

通过 SWRV 扩展为 TIFS-MCU 映像 x.509 证书启用防回滚功能

SWREV-APP

应用程序映像软件版本

长度:192 位

  • 支持 64 个值(1 至 64 个状态,具有双重冗余)

  • 建议将初始值设置为 0x1

对启动 ROM 没有影响,TIFS-MCU 需要理解此字段的使用方法

扩展 OTP

扩展 OTP 阵列长度:1664 位

供客户使用的 1664 位扩展 OTP 阵列

对启动 ROM 没有影响