eMMC中的RPMB分區

原文鏈接:https://blog.csdn.net/shenjin_s/article/details/79868375

RPMB介紹:

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。

Replay Protect 原理

使用 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 數據讀取

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 數據寫入

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相同的原理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章