Android 中几种常见的key

发布时间 2023-04-17 18:43:58作者: 皓然123

0. 背景

我们在开发过程中,经常会提到这key,那key 的,感觉好神秘,好高端一样,其实不然,只不过是用于加解密而言,并没有什么神秘的,我们来看看有哪些key?到底是干啥的?

1. RPMB key

1.1 RPMB 是什么

RPMB(Replay Protected Memory Block)全称重放保护存储块,是闪存UFS/EMMC中的一个具有安全特性的物理分区。用于存放一些重要的安全信息。
RPMB 可对写入操作进行鉴权,但是读取并不需要鉴权,任何人都可以进行读取的操作,因此存储到 RPMB 的数据通常会进行加密后再存储。

1.2 RPMB key的用途

通过密钥获得访问权限,同时对每一个访问动作进行计数,这里说的密钥就是RPMB Key;
使用 eMMC 的产品,在产线生产时,会为每一个产品生产一个唯一的 256 bits 的 Secure Key(RPMB Key),烧写到 eMMC 的 OTP 区域(只能烧写一次的区域),同时 Host (CPU)在安全区域中(例如:TEE)也会保留该 Secure Key;
有了这个key, 在访问RPMB区域的时候, 都要用这把key生成Message Authentication Code(MAC), 用来鉴定授权,鉴权在TEE中完成;
每次开机通过RPMB key生成的MAC值 和 EMMC RPMB OTP区域中保存的RPMB key生成的MAC值做比较;
在 eMMC 内部,还有一个RPMB Write Counter。RPMB 每进行一次合法的写入操作时,Write Counter 就会自动加一 ;
通过 Secure Key 和 Write Counter 的应用,RMPB 可以实现数据读取和写入的 Replay Protect;
eMMC 在写入数据到 RPMB 时,会校验数据的合法性,只有指定的 Host 才能够写入,同时在读数据时,也提供了签名校验机制,保证 Host(cpu) 读取到的数据是 RPMB 内部数据,而不是攻击者伪造的数据;

1.3 自我理解

RPMB key,是用于保护RPMB 分区的写入功能的,只有获取到RPMB key才能进行写入。

RPMB key的写入,是eMMC 厂商写入的,然后在TEE 中保留了这个key,就实现了绑定;每次开机的时候,会对RPMB key 的hash进行对比(eMMC 和 TEE 中),如果一样,才能开机。保证RPMB key的完整性。

疑问:

1. 这个key的绑定和efuse 有没有关系?

2. 可否找一下key 绑定的过程?

2. Attestation Key