HUK 派生
概述
HUK(硬件唯一密钥)指硬件唯一密钥,类似于人类指纹,具有硬件唯一性。Secure CPU 的 Boot ROM (信任根)是唯一能够访问根参数的软件。 可以基于 HUK 和 KDF(Key Derived Flow)派生出其他应用密钥。
密钥派生过程
为确保应用层密钥、凭证和其他机密或敏感数据在特定状态下仅能被特定设备唯一访问,Realtek Ameba 系列 SoC 支持通过 KDF 实现唯一绑定。 为防止重新派生出先前使用的密钥,仅受信任代码可访问所有源数据。
HUK 的派生经过两个阶段:
Boot ROM 阶段(上图左侧蓝色部分)由 Realtek 实现。
Optee-OS 阶段(上图右侧灰色部分)由客户根据应用需求自己实现。
在 Boot ROM 阶段的密钥派生过程中,HUK 将受到以下保护措施以避免泄露:
在 RMA 状态下读取 HUK 会返回全
FF,软件无法读取客户预设的 HUK。有效保护派生密钥在 RMA 状态下不被泄露。当客户的派生密钥泄露时,意味着与这些密钥关联的数据存在暴露风险。客户可更新
manifest.json中的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}\sources\firmware\amebaxxx_gcc_project\manifest.json中设置huk_epoch:img_id: 0, img_ver_major: 1, img_ver_minor: 1, huk_epoch: 1,
huk_epoch最大长度为 4 字节,用户可根据需要更新huk_epoch以重新派生新密钥。烧录 HUK 相关 OTP 位:
生成随机种子并烧录至
OTP 0x310~0x31F:efuse wraw 310 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
量产阶段烧录密钥后建议立即回读密钥来确认是否烧录正确。 若 HUK 已正确烧录,将
HUK_W_Forbidden_EN置位为0,禁止 HUK 被篡改:efuse wraw 364 1 7F
设置 HUK 派生使能位,将
HUK_DERIV_EN位置0:efuse wraw 369 1 FB
注意,HUK 派生使能后,任何应用软件和将无法读取 HUK。
复位设备。
获取 Boot ROM 阶段派生密钥:
Boot ROM 阶段通过 Realtek KDF 派生的密钥仅能通过 secure sram 在受信任代码中访问。 基于安全考虑,KDF 所需的所有数据均不可被非受信代码访问。 Demo 路径:
{SDK}\sources\boot\optee\optee_os\core\arch\arm\plat-realtek\main.c实现 Optee-OS 阶段的密钥派生流程:
平台在 Optee-OS 中获取 Derived Key 之后,Optee 的其它秘钥都会从 HUK 派生出来。