1. RPMB 核心机制解析
RPMB(Replay Protected Memory Block)是eMMC/UFS存储设备中一块特殊的硬件安全区域,专门用于解决安全存储中的防回滚问题。与普通存储区域不同,RPMB通过以下四个核心机制构建起完整的安全防护体系:
1.1 认证写入机制
每次对RPMB的写入操作都必须附带HMAC-SHA256签名。这个签名由两部分组成:
- 主机端:使用预先协商的共享密钥(通常为256位)对写入内容进行HMAC计算
- 设备端:eMMC控制器内置的硬件安全模块会验证HMAC的正确性
具体数据包结构如下:
code复制+-------------------+-------------------+
| 数据帧 (256字节) | HMAC (32字节) |
+-------------------+-------------------+
只有当HMAC验证通过时,写入操作才会被执行。这种机制确保了:
- 只有持有正确密钥的主体才能修改RPMB内容
- 任何中间人攻击都无法篡改传输中的数据
实际工程中常见问题:HMAC计算时容易遗漏Nonce或计数器字段,导致验证失败。建议使用标准库如OpenSSL的HMAC_sha256()函数,并严格按照eMMC规范组织数据帧。
1.2 单调递增计数器
每个RPMB分区都维护着一个32位的写计数器(Write Counter),其运作特点是:
- 每次成功写入后自动+1
- 只能递增,不能递减或重置
- 读取操作不影响计数器值
计数器的工作流程:
code复制主机准备写入 -> 读取当前计数器值N ->
构造包含N+1的数据帧 -> 设备验证:
1. 数据帧中的计数器值 == 当前存储值+1
2. HMAC验证通过
-> 执行写入并将计数器更新为N+1
这个机制有效防御了以下攻击:
- 回放攻击:攻击者重放旧数据包会被计数器检测到(旧包的计数器值 ≤ 当前值)
- 状态回滚:即使物理上克隆整个eMMC,计数器的差异也会暴露克隆行为
1.3 Nonce随机数防护
每个读取操作都要求主机提供随机数(Nonce),响应数据会包含该Nonce并用HMAC保护。这个设计解决了:
- 防止重放读取响应(因为每次Nonce不同)
- 确保读取数据的实时性(与最新写入状态一致)
典型读取时序:
code复制主机生成Nonce -> 发送读取请求+Nonce ->
设备返回:数据 + Nonce + HMAC ->
主机验证Nonce匹配且HMAC正确
1.4 密钥管理架构
RPMB的安全根基在于密钥,主流方案采用三级密钥派生体系:
-
HUK (Hardware Unique Key)
每个SoC芯片熔丝中烧录的唯一密钥,不可读取,仅能用于硬件加密引擎 -
OEM_K1 (Manufacturer Key)
由HUK派生,公式:OEM_K1 = KDF(HUK, "
