設備狀態

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

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

如果設備被LOCKED ,則引導加載程序將通過“驗證引導”中的步驟來驗證設備的軟件。只有在加載的操作系統已由信任根正確簽名的情況下, LOCKED設備才會啟動。有關更多詳細信息,請參見引導流程

更改設備狀態

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

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

信任的根源

信任根是用於對存儲在設備上的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