设备状态表明软件可以多自由地刷入设备以及是否强制执行验证。设备状态为 LOCKED
和 UNLOCKED
。LOCKED
设备会阻止您向设备刷入新软件,而 UNLOCKED
设备允许修改。
当设备开机时,引导程序首先检查设备是 LOCKED
还是 UNLOCKED
。如果设备是 UNLOCKED
,即使加载的操作系统未通过信任根签名,引导程序也会向用户显示警告,然后继续启动。
如果设备是 LOCKED
,引导程序将执行验证启动中的步骤来验证设备的软件。LOCKED
设备仅在加载的操作系统通过信任根正确签名时才启动。有关更多详细信息,请参阅启动流程。
更改设备状态
要更改设备状态,请使用 fastboot flashing [unlock | lock]
命令。为了保护用户数据,所有状态转换都会擦除数据分区,并在删除数据之前请求用户确认。
UNLOCKED
到 LOCKED
的转换在用户购买二手开发设备时是预期的。由于锁定设备,只要没有警告,用户就应该确信设备处于设备制造商生产的状态。LOCKED
到 UNLOCKED
的转换是在开发人员希望禁用设备上的验证以进行开发时预期的。
信任根
信任根是用于签署存储在设备上的 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