KNECC608中SecureBoot 本质是 “应用固件签名验证机制”,功能兼容ATECC608B。核心逻辑是:设备厂商在运行其主机应用固件前,在BOOT阶段用 “信任的私钥”--固化的32字节随机数 对其应用固件摘要进行签名,由存储其对应公钥的从端设备进行验证辨认真伪。主端在BOOT阶段下发SecureBoot指令后,KNECC608芯片(从端)用预存的 “验证公钥” 对主端应用固件的签名和/或HASH值进行验证 —— 只有签名合法(证明固件来自授权方)或哈希值匹配(证明未被篡改),主机跳出BOOT并允许其主机应用固件执行,否则触发安全锁死(如禁止启动、进入恢复模式)。该功能强调验证主端固件应用程序的合法性(运行于BOOT阶段),主端对从端的认证可以通过单独的MAC命令(08 指令)认证实现(运行于应用程序阶段)。
一、 SecureBoot 密钥对配置
1,签名私钥 与 验签公钥
SecureBoot 的安全性依赖于非对称密钥对(通常采用 ECC P-256 算法):
密钥类型 | 持有者 | 存储位置 / 方式 | 核心作用 |
签名私钥 | 设备厂商 / CA | 离线存储(如硬件安全模块 HSM、加密服务器) | 对发布的应用固件计算摘要并对其进行签名 |
验签公钥 | 安全芯片 | KNECC608“安全密钥槽”(配置为可读禁改或者禁读禁改) | 验证固件签名的合法性,确认主机运行应用固件来源可信合法。 |
2,公钥属性配置
存储公钥的数据槽slot08~slot15择其一(如slot09),通过(slotConfig,keyConfig)配置为ECC公钥,数据锁定后禁止更新,或者公钥写入后单独独立锁定(SlocLocked),禁止任何修改。
3,SecureBoot功能配置(全局配置项70-71)
| bit | 功能描述 |
|---|---|
| 15-12 | 指定存储验签公钥的sotID。(pubkey_sotID) |
| 11-08 | 指定存储签名值或者摘要的slotID,分别对应FullSig,FullDig模式有效(store_sotID) |
| 7-5 | 默认0 |
| 4 | 摘要加密随机性要求。1,表示输入摘要必须通过真随机nonce加密,且要求SecureBoot返回MAC;0,此时输入摘要否加密取决于SecureBoot命令,加密也无随机性限制。 |
| 3 | 关联密钥永久使能。只有SecureBoot命令成功,置位PersistentDisable的密钥才能使用。 |
| 2 | 默认0 |
| 1-0 | 00:SecureBoot功能关闭,不支持 01:FullBoth模式,要求摘要和签名同时下发 10:FullSig模式,首次SecureBoot执行成功后,签名存于store_sotID指定槽 11:FullDig模式,首次SecureBoot执行成功后,摘要存于store_sotID指定槽 |
二、SecureBoot 完整流程
从设备BOOT启动到设备应用固件被SecureBoot 命令验证激活,流程可分为激活前的签名阶段和设备上电后的启动验证阶段,两阶段通过 “固件签名 - 验证” 闭环确保安全。
阶段 1:应用固件激活前的 “签名预处理”(厂商侧)
应用固件激活前,需对固件进行签名处理,生成 “可被验证的固件包”,步骤如下:
- 固件哈希计算:对应用固件(如 MCU 的二进制镜像文件)进行 SHA-256 哈希运算,得到 32 字节的 “固件哈希值”(哈希值唯一对应固件内容,任何微小修改都会导致哈希值变化);
- 私钥签名:BOOT启动固件用 “签名私钥” 对应用固件哈希值进行 ECDSA 签名,生成 64 字节的 “应用固件签名值”(包含 R 和 S 参数,对应 ECC 签名格式);
- 固件包封装:将 “应用固件 + 应用固件哈希值 + 应用固件签名值” 打包为 “SecureBoot 固件包”,其中 “应用固件哈希值 + 应用固件签名值” 通常作为 “固件头部” 附加在应用固件前,方便BOOT启动时提取。其中的“固件头部”为认证的准备材料。
阶段 2:设备上电后的 “启动验证”(设备侧)
设备上电后,主控 MCU(如 Microchip PIC/AVR、ARM Cortex-M、STM32系列)不会直接执行应用固件,而是BOOT固件先触发 KNECC608的 SecureBoot 验证流程,步骤如下:
步骤 1:启动初始化与固件加载
- 设备上电,主控 MCU 先进入 “安全启动模式”(运行BOOT固件而非直接运行应用固件),通过 I²C接口与 KNECC608建立通信;
- 主控BOOT固件 从存储介质(如 Flash、EEPROM)中读取 “SecureBoot 固件包”,分离出 “应用固件”“应用固件哈希值”“应用固件签名值” 三个部分。
步骤 2:安全芯片硬件验证签名
主控 BOOT固件 将 “应用固件哈希值” 和 “应用固件签名值” 发送给 KNECC608,由芯片完成核心验证(避免主控MCU应用固件被注入被篡改导致验证失效):
- 芯片接收验证参数:KNECC608通过 “验证指令(Verify Command)” 接收输入:
- 待验证的哈希值(32 字节,即应用固件哈希值);
- 签名值(64 字节,即应用固件签名值);
- 验证公钥所在的密钥槽(如 Slot 9,预存了厂商的验证公钥)。
- 内部签名验证:
- KNECC608从指定密钥槽读取验证公钥;
- 调用芯片内置的 “ECDSA 验签引擎”,用验证公钥对 “应用固件哈希值” 和 “应用固件签名值” 进行验证 —— 核心是检查 “该签名是否由与验证公钥对应的私钥生成”(即确认固件来自授权厂商)。
- 哈希一致性校验(可选增强步骤):
为防止 “固件包中的哈希值被篡改”,部分场景下会增加一层验证:
主控 BOOT固件 将 “应用固件” 发送给 KNECC608,芯片通过内置 SHA-256 引擎重新计算固件哈希值(认证效率偏低);主控 BOOT固件对比本产品KNECC608芯片 “重新计算的哈希值” 与 “固件包中的哈希值”,若一致则确认固件未被篡改,否则认为MCU固件不安全,终止后续操作。
4.推荐加密输入和返回MAC方式验签
为防止假冒安全芯片滥竽充数(总是返回验证通过),或者非法弄到验签公钥(安全芯片存储的验签公钥没有配置为禁止读出)都能欺骗启动BOOT验证通过。故推荐SecureBoot 功能配置bit4置1,采用IO保护密钥的MAC认证模式,实现单指令的双向认证(认证效率高,安全),此处暂不详细展开,需要使能IO保护功能和IO保护密钥配置。
步骤 3:结果反馈与启动决策
- 若验证通过(签名合法且哈希一致):KNECC608向主控 MCU 返回 “验证成功” 响应(如特定状态码);主控 MCU 接收到成功信号后,加载并执行应用固件,设备进入正常工作模式。
- 若验证失败(签名非法或哈希不匹配):KNECC608返回 “验证失败” 响应;主控BOOT固件触发安全策略 —— 常见措施包括:禁止应用固件执行、点亮错误指示灯、锁定 Flash 写入权限、通过硬件引脚触发设备复位,或进入 “恢复模式”(仅允许通过特定安全通道更新固件)。
总结:SecureBoot 机制通过 “厂商私钥签名固件→芯片公钥验证签名→硬件级哈希校验” 的闭环,确保设备启动时仅运行授权且未篡改的固件。其核心价值在于:用硬件安全特性解决了软件级 SecureBoot 中 “公钥易被替换、验证易被绕过” 的痛点,为物联网设备提供了从启动阶段开始的 “根安全保障”,广泛适用于智能家居、工业控制、医疗设备等对固件安全性要求极高的场景。