RPMBReplay Protected Memory Block)是 eMMC / UFS 中带认证和单调计数器的小型安全存储区域,用来防止攻击者把旧版本数据重新写回设备以回滚安全状态。

它常用于保存很小但安全敏感的状态,例如安全启动计数器、TEE 相关状态、密钥派生绑定信息或防回滚版本号。

核心问题

普通存储可以被复制和回写。攻击者如果能拿到旧镜像,可能把设备状态回滚到旧版本:

  • 把安全补丁后的状态回滚到漏洞版本。
  • 把失败次数、锁定状态或版本计数器恢复到旧值。
  • 用旧的授权状态绕过新策略。

RPMB 的目标不是加密大容量数据,而是让小块状态具备认证写入和防回放能力。

核心对象

对象含义工程关注点
RPMB key设备内写入的认证密钥通常一次性烧录,不能读出,写错可能不可恢复
write counter单调递增计数器防止旧写请求被重放
data frameRPMB 读写帧地址、数据、nonce、MAC、计数器
MAC消息认证码验证请求来自持有密钥的一方
nonce一次性随机数防止读取响应被复用
trusted software持有或派生 RPMB 访问能力的软件TEE、bootloader、安全服务

核心机制

RPMB 写入通常需要认证帧:

MAC = HMAC(key, address || data || write_counter || nonce)
  • key 是 RPMB 认证密钥,写入设备后通常不可读出。
  • address 是 RPMB 内部块地址。
  • data 是要写入的小块数据。
  • write_counter 是设备维护的单调计数器。
  • nonce 是本次请求相关的随机数或挑战。
  • HMAC 是基于密钥的消息认证码,用来证明请求没有被篡改且来自持有密钥的一方。

设备验证 MAC 和计数器后才接受写入,并递增计数器。攻击者即使保存了旧帧,也无法让旧计数器重新通过验证。

工程用途

  • 存放安全启动和 OTA 防回滚状态。
  • 给 TEE 或安全服务提供小容量可信状态存储。
  • 绑定设备身份、密钥使用状态或授权计数器。
  • 防止简单镜像回滚攻击。

工程上要明确 RPMB 密钥烧录时机、密钥来源、是否每台设备唯一、访问权限在哪个启动阶段建立,以及失败设备如何处置。

边界与常见坑

  • RPMB 不是大容量加密盘:容量小、访问慢,适合小状态,不适合日志或普通数据。
  • RPMB 密钥通常不能重置:烧错密钥可能导致该区域永久不可用。
  • RPMB 不自动保护 user area:它只能保护 RPMB 内的数据和计数语义,普通分区仍需文件系统、加密或签名保护。
  • 防回放不等于防篡改全部系统:启动链、TEE、密钥管理和访问控制仍要正确。
  • 计数器有寿命和协议限制:不能把 RPMB 当高频计数数据库使用。

相关术语