前面提到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)
陳老師,有三種可選策略用以安全清除數據,你造嗎?
設備控制器擦除(Erase)要被刪除的邏輯塊所對應的物理地址空間;
2. 設備控制器用單一字符覆蓋寫要被刪除的邏輯塊所對應的物理地址空間,然后擦除設備;
3. 設備控制器用單一字符、字符補碼和隨機字符,依次覆蓋寫要被刪除的邏輯塊所對應的物理地址空間。
又是覆蓋寫,又是擦除,照片是徹底從閃存中刪除了。
陳老師聽到這里,情緒緩和下來,終于是坐了下來。
清除操作(Purge Operation)
清除操作是針對垃圾數據(比如陳老師刪除的照片),讓這些數據不僅不能通過正規渠道(操作系統)訪問,還讓這些數據無法從存儲介質中獲取,徹底把垃圾數據從UFS設備清除掉。
前面所說的擦除和舍棄操作,都是主機通過命令層的UNMAP命令來實施的。而清除操作則是主機通過設備管理器的Query功能來告訴設備的。
這里涉及到一個重要的標志(flag)和一個重要的屬性(Attribute),分別是發PurgeEnable和bPurgeStatus,前者用以使能/禁止清除操作,后者用以設備向主機提供清除操作的狀態信息。
fPurgeEnable:
上電或者重啟,該標志位0;
主機通過設置或者清除該標志,使能或禁止清除操作;
只有當所有邏輯單元的命令隊列空的時候,主機才能設置該標志為1使能清除操作;
當UFS設備執行完清除操作或者發生錯誤,該標志會被清零;
如果主機想終止設備執行清除操作,可以通過清除該標志達到目的。
bPurgeStatus:
主機為了讓設備執行清除操作,主機通過QUERY REQUEST UPIU設置fPurgeEnable = 1。如果當前邏輯單元的命令隊列中沒有任何命令,設備會執行清除操作。一旦設備開始執行清除操作,它不會響應主機發來的任何命令。如果這個時候主機需要讓設備緊急響應命令,主機首先應該通過QUERY REQUEST UPIU設置fPurgeEnable = 0來提前終止設備的清除操作,然后再發送命令。
下圖是清除操作的狀態機圖:
UFS設備在執行清除操作時,對那些垃圾數據,有以下幾種處理方式:
默認是把這些垃圾數據從閃存空間擦除掉;
或者先用單個字符(比如全A)覆蓋寫,然后再擦除;
抑或先用單個字符(比如A)覆蓋寫,然后用它的補碼(比如5)覆蓋寫,最后用隨機字符覆蓋寫;
最后還可以使用用戶自定義的方式處理。
這些手段前面已經介紹過。
格式化設備(Wipe Device)
主機通過發送FORMAT UNIT命令格式化所有的邏輯單元(RPMB LU除外)。不過,對那些寫保護的邏輯單元,FORMAT UNIT命令會失敗。
FORMAT UNIT的命令對象是Device well know LU,它格式化除RPMB之外所有無寫保護的邏輯單元。
FORMAT UNIT會切斷邏輯塊到物理空間的映射。但如果要讓數據徹底從設備上清除,UFS設備還需要執行Purge操作,這樣數據才能徹底刪除。
寫保護
前面都是千方百計的清除數據,但有時候UFS設備需要保護寫的數據。
每個邏輯邏輯單元(除了RPMB)有寫保護屬性。寫保護包括永久寫保護和上電寫保護,前者的意思是說,一旦該邏輯單元寫保護使能,將終生是寫保護(不能改回去了);而后者寫保護只對某次上電有效,如果設備重上電或者重啟,寫保護將失效。
最后總結一下UFS數據安全機制:
安全擦除(本章重點講述);
寫保護(本章講述);
RPMB,提供數據認證和抗重放攻擊機制保護一些重要數據。
-
閃存
+關注
關注
16文章
1794瀏覽量
114998 -
數據安全
+關注
關注
2文章
682瀏覽量
29963 -
UFS
+關注
關注
6文章
104瀏覽量
24083
原文標題:蛋蛋讀UFS之九:UFS數據安全
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論