在UFS里,有這么一個(gè)LU,主機(jī)往該LU寫數(shù)據(jù)時(shí),UFS設(shè)備會(huì)校驗(yàn)數(shù)據(jù)的合法性,只有特定的主機(jī)才能寫入;同時(shí),主機(jī)在讀取數(shù)據(jù)時(shí),也提供了校驗(yàn)機(jī)制,保證了主機(jī)讀取到的數(shù)據(jù)是從該LU上讀的數(shù)據(jù),而不是攻擊者偽造的數(shù)據(jù)。這個(gè)LU就是RPMB(Replay Protected Memory Block)LU,四大“名擼”(四個(gè)Well Known LU)之一。
有些人家里有保險(xiǎn)箱,用以存放他們認(rèn)為重要的東西,比如現(xiàn)金、存折、房產(chǎn)證、情書等。輸入密碼,打開密碼箱,然后放東西進(jìn)去;取的時(shí)候,首先需要密碼打開保險(xiǎn)箱,然后把東西取出。沒有密碼,老婆是萬萬看不到老公和他初戀之間的情書的。RPMB就像是手機(jī)里的密碼箱,用戶可以把一些重要數(shù)據(jù)存儲(chǔ)其中。
我們來看看RPMB這個(gè)數(shù)據(jù)保護(hù)保險(xiǎn)箱。
UFS主機(jī)通過認(rèn)證(authenticated)的方式訪問RPMB LU。下圖展示了數(shù)據(jù)寫過程:
首先,UFS主機(jī)和UFS設(shè)備共享密鑰,該密鑰在UFS設(shè)備出廠時(shí)就保存在UFS設(shè)備;
UFS主機(jī)在發(fā)送主機(jī)數(shù)據(jù)給UFS設(shè)備前,會(huì)用該密鑰和哈希算法生成消息認(rèn)證碼(Message Authentication Code, MAC);
UFS主機(jī)把主機(jī)數(shù)據(jù)連同MAC一起發(fā)給UFS設(shè)備;
UFS設(shè)備把收到的主機(jī)數(shù)據(jù)和共享密鑰在本地重新計(jì)算MAC,然后把計(jì)算出的MAC和收到的MAC做對(duì)比,如果一致,則認(rèn)證成功,寫入到閃存;否則,拒絕該筆數(shù)據(jù)的寫。
UFS使用HMAC(Hash-based Message Authentication Code)SHA-256算法生成消息認(rèn)證碼。HMAC運(yùn)算利用哈希算法,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出。關(guān)于HMAC具體算法,可參看https://en.wikipedia.org/wiki/HMAC,我們這里不深入。
消息認(rèn)證碼本質(zhì)是哈希值。哈希的一個(gè)特點(diǎn)是,即使只改變?cè)瓟?shù)據(jù)一比特?cái)?shù)據(jù),兩者的哈希值也是完全不同的。如果惡意攻擊者在數(shù)據(jù)傳輸過程中篡改了用戶數(shù)據(jù),那么UFS設(shè)備根據(jù)收到的數(shù)據(jù)和共享密鑰生成的MAC肯定與接收到的MAC不一樣,認(rèn)證通不過,數(shù)據(jù)就不會(huì)寫入U(xiǎn)FS設(shè)備。
這里的前提是共享密鑰不能被惡意攻擊者獲取,否則,惡意攻擊者完全可以模擬主機(jī)行為:把自己的惡意數(shù)據(jù)和共享密鑰生成MAC,然后把惡意數(shù)據(jù)和其對(duì)應(yīng)的MAC發(fā)送給UFS設(shè)備。UFS設(shè)備會(huì)認(rèn)證成功,惡意數(shù)據(jù)被寫入。所以,請(qǐng)保管好你的密碼!
但是,惡意攻擊者是狡猾的,即使他沒有辦法獲得你的密鑰,它還是有辦法對(duì)你進(jìn)行攻擊的。
惡意攻擊者監(jiān)聽到UFS主機(jī)和UFS設(shè)備之間某次數(shù)據(jù)傳輸,得到“主機(jī)數(shù)據(jù) + MAC”,然后該惡意攻擊者重復(fù)發(fā)送該“主機(jī)數(shù)據(jù) + MAC”給UFS設(shè)備,由于“主機(jī)數(shù)據(jù) + MAC”是合法的,認(rèn)證通過,UFS設(shè)備就會(huì)接收該數(shù)據(jù)并寫到閃存。惡意攻擊者如果一直重復(fù)發(fā)這些數(shù)據(jù)給UFS設(shè)備,UFS設(shè)備RPMB LU將會(huì)被寫爆!這就是重放攻擊, Replay Attack。
RPMB的全名是:Replay Protection Memory Block,它的名字暗示了RPMB是能抵御重放攻擊的。那么RPMB是怎么對(duì)付重放攻擊的呢?
UFS維護(hù)了一個(gè)寫計(jì)數(shù)(Write Counter),初始化為0。UFS設(shè)備每次成功處理完一個(gè)RPMB寫命令,寫計(jì)數(shù)加一。主機(jī)在往設(shè)備寫入數(shù)據(jù)前,獲得該計(jì)數(shù)。然后把用戶數(shù)據(jù)和該計(jì)數(shù)一起做MAC計(jì)算。這樣,即使惡意攻擊者竊聽到某次合法的“用戶數(shù)據(jù) + MAC”,往設(shè)備寫入時(shí),由于寫計(jì)數(shù)發(fā)生變化,它無法生成寫計(jì)數(shù)改變之后的MAC值,因此就無法一直重復(fù)往設(shè)備寫入某次合法的“用戶數(shù)據(jù) + MAC”。魔高一尺,道高一丈,正義終戰(zhàn)勝邪惡!
上面就是RPMB數(shù)據(jù)安全性背后的原理。下面再回到UFS RPMB協(xié)議上來。
UFS2.1中,RPMB LU最小邏輯空間為128KB,最大為16MB。它的邏輯塊大小為256B(普通LU邏輯塊大小一般為4KB)。應(yīng)用層不是通過普通的Read/Write命令讀/寫RPMB上的數(shù)據(jù),而是通過SECURITY PROTOCOL OUT/IN命令來訪問RPMB的。
UFS主機(jī)在訪問設(shè)備RPMB時(shí),是通過下面消息交互完成的。
每條消息包含一條或者若干條消息數(shù)據(jù)幀。消息數(shù)據(jù)幀大小是512字節(jié),具體如下:
從中,我們看到:
認(rèn)證密鑰(Key)是32字節(jié);
1使用SHA-256計(jì)算MAC,就是任意長(zhǎng)度的數(shù)據(jù),產(chǎn)生的MAC值總是256比特,即MAC大小為32字節(jié)。
邏輯塊數(shù)據(jù)大小為256字節(jié)。
寫計(jì)數(shù)(Write Counter)為4字節(jié),當(dāng)該值漲到0xFFFF FFFF,它就保持不動(dòng),不會(huì)繼續(xù)增長(zhǎng)了。
Address,RPMB的邏輯地址,同LBA。兩個(gè)字節(jié),最多表示65536個(gè)邏輯塊,每個(gè)邏輯塊大小為256字節(jié),因此RPMB邏輯空間最大為
Block Count,邏輯塊數(shù),即指定讀寫多少個(gè)邏輯塊。
Result,RPMB操作結(jié)果(狀態(tài))。
下面舉幾個(gè)RPMB操作例子來理解上面的消息:
主機(jī)讀取寫計(jì)數(shù)
如前所述,寫計(jì)數(shù)的目的是抵御重放攻擊。寫計(jì)數(shù)是UFS設(shè)備管理和維護(hù)的,UFS設(shè)備遞增該計(jì)數(shù)。主機(jī)在寫數(shù)據(jù)時(shí),需要知道該計(jì)數(shù),然后加上用戶數(shù)據(jù),一起計(jì)算MAC。
命令層發(fā)SECURITY PROTOCOL OUT/IN命令讀取寫計(jì)數(shù),然后傳輸層生成相應(yīng)的UPIU進(jìn)行主機(jī)與設(shè)備之間的交互,具體見上圖。
主機(jī)寫認(rèn)證數(shù)據(jù)
主機(jī)命令層通過SECURITY PROTOCOL OUT命令把用戶數(shù)據(jù)和對(duì)應(yīng)的MAC發(fā)送給設(shè)備,然后通過SECURITY PROTOCOL OUT請(qǐng)求獲取前面數(shù)據(jù)寫結(jié)果,最后通過SECURITY PROTOCOL IN讀取寫結(jié)果。寫結(jié)果中包含新的寫計(jì)數(shù),這樣下次主機(jī)利用新的寫計(jì)數(shù)計(jì)算MAC。注意,只有本次寫認(rèn)證數(shù)據(jù)成功,設(shè)備才會(huì)遞增該計(jì)數(shù)。
主機(jī)讀認(rèn)證數(shù)據(jù)
首先,主機(jī)通過SECURITY PROTOCOL OUT命令發(fā)送讀取認(rèn)證數(shù)據(jù)請(qǐng)求給設(shè)備,然后發(fā)送SECURITY PROTOCOL IN命令讀取數(shù)據(jù)。
注意,主機(jī)讀取數(shù)據(jù)也是需要認(rèn)證的。在設(shè)備端,UFS設(shè)備會(huì)計(jì)算MAC,然后主機(jī)端根據(jù)MAC認(rèn)證該數(shù)據(jù)。這樣可以防止惡意攻擊者在數(shù)據(jù)傳輸過程中(從設(shè)備到主機(jī)),用惡意數(shù)據(jù)更換原始數(shù)據(jù)。
RPMB提供了認(rèn)證訪問方式和抵御重放攻擊的機(jī)制,保證了存儲(chǔ)在RPMB LU上數(shù)據(jù)的安全。因此,用戶可以把一些敏感和重要的信息寫在RPMB上。在實(shí)際應(yīng)用中,它通常用于存儲(chǔ)一些有防止非法篡改需求的數(shù)據(jù),例如手機(jī)上指紋支付相關(guān)的公鑰、序列號(hào)等敏感信息。
-
Mac
+關(guān)注
關(guān)注
0文章
1110瀏覽量
51717 -
Out
+關(guān)注
關(guān)注
0文章
31瀏覽量
13148 -
數(shù)據(jù)保護(hù)
+關(guān)注
關(guān)注
1文章
110瀏覽量
13556 -
UFS
+關(guān)注
關(guān)注
6文章
105瀏覽量
24157
原文標(biāo)題:蛋蛋讀UFS之八:RPMB
文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論