RPMB分区介绍

2023-10-27

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来存储。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RPMB分区介绍 的相关文章

  • Android - 保存动态更改布局的状态

    我有一个布局 用户可以在其中添加按钮并将其放置在他们想要的位置 我想允许用户保存他们的布局 以便下次打开应用程序时加载它 有谁知道我是否可以将文件保存到 SD 卡上 或者 我可以使用某种layout getXml 方法并将其放入我的应用程序
  • Firebase 管理 SDK Android

    在 Android 中初始化 Firebase Admin SDK 的代码 Override protected void onCreate Bundle savedInstanceState super onCreate savedIns
  • getItem 与 getItemAtPosition

    有两种方法可以获取列表视图中的选定项目 list getAdapter getItem position list getItemAtPosition position 我的问题是 哪一种是首选的做法 我见过人们同时使用这两种方法 您可以使
  • 使用 Android 前台服务为 MediaPlayer 创建通知

    问题就在这里 我目前正在开发一个应用程序 该应用程序必须提供 A 广播播放器 来自 URL 的 AAC 直播 还有一个播客播放器 来自 URL 的 MP3 流 该应用程序必须能够在后台运行 Android 服务 并通过以下方式向用户公开持续
  • 检测到设备正在振动?

    我使用下面的代码来振动设备 public void vibrator try Vibrator vibrator Vibrator getSystemService Context VIBRATOR SERVICE vibrator vib
  • Android 应用程序在后台运行时保存数据

    目前我正在开发 xmmp 客户端 当应用程序位于前台时 该客户端工作得很好 但由于事实上 当应用程序处于后台时 我在 Application 类中保存了大量数据 复杂的 ArrayList 字符串和布尔值作为公共静态 每个字段都被垃圾收集
  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • 如何将安卓手机从睡眠状态唤醒?

    如何以编程方式将 Android 手机从睡眠状态唤醒 挂起至内存 我不想获取任何唤醒锁 这意味着手机在禁用 CPU 的情况下进入 真正的 睡眠状态 我想我可以使用某种RTC 实时时钟 机制 有人有例子吗 Thanks 为了让Activity
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • Phonegap - 如何将.txt文件保存在Android手机的根目录中

    我正在尝试使用phonegap 将 txt 文件保存在Android 手机的根目录中 我已经安装了这些插件 cordova plugin file 和 cordova plugin file transfer 在 config xml 文件
  • 在 Google Analytics 中跟踪应用程序版本

    我正在使用谷歌分析模块 https marketplace appcelerator com apps 5081 2014113336 https marketplace appcelerator com apps 5081 2014113
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 更新到材质 1.2.0 后,材质按钮上缺少圆角半径属性

    这是我的材质按钮代码
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar
  • 材质设计图标颜色

    应该是哪种颜色 暗 材质图标 在官方文档上 https www google com design spec style icons html icons system icons https www google com design s
  • 在 Android 上按下电源按钮时,如何防止先调用 onDestroy() 再调用 onCreate()

    我正在记录每个 onCreate 和 onDestroy 调用 我发现 一旦我单击 Android 上的电源按钮 以及模拟器上的电源按钮 我的活动中就会拨打电话 gt onDestroy gt onCreate 这会杀死我的游戏 然后立即从
  • 通过 ADB 拔出设备:“找不到服务”

    我必须测试我的应用程序在打瞌睡模式下的行为 根据文档 https developer android com training monitoring device state doze standby html testing doze 我
  • Android 如何聚焦当前位置

    您好 我有一个 Android 应用程序 可以在谷歌地图上找到您的位置 但是当我启动该应用程序时 它从非洲开始 而不是在我当前的城市 国家 位置等 我已经在developer android com上检查了信息与位置问题有关 但问题仍然存在
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项

