設備狀態

設備狀態指示軟件可以多麼自由地刷新到設備以及是否強制執行驗證。設備狀態為LOCKEDUNLOCKEDLOCKED設備阻止您將新軟件刷入設備,而UNLOCKED設備允許修改。

當設備上電時,引導加載程序首先檢查設備是LOCKED還是UNLOCKED 。如果設備是UNLOCKED ,引導加載程序會向用戶顯示警告,然後繼續引導,即使加載的操作系統沒有由信任根簽名。

如果設備處於LOCKED狀態,則引導加載程序會執行驗證引導中的步驟來驗證設備的軟件。當加載的操作系統由信任根正確簽名時, LOCKED設備才會啟動。有關更多詳細信息,請參閱引導流程

更改設備狀態

更改設備的狀態,請使用fastboot flashing [unlock | lock]命令。為了保護用戶數據,所有狀態轉換都會擦除數據分區並在刪除數據之前要求用戶確認。

當用戶購買使用過的開發設備時,預計會發生UNLOCKEDLOCKED的轉換。作為鎖定設備的結果,用戶應該確信它處於設備製造商生產的狀態,只要沒有警告。當開發人員出於開發目的而希望禁用設備上的驗證時,預計會發生LOCKEDUNLOCKED的轉換。

信任之根

信任根是用於對存儲在設備上的 Android 副本進行簽名的加密密鑰。信任根的私有部分只有設備製造商知道,並用於簽署要分發的每個 Android 版本。信任根的公共部分嵌入在設備中並存儲在一個不能被篡改的地方(通常是只讀存儲)。

當它加載 Android 時,引導加載程序使用信任根來驗證真實性。有關此過程的更多詳細信息,請參閱驗證引導。設備可能有多個引導加載程序,因此可能有多個加密密鑰在起作用。

用戶可設置的信任根

設備可以選擇允許用戶配置信任根(例如,公鑰)。設備可以將此用戶可設置的信任根用於驗證啟動,而不是內置的信任根。這允許用戶在不犧牲驗證啟動的安全改進的情況下安裝和使用自定義版本的 Android。

如果實現了用戶可設置的信任根,則應採用以下方式:

  • 設置/清除用戶可設置的信任根需要物理確認。
  • 用戶可設置的信任根只能由最終用戶設置。在最終用戶獲得設備之前,不能在工廠或任何中間點進行設置。
  • 用戶可設置的信任根存儲在防篡改存儲中。防篡改意味著可以檢測 Android 是否篡改了數據,例如,數據是否被覆蓋或更改。
  • 如果設置了用戶可設置的信任根,則設備應允許使用內置信任根或用戶可設置的信任根簽名的 Android 版本啟動。
  • 每次設備使用用戶可設置的信任根啟動時,都應通知用戶設備正在加載自定義版本的 Android。例如,警告屏幕,請參閱LOCKED devices with custom key set

實現用戶可設置的信任根的一種方法是擁有一個虛擬分區,該分區只能在設備處於UNLOCKED狀態時刷新或清除。 Google Pixel 2 設備使用這種方法,虛擬分區稱為avb_custom_key 。此分區中數據的格式是avbtool extract_public_key命令的輸出。以下是如何設置用戶可設置信任根的示例:

avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin

可以通過發出以下命令清除用戶可設置的信任根:

fastboot erase avb_custom_key