查看: 1572|回复: 0

[分享] LPC55Sxx 安全启动

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32030
    最后登录
    2024-4-26
    发表于 2020-8-31 15:53:36 | 显示全部楼层 |阅读模式
    LPC55Sxx 安全启动


    1 简介
    LPC55xx/LPC55Sxx是一款基于Arm Cortex® M33 的微控制器,可用于嵌入式应用。
    该款器件提供:
    • 高达 320 KB 片上 SRAM
    • 高达 640 KB 片上闪存
    • 高速和全速 USB 主机
    • USB 全速器件接口支持免晶振设计
    • 5 个通用定时器
    • 1 个 SCTimer/PWM
    • 1 个 RTC/报警定时器
    • 1 个 24 位多速率定时器 (MRT)
    • 窗口看门狗定时器 (WWDT)
    • 8 个灵活的串行通信外设,均可做为 USART、SPI、I2C 或 I2S 接口
    • 1 个高达 2.0 M 采样/秒的 16 位 ADC 及温度传感器
    LPC55S/LPC55Sxx 器件支持使用 PRINCE 加密引擎对片上闪存进行实时加密和解密。以下几节阐述了使用 LPC55Sxx PRINCE 对片上闪存内容进行数据
    加密的方法。
    2 安全启动选项
    本应用笔记介绍 LPC55Sxx 的安全启动功能。以下几节概述了安全启动和密钥配置的详细信息。LPC55Sxx 允许公钥签名映像启动。安全启动 ROM 支持三种类型的安全保护模式:使用签名映像安全启动、从加密 PRINCE 闪存区域启动,以及使用设备标识符组合引擎 (DICE) 的 CDI 计算安全启动。这些选项中的每一项均具有与可制造性、固件更新方案以及攻击保护级别相关的属性。


    ROM 支持从内部闪存中的加密 PRINCE 区域进行启动。加密映像可以有力保护知识产权。
    ROM 支持公钥和映像的撤销,也就是说,除非它们是特定版本,否则不允许进行新的更新。这是回滚保护的原因启动 ROM 支持预配置 TrustZone-M 设置、启用 DICE 以及冗余映像支持(回滚映像)。
    1.png
    2.png

    本应用笔记介绍不同类型的非安全启动和安全启动选项。
    • 非安全启动映像
    − 未签名纯文本映像
    − 未签名纯文本 CRC 映像
    • 安全启动映像
    − 公钥签名映像
    ○ 多达 4 个信任根 (RoT) 密钥
    ○ 多达 16 个具有映像撤销功能的映像密钥证书
    • 从内部闪存中的加密 PRINCE 区域启动
    • 支持预配置TrustZone-M®
    设置
    2.1 未签名纯文本映像
    未签名纯文本映像是映像的基本类型。这是由 IDE 为 LPC55Sxx 生成的原始格式。
    3.png
    2.2 未签名纯文本 CRC 映像
    LPC55xxx 非 S 版本支持未签名纯文本 CRC (UPC)映像。安全器件 (LPC55Sxx) 的开发生命周期状态支持 UPC 映像。这些映像包含在整个映像上计算所得的 CRC32 字段(不包括 CRC32 字段)。
    4.png
    2.3 签名映像
    LPC55Sxx 器件支持使用 RSASSA-PKCS1-v1_5 签名验证启动 RSA2048 签名映像。LPC55Sxx 器件支持 2048 位或 4096 位 RSA 密钥和 X.509 V3 证书。
    映像验证是一个两步过程。第一步是验证插入映像中的 X.509 证书。它包含第二步中用于验证整个映像(包括证书)的映像公钥,以允许客户添加其他 PKI 结构。
    签名映像启动最多可支持 4 个信任根 (RoT) 密钥和 16 个具有映像撤销功能的映像密钥证书。签名映像格式显示签名映像的布局。

    ROM 执行以下映像验证。
    1.验证映像中内嵌的 X.509 数字证书。
    2.使用 Image_key(公钥)验证映像签名。
    • ROM 会从映像中内嵌的 x509 证书验证并提取映像公钥。
    ROM 使用“带有 RSA 签名的 SHA-256”进行映像验证。
    • 受保护闪存区域 (PFR) 中 SECURE_BOOT_CFG 控制字的“RSA4K”字段决定 RSA 密钥的大小。
    • 默认值为 2048 位(公钥模数大小)。
    • 如果 RSA4K 位设置为非零值,则将强制使用 4096 位密钥。
    2.3.1 映像撤销
    本节将详细介绍映像撤销方案。证书内有一个包含证书序列号的字段。
    芯片内有受保护闪存区域 (PFR) 中一些位。如果数字证书的序列号(因已签名而可信)与 PFR 中的位不一致,则映像验证过程将失败。序列号可以是更高版本(高出 1 个版本),但不能是较早版本,即序列号值可以向前增加但不能回滚。
    • 可以通过撤销映像密钥证书来撤销已签名的发布映像。
    • X.509 映像密钥证书中的序列号字段(20 个八位字节)用于撤销逻辑。
    − 最左边的 4 个八位字节必须有两个强制性字节 0x3c、0xc3,然后是 16 位撤销标识符(小端字节顺序)。
    − 例如,以下命令可生成具有撤销标识符 0x0000 的 X.509 证书。

    证书结果:序列:3C:C3:00:00: AB : AB : AB : AB。
    − 可能仅有 17 个撤销 ID。(0x0、0x1、0x3、0x7、0xF、0x1F、0x3F、0x7F、0xFF……0xFFFF)。
    • LPC55Sxx 在 PFR 的客户现场可编程区域 (CFPA) 中包含撤销标识符 (IMAGE_KEY_REVOKE)。
    • 固件更新应用程序负责更新 IMAGE_KEY_REVOKE。

    − 从低位 0 至 16 开始的每次撤销都应置 1 位。
    ○ 0b0 - >0b1 -> 0b11->0b111 ......
    − 首先应将固件写入闪存,然后则应更新 IMAGE_KEY_REVOKE。
    • ROM 使用以下步骤验证映像公钥:
    − 通过验证证书的 RSA2K 签名进行证书验证。
    − 证书中的撤销 ID 应当与 IMAGE_KEY_REVOKE 字段相同。
    − 为避免在固件更新之后、IMAGE_KEY_REVOKE 更新之前发生断电而导致器件死机,LPC55Sxx 启动 ROM 允许向前滚动(仅 1 位),并且不能回滚。

    2.4 加密 PRINCE 闪存区域
    LPC55Sxx 支持通过 PRINCE 对/从内部闪存进行实时加密/解密。
    可对存储在片上内部闪存中的数据进行实时加密。LPC55Sxx 支持 3 个区域,从而可允许来自独立加密基础的多个代码映像共存。
    每个 PRINCE 区域均具有一个通过密钥总线接口(不可通过软件访问)从片上 SRAM PUF 提供的密钥。PRINCE 加密算法不会增加延迟。

    2.5 受保护闪存区域
    LPC55Sxx 在受保护闪存区域中包含启动 ROM 的配置。此受保护区域包含启动配置、安全策略、PRINCE 设置等设置。
    受保护闪存区域分为四个区域:
    1.客户现场编程区域 (CFPA)
    • 映像撤销
    • RoT 密钥撤销
    2. 客户制造编程区域 (CMPA)
    • 启动配置
    • RoT 密钥表哈希
    • 调试配置
    • Prince 配置
    3.PUF 密钥存储
    4.恩智浦唯一 ID 和制造系统

    备注
    0x9xxxx 地址用于 LPC55S6 和 55S2x 器件。0x3xxxx 地址用于 LPC55S1x 器件。FLASH_REMAP 仅对
    LPC55S1x/551x 器件有效。

    2.5.1 CMPA 页面
    如需加密闪存,CMPA 页面包含安全启动配置和 PRINCE 配置寄存器中的签名映像设置。
    表 1.SECURE_BOOT_CFG


    此页面可以在制造商对其编程后锁定。实现方法是将 CMPA 页面的 SHA 256 摘要写入 CMPA 区域的 SHA 存储器空间。
    2.5.2 CFPA 页面
    CFPA Ping 和 Pong 页面用于选择具有更高版本号的实际 CFPA 页面。
    CFPA 页面通过暂存页面使用以下步骤进行更新:
    1.应用程序代码使用闪存 API 更新位于受保护区域之外的暂存页面。
    2.复位内核以使页面有效。
    3.在后续启动时,ROM 检查暂存页面是否有效并且具有更高版本。ROM 擦除两个受保护页面(ping、pong 页面)中较早的一
    个,并将暂存页面的内容复制到被擦除的区域。
    4.加载最新版本的 CFPA。
    CFPA 页面包含用于映像撤销、RoT 密钥撤销和调试验证过程设置。
    表 2.ROTKH_REVOKE

    可能仅有 17 个撤销 ID。(0x0=0b0、0x1=0b1、0x3=0b11、0x7=0b111、0xF=0b1111…… 0xFFFF=0b1111 1111 1111 1111)
    3 密钥和证书
    公钥基础设施 (PKI) 设置为加载签名映像和证书分发。
    预期所有证书均为 DER 格式的 X.509 v3 证书。
    密钥文件以 PEM 或 DER 格式作为私钥包括在内,其中包含所选证书链(证书用于签名映像)中最后一个证书的私钥。
    密钥可以是 2048 位(默认)或 4096 位。
    3.1 私钥生成

    以下是如何使用 openssl v 1.1.0 准备密钥和证书的示例。

    3.2 证书签名请求

    创建私钥后,将创建证书签名请求 (csr)。

    3.3 自签名证书
    自签名证书签名为 CA:FALSE。
    X.509 映像密钥证书中的序列号字段(20 个八位字节)用于撤销逻辑。最左边的 4 个八位字节必须有两个强制性字节 0x3c、0xc3,
    然后是 16 位撤销标识符(小端字节顺序)。
    >>>>>>>未完

    完整版本下载入口



    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 17:01 , Processed in 0.126678 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表