设备状态

设备状态表明软件可以多自由地刷入设备以及是否强制执行验证。设备状态为 LOCKEDUNLOCKEDLOCKED 设备会阻止您向设备刷入新软件,而 UNLOCKED 设备允许修改。

当设备开机时,引导程序首先检查设备是 LOCKED 还是 UNLOCKED。如果设备是 UNLOCKED,即使加载的操作系统未通过信任根签名,引导程序也会向用户显示警告,然后继续启动。

如果设备是 LOCKED,引导程序将执行验证启动中的步骤来验证设备的软件。LOCKED 设备在加载的操作系统通过信任根正确签名时才启动。有关更多详细信息,请参阅启动流程

更改设备状态

更改设备状态,请使用 fastboot flashing [unlock | lock] 命令。为了保护用户数据,所有状态转换都会擦除数据分区,并在删除数据之前请求用户确认。

UNLOCKEDLOCKED 的转换在用户购买二手开发设备时是预期的。由于锁定设备,只要没有警告,用户就应该确信设备处于设备制造商生产的状态。LOCKEDUNLOCKED 的转换是在开发人员希望禁用设备上的验证以进行开发时预期的。

信任根

信任根是用于签署存储在设备上的 Android 副本的加密密钥。信任根的私有部分仅设备制造商知道,用于签署每个 intended 用于分发的 Android 版本。信任根的公共部分嵌入在设备中,并存储在无法篡改的位置(通常为只读存储)。

当加载 Android 时,引导程序使用信任根来验证真实性。有关此过程的更多详细信息,请参阅验证启动。设备可能具有多个引导程序,因此可能会使用多个加密密钥。

用户可设置的信任根

设备可以选择允许用户配置信任根(例如,公钥)。设备可以,并且 Google Pixel 设备确实如此,除了内置信任根之外,还使用此用户可设置的信任根进行 Verified Boot。

如果实施用户可设置的信任根,则应以如下方式进行

  • 设置/清除用户可设置的信任根需要物理确认。
  • 用户可设置的信任根只能由最终用户设置。它不能在工厂或最终用户获得设备之前的任何中间点设置。
  • 用户可设置的信任根存储在防篡改存储中。防篡改意味着可以检测 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