随机推荐

  • 深度学习环境配置——(Cuda11)windows下的torch==1.7.1环境配置

    学习前言 好多30系显卡呀 虽然很贵 但是为了深度学习也没有办法欸 该博客主要是为了30系显卡写的 当然不一定一定要30系列显卡 只要支持Cuda11都可以这样配置 环境内容 pytorch 1 7 1 torchvision 0 8 2
  • 决策树分类器DecisionTreeClassifier参数解释

    sklern中使用sklearn tree DecisionTreeClassifier类来实现决策树分类算法 模型调参常用参数如下 名称 功能 描述 criterion 特征选择标准 gini or entropy default gin
  • 软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

    点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入 在日常生活中 沟通本来就是很重要的一门课程 沟通的过程中表达越清晰 给到的信息越多 那么沟通就越顺畅 和 ChatGPT 沟通也是同样的道理 如果想要
  • 内网工作站部署

    概述 为了方便做各种实验 我买了几台服务器放在家里 服务器上安装了虚拟化系统 运行的虚拟机有十几台 在家里的时候 我可以很方便的连接服务器 但是到了单位或出差的时候 连接服务器变得比较麻烦了 最开始我使用各种内网穿透的方案 但是虚拟机很多
  • SylixOS热插拔实现实例(四)

    1 网卡热插拔实现 SylixOS中 热插拔消息是在创建热插拔设备时产生 由热插拔设备驱动实现 下面介绍以网卡热插拔为例 介绍网卡热插拔消息产生流程 以mini2440网卡驱动为例 驱动程序通过调用API HotplugPollAdd函数将
  • 向数组中输入字符串的三种方法

    像一维数组中输入一串字符并输出 第一种方法 用gets 获取字符串 输出结果 第二种方法 利用scanf输入字符 注意不能获取空格 结果 第三种方法 利用while循环getcchar 结果
  • C#如何调用外部exe程序

    http blog csdn net cyamazing article details 52849106 1 在主界面添加调用外部exe程序的Button 双击此Button进入代码编辑页面 在程序的开始using System Diag
  • OpenCV阈值处理(threshold函数、自适应阈值处理、Otsu处理)

    目录 阈值处理 一 threshold函数 1 二值化阈值处理 cv2 THRESH BINARY 2 反二值化阈值处理 cv2 THRESH BINARY INV 3 截断阈值化处理 cv2 THRESH TRUNC 4 超阈值零处理 c
  • 刷脸支付能够很好的解决扫码支付的弊端

    刷脸支付设备采用的是目前安全系数最高的3D结构光摄像头技术 使用毫米级景深信息检测 在用户第一次使用时 就通过光感点阵 采集了用户独一无二的生物身份信息 然后与实名认证后的支付宝账号相连 来达到安全支付的效果 也就是说 就算不法分子拿着我们
  • cpp在vector中查找find元素

    假如我有一个vector数组 需要查询某个数是否在数组中 某个数在数组中第一次出现的位置 这个时候就需要用到
  • Python——UDP Socket实现视频互传,远程调用另一台电脑摄像头(cv2)

    一台电脑当服务器多线程提供摄像头服务 支持多台电脑调用 目录 一台电脑当服务器多线程提供摄像头服务 支持多台电脑调用 一 效果展示 和舍友联机 多台电脑效果 二 带注释的代码 1 服务端 2 客户端 一 效果展示 和舍友联机 多台电脑效果
  • 力扣刷题 每日两题(一)

    一 力扣20题 class Solution object def isValid self s type s str rtype bool if len s 0 return True stack for c in s if c or c
  • FISCO-BCOS 一、默认配置搭建区块链网络

    一 采用默认配置搭建区块链网络 1 安装openssl ubuntu依赖 sudo apt install y openssl curl 2 创建操作目录 下载安装脚本 cd mkdir p fisco cd fisco 3 搭建单群组4节
  • 面试分享

    在软件测试的面试过程中 经常会出一些测试基础的问题 以此来评估应聘者的基本测试功底和知识储备 下面我就为大家整理了一些软件测试常见面试题及答案 仅供参考 之前的推文也有分享过相关的软件测试面试题 正在准备面试的小伙伴们可以进入本公众号 面试
  • flutter内存泄漏常见分析

    内存泄漏是Flutter中的一个常见问题 以下是一些可能导致内存泄漏的情况和注意事项 未释放控制器 在使用一些控制器 如AnimationController TextEditingController等 时 需要在不需要时及时释放控制器
  • 创建线程的方式打开记事本

    更好的阅读体验 huge color red 更好的阅读体验 更好的阅读体验 今天操作系统课老师讲到进程 提出了一个有趣的小实验 能否以系统调用的方式利用 Windows 创建进程的系统调用函数来打开一个软件 闲着蛋疼的我立马来了兴趣 姑且
  • unity开发VR,没有VR设备解决方式

    文章目录 前言 一 环境搭建 1 普通VR环境搭建 2 虚拟相机搭建 二 模拟相机的操作 总结 前言 开发实例环境为unity2018 4 11 VRTK3 3 0 steamVR1 2 23 当我们身边没有HTC VIVE设备时我们不能去
  • Android Studio中的mavenCentral、jcenter、google仓库

    一 Android Studio中依赖是从哪里得到 是从工程的build gradle里面定义的Maven仓库服务器去下载library的 总的来说 只有两个标准的Android library文件服务器 mavenCentral和jcen
  • AES加密和解密详解

    本文使用的是cyrpto js库 以AES CBC为例 先安装cyrpto js cyrpto js是js专门用来加密和解密用到的一个库 第一步 先确认一下电脑是否有node和npm 输入node version显示 v 版本号就可以下一步
  • RPMB分区介绍

    RPMB Replay Protected Memory Block重放保护内存块 Partition 是 eMMC 中的一个具有安全特性的分区 eMMC 在写入数据到 RPMB 时 会校验数据的合法性 只有指定的 Host 才能够写入 同