eMMC中的RPMB分割槽

2021-09-27 06:41:12 字數 1930 閱讀 2548

rpmb(replay protected memory block)partition 是 emmc 中的乙個具有安全特性的分割槽。

emmc 在寫入資料到 rpmb 時,會校驗資料的合法性,只有指定的 host 才能夠寫入,同時在讀資料時,也提供了簽名機制,保證 host 讀取到的資料是 rpmb 內部資料,而不是攻擊者偽造的資料。

rpmb 在實際應用中,通常用於儲存一些有防止非法篡改需求的資料,例如手機上指紋支付相關的公鑰、序列號等。rpmb 可以對寫入操作進行鑑權,但是讀取並不需要鑑權,任何人都可以進行讀取的操作,因此儲存到 rpmb 的資料通常會進行加密後再儲存。

兩個 rpmb partition 的大小是由 extended csd register 的 boot_size_mult field 決定,大小的計算公式如下:

size = 128kbytes x boot_size_mult

一般情況下,boot area partition 的大小是128kb的倍數,emmc中預設為 4 mb,即 rpmb_size_mult 為 32,部分晶元廠家會提供改寫 rpmb_size_mult 的功能來改變 rpmb partition 的容量大小。rpmb_size_mult 最大可以為 128,即 boot area partition 的最大容量大小可以為 128 x 128 kb = 16384 kb = 16 mb。

使用 emmc 的產品,在產線生產時,會為每乙個產品生產乙個唯一的 256 bits 的 secure key,燒寫到 emmc 的 otp 區域(只能燒寫一次的區域),同時 host 在安全區域中(例如:tee)也會保留該 secure key。

在 emmc 內部,還有乙個rpmb write counter。rpmb 每進行一次合法的寫入操作時,write counter 就會自動加一 。

通過 secure key 和 write counter 的應用,rmpb 可以實現資料讀取和寫入的 replay protect。

rpmb 資料讀取的流程如下:

1、 host 向 emmc 發起讀 rpmb 的請求,同時生成乙個 16 bytes 的隨機數,傳送給 emmc。

2、 emmc 將請求的資料從 rpmb 中讀出,並使用 secure key 通過 hmac sha-256 演算法,計算讀取到的資料和接收到的隨機數拼接到一起後的簽名。然後,emmc 將讀取到的資料、接收到的隨機數、計算得到的簽名一併傳送給 host。

3、 host 接收到 rpmb 的資料、隨機數以及簽名後,首先比較隨機數是否與自己傳送的一致,如果一致,再用同樣的 secure key 通過 hmac sha-256 演算法對資料和隨機數組合到一起進行簽名,如果簽名與 emmc 傳送的簽名是一致的,那麼就可以確定該資料是從 rpmb 中讀取到的正確資料,而不是攻擊者偽造的資料。

通過上述的讀取流程,可以保證 host 正確的讀取到 rpmb 的資料。

rpmb 資料寫入的流程如下:

1、host 按照上面的讀資料流程,讀取 rpmb 的 write counter(通過write counter來識別資料的有效性)。

2、 host 將需要寫入的資料和 write counter 拼接到一起並計算簽名,然後將資料、write counter 以及簽名一併發給 emmc。

3、emmc 接收到資料後,先對比 write counter 是否與當前的值相同,如果相同那麼再對資料和 write counter 的組合進行簽名,然後和 host 傳送過來的簽名進行比較,如果簽名相同則鑑權通過,將資料寫入到 rpmb 中。

通過上述的寫入流程,可以保證 rpmb 不會被非法篡改。

注意:ufs中rpmb也採用了和emmc相同的原理。

emmc分割槽指令碼編寫示例

一 sfdisk指令碼例項 1.1 例項指令碼 bin sh mmcblk1p01 boot boot system offset 10 root system size 90 mmcblk1p2 rootfs mmc partition1 offset 100 mmc partition1 siz...

emmc分割槽初始化

emmc卡檢測到後先從mmc init card得到並構建card引數,如向mmc控制器獲取boot0 boot1 rpmb物理節點分割槽再通過mmc part add加入card中,card nr parts顯示有幾塊物理分割槽 emmc 出廠就有的 0.612375 3 0 6 kworker ...

EMMC中的檔案修改

ls mmc 1 1發現其中的檔案並不是自己修改之後的linux映象檔案和修改後的裝置樹,修改 修改 fatwrite mmc 1 1 80800000 zimage 0x 檔案大小 fatwrite mmc 1 1 83000000 imx6ull lux emmc.dtb 0x 檔案大小 出現問...