建议的设备启动流程如下所示:
![启动时验证流程](https://source.android.google.cn/static/docs/security/images/verified-boot-flow.png?authuser=4&hl=hr)
适用于 A/B 设备的流程
如果设备使用的是 A/B 系统,则启动流程略有不同。必须先使用启动控件 HAL 将要启动的槽位标记为 SUCCESSFUL
,然后再更新回滚保护 (Rollback Protection) 元数据。
如果平台更新失败(未标记为 SUCCESSFUL
),A/B 堆栈便会回退至仍具有先前 Android 版本的另一槽位。不过,如果已设置回滚保护元数据,之前的版本会因回滚保护而无法启动。
将启动时验证状态传达给用户
确定设备的启动状态后,您需要将该状态传达给用户。如果设备没有任何问题,则会继续运行,而不显示任何内容。启动时验证问题分为以下几类:
- 黄色:针对设有自定义信任根的已锁定设备的警告屏幕
- 橙色:针对未锁定设备的警告屏幕
- 红色 (eio):针对 dm-verity 损坏的警告屏幕
- 红色 (no os found):未找到有效的操作系统
具有自定义信任根的已锁定设备
黄色屏幕示例:
![黄色设备警告屏幕](https://source.android.google.cn/static/docs/security/images/boot_yellow1.png?authuser=4&hl=hr)
如果设备处于已锁定状态,已设置自定义的信任根,并且映像已使用该自定义信任根进行签名,则会在每次启动时显示黄色屏幕。黄色屏幕会在 10 秒钟后关闭,并且设备会继续启动。如果用户按下电源按钮,“按电源按钮即可暂停”文字便会更改为“按电源按钮即可继续”,并且该屏幕永远都不会关闭,但设备可能会调暗或关闭显示屏以防烧屏。如果再次按下按钮,该屏幕便会关闭,并且手机会继续启动。
对于hex-number,请使用用于验证的 libavb 表示形式公钥的 sha256 的前 8 位数字,例如 d14a028c
。
建议采用的文本:
您的设备加载了不同的操作系统。
请在其他设备上访问此链接以了解详情:
g.co/ABH
ID:hex-number
按电源按钮即可暂停
已解锁的设备
橙色屏幕示例:
![橙色设备警告屏幕](https://source.android.google.cn/static/docs/security/images/boot_orange.png?authuser=4&hl=hr)
如果设备处于已解锁状态,则会在每次启动时显示橙色屏幕。橙色屏幕会在 10 秒钟后关闭,并且设备会继续启动。如果用户按下电源按钮,“按电源按钮即可暂停”文字便会更改为“按电源按钮即可继续”,并且该屏幕永远都不会关闭(设备可能会根据需要调暗和/或关闭显示屏,以防出现烧屏或类似问题)。如果再次按下按钮,该屏幕便会关闭,并且手机会继续启动。
对于hex-number,请使用用于验证的 libavb 表示形式公钥的 sha256 的前 8 位数字,例如 d14a028c
。
建议采用的文本:
引导加载程序已解锁,无法保证软件完整性。攻击者可能可以获取设备上存储的所有数据。请勿在此设备上存储任何敏感数据。
请在其他设备上访问此链接以了解详情:
g.co/ABH
ID:hex-number
按电源按钮即可暂停。
dm-verity 损坏
红色 eio 屏幕示例:
![红色 eio 设备警告屏幕](https://source.android.google.cn/static/docs/security/images/boot_red1.png?authuser=4&hl=hr)
如果找到 Android 的有效版本,并且设备当前处于 eio
dm-verity 模式,则会显示红色 eio
屏幕。用户需要按电源按钮才能继续。如果用户未在 30 秒内确认警告屏幕,设备将关机(以防烧屏并节省电量)。
建议采用的文本:
您的设备已损坏。该设备不可信任,并且可能无法正常工作。
请在其他设备上访问此链接以了解详情:
g.co/ABH
按电源按钮即可继续。
找不到有效的操作系统
红色屏幕示例:
![红色损坏设备警告屏幕](https://source.android.google.cn/static/docs/security/images/boot_red2.png?authuser=4&hl=hr)
如果找不到有效的 Android 版本,屏幕会显示红色。设备无法继续启动。如果用户未在 30 秒内确认警告屏幕,设备将关机(以防烧屏并节省电量)。
对于hex-number,请使用用于验证的 libavb 表示形式公钥的 sha256 的前 8 位数字,例如 d14a028c
。
建议采用的文本:
找不到有效的操作系统。设备无法启动。
请在其他设备上访问此链接以了解详情:
g.co/ABH
ID:hex-number
按电源按钮即可关机。
解锁确认
屏幕示例:
![解锁设备警告屏幕](https://source.android.google.cn/static/docs/security/images/unlock-confirmation.png?authuser=4&hl=hr)
显示一个解锁确认屏幕,以响应通过 fastboot 接口执行的 fastboot flashing unlock
命令。初始选中的是“不解锁”选项。如果用户未在 30 秒内与警告屏幕互动,屏幕会消失并且该命令会失败。
建议采用的文本:
如果您解锁引导加载程序,则可以在此手机上安装自定义操作系统软件。自定义操作系统未经过与原始操作系统相同级别的测试,可能会导致您的手机和已安装的应用停止正常工作。使用自定义操作系统无法保证软件完整性,因此在引导加载程序处于解锁状态时存储在手机上的所有数据都可能面临风险。
为防止他人未经授权访问您的个人数据,解锁引导加载程序还将删除您手机上的所有个人数据。
按音量调高按钮/音量调低按钮可选择是否解锁引导加载程序,然后按电源按钮即可继续。
解锁
解锁引导加载程序。
不解锁
不解锁引导加载程序并重启手机。
锁定确认
显示一个锁定确认屏幕,以响应通过 fastboot 接口执行的 fastboot flashing
lock
命令。初始选中的是“不锁定”选项。如果用户未在 30 秒内与警告屏幕互动,屏幕会消失并且该命令会失败。
文本:
如果您锁定引导加载程序,则无法在此手机上安装自定义操作系统软件。为防止他人未经授权访问您的个人数据,锁定引导加载程序还将删除您手机上的所有个人数据。
按音量调高按钮/音量调低按钮可选择是否锁定引导加载程序,然后按电源按钮即可继续。
锁定
锁定引导加载程序。
不锁定
不锁定引导加载程序并重启手机。
将启动时验证状态传达给 Android
屏幕示例:
![锁定确认设备警告屏幕](https://source.android.google.cn/static/docs/security/images/lock-confirmation.png?authuser=4&hl=hr)
引导加载程序通过内核命令参数或 bootconfig(从 Android 12 开始)将启动时验证状态传达给 Android。它会将 androidboot.verifiedstate
选项设置为以下其中一个值:
green
:如果设备处于LOCKED
状态且未使用可由用户设置的信任根yellow
:如果设备处于LOCKED
状态且使用了可由用户设置的信任根orange
:如果设备处于UNLOCKED
状态
androidboot.veritymode
选项设置为 eio
或 restart
,具体取决于启动加载程序在处理 dm-verity 错误时所处的状态。如需了解详情,请参阅处理验证错误。