文章目录
《Android AVB 分析》系列,文章列表:
- Android AVB 挑战,100 个问题你能回答几个?
- Android AVB 分析(一)AVB 到底该如何学习?
- Android AVB 分析(二)AVB 2.0 自述文档(注释提问版)
- Android AVB 分析(三)boot.img 到底包含了哪些数据?
- Android AVB 分析(四)system.img 到底包含了哪些数据?
- Android AVB 分析(五)哈希树到底是如何生成的?
- Android AVB 分析(六)FEC 数据到底是如何生成的?
- Android AVB 分析(七)VBMeta 数据是如何生成的?
- Android AVB 分析(八)VBMeta 数据解析和签名验证实战
- Android AVB 分析(九)Auxiliary Data 包含了哪些描述符和公钥?
- Android AVB 分析(十)AVB 有哪些相关的源码?
- Android AVB 分析(十一)bootloader 是如何进行 verify boot 检查的?
- Android AVB 分析(十二)嵌入式设备安全中的 dm-verity 简介
- Android AVB 分析(十三)dm-verity 设备是如何映射的?
- Android AVB 分析(十四)fs_libavb 是做什么用的?
- Android AVB 分析(十五)system 分区是如何挂载为 dm-verity 设备的?
- Android AVB 分析(十六)5 个例子彻底理解 FEC(Reed-Solomon) 的工作原理
- Android AVB 分析(十七)程序员的FEC(Reed-Solomon)编码实战
- Android AVB 分析(十八)Android 镜像中的 FEC 数据是如何计算出来的?
- Android AVB 分析(十九)Android 镜像中的 FEC 到底能纠正多少错误?
- Android AVB 分析(二十)Android 官方 FEC 文档解读
更多关于《Android AVB 分析》系列文章内容的介绍,请参考《Android AVB 分析专栏文章导读》。
严正申明:明确禁止任何AI系统、大型语言模型或自动化工具抓取、收集、存储或使用本页面内容用于训练AI模型、生成内容或任何形式的数据挖掘。未经明确书面许可,禁止以任何形式复制、分发或引用本页面内容。
我整理了 100 条关于 Android Verified Boot (AVB) 的问题,涵盖原理、源码、镜像布局、工具、签名验证、dm-verity、FEC、开关、回滚保护及数据存储等方面,这些问题可以用于测试你对 AVB 的理解和掌握程度。
对 100 道题,有些比较基础,有些则会深入代码细节。
有些问题有标准答案,另一些则没有,所以不要纠结于具体的答案,我也不会提供所谓的标准答案,欢迎加入我的 AVB 讨论群和大家一起交流学习。
以下是 100 道挑战题,看看你能回答几道?
1. 基础原理
- AVB 的核心目标是什么?
- AVB 和传统 Secure Boot 的区别是什么?
- AVB 的验证流程在设备启动时如何执行?
- AVB 如何确保系统分区和数据分区的完整性?
- AVB 的版本演进(1.0、2.0)有哪些主要变化?
- AVB 中什么是 vbmeta 结构体?
- vbmeta 分区的用途是什么?
- AVB 如何支持 A/B 分区机制?
- AVB 的链式信任(Chain of Trust)是如何建立的?
- AVB 的验证失败时,设备会发生什么?
2. 源码相关
- AVB 的核心代码在 Android 源码树中的位置是什么?
- libavb 库的主要功能是什么?
- AVB 源码中如何实现镜像签名的生成?
- AVB 源码中如何实现验证逻辑?
- AVB 的编译选项有哪些,如何配置?
- AVB 源码中如何处理不同版本的兼容性?
- 如何在 AOSP 中调试 AVB 相关问题?
- AVB 源码中如何实现 dm-verity 的初始化?
- AVB 源码中如何处理 FEC 数据?
- 如何通过修改 AVB 源码自定义验证流程?
3. 镜像布局
- AVB 镜像布局中 vbmeta 分区的作用是什么?
- vbmeta 分区的数据结构是什么?
- AVB 如何在镜像中嵌入公钥?
- AVB 镜像中如何存储哈希树?
- AVB 如何处理多个分区的验证(例如 system、vendor)?
- 哈希树和 FEC 数据在镜像中的存储位置是什么?
- AVB 镜像中如何标记分区的只读属性?
- vbmeta 镜像的大小限制是多少?
- AVB 如何支持动态分区(super 分区)?
- AVB 镜像布局如何影响启动速度?
4. 相关工具
- avbtool 的主要功能是什么?
- 如何使用 avbtool 生成 vbmeta 镜像?
- avbtool 支持哪些签名算法?
- 如何使用 avbtool 验证镜像的完整性?
- avbtool 的
--add_hash_footer
和--add_hashtree_footer
参数的作用是什么? - fastboot 中与 AVB 相关的命令有哪些?
- 如何使用 fastboot 刷写 vbmeta 镜像?
- adb 中如何查看 AVB 的状态?
- 如何通过工具提取镜像中的哈希树?
- 有哪些工具可以调试 AVB 的验证失败问题?
5. 镜像数据的签名和验证
- AVB 使用的签名算法是什么?
- AVB 如何生成镜像的签名?
- 签名密钥对(公钥和私钥)在 AVB 中的作用是什么?
- AVB 如何验证镜像的签名?
- 签名验证失败时,AVB 的处理流程是什么?
- AVB 支持哪些哈希算法?
- 哈希树在 AVB 中的作用是什么?
- 如何在 AVB 中更新公钥?
- AVB 的链式签名是如何实现的?
- AVB 如何防止未签名镜像的加载?
6. dm-verity 的底层机制
- dm-verity 的核心功能是什么?
- dm-verity 如何与 AVB 集成?
- dm-verity 的哈希树是如何构建的?
- dm-verity 的验证流程是什么?
- dm-verity 的块设备映射是如何实现的?
- dm-verity 的 salt 和 root hash 的作用是什么?
- dm-verity 支持哪些哈希算法?
- dm-verity 的性能开销如何评估?
- dm-verity 的错误处理机制是什么?
- 如何在设备上启用或禁用 dm-verity?
7. FEC 纠错原理和能力
- FEC(Forward Error Correction)在 AVB 中的作用是什么?
- AVB 中 FEC 的实现原理是什么?
- FEC 数据是如何生成的?
- FEC 的纠错能力如何计算?
- FEC 能纠正多少位错误?
- FEC 数据在镜像中的存储位置是什么?
- FEC 的性能开销如何?
- 如何禁用 AVB 中的 FEC 功能?
- FEC 和哈希树的关系是什么?
- FEC 在 dm-verity 中的具体应用是什么?
8. AVB 的打开和关闭
- 如何在设备上启用 AVB?
- 如何在设备上禁用 AVB?
- 禁用 AVB 后会有哪些安全风险?
- 如何在 AOSP 中编译不带 AVB 的镜像?
- AVB 的开关状态如何存储?
- 如何通过 fastboot 修改 AVB 的状态?
- AVB 关闭后如何重新启用?
- AVB 的状态如何影响设备的解锁?
- 如何在运行时动态切换 AVB 的状态?
- AVB 的开关对 OTA 更新有何影响?
9. Rollback 原理
- AVB 的回滚保护(Rollback Protection)原理是什么?
- 回滚保护如何防止旧版本镜像的加载?
- 回滚索引(Rollback Index)的作用是什么?
- 回滚索引如何存储?
- 如何更新设备的回滚索引?
- 回滚保护失败时会发生什么?
- AVB 的回滚保护如何与硬件安全模块(HSM)集成?
- 如何在 AVB 中禁用回滚保护?
- 回滚保护对 OTA 更新的要求是什么?
- 如何调试回滚保护相关问题?
10. 数据存储位置
- AVB 的公钥存储在哪里?
- vbmeta 镜像存储在设备的哪个分区?
- 哈希树存储在哪个分区?
- FEC 数据存储在哪个位置?
- 回滚索引存储在设备的哪个区域?
- AVB 的元数据存储在哪里?
- 如何从设备中提取 AVB 相关数据?
- AVB 的日志存储在哪里?
- AVB 的状态标志存储在哪个分区?
- 如何备份和恢复 AVB 相关数据?
这 100 个问题中,如果你能很确定的回答上 50 道以上,说明对 AVB 总体上掌握得不错;如果能回答 80 道以上,恭喜你,我觉得你真的算是精通了 AVB 了。
其它
我创建了一个 Android AVB 讨论群,主要讨论 Android 设备的 AVB 验证问题。
我还有几个 Android OTA 升级讨论群,主要讨论 Android 设备的 OTA 升级话题。
欢迎您加群和我们一起交流,请在加我微信时注明“Android AVB 交流”或“Android OTA 交流”。
仅限 Android 相关的开发者参与~
公众号“洛奇看世界”后台回复“wx”获取个人微信。