安全机制
概述
本文介绍 RTL8752H 芯片的安全机制以及使用方法,主要从以下几个方面展开介绍:加密 Image、Key 安全存储、SWD 接口控制 和 Password 调试。
加密 Image
加密 Image 的方案是基于 Flash Security 开发的。APP Image 可以根据需求选择加密与否。
Flash Security (简称 Flash-Sec),又称作 Flash on-the-fly,是一种能让 CPU 直接访问加密 flash 数据的技术。其原理为,CPU 在访问 Flash-Sec 加密过的数据时,会先通过 Flash-Sec 硬件模块解密该数据,再实际访问解密后的数据。
Flash-Sec 使用的是 AES 对称加密算法,加密模式为 CTR Mode,加密 key 的长度为 128 bit。Flash-Sec 至多支持配置 8 个 Flash-Sec Region。其中,Patch image 默认使用 Region #0,App image 默认使用 Region 1。
备注
需要注意的是,每个 Region 的首地址必须 4KB 对齐。
在 IC 启动过程中,会对加密过的 image 进行 Flash-Sec 初始化(做 region 配置,key 设定等操作)。如果 key 没有烧录或者烧录的 key 和加密的 key 不匹配,都会导致 Flash-Sec 的解密失败。
Key 安全存储
对于 AES 对称加密算法,加密和解密用的是同一把 key,长度为 128bit,所以需要特殊的机制来保护加密 key 不被泄露。加密 key 经过加密 Tool 加密一次得到 key’,key’ 再发布给工厂烧录到 IC Flash 中。
烧录的过程中,烧录 Tool 会对 key’ 解密得到原始的 key,同时会读取 IC 的 UUID 和 key 组合成 key’’ 并写入,以保证每块 IC 中烧录的 key(key’’)值都是不同的。这有助于增强加密过程的安全性并减小密钥泄漏的风险。
SWD 接口控制
SWD 接口作为重要的调试接口,对调试程序起了很大的作用。但是同样也会增加暴露程序数据和代码的风险。
所以安全机制提供了控制 SWD 接口的方法。有 3 种控制方式:开,关和 Password 控制。其中 Password 控制表示需要通过 HCI UART 输入正确的 Password 才能打开,否则是关闭状态。
Password 调试
Password 和加密 key 类似,也是烧录在 IC 的 eFuse 中。如果某个功能是设定成 Password 控制,就需要通过 HCI UART 输入正确的 Password,然后 IC 会自动重启并检查 Password 是否正确,如果正确则打开该功能。每次 IC 重启都需要重新输入 Password 才能打开该功能。
安全级别
RTL8752H 提供 3 种 安全级别 :0,1 和 2。数字越高安全级别越高,越高的安全级别可能会对调试或者重烧 eFuse 有影响。以下是不同的安全级别下各个模块的功能开关控制。量产建议设定为 2 级。
Security Level |
SWD Control |
eFuse Read |
eFuse Write |
---|---|---|---|
0 |
Enable |
Enable |
Enable |
1 |
Enable by password |
Enable by password |
Enable |
2 |
Enable by password |
Enable by password |
Enable by password |
使用示例
配置加密 Key
编辑 tools\keys\key.json
文件,配置 OCEK 和 PASSWORD。该文件里的 OCEK 和 PASSWORD 是明文,需要注意保护该文件。在请 Realtek 做 IC 不良分析时,需要提供此处的明文 PASSWORD。
{
"OCEK": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
"PASSWORD": "00112233445566778899aabbccddeeff"
}
生成加密 APP Image
要生成 Flash-Sec 加密的 APP image,需要做以下修改。
打开 Flash-Sec 加密 APP 的宏,将宏
FEATURE_FLASH_SEC
设定为 1。默认设定是 0,表示非加密。打开 Flash-Sec 加密 APP 的宏
Keil 工程:修改
after_build_common.bat
文件,确保将--aesmode CTR
加在prepend_header
命令的末尾。after_build_common.bat 修改
GCC 工程:修改
Makefile
文件,确保将 --aesmode CTR 加在 prepend_header 命令的末尾。
烧录 eFuse
危险
RTL8752H 烧录 eFuse 时必须供给 2.5V(±10%)的电压,以避免 eFuse 损坏。
RD 端配置 生成用于烧录的 eFuse 文件。
首先确保 MP Tool 处于调试模式:可通过 MP Tool 选择
进入。生成用于烧录的 eFuse 文件
在 RD Setting 页面,点击 Browse 按钮导入
key.json
文件。选择项使用的 Security Level。
点击 Confirm 按钮,生成
EfuseWrite.json
,该文件可以提供给工厂烧录。
工厂端烧录 eFuse。
首先确保 MP Tool 处于量产模式:可通过 MP Tool 选择
进入。选择 eFuse 烧录文件
在 MP Setting 页面勾选 Efuse,并 选择 eFuse 烧录文件。
点击
进行烧录。
通过 Password 调试
为了安全起见,当安全级别设置为 1 或 2 时,SWD 接口会被禁用。然而,开发人员可以使用密码调试功能重新激活 SWD 接口。这允许授权的开发人员在保持系统整体安全性的同时,重新获取对 SWD 接口的访问权限,以进行调试目的。

使用 Password 解锁 SWD
步骤如下:
在调试模式 RD Download 界面打开串口。
选择 Password 。
输入
key.json
文件中的原始明文 PASSWORD。点击 Unlock 按钮。
之后 IC 会重启。
重启之后 SWD 便被打开。