UFS其中一个LU RPMB数据保护保险箱的详细资料概述

在ufs里,有这么一个lu,主机往该lu写数据时,ufs设备会校验数据的合法性,只有特定的主机才能写入;同时,主机在读取数据时,也提供了校验机制,保证了主机读取到的数据是从该lu上读的数据,而不是攻击者伪造的数据。这个lu就是rpmb(replay protected memory block)lu,四大“名撸”(四个well known lu)之一。
有些人家里有保险箱,用以存放他们认为重要的东西,比如现金、存折、房产证、情书等。输入密码,打开密码箱,然后放东西进去;取的时候,首先需要密码打开保险箱,然后把东西取出。没有密码,老婆是万万看不到老公和他初恋之间的情书的。rpmb就像是手机里的密码箱,用户可以把一些重要数据存储其中。
我们来看看rpmb这个数据保护保险箱。
ufs主机通过认证(authenticated)的方式访问rpmb lu。下图展示了数据写过程:
首先,ufs主机和ufs设备共享密钥,该密钥在ufs设备出厂时就保存在ufs设备;
ufs主机在发送主机数据给ufs设备前,会用该密钥和哈希算法生成消息认证码(message authentication code, mac);
ufs主机把主机数据连同mac一起发给ufs设备;
ufs设备把收到的主机数据和共享密钥在本地重新计算mac,然后把计算出的mac和收到的mac做对比,如果一致,则认证成功,写入到闪存;否则,拒绝该笔数据的写。
ufs使用hmac(hash-based message authentication code)sha-256算法生成消息认证码。hmac运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。关于hmac具体算法,可参看https://en.wikipedia.org/wiki/hmac,我们这里不深入。
消息认证码本质是哈希值。哈希的一个特点是,即使只改变原数据一比特数据,两者的哈希值也是完全不同的。如果恶意攻击者在数据传输过程中篡改了用户数据,那么ufs设备根据收到的数据和共享密钥生成的mac肯定与接收到的mac不一样,认证通不过,数据就不会写入ufs设备。
这里的前提是共享密钥不能被恶意攻击者获取,否则,恶意攻击者完全可以模拟主机行为:把自己的恶意数据和共享密钥生成mac,然后把恶意数据和其对应的mac发送给ufs设备。ufs设备会认证成功,恶意数据被写入。所以,请保管好你的密码!
但是,恶意攻击者是狡猾的,即使他没有办法获得你的密钥,它还是有办法对你进行攻击的。
恶意攻击者监听到ufs主机和ufs设备之间某次数据传输,得到“主机数据 + mac”,然后该恶意攻击者重复发送该“主机数据 + mac”给ufs设备,由于“主机数据 + mac”是合法的,认证通过,ufs设备就会接收该数据并写到闪存。恶意攻击者如果一直重复发这些数据给ufs设备,ufs设备rpmb lu将会被写爆!这就是重放攻击, replay attack。
rpmb的全名是:replay protection memory block,它的名字暗示了rpmb是能抵御重放攻击的。那么rpmb是怎么对付重放攻击的呢?
ufs维护了一个写计数(write counter),初始化为0。ufs设备每次成功处理完一个rpmb写命令,写计数加一。主机在往设备写入数据前,获得该计数。然后把用户数据和该计数一起做mac计算。这样,即使恶意攻击者窃听到某次合法的“用户数据 + mac”,往设备写入时,由于写计数发生变化,它无法生成写计数改变之后的mac值,因此就无法一直重复往设备写入某次合法的“用户数据 + mac”。魔高一尺,道高一丈,正义终战胜邪恶!
上面就是rpmb数据安全性背后的原理。下面再回到ufs rpmb协议上来。
ufs2.1中,rpmb lu最小逻辑空间为128kb,最大为16mb。它的逻辑块大小为256b(普通lu逻辑块大小一般为4kb)。应用层不是通过普通的read/write命令读/写rpmb上的数据,而是通过security protocol out/in命令来访问rpmb的。
ufs主机在访问设备rpmb时,是通过下面消息交互完成的。
每条消息包含一条或者若干条消息数据帧。消息数据帧大小是512字节,具体如下:
从中,我们看到:
认证密钥(key)是32字节;
1使用sha-256计算mac,就是任意长度的数据,产生的mac值总是256比特,即mac大小为32字节。
逻辑块数据大小为256字节。
写计数(write counter)为4字节,当该值涨到0xffff ffff,它就保持不动,不会继续增长了。
address,rpmb的逻辑地址,同lba。两个字节,最多表示65536个逻辑块,每个逻辑块大小为256字节,因此rpmb逻辑空间最大为
block count,逻辑块数,即指定读写多少个逻辑块。
result,rpmb操作结果(状态)。
下面举几个rpmb操作例子来理解上面的消息:
主机读取写计数
如前所述,写计数的目的是抵御重放攻击。写计数是ufs设备管理和维护的,ufs设备递增该计数。主机在写数据时,需要知道该计数,然后加上用户数据,一起计算mac。
命令层发security protocol out/in命令读取写计数,然后传输层生成相应的upiu进行主机与设备之间的交互,具体见上图。
主机写认证数据
主机命令层通过security protocol out命令把用户数据和对应的mac发送给设备,然后通过security protocol out请求获取前面数据写结果,最后通过security protocol in读取写结果。写结果中包含新的写计数,这样下次主机利用新的写计数计算mac。注意,只有本次写认证数据成功,设备才会递增该计数。
主机读认证数据
首先,主机通过security protocol out命令发送读取认证数据请求给设备,然后发送security protocol in命令读取数据。
注意,主机读取数据也是需要认证的。在设备端,ufs设备会计算mac,然后主机端根据mac认证该数据。这样可以防止恶意攻击者在数据传输过程中(从设备到主机),用恶意数据更换原始数据。
rpmb提供了认证访问方式和抵御重放攻击的机制,保证了存储在rpmb lu上数据的安全。因此,用户可以把一些敏感和重要的信息写在rpmb上。在实际应用中,它通常用于存储一些有防止非法篡改需求的数据,例如手机上指纹支付相关的公钥、序列号等敏感信息。

机器人:一周君带你回顾本周热点新闻动态
工业人工智能及应用研究现状及展望
高光谱图像的分类将会面临怎样的挑战
ITECH在线式UPS电源测试案例
如何对锂电池进行充电,对手机锂电池如何正确充电
UFS其中一个LU RPMB数据保护保险箱的详细资料概述
为您的应用寻找完美开关的 10 个因素
ADI推出双通道、高性能MSPS模数转换器AD9645
中星微人工智能算法之目标检测算法分析
VR在智慧养老方面的优势
新品|不止于精准
三星Note 7电池爆炸真相解密!专家这么说
区块链+AI最炙手可热的技术!AICHAIN全球巡演深圳站即将开幕!
我国智能工厂产业应互为支撑抱团走出去,才能开拓更广阔的国际市场
超声波发生器电路板设计
如何设计升压DC-DC Boost转换器
印度铁路公司宣布将在2000年使用RFID标签跟踪所有铁路车辆
高分辨率示波器HDO在医疗电子测试领域的应用
力变压器故障分析大全
什么是机器视觉计算机?