当前位置: 首页 > news >正文

MTK安全启动链全解析:从芯片到avb系统级验证

结合具体厂商,MTK的安全启动分为MTK芯片级安全启动链Android AVB系统级验证链两大类。

一、整体信任链总览

MT8766采用两级嵌套链式信任,信任根锚定硬件eFuse,每一级验签通过后才会获得信任,进而验证下一级:
硬件eFuse(根公钥哈希)→ BROM验签 → Preloader → Preloader验签 → LK → LK执行AVB验签 → vbmeta.img → 链式验签 → vbmeta_system.img / vbmeta_vendor.img → 校验各业务分区

二、芯片级安全启动链(MTK私有签名体系)

这一级是MTK平台原生的硬件级安全启动,使用私有镜像格式,不遵循AVB规范,信任根为芯片eFuse中一次性烧录的根公钥哈希。

1. Boot ROM(BROM,片上固化固件)

  • 镜像内公钥/哈希:不存储完整公钥,仅在芯片eFuse/OTP区烧录根公钥的SHA-256哈希(硬件信任根RoT Hash),不可篡改。
  • 自身签名:无,代码固化在芯片硅片内,是整个系统的信任起点,不接受任何软件验证。
  • 签名产生方:无。
  • 验签执行者:自身,为平台第一级验签主体。
  • 被验签对象:Preloader镜像。MT8766 平台的 Boot ROM(BROM)对 Preloader 的验签,核心分为「公钥哈希锚定」和「镜像签名校验」两步:先提取 Preloader 镜像中携带的完整公钥,计算其 SHA-256 哈希值,与芯片 eFuse(OTP 一次性可编程区)中预先烧录的根公钥哈希做比对;比对通过后,再用这把经过可信锚定的公钥,验证 Preloader 镜像主体的数字签名,最终确认镜像合法。
  • 信任关系:作为硬件信任根,主动校验下一级Preloader的合法性,是整条信任链的起点。

2. Preloader 镜像

  • 镜像内公钥/哈希:镜像头部携带完整的根公钥,用于自身签名校验。
  • 自身签名:镜像头部附带MTK私有格式数字签名,签名覆盖Preloader全部有效代码与数据段。
  • 签名产生方:设备厂商/方案商持有的根私钥(与eFuse中的根公钥哈希一一对应),量产阶段完成签名。
  • 验签执行者:BROM。
  • 验签逻辑BROM先计算镜像中根公钥的哈希,与eFuse中的预置哈希比对;匹配后,再用该公钥验证Preloader的数字签名。
  • 被验签对象:LK(Little Kernel)镜像。
  • 信任关系:自身被BROM验证通过后获得信任,继续向下验证LK镜像,传递信任链。

3. LK(Little Kernel / Bootloader)镜像

  • 镜像内公钥/哈希
  1. 镜像头部携带芯片级签名公钥(可与根公钥为同一对,或为派生的子公钥,由厂商配置);
  2. 代码内部预置AVB可信公钥哈希,用于后续系统级AVB验签。
  • 自身签名:镜像头部附带MTK私有格式数字签名,覆盖LK核心代码与数据区。
  • 签名产生方:设备厂商持有的芯片级签名私钥
  • 验签执行者:Preloader。
  • 验签逻辑:Preloader使用已被信任的公钥,校验LK镜像的签名完整性。
  • 被验签对象:vbmeta.img(AVB顶级元数据镜像)。
  • 信任关系:承接芯片级信任链,自身验证通过后,成为Android AVB验证的执行主体,完成从芯片级到系统级的信任传递。

三、Android AVB 系统级验证链(标准AVB 2.0规范)

这一级遵循Google AVB 2.0标准,所有vbmeta镜像采用统一格式,信任锚点为LK中预置的AVB可信公钥哈希。

