HUK 派生

概述

HUK(硬件唯一密钥)指硬件唯一密钥,类似于人类指纹,具有硬件唯一性。Secure CPU 的 Boot ROM (信任根)是唯一能够访问根参数的软件。 可以基于 HUK 和 KDF(Key Derived Flow)派生出其他应用密钥。

密钥派生过程

为确保应用层密钥、凭证和其他机密或敏感数据在特定状态下仅能被特定设备唯一访问,Realtek Ameba 系列 SoC 支持通过 KDF 实现唯一绑定。 为防止重新派生出先前使用的密钥,仅受信任代码可访问所有源数据。

../../_images/huk_derivation_device_binding.svg

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_EN OTP 位写 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 派生方法

  1. {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 以重新派生新密钥。

  2. 烧录 HUK 相关 OTP 位:

    1. 生成随机种子并烧录至 OTP 0x310~0x31F

      efuse wraw 310 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      

      量产阶段烧录密钥后建议立即回读密钥来确认是否烧录正确。 若 HUK 已正确烧录,将 HUK_W_Forbidden_EN 置位为 0 ,禁止 HUK 被篡改:

      efuse wraw 364 1 7F
      
    2. 设置 HUK 派生使能位,将 HUK_DERIV_EN 位置 0

      efuse wraw 369 1 FB
      

      注意,HUK 派生使能后,任何应用软件和将无法读取 HUK。

  3. 复位设备。

  4. 获取 Boot ROM 阶段派生密钥:

    Boot ROM 阶段通过 Realtek KDF 派生的密钥仅能通过 secure sram 在受信任代码中访问。 基于安全考虑,KDF 所需的所有数据均不可被非受信代码访问。 Demo 路径: {SDK}\sources\boot\optee\optee_os\core\arch\arm\plat-realtek\main.c

  5. 实现 Optee-OS 阶段的密钥派生流程:

    平台在 Optee-OS 中获取 Derived Key 之后,Optee 的其它秘钥都会从 HUK 派生出来。