設備狀態指示軟體可以如何自由地刷新到設備以及是否強制執行驗證。設備狀態為LOCKED
和UNLOCKED
。 LOCKED
設備會阻止您將新軟體刷新到設備,而UNLOCKED
設備則允許修改。
當設備開機時,引導程式會先檢查設備是否處於LOCKED
或UNLOCKED
狀態。如果裝置處於UNLOCKED
,引導程式會向使用者顯示警告,然後繼續引導,即使載入的作業系統未經信任根簽署也是如此。
如果裝置已LOCKED
,引導程式將執行驗證引導中的步驟來驗證裝置的軟體。只有當載入LOCKED
裝置才會啟動。有關更多詳細信息,請參閱引導流程。
更改設備狀態
若要變更裝置的狀態,請使用fastboot flashing [unlock | lock]
命令。為了保護用戶數據,所有狀態轉換都會擦除資料分區,並在刪除資料之前要求用戶確認。
當使用者購買二手開發設備時,預計會發生從UNLOCKED
到LOCKED
轉變。由於鎖定設備,只要沒有警告,使用者就應該確信它處於設備製造商生產的狀態。當開發人員出於開發目的希望停用設備上的驗證時,預計會發生LOCKED
到UNLOCKED
轉換。
信任之根
信任根是用於對裝置上儲存的 Android 副本進行簽署的加密金鑰。信任根的私有部分只有裝置製造商知道,用於簽署要分發的每個 Android 版本。信任根的公共部分嵌入在裝置中並儲存在無法篡改的位置(通常是唯讀儲存)。
當載入 Android 時,引導程式使用信任根來驗證真實性。有關此過程的更多詳細信息,請參閱驗證啟動。設備可能有多個引導程序,因此可能有多個加密金鑰在起作用。
用戶可設定的信任根
設備可以選擇允許使用者配置信任根(例如公鑰)。裝置可以使用此使用者可設定的信任根進行驗證啟動,而不是內建信任根。這允許用戶安裝和使用自訂版本的 Android,而無需犧牲驗證啟動的安全性改進。
如果實現了使用者可設定的信任根,則應以以下方式完成:
- 設定/清除使用者可設定的信任根需要物理確認。
- 使用者可設定的信任根只能由最終使用者設定。它無法在工廠或最終用戶獲得設備之前的任何中間點進行設定。
- 使用者可設定的信任根儲存在防篡改儲存中。防篡改意味著可以偵測 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