OP-TEE5-RPMB FS0

RPMB FS

讲到RPMB FS,就要说一下RPMB访问的规则了。这个规则在OP-TEE的源码中有部分体现。

为什么是部分体现呢?
因为有一部分东西是在实际的生产中确定的,而这份开源代码对于这部分就只能搭一个框架。
事实上,源码中的RPMB机制是软件模拟的,并不是在真的硬件上实现的。使用这份源码的人必须对这部分进行修改,才能使用到真正的RPMB FS功能。不过我们还是可以通过其模拟的flow来了解RPMB的基本流程的。

原理

基本原理可以参考这篇文章。如果认真看过可以不看我的简单说明了。

  • emmc芯片的OTP区域是只能写入一次的区域,这里会存入一个密钥(Secure Key),非常密哦!!!
  • emmc芯片里面掌握着这个密钥,TEE OS中也掌握着这个密钥
  • 读的时候
    emmc芯片对读取的内容计算出一个数用来校验(MAC值)
    TEE OS用密钥来核对校验值
  • 写的时候
    TEE OS对写入内容计算出一个数用来校验(MAC值)
    emmc芯片用密钥来核对校验值
  • RPMB分区有一个数字,用来记录RPMB分区被写的次数,叫做write count
    每次成功的写入都会+1。
    TEE OS会将写入地址+数据+write count一起计算MAC,然后丢给emmc去校验write count和MAC
  • 随机数
    读的时候,TEE OS会先发送读取地址+随机数
    emmc芯片计算MAC值时,要对读出数据和随机数一起计算
    TEE OS会校验MAC和随机数

当你把机密数据交给TEE OS时,它就通过上述方式来存取这份机密,而且在存取过程中还会对数据进行加解密,但这是RPMB原理以外的事,只是TEE OS自身的机制。

安全性

若想要破坏RPMB里面的数据,可能有以下方向

  • 拿到Secure Key
    这个是很困难的,因为OP-TEE就是为了安全而生的,攻破它是一件超难的事情。
  • 在写入时篡改数据
    首先辨析一下,这个写入指的不是用户的写入,指的是TEE OS将用户的数据写入的过程,即TEE OS的写入。也就是说,用户给TEE OS的数据有没有被篡改,这不是TEE OS关心的问题。
    在前面软件架构中讲过,TEE OS的存储功能是通过REE端的tee-supplicant程序来做的,也就是说,数据肯定会在REE端走一趟的,而REE是比较容易被黑的,所以篡改数据的机会很容易出现。
    在骇客没有拿到Secure Key的前提下,这个问题就是可以防范的了。假设骇客在REE端改掉了数据,由于骇客没有Secure Key,所以MAC没法重新计算,则RPMB会校验错误,篡改的数据就写不进去了。
  • 退回版本
    这是RPMB字面上就体现出来的防范功能,它的场景是这样的:
    • 首先,假如骇客记录了某一次写入的数据包(写入地址+数据+write count+MAC),针对这一版本的数据,骇客可以做坏事。
    • 然后,用户写了新的数据进去,针对这个新版本的数据,骇客的坏事做不成了。这是骇客想到了一个办法——把旧的那版数整包写进去。这一包可是能通过校验的正经数据啊,写进去之后就又可以干坏事啦。
    • 最后,emmc校验会发现write count不对,因为RPMB要求每个写进来的数据包中,write count必须是当前值,不能是旧值。如果试图改掉write count,MAC校验又会过不了,骇客就束手无策了。

逻辑链条就成了这样:

  • 篡改——改成骇客想要的数据
    没法攻破TEE==>拿不到Secure Key==>无法修改数据包,只能用旧的数据包==>旧的数据包write count(相当于版本号)是旧的,只能修改数据包==>与无法修改数据包矛盾==>
  • 破坏——改成乱七八糟的数据
    将数据包弄乱==>MAC校验失败,无法写入RPMB==>

可见安全性的根基还在于TEE这个堡垒的基本安全机制,这个以后有机会再剖析。

你可能感兴趣的:(OP-TEE5-RPMB FS0)