Android Safety 系列专题【篇二:AVB签名】

Android AVB(Android Verified Boot ,安卓验证启动)是 Google 为 Android 系统设计的一套安全机制,用于确保设备在启动过程中加载的系统软件(如 bootloader、内核、system 分区等)是经过授权且未被篡改的。其核心目标是 防止恶意软件在启动阶段植入系统 ,并支持 防回滚(anti-rollback) 保护。其核心功能主要如下两个:

  • 验证启动:从只读固件开始,在加载和执行代码前进行密码学验证,确保代码是真实的且没有已知安全漏洞。
  • 完整性保护:通过密码学签名和哈希验证,确保系统分区(如 boot.img、system.img、vendor.img 等)未被篡改。

1、AVB校验机制

AVB的几个重要主要组件如下:

  • VBMeta 结构:核心数据结构,包含哈希描述符(Hash Descriptors),用于验证整个分区;哈希树描述符(Hashtree Descriptors),用于验证文件系统分区;链式分区描述符(Chained Partition Descriptors),用于授权委托。
  • avbtool:用于创建和操作验证启动镜像的工具,主要生成 vbmeta.img。
  • libavb:设备端验证库,在引导加载程序和 Android 系统中执行验证。

1)AVB工作流程

AVB的工作流程主要如下:

  • Boot ROM 验证 Primary Bootloader(PBL)(通常由芯片厂商实现)。
  • Bootloader(如 ABL / U-Boot) 启动后:
  • 读取 vbmeta 分区(或从其他分区提取 VBMeta 数据)
  • 使用内置公钥验证 VBMeta 签名。
  • 检查各分区(boot, system, vendor 等)的哈希值是否匹配。
  • 检查 rollback index 是否 ≥ 设备当前记录的值。
  • 若全部验证通过:
    • 加载 boot 分区(含 kernel + ramdisk)。
    • 启动 Android 系统。
  • 若验证失败:
    • Locked 状态:设备拒绝启动(可能进入 recovery 或死循环)。
    • Unlocked 状态:显示警告,但仍允许启动(用于开发者调试)。

2)AVB与Secure Boot的区别?

从使用目的来看AVB和Secure boot,都是为了防止镜像被篡改,那么他们到底有什么区别呢?

  • 针对AP侧镜像的安全校验和镜像签名,就是所谓的google avb机制。因为AP侧镜像基本上都是由Google AOSP设计,因此需要使用Google的AVB(Android Verified Boot)特性来保证镜像的完整性和真实性。

  • 针对BP侧镜像的安全校验和镜像签名,就是所谓的Secure Boot机制。因为这些都是厂商自己设计,通常的做法是这些厂商在自己的芯片内部是有一个硬件单元的,只能一次烧录,是不可逆的,烧录的东西和root key密切相关,efuse被熔断了,那么root key就不能改变,同时这块芯片只能运行和root key相关的key签名的镜像。

相关推荐
一只特立独行的Yang2 小时前
Android graphics - 框架摘要
android
AC赳赳老秦4 小时前
DeepSeek优化多智能体指令:避免协同冲突,提升自动化流程稳定性
android·大数据·运维·人工智能·自然语言处理·自动化·deepseek
峥嵘life7 小时前
Android16 【CTS】CtsWindowManagerDeviceAnimations存在fail项
android·linux·学习
阿拉斯攀登8 小时前
第 7 篇 安卓驱动开发的灵魂:字符设备驱动框架,从原理到最简实战
android·驱动开发·rk3568·嵌入式驱动·安卓驱动
阿拉斯攀登9 小时前
第 1 篇 入坑不亏!瑞芯微 RK 平台 + 安卓驱动开发,小白全维度扫盲
android·驱动开发·rk3568·嵌入式驱动
Android系统攻城狮9 小时前
Android tinyalsa深度解析之pcm_params_get调用流程与实战(一百六十二)
android·pcm·tinyalsa·android hal·audio hal
zh路西法9 小时前
【C语言简明教程提纲】(四):结构体与文件定义和操作
android·c语言·redis
常利兵9 小时前
Jetpack Compose 1.8 新特性来袭,打造丝滑开发体验
android
牢七10 小时前
百家cms 审计 未完成
android·ide·android studio
hjxu201610 小时前
【 MySQL 速记5】插入
android·数据库·mysql