转自:蛋蛋读UFS之九:UFS数据安全

前面提到RPMB使用认证机制和抗重放攻击机制保障数据不被黑客攻击,除此之外,UFS还有其它一些手段来保护用户数据安全,这一章节我们来关注UFS数据安全。

UFS设备用来存储个人或者企业的数据信息,UFS设备需要这样一种机制,就是必要时,数据能永久从设备(闪存)删除,这样就能防止别有用心的人通过反向工程获取你的数据。

话说,陈老师吸取了上次教训,每次拍照后,事后“阅后即焚”。陈老师想:这样就没有人看到我们的照片了吧。陈老师很是得意。

没有想到,不久后网上又爆出陈老师新的“门”事件。陈老师很是纳闷,我不是明明都删除了吗??

我们帮陈老师分析一下为什么删了的照片还能被修手机的人弄出来。

手机文件系统把陈老师拍的照片数据用逻辑块管理,然后把这些逻辑块写到UFS设备的存储介质(如上图所示)。陈老师删除照片,删除的只是逻辑块数据,存在UFS存储介质上的数据还在原地,如下图所示:

修手机的一看,这不陈老师吗?修手机的知道肯定能发现什么,嘴角不禁露出一丝不易觉察的笑。他从文件中没有找到照片,有点失望。小子吃一堑长一智呀!但猎奇的心不会让他轻易放弃的,有经验的他盯上了存储卡。功夫不负有心人,他从存储介质里把照片弄出来!

拍照不容易,且拍且珍惜。我们看看如何避免陈老师的悲剧。

  • 擦除操作(Erase Operation)

注意,这个“擦除”操作不是擦除存储介质,不是闪存层面的擦除操作,而是UFS层面的擦除操作。数据写在闪存上,UFS设备内部有个逻辑地址到物理地址的映射,擦除操作通过切断这种映射,主机就不能获得擦除掉的数据。

当陈老师删除照片时,它切断了用户直接访问照片的途径:

当陈老师删除照片后,手机系统会通过发送UNMAP命令(就是通常说的TRIM)来告诉设备这些照片数据无效。设备收到该命令后,然后根据逻辑单元描述符中的bProvisioningType来确定执行具体操作。

bProvisioningType:

00h: Thin Provisioning is disabled (default)

02h: Thin Provisioning is enabled and TPRZ = 0 (Discard)

03h: Thin Provisioning is enabled and TPRZ = 1 (Erase)

即当bProvisioningType = 03h时,设备执行擦除操作,即切断逻辑地址到物理空间的映射。

一个逻辑块如果被擦除,那么主机访问这个逻辑块时,设备必须返回全0数据给主机。

注意,这个“擦除”操作不是擦除存储介质,只是主机让设备切断逻辑地址到物理地址的映射,因此不保证照片数据从闪存介质删除。但是,由于UFS设备知道该照片数据已经删除(没有逻辑块到物理空间的映射),在后续垃圾回收时,这些被删掉的数据很大概率会从介质上擦除掉。

  • 舍弃操作(Discard Operation)

和擦除操作类似,主机通过发送UNMAP命令来执行舍弃操作。当bProvisioningType = 02h时,设备执行舍弃操作。

舍弃操作和擦除操作的区别:主机访问一个被舍弃的逻辑块,可能获得任何数据,甚至包括舍弃前的数据,而擦除操作是主机获得全0数据。也就是说,对删除的照片,如果UFS设备执行的是舍弃操作,那么主机还可能获得原图片;如果UFS设备执行的是擦除操作,主机不可能再获得原照片。

但不管是舍弃操作还是擦除操作,都不能保证照片从存储介质上删除。像修手机这样的人,它不走寻常路(通过手机系统),直接操作闪存的话,还是有可能把删除的照片找回来。

陈老师看到这里,急了,难道我以后再也不能拍照了吗??

别急,小陈!你先坐下,听我慢慢讲。

  • 安全清除(Secure Removal)

陈老师,有三种可选策略用以安全清除数据,你造吗?

1. 设备控制器擦除(Erase)要被删除的逻辑块所对应的物理地址空间;

2. 设备控制器用单一字符覆盖写要被删除的逻辑块所对应的物理地址空间,然后擦除设备;

3. 设备控制器用单一字符、字符补码和随机字符,依次覆盖写要被删除的逻辑块所对应的物理地址空间。

