裝置狀態

裝置狀態會指出軟體可以自由地刷新至裝置,以及是否強制執行驗證。裝置狀態為 LOCKEDUNLOCKEDLOCKED 裝置會禁止您將新軟體刷新至裝置,而 UNLOCKED 裝置則允許修改。

裝置開機時,Bootloader 會先檢查裝置是否為 LOCKEDUNLOCKED。如果裝置為 UNLOCKED,即使已載入的作業系統未經信任根簽署,引導程式也會向使用者顯示警告,然後繼續啟動作業系統。

如果裝置為 LOCKED,系統啟動載入程式會按照「驗證開機程序」中的步驟驗證裝置軟體。LOCKED 裝置只會在載入的作業系統已由信任根鍵正確簽署的情況下啟動。詳情請參閱「啟動流程」。

變更裝置狀態

如要變更裝置狀態,請使用 fastboot flashing [unlock | lock] 指令。為保護使用者資料,所有狀態轉換都會清除資料分區,並在刪除資料前要求使用者確認。

使用者購買二手開發人員裝置時,系統會預期 UNLOCKEDLOCKED 的轉換。由於裝置已鎖定,只要沒有警告,使用者就能放心,裝置處於裝置製造商所產生的狀態。開發人員如要為了開發目的在裝置上停用驗證功能,就會預期 LOCKEDUNLOCKED 的轉換。

信任根

信任根是用來簽署儲存在裝置上的 Android 副本的加密編譯金鑰。信任根的私密部分只有裝置製造商知道,用於簽署每個要發布的 Android 版本。信任根的公開部分會嵌入裝置中,並儲存在不會遭到竄改的位置 (通常是唯讀儲存空間)。

載入 Android 時,Bootloader 會使用信任根來驗證真實性。如要進一步瞭解這項程序,請參閱「驗證開機程序」。裝置可能有多個啟動載入器,因此可能會使用多個加密編譯金鑰。

使用者可設定的信任根

裝置可選擇允許使用者設定信任根 (例如公開金鑰)。除了內建的信任根之外,裝置 (Google Pixel 裝置就是一例) 也可以使用這個可由使用者設定的信任根,用於驗證啟動功能。

如果實作可由使用者設定的信任根,應以以下方式進行:

  • 如要設定/清除使用者可設定的信任根,必須進行實體確認。
  • 只有使用者可以設定信任的根。在終端使用者取得裝置之前,無法在工廠或任何中途點設定此值。
  • 使用者可設定的信任根會儲存在防竄改儲存空間中。「Tamper-evident」是指可偵測 Android 是否竄改資料,例如資料是否遭到覆寫或變更。
  • 如果設定了使用者可設定的信任根,裝置應允許使用內建信任根或使用者可設定的信任根簽署的 Android 版本啟動。
  • 每次使用者設定信任根目錄來啟動裝置時,系統都應通知使用者裝置正在載入自訂版 Android。如需警告畫面等範例,請參閱「LOCKED 裝置使用自訂鍵組合」。

實作使用者可設定信任根的一種方法,是建立虛擬分區,該分區只能在裝置處於 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