在UFS里,有這么一個(gè)LU,主機(jī)往該LU寫(xiě)數(shù)據(jù)時(shí),UFS設(shè)備會(huì)校驗(yàn)數(shù)據(jù)的合法性,只有特定的主機(jī)才能寫(xiě)入;同時(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)證、情書(shū)等。輸入密碼,打開(kāi)密碼箱,然后放東西進(jìn)去;取的時(shí)候,首先需要密碼打開(kāi)保險(xiǎn)箱,然后把東西取出。沒(méi)有密碼,老婆是萬(wàn)萬(wàn)看不到老公和他初戀之間的情書(shū)的。RPMB就像是手機(jī)里的密碼箱,用戶(hù)可以把一些重要數(shù)據(jù)存儲(chǔ)其中。
我們來(lái)看看RPMB這個(gè)數(shù)據(jù)保護(hù)保險(xiǎn)箱。
UFS主機(jī)通過(guò)認(rèn)證(authenticated)的方式訪(fǎng)問(wèn)RPMB LU。下圖展示了數(shù)據(jù)寫(xiě)過(guò)程:
首先,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)證成功,寫(xiě)入到閃存;否則,拒絕該筆數(shù)據(jù)的寫(xiě)。
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ù)傳輸過(guò)程中篡改了用戶(hù)數(shù)據(jù),那么UFS設(shè)備根據(jù)收到的數(shù)據(jù)和共享密鑰生成的MAC肯定與接收到的MAC不一樣,認(rèn)證通不過(guò),數(shù)據(jù)就不會(huì)寫(xiě)入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ù)被寫(xiě)入。所以,請(qǐng)保管好你的密碼!
但是,惡意攻擊者是狡猾的,即使他沒(méi)有辦法獲得你的密鑰,它還是有辦法對(duì)你進(jìn)行攻擊的。
惡意攻擊者監(jiān)聽(tīng)到UFS主機(jī)和UFS設(shè)備之間某次數(shù)據(jù)傳輸,得到“主機(jī)數(shù)據(jù) + MAC”,然后該惡意攻擊者重復(fù)發(fā)送該“主機(jī)數(shù)據(jù) + MAC”給UFS設(shè)備,由于“主機(jī)數(shù)據(jù) + MAC”是合法的,認(rèn)證通過(guò),UFS設(shè)備就會(huì)接收該數(shù)據(jù)并寫(xiě)到閃存。惡意攻擊者如果一直重復(fù)發(fā)這些數(shù)據(jù)給UFS設(shè)備,UFS設(shè)備RPMB LU將會(huì)被寫(xiě)爆!這就是重放攻擊, Replay Attack。
RPMB的全名是:Replay Protection Memory Block,它的名字暗示了RPMB是能抵御重放攻擊的。那么RPMB是怎么對(duì)付重放攻擊的呢?
UFS維護(hù)了一個(gè)寫(xiě)計(jì)數(shù)(Write Counter),初始化為0。UFS設(shè)備每次成功處理完一個(gè)RPMB寫(xiě)命令,寫(xiě)計(jì)數(shù)加一。主機(jī)在往設(shè)備寫(xiě)入數(shù)據(jù)前,獲得該計(jì)數(shù)。然后把用戶(hù)數(shù)據(jù)和該計(jì)數(shù)一起做MAC計(jì)算。這樣,即使惡意攻擊者竊聽(tīng)到某次合法的“用戶(hù)數(shù)據(jù) + MAC”,往設(shè)備寫(xiě)入時(shí),由于寫(xiě)計(jì)數(shù)發(fā)生變化,它無(wú)法生成寫(xiě)計(jì)數(shù)改變之后的MAC值,因此就無(wú)法一直重復(fù)往設(shè)備寫(xiě)入某次合法的“用戶(hù)數(shù)據(jù) + MAC”。魔高一尺,道高一丈,正義終戰(zhàn)勝邪惡!
上面就是RPMB數(shù)據(jù)安全性背后的原理。下面再回到UFS RPMB協(xié)議上來(lái)。
UFS2.1中,RPMB LU最小邏輯空間為128KB,最大為16MB。它的邏輯塊大小為256B(普通LU邏輯塊大小一般為4KB)。應(yīng)用層不是通過(guò)普通的Read/Write命令讀/寫(xiě)RPMB上的數(shù)據(jù),而是通過(guò)SECURITY PROTOCOL OUT/IN命令來(lái)訪(fǎng)問(wèn)RPMB的。
UFS主機(jī)在訪(fǎng)問(wèn)設(shè)備RPMB時(shí),是通過(guò)下面消息交互完成的。
每條消息包含一條或者若干條消息數(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é)。
寫(xiě)計(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ù),即指定讀寫(xiě)多少個(gè)邏輯塊。
Result,RPMB操作結(jié)果(狀態(tài))。
下面舉幾個(gè)RPMB操作例子來(lái)理解上面的消息:
主機(jī)讀取寫(xiě)計(jì)數(shù)
如前所述,寫(xiě)計(jì)數(shù)的目的是抵御重放攻擊。寫(xiě)計(jì)數(shù)是UFS設(shè)備管理和維護(hù)的,UFS設(shè)備遞增該計(jì)數(shù)。主機(jī)在寫(xiě)數(shù)據(jù)時(shí),需要知道該計(jì)數(shù),然后加上用戶(hù)數(shù)據(jù),一起計(jì)算MAC。
命令層發(fā)SECURITY PROTOCOL OUT/IN命令讀取寫(xiě)計(jì)數(shù),然后傳輸層生成相應(yīng)的UPIU進(jìn)行主機(jī)與設(shè)備之間的交互,具體見(jiàn)上圖。
主機(jī)寫(xiě)認(rèn)證數(shù)據(jù)
主機(jī)命令層通過(guò)SECURITY PROTOCOL OUT命令把用戶(hù)數(shù)據(jù)和對(duì)應(yīng)的MAC發(fā)送給設(shè)備,然后通過(guò)SECURITY PROTOCOL OUT請(qǐng)求獲取前面數(shù)據(jù)寫(xiě)結(jié)果,最后通過(guò)SECURITY PROTOCOL IN讀取寫(xiě)結(jié)果。寫(xiě)結(jié)果中包含新的寫(xiě)計(jì)數(shù),這樣下次主機(jī)利用新的寫(xiě)計(jì)數(shù)計(jì)算MAC。注意,只有本次寫(xiě)認(rèn)證數(shù)據(jù)成功,設(shè)備才會(huì)遞增該計(jì)數(shù)。
主機(jī)讀認(rèn)證數(shù)據(jù)
首先,主機(jī)通過(guò)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ù)傳輸過(guò)程中(從設(shè)備到主機(jī)),用惡意數(shù)據(jù)更換原始數(shù)據(jù)。
RPMB提供了認(rèn)證訪(fǎng)問(wèn)方式和抵御重放攻擊的機(jī)制,保證了存儲(chǔ)在RPMB LU上數(shù)據(jù)的安全。因此,用戶(hù)可以把一些敏感和重要的信息寫(xiě)在RPMB上。在實(shí)際應(yīng)用中,它通常用于存儲(chǔ)一些有防止非法篡改需求的數(shù)據(jù),例如手機(jī)上指紋支付相關(guān)的公鑰、序列號(hào)等敏感信息。
-
Mac
+關(guān)注
關(guān)注
0文章
1117瀏覽量
53106 -
Out
+關(guān)注
關(guān)注
0文章
31瀏覽量
13397 -
數(shù)據(jù)保護(hù)
+關(guān)注
關(guān)注
1文章
119瀏覽量
13747 -
UFS
+關(guān)注
關(guān)注
6文章
110瀏覽量
25185
原文標(biāo)題:蛋蛋讀UFS之八:RPMB
文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
保險(xiǎn)箱智能化真的有必要嗎?
基于無(wú)線(xiàn)傳感器網(wǎng)絡(luò)智能保險(xiǎn)箱安防系統(tǒng)的設(shè)計(jì)(一)
IC 卡保險(xiǎn)箱
基于WiFi的51單片機(jī)雙層密碼保險(xiǎn)箱的設(shè)計(jì)與實(shí)現(xiàn)_曾維鵬
DIY機(jī)器人開(kāi)二手保險(xiǎn)箱
塑料的保險(xiǎn)箱 你敢用嗎?
使用C51單片機(jī)和Proteus仿真設(shè)計(jì)密碼保險(xiǎn)箱的應(yīng)用實(shí)例資料免費(fèi)下載

帶振動(dòng)感應(yīng)功能的保險(xiǎn)箱保證您的保險(xiǎn)箱財(cái)產(chǎn)安全
了解如何創(chuàng)建Arduino保險(xiǎn)箱

基于Arduino并由紙板制成的保險(xiǎn)箱

評(píng)論