又是覆盖写,又是擦除,照片是彻底从闪存中删除了。

陈老师听到这里,情绪缓和下来,终于是坐了下来。

  • 清除操作(Purge Operation)

清除操作是针对垃圾数据(比如陈老师删除的照片),让这些数据不仅不能通过正规渠道(操作系统)访问,还让这些数据无法从存储介质中获取,彻底把垃圾数据从UFS设备清除掉。

前面所说的擦除和舍弃操作,都是主机通过命令层的UNMAP命令来实施的。而清除操作则是主机通过设备管理器的Query功能来告诉设备的。

这里涉及到一个重要的标志(flag)和一个重要的属性(Attribute),分别是发PurgeEnable和bPurgeStatus,前者用以使能/禁止清除操作,后者用以设备向主机提供清除操作的状态信息。

fPurgeEnable:

  1. 上电或者重启,该标志位0;

  1. 主机通过设置或者清除该标志,使能或禁止清除操作;

  1. 只有当所有逻辑单元的命令队列空的时候,主机才能设置该标志为1使能清除操作;

  1. 当UFS设备执行完清除操作或者发生错误,该标志会被清零;

如果主机想终止设备执行清除操作,可以通过清除该标志达到目的。

bPurgeStatus:

主机为了让设备执行清除操作,主机通过QUERY REQUEST UPIU设置fPurgeEnable = 1。如果当前逻辑单元的命令队列中没有任何命令,设备会执行清除操作。一旦设备开始执行清除操作,它不会响应主机发来的任何命令。如果这个时候主机需要让设备紧急响应命令,主机首先应该通过QUERY REQUEST UPIU设置fPurgeEnable = 0来提前终止设备的清除操作,然后再发送命令。

下图是清除操作的状态机图:

UFS设备在执行清除操作时,对那些垃圾数据,有以下几种处理方式:

  1. 默认是把这些垃圾数据从闪存空间擦除掉;

  1. 或者先用单个字符(比如全A)覆盖写,然后再擦除;

  1. 抑或先用单个字符(比如A)覆盖写,然后用它的补码(比如5)覆盖写,最后用随机字符覆盖写;

  1. 最后还可以使用用户自定义的方式处理。

这些手段前面已经介绍过。

  • 格式化设备(Wipe Device)

主机通过发送FORMAT UNIT命令格式化所有的逻辑单元(RPMB LU除外)。不过,对那些写保护的逻辑单元,FORMAT UNIT命令会失败。

FORMAT UNIT的命令对象是Device well know LU,它格式化除RPMB之外所有无写保护的逻辑单元。

FORMAT UNIT会切断逻辑块到物理空间的映射。但如果要让数据彻底从设备上清除,UFS设备还需要执行Purge操作,这样数据才能彻底删除。

  • 写保护

前面都是千方百计的清除数据,但有时候UFS设备需要保护写的数据。

每个逻辑逻辑单元(除了RPMB)有写保护属性。写保护包括永久写保护和上电写保护,前者的意思是说,一旦该逻辑单元写保护使能,将终生是写保护(不能改回去了);而后者写保护只对某次上电有效,如果设备重上电或者重启,写保护将失效。

最后总结一下UFS数据安全机制:

  1. 安全擦除(本章重点讲述);

  1. 写保护(本章讲述);

RPMB,提供数据认证和抗重放攻击机制保护一些重要数据,请参看RPMB章节。

