eMMC RPMB分割槽介紹

2021-08-08 21:26:31 字數 2063 閱讀 1685

emmc標準中,將內部的 flash memory 劃分為 4 類區域,最多可以支援 8 個硬體分割槽,如下圖所示:+

一般情況下,boot area partitions 和 rpmb partition 的容量大小通常都為 4mb,部分晶元廠家也會提供配置的機會。general purpose partitions (gpp) 則在出廠時預設不被支援,即不存在這些分割槽,需要使用者主動使能,並配置其所要使用的 gpp 的容量大小,gpp 的數量可以為 1 - 4 個,各個 gpp 的容量大小可以不一樣。user data area (uda) 的容量大小則為總容量大小減去其他分割槽所占用的容量。更多各個分割槽的細節將在後續小節中描述。

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 的大小為 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 資料讀取

rpmb 資料讀取的流程如下:

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

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

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

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

rpmb 資料寫入

rpmb 資料寫入的流程如下:

host 按照上面的讀資料流程,讀取 rpmb 的 write counter。

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

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

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

Linux分割槽介紹

在linux中,每乙個硬體裝置都對映到乙個系統的檔案,對於硬碟 光碟機等ide或scsi裝置也不例外。linux把各種ide裝置分配了乙個由hd字首組成的檔案 而對於各種scsi裝置,則分配了乙個由sd字首組成的檔案。例如,第乙個ide裝置,linux就定義為hda 第二個ide裝置就定義為hdb ...

OpenWrt Flash分割槽介紹

以前是從事ip camera開發,涉及到很少的關於flash layer的開發,只是簡單接觸過我們內部的flash 分割槽等基本資訊,了解過我們的公升級過程等資訊,與路由器還是有很多區別的,需要掌握的技能還是很多的。閒話就扯到這裡,openwrt上的flash layout 這裡有最official...

mysql分割槽介紹

昨天在寫wordpress怎麼分庫分表的時候突然想起了mysql可以分割槽,這個是mysql自帶的功能。mysql分割槽 主要是將一大表,根據條件分割成若干個小表。mysql5.1開始支援資料表分割槽了。這個分表的類似 mysql分割槽的優點 分割槽的目的都是用來提公升效能,沒有分割槽之前,資料每次...