RPMB key introduction
介绍RPMB的相关功能,RPMB key的写入方法,以及一些常见问题
1. what is RPMB Key?

RPMB全称Replay Protected Memory Block, 重放保护存储块,用于存放一些重要的安全信息,eMMC和UFS都有这一区域.

RPMB防重放攻击的原理:

有两个条件决定了这一块内容具有这样的特性, 一是访问这一区域的数据需要获得授权, 二是有一个计数器记录每一次访问动作.

关于第一点, 如何给予和获得授权呢?

就需要在使用这一块区域之前, 预先烧写一把key进去, 那这把key就是RPMB key.

有了这把key, 在之后访问RPMB区域的时候, 都要用这把key生成Message Authentication Code(MAC), 用来鉴定授权,鉴权过程通常是TEE中使用每次开机生成的RPMB key得到MAC值和EMMC RPMB本身根据写入的RPMB key生成的MAC值做compare.

更多详细信息可以参考spec:eMMC 5.1 spec文档JESD84-B50-1.pdf, UFS 2.1 spec文档JESD220C.pdf

2. How to generate RPMB key

目前在mtk平台, 这把key的生成规则有两种, 一是common key, 另一种是per device key.

使用哪一种规则, 取决于是否开启宏RPMB_PER_DEVICE_KEY

Common key的内容可以在文件rpmb_cust_key.h中修改

Per device key的内容根据CPU的HRID生成, 会使得每一台机器的RPMB key都不同. 这样有一个结果是, 如果更换了CPU, 也要同时更换FLASH, 否则会无法访问RPMB区域.

3. How to program RPMB key?

那如何将这把RPMB key预先烧录到RPMB相应的寄存器中呢?

3.1 默认的方案, 如果有开宏CFG_TEE_SUPPORT && CFG_RPMB_SET_KEY, 会在第一次开机preloader阶段自动烧写.

但是由于per device key的CPU与FLASH绑定特性, 会造成工厂的维修成本增加, 所以提供了一种手动触发烧写RPMB key的方案.

3.2 在kernel阶段, 可以通过TEE, 在基本测试结束后手动触发. 详细信息可以参考文档MTK RPMB External User Guide_Android N.docx

  1. FAQ

Q: RPMB key可以重复写吗?

A: 不可以, 只能写一次且不能更改

Q: 可以不写RPMB key吗?

A: 如果要用RPMB这个分区, 就一定要写这把key

Q: RPMB分区中的内容可以重复写吗?

A: 可以. RPMB分区不可以擦除, 但可以覆盖

MTK 驱动(85)----RPMB key introduction相关推荐

  1. MTK 驱动(86)---更换CPU后,RPMB无法访问,必须同时更换eMMC

    更换CPU后,RPMB无法访问,必须同时更换eMMC MTK平台的RPMB(Replay Protected Memory Block) solution中,rpmb key的生成是和CPU ID相绑 ...

  2. 详解关于MTK驱动开发学习教程

    MTK驱动开发学习教程是本文要介绍的内容,主要是来了解MTK的驱动开发的过程,文章中很详细的讲解了这个问题,具体内容来看本文详解. 一.Charge Parameters. 1.相关文件chr_par ...

  3. MTK 驱动(62)---eMMC RPMB分区介绍

    eMMC RPMB分区介绍 Partitions Overview eMMC标准中,将内部的 Flash Memory 划分为 4 类区域,最多可以支持 8 个硬件分区,如下图所示: 一般情况下,Bo ...

  4. MTK 驱动(67)---深入MTK平台bootloader启动之【 lk -amp;gt; kernel】分析笔记

    Pre-loader 运行在ISRAM,待完成 DRAM 的初始化后,再将lk载入DRAM中,最后通过特殊sys call手段实现跳转到lk的执行入口,正式进入lk初始化阶段. 一.lk执行入口: 位 ...

  5. MTK 驱动(63)---MTK TP驱动移植

    MTK TP驱动移植 对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 ...

  6. MTK 驱动(51)---TP 驱动移植

    对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 打开 mediate ...

  7. MTK 驱动开发(41)---MTK 调试工具

    MTK Android software Tools工具的说明 MTK发布的Android software Tools工具包,里面包含了很多的MTK工具,如下是简要说明及学习文档 MTK Andro ...

  8. MTK 驱动开发(29)---TP 驱动移植

    对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 打开 mediate ...

  9. MTK 驱动开发(5)---bootloader

    1.框架 MTK 平台的启动过程经过四个模块,分别是BootRom,Preloader,LK,Kernel. 2 .bootloader到kernel启动总逻辑流程图 3.Boot ROM Boot ...

最新文章

  1. 各方评论《面向儿童的人工智能北京共识》:这是中国人工智能发展轨迹中的一份关键文件...
  2. 2.12 Hivet中order by,sort by、distribute by和cluster by
  3. 线程间的协作(3)——管道输入/输出流
  4. Maven打包自动发布到nexus私服
  5. Python综合练习:学生信息管理(文件版)
  6. python链表怎么定义_Python数据结构之双向链表的定义与使用方法示例
  7. App后台开发运维和架构实践学习总结(1)——App后台核心技术之用户验证方案
  8. nusoap 与 CI框架不用WSDL
  9. “混合云产业推进联盟”成立,ZStack实力助推
  10. 郝斌c语言课程笔记,郝斌C语言详细笔记(附源码) - 图文
  11. 动态IP和静态IP地址
  12. Android陀螺仪传感器学习
  13. 国债(长短期)、财政赤字、利率、美元指数、国债收益率关系
  14. STM32 BKP备份寄存器介绍
  15. strcmp函数的分析及实现
  16. 敏捷项目用户故事地图
  17. 需要知道关于struct的一些事情
  18. C++/QT生成二维码和扫瞄二维码
  19. Halcon读图出错怎么办?ReadImage常见错误与处理方法(C++)
  20. 03-QNX Shell常用指令

热门文章

  1. Linux 变量和结构体
  2. mysql linux安装百度经验_MySQL 安装(Windows Linux)
  3. 线程控制、如何给面试官描述线程不安全的情况?模拟黄牛抢票展现不安全的情况及解决方式、互斥锁加锁解锁
  4. 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解
  5. RabbitMQ的简单示例
  6. unity最基本操作
  7. HTML5 Geolocation(地理定位)
  8. 内存分析工具 MAT 的使用
  9. Centos7 操作系统 mysql5.7 配置远程登陆操作
  10. Golang-import-introduce