ZHCAC19A January   2023  – December 2025 MSPM0C1105 , MSPM0C1106 , MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G1518 , MSPM0G1519 , MSPM0G3105 , MSPM0G3106 , MSPM0G3106-Q1 , MSPM0G3107 , MSPM0G3107-Q1 , MSPM0G3505 , MSPM0G3506 , MSPM0G3506-Q1 , MSPM0G3507 , MSPM0G3507-Q1 , MSPM0G3518 , MSPM0G3518-Q1 , MSPM0G3519 , MSPM0G3519-Q1 , MSPM0L1105 , MSPM0L1106 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
    1. 1.1 关键概念
    2. 1.2 网络安全目标
    3. 1.3 平台信息安全机制
  5. 2器件安全模型
    1. 2.1 器件标识
    2. 2.2 启动时的初始条件
    3. 2.3 引导配置例程 (BCR)
    4. 2.4 引导加载程序 (BSL)
    5. 2.5 启动流程
    6. 2.6 用户指定的安全策略
      1. 2.6.1 引导配置例程 (BCR) 策略
        1. 2.6.1.1 串行线调试相关策略
          1. 2.6.1.1.1 SWD 安全级别 0
          2. 2.6.1.1.2 SWD 安全级别 1
          3. 2.6.1.1.3 SWD 安全级别 2
        2. 2.6.1.2 引导加载程序 (BSL) 启用/禁用策略
        3. 2.6.1.3 闪存保护和完整性相关策略
          1. 2.6.1.3.1 锁定应用 (MAIN) 闪存
          2. 2.6.1.3.2 锁定配置 (NONMAIN) 闪存
          3. 2.6.1.3.3 验证应用 (MAIN) 闪存的完整性
        4. 2.6.1.4 引导加载程序 (BSL) 安全策略
          1. 2.6.1.4.1 BSL 访问密码
          2. 2.6.1.4.2 BSL 读取策略
          3. 2.6.1.4.3 BSL 安全警报策略
      2. 2.6.2 客户安全代码 (CSC) 安全策略
        1. 2.6.2.1 CSC 强制存储体交换
        2. 2.6.2.2 CSC 强制防火墙
        3. 2.6.2.3 CSC 密钥写入 KEYSTORE
      3. 2.6.3 配置数据错误抵抗
        1. 2.6.3.1 由 CRC 支持的配置数据
        2. 2.6.3.2 16 位关键字段模式匹配
  6. 3安全启动
    1. 3.1 安全处理环境隔离
    2. 3.2 客户安全代码 (CSC)
      1. 3.2.1 安全启动流程
      2. 3.2.2 闪存映射
      3. 3.2.3 特性
        1. 3.2.3.1 CMAC 加速
        2. 3.2.3.2 非对称验证
        3. 3.2.3.3 KEYSTORE 及防火墙
        4. 3.2.3.4 CSC 性能
      4. 3.2.4 快速入门指南
        1. 3.2.4.1 环境设置
        2. 3.2.4.2 分步指导
        3. 3.2.4.3 CSC NONMAIN 配置
        4. 3.2.4.4 定制 CSC 示例上的更改
    3. 3.3 启动映像管理器 (BIM)
      1. 3.3.1 安全启动流程
      2. 3.3.2 闪存映射
      3. 3.3.3 快速入门指南
  7. 4安全存储
    1. 4.1 闪存写保护
    2. 4.2 闪存读取-执行保护
    3. 4.3 闪存 IP 保护
    4. 4.4 数据存储体保护
    5. 4.5 安全密钥存储
    6. 4.6 SRAM 保护
    7. 4.7 硬件单调计数器
  8. 5加密加速
    1. 5.1 硬件 AES 加速
      1. 5.1.1 AES
      2. 5.1.2 AESADV
    2. 5.2 硬件真随机数发生器 (TRNG)
  9. 6常见问题解答
  10. 7总结
  11. 8参考资料
  12. 9修订历史记录

闪存映射

图 3-4 展示了 CSC 安全启动中的详细闪存存储器映射。以下是 CSC 中各个部分的说明:
  • SECRET:SECRET 在特权执行流中可见,但将受到读取保护防火墙保护,从而使其对非特权流(CSC 和应用程序)的任何方面都不可见。SECRET 区域可用于存储应在运行时加载到 KEYSTORE 中的非易失性密钥。因此,非特权代码将能够使用这些密钥,但不具有读取访问权限。用户也可以自定义它以包含 CMAC 标签及密钥等其他信息。
  • 可锁定闪存:可锁定的闪存针对需要由特权状态写入并由非特权流读取但未修改的关键信息提供动态写保护。此区域中会到来的两个典型内容是安全计数器(回滚保护)、密钥库哈希表和映像哈希。请注意,可锁定内容将同时编程到闪存 bank0 和 bank1 中的 CSC 区域,以确保两个存储体应用程序能够以相同的方式访问该区域。
  • CSC 中断向量:这些是客户安全代码的中断向量。如果发生 BOOTRST 或 SYSRST,该中断向量表将始终是从闪存运行的第一个内容。这是强制执行的,因为 VTOR 将在两个复位中被清除,这意味着将使用 0x0000(将指向逻辑组 0,其中存在不可更改 CSC 的副本)。
  • CSC 代码:主代码和安全基元是客户安全代码的大量内容。这与中断向量一起在两个组之间重复。主存储体和辅助存储体上的映像应该相同,只是对代码的引用就像代码从 0x0000 运行一样。在存储体交换期间,在 INITDONE 触发 SYSRST 之后,程序将始终从逻辑存储体 0(逻辑 0x0000 地址)运行。FLASHCTL 将根据存储体交换策略配置将地址 0x0000 映射到 PB0 起始地址 0x0000 或者 PB1 起始地址 0x0000。

    注: 在可交换存储体的配置中,防火墙保护会自动镜像到两个存储体。

下面是应用程序映像的各个部分:

  • 映像标头、映像 TLV 和映像尾部信息:这些部分由 MCUBOOT 提供的签名工具 imgtool 生成(请参阅 <mspm0_sdk_path>\source\third_party\mcuboot\scripts 中的 python 脚步)。这些内容将在 CCS 编译后处理步骤中生成并合并至编译后的应用程序映像中。MSPM0 SDK 中有一个 customer_secure_sample_image 示例,展示了如何在 CCS 中构建已签名的映像。以下是这些图像部分的说明:
    • 图像标头:应用程序映像的标头信息,包括标头魔数 (0x96F3B83D)、映像尺寸和映像版本。它位于应用程序中断向量之前的地址 0x100 字节(默认)。
    • 映像 TLV:MCUBOOT 定义了包含映像元数据(放置在映像末尾之后)的类型长度值记录 (TLV)。MSPM0 CSC 中定义的 TLV 包括:TLV 魔数 (0x6907)、映像哈希、ECDSA 公钥哈希和 ECDSA 签名。要了解更多详细信息,请参阅 main · mcu-tools/mcuboot · GitHub 上的 mcuboot/docs/design.md
    • 映像尾部信息:一个位于图像闪存区域末尾的 16 字节魔数内容。

    注: 只会对应用中断向量起始地址和图像 TLV 起始地址中的图像内容进行 SHA256 验证。

  • 应用程序中断向量:这些是应用程序使用的单独中断向量。在 CSC 跳转到应用程序期间,向量表偏移寄存器 (VTOR) 指向存储器中的该位置,因此未来所有中断都会发生,并且没有指向这组中断向量的复位链接。起始地址需要使用 32 字节对齐方式。


 CSC 闪存映射

图 3-4 CSC 闪存映射