一、组件边界先明确首先做边界区分避免概念混淆1.标准AVB 2.0规范组件vbmeta.img、vbmeta_system.img、vbmeta_vendor.img三者遵循完全统一的AVB元数据镜像格式仅内部描述符的类型、内容不同分别承担顶级根验证、System分区验证、Vendor分区验证的职能。2.非AVB规范组件preloader它是MTK平台芯片级私有引导镜像不遵循AVB 2.0格式采用MTK私有镜像封装与签名机制由芯片Boot ROM直接校验作用是衔接硬件信任根与系统级AVB验证。二、AVB 2.0 vbmeta系列镜像通用结构所有vbmeta镜像的底层结构完全一致从文件头到文件尾分为4个核心区域镜像头部(AvbVBMetaHeader) → 认证数据块(公钥签名) → 辅助数据块(描述符集合) → 尾部对齐填充2.1 核心头部AvbVBMetaHeader这是vbmeta镜像的最前端固定长度头部包含镜像的全局元数据所有字段均为小端格式核心字段与作用如下字段名长度作用说明magic4字节魔数固定值为AVB0用于快速识别是否为合法AVB元数据镜像格式校验第一步。version_majorversion_minor各4字节AVB规范主/次版本号Bootloader根据版本选择对应解析逻辑保证向前兼容。authentication_data_block_size8字节认证数据块的总大小公钥签名元数据用于定位数据偏移。auxiliary_data_block_size8字节辅助数据块的总大小所有描述符的总长度。algorithm_type4字节签名算法类型常见值0 SHA256_RSA20481 SHA256_RSA40962 SHA512_RSA4096hash_offsethash_size各8字节镜像哈希的偏移与长度用于辅助完整性校验。signature_offsetsignature_size各8字节数字签名在镜像内的偏移与长度验签时读取该区域的签名数据。public_key_offsetpublic_key_size各8字节签名公钥在镜像内的偏移与长度验签时提取公钥做哈希锚定与签名校验。public_key_metadata_offsetpublic_key_metadata_size各8字节公钥附加元数据如密钥版本、所有者可选字段。descriptors_offsetdescriptors_size各8字节描述符集合在镜像内的偏移与总长度解析分区验证规则的入口。rollback_index8字节回滚版本号64位单向递增用于防降级攻击Bootloader会对比安全存储中的最低版本号低于阈值则拒绝启动。flags4字节全局标志位比如标记是否允许验证失败、是否支持解锁等。release_string47字节版本发布字符串用于调试与版本追溯。2.2 核心灵魂描述符集合Auxiliary Data Block描述符是vbmeta的业务核心用来定义「哪些分区、用什么规则做校验」。每个描述符都有统一的公共头部tag num_bytes通过tag区分类型常见有4类公共头部字段字段长度作用tag4字节描述符类型标识0 Hash描述符1 Hashtree描述符2 Chain链式描述符3 Property属性描述符num_bytes4字节当前描述符的总长度用于遍历解析下一个描述符。类型1Hash描述符全量哈希校验适用场景boot、dtbo、recovery等体积小的分区启动时直接全量计算哈希比对。核心字段partition_name分区名如boot、dtbohash_algorithm哈希算法通常为sha256image_size分区镜像的总大小digest分区完整数据的SHA-256哈希值校验的预期基准值salt哈希计算的盐值防彩虹表攻击类型2Hashtree描述符哈希树校验适用场景system、vendor等GB级大分区用于dm-verity运行时按需校验启动时不做全量哈希。核心字段partition_name分区名如system、vendorhash_algorithm哈希算法默认sha256data_size分区内有效数据的总大小data_block_size / hash_block_size数据块、哈希块大小默认均为4096字节tree_offset / tree_size哈希树Merkle树在分区内的偏移与总大小root_digest哈希树的根哈希dm-verity校验的可信基准salt哈希树计算的盐值类型3Chain链式描述符子vbmeta授权适用场景主vbmeta.img用来关联、授权子vbmeta镜像实现链式信任传递。核心字段partition_name子vbmeta对应的分区名如vbmeta_system、vbmeta_vendorpublic_key子vbmeta镜像允许使用的签名公钥或公钥哈希约束子镜像必须由授权密钥签发rollback_index_location子vbmeta回滚版本号的存储位置索引chain_partition_size子vbmeta分区的大小类型4Property属性描述符作用存储自定义键值对属性比如传递系统版本、安全补丁级别、启动参数等用于扩展配置。核心字段key、value以字符串形式存储。2.3 认证数据块Authentication Data Block存放公钥、数字签名、公钥元数据是信任校验的核心载体公钥签发该vbmeta镜像的完整公钥Bootloader先校验其哈希是否与预置可信哈希匹配再用它验签。数字签名对「头部所有描述符」的整体数据做签名算法由头部algorithm_type指定验签通过则证明元数据未被篡改。公钥元数据可选记录密钥版本、签发主体等信息。三、三个vbmeta镜像的差异化结构三者底层格式完全一致差异仅在于内部描述符的组合对应不同的业务职能1. vbmeta.img顶级主元数据镜像定位AVB验证链的根节点信任锚定Bootloader预置公钥。内部描述符组成多个Hash描述符对应boot、dtbo、recovery、bootloader等小分区的全量哈希校验。多个Chain链式描述符分别指向vbmeta_system、vbmeta_vendor、vbmeta_product等子vbmeta分区授权子镜像的合法公钥与回滚版本。若干Property描述符存储全局安全补丁版本、系统版本、启动标志等全局属性。信任来源由BootloaderLK直接验签信任锚定芯片硬件根。2. vbmeta_system.imgSystem分区元数据镜像定位System/system_ext分区的专属验证元数据独立于主vbmeta支持单独OTA更新。内部描述符组成1个Hashtree描述符对应system分区的dm-verity哈希树根哈希与参数。可选1个Hashtree描述符对应system_ext分区。若干Property描述符System分区的版本、补丁级别等属性。无Chain描述符作为叶子节点不再向下嵌套子vbmeta。信任来源由主vbmeta.img的Chain描述符授权校验。3. vbmeta_vendor.imgVendor分区元数据镜像定位Vendor/odm分区的专属验证元数据适配Project Treble的厂商分区解耦。内部描述符组成1个Hashtree描述符对应vendor分区的dm-verity参数与根哈希。可选1个Hashtree描述符对应odm分区。若干Property描述符厂商平台版本、驱动版本等属性。信任来源由主vbmeta.img的Chain描述符授权校验。四、MTK Preloader 镜像结构私有格式Preloader是MTK平台的一级引导程序不遵循AVB规范采用MTK私有镜像封装由Boot ROM直接验签结构分为4个区域区域核心字段作用镜像头部MTK Image Header魔数MTK专属标识、镜像总大小、代码段偏移/长度、回滚版本号、公钥偏移/大小、签名偏移/大小标识镜像合法性定义各区域偏移BROM解析的入口公钥区完整签名公钥RSA 2048/4096BROM先计算该公钥的哈希与eFuse中根公钥哈希比对锚定信任根签名区数字签名RSASHA256签名覆盖「头部代码数据段」BROM用可信公钥验签证明镜像未篡改代码数据段Preloader可执行代码、初始化数据、驱动固件实际业务逻辑DDR初始化、存储控制器初始化、加载LK、TrustZone基础环境初始化五、各镜像的生成方式1. vbmeta系列镜像生成由Google官方工具avbtoolAndroid源码external/avb目录下编译生成在系统编译阶段自动生成核心流程是「提取分区校验信息 → 组装描述符 → 私钥签名 → 生成镜像」。生成示例对应MT8766平台常用命令生成vbmeta_system.img提取system分区的哈希树信息用system专属私钥签名avbtool make_vbmeta_image \ --output vbmeta_system.img \ --partition_size $SYSTEM_PARTITION_SIZE \ --algorithm SHA256_RSA4096 \ --key system_sign_private.pem \ --add_hashtree_descriptor system \ --image system.img \ --hash_algorithm sha256 \ --block_size 4096生成主vbmeta.img整合boot分区哈希 子vbmeta链式授权用AVB根私钥签名avbtool make_vbmeta_image \ --output vbmeta.img \ --algorithm SHA256_RSA4096 \ --key avb_root_private.pem \ --rollback_index 10 \ --add_hash_descriptor boot --image boot.img \ --add_hash_descriptor dtbo --image dtbo.img \ --chain_partition vbmeta_system:1:system_sign_public.pem \ --chain_partition vbmeta_vendor:2:vendor_sign_public.pem其中--chain_partition就是生成Chain描述符指定子vbmeta分区名、回滚索引、授权公钥。2. Preloader镜像生成编译原始二进制从MTK平台源码编译生成原始preloader可执行文件纯代码数据无签名。私有工具签名使用MTK官方安全签名工具secure_boot_tool导入厂商根私钥自动添加镜像头部、公钥区、签名区生成最终可烧录的preloader.bin。量产烧录量产阶段将根公钥哈希一次性烧录到芯片eFuse与preloader中的公钥对应完成信任根绑定。