博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RPMB原理介绍【转】
阅读量:7209 次
发布时间:2019-06-29

本文共 1677 字,大约阅读时间需要 5 分钟。

本文转载自:

RPMB介绍:

RPMB(Replay Protected Memory Block)Partition 是 eMMC 中的一个具有安全特性的分区。
eMMC 在写入数据到 RPMB 时,会校验数据的合法性,只有指定的 Host 才能够写入,同时在读数据时,也提供了签名机制,保证 Host 读取到的数据是 RPMB 内部数据,而不是攻击者伪造的数据。
RPMB 在实际应用中,通常用于存储一些有防止非法篡改需求的数据,例如手机上指纹支付相关的公钥、序列号等。RPMB 可以对写入操作进行鉴权,但是读取并不需要鉴权,任何人都可以进行读取的操作,因此存储到 RPMB 的数据通常会进行加密后再存储。
容量大小
两个 RPMB Partition 的大小是由 Extended CSD register 的 BOOT_SIZE_MULT Field 决定,大小的计算公式如下:
Size = 128Kbytes x BOOT_SIZE_MULT
一般情况下,Boot Area Partition 的大小是128KB的倍数,EMMC中默认为 4 MB,即 RPMB_SIZE_MULT 为 32,部分芯片厂家会提供改写 RPMB_SIZE_MULT 的功能来改变 RPMB Partition 的容量大小。RPMB_SIZE_MULT 最大可以为 128,即 Boot Area Partition 的最大容量大小可以为 128 x 128 KB = 16384 KB = 16 MB。
Replay Protect 原理
使用 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。
RPMB 数据读取
RPMB 数据读取的流程如下:
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 的数据。
RPMB 数据写入
RPMB 数据写入的流程如下:
1、Host 按照上面的读数据流程,读取 RPMB 的 Write Counter(通过Write Counter来识别数据的有效性)。
2、 Host 将需要写入的数据和 Write Counter 拼接到一起并计算签名,然后将数据、Write Counter 以及签名一并发给 eMMC。
3、eMMC 接收到数据后,先对比 Write Counter 是否与当前的值相同,如果相同那么再对数据和 Write Counter 的组合进行签名,然后和 Host 发送过来的签名进行比较,如果签名相同则鉴权通过,将数据写入到 RPMB 中。
通过上述的写入流程,可以保证 RPMB 不会被非法篡改。

你可能感兴趣的文章
clob大数据转换为多行数据
查看>>
bootstrap的流式布局
查看>>
如何通过线程池异步调用
查看>>
Squid配置详解
查看>>
070104_微积分:随机变量及其分布(二项分布,均匀分布,正态分布)
查看>>
LeetCode – Refresh – Binary Tree Zigzag Level Order Traversal
查看>>
python操作三大主流数据库(13)python操作redis之新闻项目实战①新闻数据的导入
查看>>
2013夏,iDempiere来了 - v1.0c Installers (Devina LTS Release) 2013-06-27
查看>>
每天一个linux命令(22):find 命令的参数详解
查看>>
然后是几点(15)
查看>>
15.节点属性
查看>>
ISO-8859-1编码
查看>>
PHP 代码评审的 10 个提示
查看>>
你知道吗?Web的26项基本概念和技术
查看>>
方案优化:网站实现扫描二维码关注微信公众号,自动登陆网站并获取其信息...
查看>>
Leetcode | Balanced Binary Tree
查看>>
sqlServer对内存的管理
查看>>
挑战密室
查看>>
利用Solr服务建立的站内搜索雏形---solr1
查看>>
5、jmeter-逻辑控制器介绍与使用
查看>>