MTK 驱动(85)----RPMB key introduction

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分区不可以擦除, 但可以覆盖

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值