密钥派生过程
为确保应用层密钥、凭证和其他机密或敏感数据在特定状态下仅能被特定设备唯一访问,Realtek Ameba 系列 SoC 支持通过 KDF 实现唯一绑定。 为防止重新派生出先前使用的密钥,仅受信任代码可访问所有源数据。
HUK 的派生经过两个阶段:
Boot ROM 阶段(上图左侧蓝色部分)由 Realtek 实现。
Bootloader 阶段(上图右侧灰色部分)由客户根据应用需求自己实现。
在 Boot ROM 阶段的密钥派生过程中,HUK 将受到以下保护措施以避免泄露:
在 RMA 状态下读取 HUK 会返回全
FF,软件无法读取客户预设的 HUK。有效保护派生密钥在 RMA 状态下不被泄露。当客户的派生密钥泄露时,意味着与这些密钥关联的数据存在暴露风险。客户可更新
manifest.json5中的huk_epoch以重新派生新密钥,并使用新密钥迁移数据。仅 Secure CPU Boot ROM 阶段可获取 HUK,后续阶段无法读取。
除 HUK 外,其他所有 KDF 输入均为已知。
若在某个阶段获取 HUK,整个密钥派生过程可被复制,所有临时密钥都将暴露。因此需要防止后续阶段获取 HUK。
软件在 Secure CPU Boot ROM 的密钥派生结束时,会将 Sticky 寄存器位写 1 来设置 HUK 为不可读状态,防止后续阶段读取 HUK。
该 Sticky 寄存器位仅可写入 1 不可写 0 ,当且仅当系统复位或从深度睡眠唤醒时清零。
HUK OTP
Secure CPU Boot ROM 通过物理 OTP 中的 HUK_DERIV_EN (物理地址 0x369[2])位决定是否启用 HUK 派生。
默认状态下 SoC 禁用 HUK 派生,启动时不会写入 Sticky 寄存器位,因此量产时烧录密钥后可立即回读密钥来确认烧录是否正确。
建议在确认 HUK 正确烧录后,再将
HUK_DERIV_ENOTP 位写0。重新上电后检测到 HUK 派生已启用,软件会在 Boot ROM 阶段写入 Sticky 寄存器位,使得 Secure CPU Boot ROM 阶段退出后无法读取原始 HUK。
名称 |
物理 OTP 地址 |
比特数 |
描述 |
|---|---|---|---|
HUK |
0x310~0x31F |
128 |
设备生产时写入的一次性烧录的随机数种子, 用于在启动阶段派生所有其他密钥和标识符 |
HUK_W_Forbidden_EN |
0x364[7] |
1 |
烧写后HUK将不可修改 |
HUK_DERIV_EN |
0x369[2] |
1 |
HUK派生使能 |
HUK 派生方法
在
{SDK}\component\soc\amebaxxx\project\manifest.json5中设置huk_epoch:img_id: 0, img_ver_major: 1, img_ver_minor: 1, huk_epoch: 1,
huk_epoch最大长度为 4 字节,用户可根据需要更新huk_epoch以重新派生新密钥。烧录 HUK 相关 OTP 位:
备注
使用 AT+SEC 命令前需在 menuconfig 中使能
CONFIG_ATCMD_SECURE,路径:CONFIG SHELL → Enable ATCMD SECURE(默认关闭)。生成随机种子并烧录:
AT+SEC=HUK_KEY,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
写入后命令会自动回读 OTP 并校验,若校验失败会返回错误信息。 若 HUK 已正确烧录,锁定 HUK 写保护,禁止 HUK 被篡改:
AT+SEC=HUK_LOCK
使能 HUK 派生:
AT+SEC=HUK_EN
注意,HUK 派生使能后,任何应用软件都将无法读取 HUK。
复位设备。
获取 Boot ROM 阶段派生密钥:
Boot ROM 阶段通过 Realtek KDF 派生的密钥仅能通过读取
DerivedKey数组在受信任代码中访问。 基于安全考虑,KDF 所需的所有数据均不可被非受信代码访问。用户只需要在 secure 代码(Secure CPU 的 Bootloader 或 Image3)中声明一个 16 字节的外部数组即可使用:extern uint_8 DerivedKey[16];
实现 Bootloader 阶段的密钥派生流程:
客户基于自有 KDF 或 Realtek 提供的
BOOT_ROM_KeyDeriveFunc函数在 Secure CPU 的 Bootloader 中为应用派生密钥。需要将上一步中获得的DerivedKey作为secret进行输入。 比如客户可以在生成密钥的过程中,添加label或者context,再调用哈希算法生成应用所需密钥。SHA2 等哈希算法不会暴露secret较为安全。