HSK 详细说明
20 Nov 2024
Read time: 3 minute(s)
HSK 的派生
HSK 只能从其他密钥派生。
- 派生 HSK 的密钥为父密钥。 父密钥可以为:
- eFuse 安全密钥
- 用户指定的其他密钥
HSKM 可以是用户指定的任意数据,但输出的 HSK 最大只能为 2048 bit。
- 用于派生 HSK 的数据称为 HSK Material (HSKM)。
HSK 的使用限制如下:
- 只能作为 CE 的密钥进行使用。
- 不能作为 CE 的数据输入。
HSK 的功能
硬件安全密钥可以解决密钥的本地存储安全问题。
将关键密钥保存在设备中时,密钥的本地存储存在以下安全问题:
- 如以明文保存,密钥不安全,容易被窃取。
- 如烧录到 eFuse,则需要使用较多的安全 eFuse 空间。
- 在需要动态生成密钥的场景中,安全 eFuse 无法满足动态生成密钥的需求。
使用硬件安全密钥,可以实现下列功能:
- RSA 私钥的安全存储
RSA 私钥可用作芯片/ 设备的身份认证,因此需要实现本地的保密存储。
- 数据的存储安全
eFuse 安全密钥中的 HUK 是芯片的硬件唯一密钥。每颗芯片都有一个硬件唯一密钥 (HUK)。通过 HUK 派生 HSK,可以实现 HSK 与当前平台的绑定,因此仅当前平台可以解密使用 HSK 加密后的数据。同时对应的 HSKM 可以与加密数据一起保存在本地设备,不影响数据的保密和安全。
硬件安全密钥解决密钥本地存储安全问题的方式如下:
- 对于固定密钥:使用 eFuse 安全密钥,先对 HSK 进行加密,再将加密后的数据 (HSKM) 保存在设备本地。需要使用时,将 HSKM 解密输出到安全 SRAM,得到 HSK。
- 对于动态密钥:使用 eFuse 安全密钥中的 HUK 派生 HSK。在需要动态生成 HSK 加密本地数据时,使用 TRNG 生成 HSKM,再使用 HUK 对 HSKM 进行解密输出到安全 SRAM,从而得到 HSK。HSKM 可以和数据一起保存在本地设备。
由于 eFuse 安全密钥仅 CE 可访问,软件以及其他硬件模块无法读写,因此本地设备保存 HSKM 不会导致 HSK 的泄露。
eFuse 安全密钥
eFuse 安全密钥是指 eFuse 中仅 CE 模块可访问,其他软硬件模块无法读写的 eFuse 密钥区域。
CE 模块支持下列 eFuse 安全密钥。
名字 | 大小 (BIT) | 描述 |
---|---|---|
PNK | 64 | Part Number Key,芯片型号密钥 |
SSK | 128 | 对称密钥,用于固件加密 |
HUK | 128 | 硬件唯一密钥,用于派生 HSK |
PSK0 | 64 | Partner Secret Key0,DES 密钥 |
PSK1 | 64 | Partner Secret Key1,DES 密钥 |
PSK2 | 64 | Partner Secret Key2,DES 密钥 |
PSK3 | 64 | Partner Secret Key3,DES 密钥 |
数据填充
CE 模块所支持的算法,多数是按照固定数据块的方式处理数据。如果实际待处理数据的长度不满足对齐要求时,需要进行数据填充。 不同算法的填充处理方式不同,CE 仅支持部分算法进行硬件填充处理。
CE 模块中各算法对数据块要求和数据填充的支持情况如下:
-
AES 算法
- 数据块大小 128 bits
- 要求 16 字节对齐
- 不支持 CE 硬件填充,需要用户进行数据填充
-
DES/TDES 算法
- 数据块大小 64 bits。
- 要求 8 字节对齐。
- 不支持 CE 硬件填充,需要用户进行数据填充。
-
RSA 算法
- 数据块大小和密钥长度与填充方法相关。
- 不支持 CE 硬件填充,需要用户进行数据填充。
-
SHA/MD5 算法
- 支持 CE 硬件填充。
- 非最后一笔数据,应 512bit/ 1024bit 对齐,具体看算法要求。
使用限制
Symmetric Secret Key (SSK) 是 eFuse 中用于对称加密算法的密钥。SSK 的用途和输出限制如下:
- 对固件进行解密。
仅在 BROM 阶段可用,BROM 退出后,SSK 被设置为仅能用于派生其他硬件安全密钥,并且仅能输出到安全 SRAM。
- 派生 HSK。
eFuse 安全密钥仅能用于派生 HSK。即当 CE 选择 eFuse 安全密钥作为密钥时, CE 的结果只能输出到安全 SRAM,防止 HSK 被解密到外部存储空间,从而导致密钥泄露。