4. vbmeta.img(顶级主元数据镜像)

  • 镜像内公钥/哈希
  1. 镜像自身携带AVB根公钥(完整公钥),用于验证自身签名;
  2. 描述符区包含:boot、dtbo、recovery等分区的全量哈希(Hash描述符);vbmeta_system、vbmeta_vendor的授权公钥哈希+镜像预期哈希(Chain链式描述符);全局回滚版本号。
  • 自身签名:镜像尾部的签名块(AVB Footer),签名覆盖「镜像头部 + 所有描述符数据」,算法为RSA 2048/4096 + SHA-256。
  • 签名产生方:设备厂商持有的AVB根私钥,系统编译/OTA打包时完成签名。
  • 验签执行者:LK中的libavb库。
  • 验签逻辑
  1. LK提取vbmeta中的AVB根公钥,计算其哈希,与LK内置的可信公钥哈希比对;
  2. 哈希匹配后,用该公钥验证vbmeta自身的数字签名;
  3. 校验回滚版本号,防止降级攻击。
  • 被验签对象
  1. boot、dtbo、recovery等小分区(全量哈希校验);
  2. vbmeta_system.img、vbmeta_vendor.img(链式授权校验)。
  • 信任关系:承接芯片级信任链,是系统分区验证的根节点,自身合法性由LK担保。

5. vbmeta_system.img(System分区元数据镜像)

  • 镜像内公钥/哈希
  1. 镜像自身携带System专属签名公钥
  2. 描述符区包含system、system_ext分区的dm-verity哈希树根哈希(Hashtree描述符)、哈希树参数、数据块大小。
  • 自身签名:镜像尾部签名块,签名覆盖自身头部+全部描述符数据。
  • 签名产生方:设备厂商System团队持有的System签名私钥(独立于AVB根私钥)。
  • 验签执行者:LK中的libavb库(基于主vbmeta的授权)。
  • 验签逻辑(两步校验)
  1. 完整性校验:计算vbmeta_system镜像的全量哈希,与主vbmeta.img中Chain描述符记录的预期哈希比对;
  2. 授权校验:提取vbmeta_system的签名公钥,计算哈希,与主vbmeta的Chain描述符中预置的授权公钥哈希比对;匹配后用该公钥验证自身签名。
  • 被验签对象:system、system_ext分区(通过哈希树根哈希做运行时完整性校验)。
  • 信任关系:由主vbmeta.img授权信任,独立负责System分区的验证,支持System分区单独OTA更新,无需修改主vbmeta。

6. vbmeta_vendor.img(Vendor分区元数据镜像)

  • 镜像内公钥/哈希
  1. 镜像自身携带Vendor专属签名公钥
  2. 描述符区包含vendor、odm分区的dm-verity哈希树根哈希、哈希树参数。
  • 自身签名:镜像尾部签名块,签名覆盖自身头部+全部描述符数据。
  • 签名产生方:芯片厂商(MTK)或设备厂商Vendor团队持有的Vendor签名私钥
  • 验签执行者:LK中的libavb库(基于主vbmeta的授权)。
  • 验签逻辑:与vbmeta_system完全一致,基于主vbmeta的Chain描述符完成授权与签名校验。
  • 被验签对象:vendor、odm分区。
  • 信任关系:由主vbmeta.img授权信任,独立负责Vendor分区验证,适配Project Treble的分区解耦更新。

补充:业务分区(boot.img / system.img / vendor.img)

  • 自身不携带独立公钥与数字签名
  • boot等小分区的完整性由vbmeta.img中的Hash描述符担保;
  • system/vendor等大分区的完整性由对应子vbmeta中的Hashtree描述符(根哈希)担保,运行时由内核dm-verity模块按需校验。

四、签名-验签关系汇总表

