1. 程式人生 > >RPMB原理介紹【轉】

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 不會被非法篡改。