RPMB分区介绍

RPMB(Replay Protected Memory Block重放保护内存块)Partition 是 eMMC 中的一个具有安全特性的分区。eMMC 在写入数据到 RPMB 时,会校验数据的合法性,只有指定的 Host 才能够写入,同时在读数据时,也提供了签名机制,保证 Host 读取到的数据是 RPMB 内部数据,而不是攻击者伪造的数据。

RPMB 在实际应用中,通常用于存储一些有防止非法篡改需求的数据,例如手机上指纹支付相关的公钥、序列号等。RPMB 可以对写入操作进行鉴权,但是读取并不需要鉴权,任何人都可以进行读取操作,因此存储到 RPMB 的数据通常会进行加密后再存储。

重放保护的原理:

使用 eMMC 的产品,在产线生产时,会为每一个产品生产一个唯一的 256 bits 的 Secure Key,烧写到 eMMC 的 OTP 区域(只能烧写一次的区域),同时 Host 在安全区域中(例如:TEE)也会保留该 Secure Key。

在 eMMC 内部,还有一个RPMB Write Counter。RPMB 每进行一次合法的写入操作时,Write Counter 就会自动加一 。通过 Secure Key 和 Write Counter 的应用,RMPB 可以实现数据读取和写入的 Replay Protect。

1、RPMB 数据读取

RPMB 数据读取的流程如下:

preview

1)Host 向 eMMC 发起读 RPMB 的请求,同时生成一个 16 bytes 的随机数,发送给 eMMC。

2)eMMC 将请求的数据从 RPMB 中读出,并使用 Secure Key 通过 HMAC(哈希消息验证码) SHA-256 算法,计算读取到的数据和接收到的随机数拼接到一起后的签名。然后,eMMC 将读取到的数据、接收到的随机数、计算得到的签名一并发送给 Host。

3)Host 接收到 RPMB 的数据、随机数以及签名后,首先比较随机数是否与自己发送的一致,如果一致,再用同样的 Secure Key 通过 HMAC SHA-256 算法对数据和随机数组合到一起进行签名,如果签名与 eMMC 发送的签名是一致的,那么就可以确定该数据是从 RPMB 中读取到的正确数据,而不是攻击者伪造的数据。

通过上述的读取流程,可以保证 Host 正确的读取到 RPMB 的数据。

2、RPMB 数据写入

RPMB 数据写入的流程如下:

preview

1)Host 按照上面的读数据流程,读取 RPMB 的 Write Counter。

2)Host 将需要写入的数据和 Write Counter 拼接到一起并计算签名,然后将数据、Write Counter 以及签名一并发给 eMMC。eMMC 接收到数据后,先对比 Write Counter 是否与当前的值相同,如果相同那么再对数据和 Write Counter 的组合进行签名,然后和 Host 发送过来的签名进行比较,如果签名相同则鉴权通过,将数据写入到 RPMB 中。

通过上述的写入流程,可以保证 RPMB 不会被非法篡改。

备注:先使用qsee_kdf派生一个密钥来加密数据,再使用qsee_stor_write_sectors来存储。

 

### RPMB分区的定义、作用及技术细节 RPMB(Replay Protected Memory Block)是eMMC中一个具有安全特性的分区[^3]。RPMB的设计目标是提供一种防篡改、防重放的安全存储机制,确保数据的完整性和保密性。 #### 定义 RPMB是一个专门用于存储敏感数据的小型分区,通常容量为4KB或更大。它通过硬件和软件结合的方式实现安全特性。RPMB支持写入保护和读取保护,只有经过身份验证的主机设备才能访问其内容。 #### 作用 RPMB的主要作用包括以下几点: 1. **数据完整性保护**:RPMB在写入数据时会进行合法性校验,只有通过认证的主机才能写入数据。 2. **防重放攻击**:RPMB使用计数器机制防止数据被重复写入或伪造。 3. **数据保密性**:RPMB在读取数据时提供签名机制,确保主机读取到的数据未被篡改。 4. **安全性增强**:RPMB通常用于存储密钥、证书或其他敏感信息,防止未经授权的访问。 #### 技术细节 RPMB的技术实现涉及以下几个关键点: 1. **身份验证**: - 主机设备需要通过RPMB的身份验证流程才能获得访问权限。这一过程通常基于共享密钥或公私钥对。 - 身份验证通过后,主机可以向RPMB写入数据或从RPMB读取数据[^3]。 2. **写入保护**: - 每次写入操作都会更新RPMB内部的计数器,以防止重放攻击。 - 写入数据时,RPMB会对数据进行加密和签名处理,确保数据的保密性和完整性。 3. **读取保护**: - 当主机请求读取RPMB中的数据时,RPMB会生成一个签名,主机可以通过验证签名来确认数据的真实性和完整性。 - 签名机制基于RPMB内部的私钥,主机无法伪造有效的签名。 4. **存储结构**: - RPMB分区由多个扇区组成,每个扇区包含数据块和元数据块。 - 元数据块中存储了计数器值、MAC(消息认证码)等信息,用于保证数据的安全性。 5. **应用场景**: - RPMB常用于存储设备的唯一标识符、加密密钥、数字证书等敏感信息。 - 在移动设备中,RPMB可用于保护用户数据、应用程序数据以及操作系统的关键配置信息。 ```python # 示例代码:RPMB写入和读取的基本流程 def rpmb_write(data, counter, key): # 计算MAC并加密数据 mac = calculate_mac(data, counter, key) encrypted_data = encrypt(data, key) return write_to_rpmb(encrypted_data, counter, mac) def rpmb_read(address, key): # 从RPMB读取数据并验证签名 encrypted_data, counter, mac = read_from_rpmb(address) if verify_mac(encrypted_data, counter, mac, key): return decrypt(encrypted_data, key) else: raise ValueError("Data integrity check failed") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值