在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上。在實際應用中,它通常用于存儲一些有防止非法篡改需求的數據,例如手機上指紋支付相關的公鑰、序列號等敏感信息。
-
Mac
+關注
關注
0文章
1105瀏覽量
51459 -
Out
+關注
關注
0文章
31瀏覽量
13117 -
數據保護
+關注
關注
1文章
109瀏覽量
13533 -
UFS
+關注
關注
6文章
103瀏覽量
24037
原文標題:蛋蛋讀UFS之八:RPMB
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論