蛋蛋读UFS之九:UFS数据安全相关推荐

  1. 蛋蛋读UFS之三:UFS数据包UPIU

    转自:蛋蛋读UFS之三:UFS数据包UPIU UFS中流淌的数据包叫做UPIU(UFS Protocol Information Unit,UFS协议信息单元),它是固定格式的数据结构,用以传输应用层 ...

  2. 蛋蛋读UFS之二:UFS协议栈

    转自:蛋蛋读UFS之二:UFS协议栈 任何一种接口或者协议,都是由一个完整的协议栈组成的.UFS也不例外. UFS定义了一个完整的协议栈.从上到下,依次为应用层.传输层.数据链路层和物理层.UFS使用 ...

  3. 蛋蛋读UFS之一:UFS简介

    转载:蛋蛋读UFS之一:UFS简介 我们知道,我们电脑由三大件组成:CPU,内存和硬盘.CPU用以计算和控制,内存用以临时存储程序运行时所需的数据(掉电数据丢失),而硬盘用以长久保存数据(掉电数据不丢 ...

  4. 蛋蛋读UFS之六:UFS设备初始化和启动

    转自:蛋蛋读UFS之六:UFS设备初始化和启动 这一节讲讲UFS初始化. 初始化和启动包括三个阶段:部分初始化,加载启动代码(可选)和初始化完成. 部分初始化阶段 这个阶段开始于上电或者设备重启,它涉 ...

  5. 蛋蛋读UFS之十:UFS电源管理

    转自:蛋蛋读UFS之十:UFS电源管理 UFS是手机存储设备,因此对功耗要求很高.我们来看看UFS的电源管理. 三个供电电压,VCC,VCCQ和VCCQ2,分别给UFS设备模块供电.UFS设备主要包括 ...

  6. 蛋蛋读NVMe之二: 吉祥三宝

    蛋蛋读NVMe之一:为什么刘备需要NVMe 上回书说道,NVMe有三宝:SQ,CQ和DB.接下来我们就详细的看看这吉祥三宝. Host往SQ中写入命令, SSD往CQ中写入命令完成结果.SQ与CQ的关 ...

  7. nvme命令中prp_蛋蛋读NVMe之三

    有个人一直在思考三个问题:我是谁?我从哪里来?我要去哪里? 你猜这个人最后怎么着? 成了哲学家? 疯了? 疯了的哲学家? 我觉得无外乎这三种结果了. 相比人的世界,这三个问题在NVMe的世界就很容易得 ...

  8. 房市静心贴:蛋蛋读NVMe之三

    前情提要: 蛋蛋读NVMe之一:为什么刘备需要NVMe 蛋蛋读NVMe之二: 吉祥三宝 有个人一直在思考三个问题:我是谁?我从哪里来?我要去哪里? 你猜这个人最后怎么着? 成了哲学家? 疯了? 疯了的 ...

  9. 好书共读,天九共享企业读书节带动全民阅读

    第三届中国企业领袖读享盛典即将举行之际,天九共享集团与总裁读书会拟倡议发起举办企业读书节活动,成为首家全员读书示范企业,参与并共同倡议发起设立首届"天九共享•中国企业读书节". 读 ...

最新文章

  1. 解决AndroidManifest.xml file missing方案
  2. R语言实战应用精讲50篇(十八)-R语言实现分词、词频与词云案例解析
  3. linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏
  4. avi和音频合成 ffmpeg_使用Java和ffmpeg把音频和视频合成视频的操作方法
  5. Ajax Control Toolkit--Slider:有朝一日倒过来
  6. 数据:比特币和以太坊的证券产品规模已超过百亿美元
  7. 【MyBatis笔记】17-多对多做左连接查询(查询老师,并且把关联的学生也查出来)
  8. python深度学习库系列教程——python调用opencv库教程
  9. UVA 11423 - Cache Simulator (树状数组)
  10. TextView 在xml 中设置图片大小
  11. 计算机英语作业答案,大工20春《专业英语(计算机英语)》在线作业1题目【标准答案】...
  12. 电商企业营销案例方案:2019年618大促用红包推广引流
  13. 开不开心,都要让自己开心
  14. vue2.x中slot-scope插槽在vue3.x中的新写法
  15. java swing组件_Java -- Swing 组件使用
  16. BIOS设置通电开机?请问高手怎么设置?
  17. python xarray选中一年并删除其时间维度,返回所选年份数据
  18. (C语言详解)11-散列1 电话聊天狂人(小白实现详细解释)
  19. zz 0ffice 2007 something.....
  20. 瑞萨RA系列-开发环境搭建

热门文章

  1. 计算机没有usb视频教程,如何在没有USB闪存驱动器的情况下重新安装计算机系统?一键重新安装win7系统教程...
  2. html一个圆圈加一个感叹号,圆圈里面一个感叹号是什么标志
  3. KMPlayer 很优秀,至少目前是
  4. AndroidX升级;项目升级AndroidX遇到的问题和解决;
  5. 【OpenGL】Shader实例分析(十)- 钻石效果
  6. Linux公网通信(一)神器autossh(树莓派跨局域网远程监控和远程登录)
  7. PHP+Mysql—学生信息管理系统网站开发(整套源码)
  8. 关于android模拟器
  9. polkadot区块链浏览器
  10. 判断库和表存在的语句