我知道这是个老问题,但无论如何这里有一些答案,因为官方文档缺少许多重要细节:
AVB 的文档可以在 Google 开发者网站和官方代码库中找到。
dm-verity 在 Android 启动过程中何时运行?
dm-verity是一个内核扩展,在挂载分区时和运行时运行。但是,Android Verified Boot 进程会在内核加载之前启动。更准确地说,您设备的 ROM 引导加载程序会在加载内核 (boot.img) 之前验证它的完整性,从而防止内核被损坏。一旦内核被加载,dm-verity 就会生效。您应该知道,验证启动的实现是由每个供应商定制的。例如,华为和三星使用自己的实现。
dm-verity 是否在“安全世界”中运行?如果是这样,如何验证“安全世界”操作系统加载?
如前所述,dm-verity 是内核扩展,在内核级别运行,Arm TrustZone 是 CPU 的安全扩展,在内核加载之前运行。TrustZone 在硬件级别上运行,三星 Knox等产品使用 Arm TrustZone 进行实时内核验证。dm-verity 本身不需要在 TrustZone 中运行,但 dm-verity 的自定义实现可能使用 TrustZone 进行加密操作。例如,三星使用 TrustZone 进行密钥认证。
TrustZone 不是 Android Verified Boot 的直接组成部分,因为它是一种商业产品。它被三星等公司用于在启动阶段和运行时对内核进行额外验证。Android 验证启动不是必需的或强制的。通常使用 AVB 的引导过程可以总结如下:
- ROM 引导加载程序验证可闪存引导加载程序的签名。
- 可闪存引导加载程序验证 vbmeta.img、boot.img 和其他分区的签名并加载内核。可选:在加载内核或初始化设备特定的 TEE 操作系统之前完成供应商特定的检查。
- 内核从 boot.img 加载,dm-verity 在挂载和内核运行期间检查分区的完整性。
在启动过程中,TrustZone“世界”功能第一次被访问/激活是什么时候?
如前所述,根据维基百科, TrustZone 是封闭源代码,我们不知道它在启动过程中何时可用。但是,通常可信执行环境是在操作系统之前加载的。例如,华为在加载可闪存引导加载程序后加载其 TEE。在这种情况下,每个组件都只是验证下一个组件的完整性并构建一个钥匙链。