一、RPMB 简介
RPMB(Replay Protected Memory Block)是 eMMC 中的一个具有安全特性的分区。其主要功能是通过 HMAC SHA - 256 和 Write Counter 来保障数据的安全性,防止数据被非法篡改。在实际应用场景中,常用于存储如指纹数据、安全支付相关key、手机指纹支付公钥、序列号等对安全性和防篡改要求较高的数据。
RPMB作为eMMC所包含的多个分区之一,在与eMMC进行交互时,存在着严格的数据校验和权限控制机制。当有数据要写入自身时,RPMB会要求eMMC对数据合法性进行校验,并且只有指定的Host才被允许执行写入操作;而在数据被读取时,RPMB会提供签名机制,以此来保证Host所读取到的数据是自身内部的真实数据,而并非是被攻击者伪造的数据。
写入RPMB
-
请求与随机数生成:Host 向 eMMC 发起读 RPMB 请求,并生成一个 16 bytes 的随机数发送给 eMMC。
-
数据读取与签名计算:eMMC 从 RPMB 中读出请求数据,使用 Secure Key 通过 HMAC SHA - 256 算法计算读取数据与接收到的随机数拼接后的签名,然后将读取数据、随机数以及计算得到的签名一并发送给 Host。
-
数据验证:Host 接收到数据、随机数和签名后,先比较随机数是否与自己发送的一致。若一致,则用相同的 Secure Key 通过 HMAC SHA - 256 算法对数据和随机数组合再次签名,若该签名与 eMMC 发送的签名相同,则确定数据是从 RPMB 中读取的正确数据。
读取RPMB
-
Write Counter 读取:Host 按照读数据流程读取 RPMB 的 Write Counter。
-
数据签名与发送:Host使用 Secure Key 通过 HMAC SHA - 256 算法计算需要写入的数据与Write Counter 拼接并计算签名,然后将数据、Write Counter 以及签名一并发给 eMMC。
-
写入鉴权与操作:eMMC 接收数据后,对比 Write Counter 是否与当前值相同。若相同,则对数据和 Write Counter 的组合进行签名,并与 Host 发送的签名比较,若签名相同则鉴权通过,将数据写入 RPMB。
二、Write Counter - Replay Protect 原理
在 eMMC 的产品生产流程中,针对每一个产品都会生成唯一的 256 位 Secure Key,并将其烧录至 eMMC 的 OTP 区域(此区域仅允许一次性烧写)。与此同时,Host 也会在安全区域(如 TEE)留存该 Secure Key。
在 eMMC 内部,设有 RPMB Write Counter。每当有一次合法的写入操作在 RPMB 中执行时,Write Counter 便会自动递增 1。借助 Secure Key 与 Write Counter 的协同运作,RPMB 能够达成数据读取与写入的重放保护(Replay Protect)功能。
其原理在于,每次成功写入后 Write Counter 都会加 1。即便信息被恶意截取,攻击者由于无法伪装成正常写入的 fake 数据,便妄图通过不断向 RPMB 发送截取到的数据来进行破坏。然而,由于截取信息成功写入后 Write Counter 已然加 1,所以此时任何重复写入的破坏企图都会在 RPMB 处理阶段被拒绝,从而有效保障了数据的安全性与完整性。
三、How to program RPMB key?
1.默认方案为,若开启宏 CFG_TEE_SUPPORT && CFG_RPMB_SET_KEY,会在首次开机的 preloader 阶段自动执行烧写操作。然而,鉴于每台设备的key与 CPU 和 FLASH 存在绑定特性,这会使工厂的维修成本上升。故而提供了一种手动触发烧写 RPMB key的方案。
2.在 kernel 阶段,可借助 TEE,在基本测试完成后手动触发烧写。
注意:RPMB key在多数情形下与 CPU 相互绑定,这意味着若 CPU 发生损坏,在维修时便需要更换 EMMC 或 UFS。由于 RPMB key与 CPU 绑定,所以大部分客户在使用 RPMB 时,都会采用工厂烧录key的方案。原因在于:此方案可降低成本。工厂需要对 CPU 进行老化测试,若 CPU 与 EMMC 提前绑定,一旦 CPU 出现故障,将会造成 EMMC 的浪费。因此在大规模生产时,客户通常会选择延迟绑定的方案以节约成本。
三、FAQ
Q: RPMB key可以重复写吗?
A: 不可以, 只能写一次且不能更改
Q: 可以不写RPMB key吗?
A: 如果要用RPMB这个分区, 就一定要写这把key
Q: RPMB分区中的内容可以重复写吗?
A: 可以. RPMB分区不可以擦除, 但可以覆盖