镜像名称
签名由谁签发(私钥持有方)
由谁执行验签
验签的信任依据
验签通过后验证谁
Preloader
设备厂商根私钥
BROM
eFuse根公钥哈希
LK镜像
LK
设备厂商芯片级签名私钥
Preloader
芯片级根公钥
vbmeta.img
vbmeta.img
设备厂商AVB根私钥
LK
LK内置AVB公钥哈希
boot等小分区 + 子vbmeta镜像
vbmeta_system.img
设备厂商System签名私钥
LK(libavb)
主vbmeta的Chain授权
system/system_ext分区
vbmeta_vendor.img
MTK/厂商Vendor签名私钥
LK(libavb)
主vbmeta的Chain授权
vendor/odm分区

五、关键设计说明

  1. 硬件只存哈希,不存完整公钥:eFuse中仅烧录公钥哈希,避免攻击者直接替换镜像中的公钥绕过验证,确保信任根不可篡改。
  2. 公私钥分层隔离:芯片级密钥、AVB根密钥、System/Vendor子密钥分层管理,不同团队持有不同密钥,降低密钥泄露风险。
  3. 链式解耦适配OTA:子vbmeta独立签名的设计,让System、Vendor分区可以单独更新、单独签名,完美匹配Project Treble的分区解耦架构,也是MT8766这类入门平台支持独立厂商定制的核心基础。
http://www.jsqmd.com/news/1144390/

相关文章:

  • 2026年大模型API聚合平台深度选型星链4SAPI
  • WSL 1 vs WSL 2 性能对比:文件 I/O、网络与启动速度的 3 项实测
  • 3种主流APK下载方案对比:Google Play商店、APKPure与第三方下载器安全性分析
  • 基于TPS61170与STM32的高效DC-DC升压系统设计
  • Rust嵌入式开发:所有权模型与硬件寄存器的安全抽象——embedded-hal、no_std
  • Docker 彻底卸载指南:CentOS/Ubuntu 双系统 5 步清理残留文件
  • C#上位机Modbus协议解析:保持寄存器读写的工业级实现
  • 锂电池组电压平衡方案与MP2672A应用详解
  • Docker 容器 systemctl 权限问题:3 步排查与 systemd 镜像启动方案
  • A股年报文本分析:从7个关键词到64维度数字经济指标构建实战
  • 终极RPG游戏资源解密工具:RPG Maker Decrypter完全指南
  • Hackintool终极指南:从黑苹果三大痛点到专业级解决方案
  • 3款主流激光SLAM算法在冰达机器人上的实测对比:Gmapping vs Karto vs Cartographer
  • Ubuntu 22.04 部署 RabbitMQ 4.3:APT 源安装与 5 个关键安全配置
  • 通达信缠论量化插件:5分钟掌握专业级技术分析的终极指南
  • 国家中小学智慧教育平台电子课本下载工具:教师与学生的离线学习终极方案
  • 基于MA12070与PIC18F66K40的高保真音频系统设计
  • Jenkins 2.414 Docker 部署实战:3步完成容器化与数据持久化配置
  • A股股指期货:全维度解析(多表格结构化完整版)
  • EM3080-W解码芯片与STM32F217ZG的硬件协同设计
  • Ubuntu 20.04/22.04 服务器:2种方案配置Root用户SSH远程登录
  • Docker 容器 systemctl 权限问题排查:3 步解决 D-Bus 连接失败
  • Linux 内核 5.15+ 下 epoll 性能调优:百万连接压测,事件触发延迟降低 30%
  • LangChain与LangGraph协同开发LLM智能体实战指南
  • 只需5小时九个步骤,借助ChatGPT写出优质论文,全攻略指南
  • PHP 反序列化字符串逃逸详解:基于 ctfshow web262 的 2 种攻击模型与构造工具
  • 向量化检索增强数据库查询:用Embedding优化模糊匹配的工程实践
  • 像MUJI中国这样的线下门店型品牌小程序怎么做?2026全球5款AI/SAAS门店小程序开发工具:0代码做小程序,含零代码SAAS、AI编程、源码定制交付
  • iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事
  • Unreal Engine 游戏线程优化:5个蓝图Tick函数性能陷阱与解决方案