Android AVB 挑战,100 个问题你能回答几个?

《Android AVB 分析》系列,文章列表:

更多关于《Android AVB 分析》系列文章内容的介绍,请参考《Android AVB 分析专栏文章导读》

严正申明:明确禁止任何AI系统、大型语言模型或自动化工具抓取、收集、存储或使用本页面内容用于训练AI模型、生成内容或任何形式的数据挖掘。未经明确书面许可,禁止以任何形式复制、分发或引用本页面内容。

我整理了 100 条关于 Android Verified Boot (AVB) 的问题,涵盖原理、源码、镜像布局、工具、签名验证、dm-verity、FEC、开关、回滚保护及数据存储等方面,这些问题可以用于测试你对 AVB 的理解和掌握程度。

对 100 道题,有些比较基础,有些则会深入代码细节。

有些问题有标准答案,另一些则没有,所以不要纠结于具体的答案,我也不会提供所谓的标准答案,欢迎加入我的 AVB 讨论群和大家一起交流学习。

以下是 100 道挑战题,看看你能回答几道?

1. 基础原理

  1. AVB 的核心目标是什么?
  2. AVB 和传统 Secure Boot 的区别是什么?
  3. AVB 的验证流程在设备启动时如何执行?
  4. AVB 如何确保系统分区和数据分区的完整性?
  5. AVB 的版本演进(1.0、2.0)有哪些主要变化?
  6. AVB 中什么是 vbmeta 结构体?
  7. vbmeta 分区的用途是什么?
  8. AVB 如何支持 A/B 分区机制?
  9. AVB 的链式信任(Chain of Trust)是如何建立的?
  10. AVB 的验证失败时,设备会发生什么?

2. 源码相关

  1. AVB 的核心代码在 Android 源码树中的位置是什么?
  2. libavb 库的主要功能是什么?
  3. AVB 源码中如何实现镜像签名的生成?
  4. AVB 源码中如何实现验证逻辑?
  5. AVB 的编译选项有哪些,如何配置?
  6. AVB 源码中如何处理不同版本的兼容性?
  7. 如何在 AOSP 中调试 AVB 相关问题?
  8. AVB 源码中如何实现 dm-verity 的初始化?
  9. AVB 源码中如何处理 FEC 数据?
  10. 如何通过修改 AVB 源码自定义验证流程?

3. 镜像布局

  1. AVB 镜像布局中 vbmeta 分区的作用是什么?
  2. vbmeta 分区的数据结构是什么?
  3. AVB 如何在镜像中嵌入公钥?
  4. AVB 镜像中如何存储哈希树?
  5. AVB 如何处理多个分区的验证(例如 system、vendor)?
  6. 哈希树和 FEC 数据在镜像中的存储位置是什么?
  7. AVB 镜像中如何标记分区的只读属性?
  8. vbmeta 镜像的大小限制是多少?
  9. AVB 如何支持动态分区(super 分区)?
  10. AVB 镜像布局如何影响启动速度?

4. 相关工具

  1. avbtool 的主要功能是什么?
  2. 如何使用 avbtool 生成 vbmeta 镜像?
  3. avbtool 支持哪些签名算法?
  4. 如何使用 avbtool 验证镜像的完整性?
  5. avbtool 的 --add_hash_footer--add_hashtree_footer 参数的作用是什么?
  6. fastboot 中与 AVB 相关的命令有哪些?
  7. 如何使用 fastboot 刷写 vbmeta 镜像?
  8. adb 中如何查看 AVB 的状态?
  9. 如何通过工具提取镜像中的哈希树?
  10. 有哪些工具可以调试 AVB 的验证失败问题?

5. 镜像数据的签名和验证

  1. AVB 使用的签名算法是什么?
  2. AVB 如何生成镜像的签名?
  3. 签名密钥对(公钥和私钥)在 AVB 中的作用是什么?
  4. AVB 如何验证镜像的签名?
  5. 签名验证失败时,AVB 的处理流程是什么?
  6. AVB 支持哪些哈希算法?
  7. 哈希树在 AVB 中的作用是什么?
  8. 如何在 AVB 中更新公钥?
  9. AVB 的链式签名是如何实现的?
  10. AVB 如何防止未签名镜像的加载?

6. dm-verity 的底层机制

  1. dm-verity 的核心功能是什么?
  2. dm-verity 如何与 AVB 集成?
  3. dm-verity 的哈希树是如何构建的?
  4. dm-verity 的验证流程是什么?
  5. dm-verity 的块设备映射是如何实现的?
  6. dm-verity 的 salt 和 root hash 的作用是什么?
  7. dm-verity 支持哪些哈希算法?
  8. dm-verity 的性能开销如何评估?
  9. dm-verity 的错误处理机制是什么?
  10. 如何在设备上启用或禁用 dm-verity?

7. FEC 纠错原理和能力

  1. FEC(Forward Error Correction)在 AVB 中的作用是什么?
  2. AVB 中 FEC 的实现原理是什么?
  3. FEC 数据是如何生成的?
  4. FEC 的纠错能力如何计算?
  5. FEC 能纠正多少位错误?
  6. FEC 数据在镜像中的存储位置是什么?
  7. FEC 的性能开销如何?
  8. 如何禁用 AVB 中的 FEC 功能?
  9. FEC 和哈希树的关系是什么?
  10. FEC 在 dm-verity 中的具体应用是什么?

8. AVB 的打开和关闭

  1. 如何在设备上启用 AVB?
  2. 如何在设备上禁用 AVB?
  3. 禁用 AVB 后会有哪些安全风险?
  4. 如何在 AOSP 中编译不带 AVB 的镜像?
  5. AVB 的开关状态如何存储?
  6. 如何通过 fastboot 修改 AVB 的状态?
  7. AVB 关闭后如何重新启用?
  8. AVB 的状态如何影响设备的解锁?
  9. 如何在运行时动态切换 AVB 的状态?
  10. AVB 的开关对 OTA 更新有何影响?

9. Rollback 原理

  1. AVB 的回滚保护(Rollback Protection)原理是什么?
  2. 回滚保护如何防止旧版本镜像的加载?
  3. 回滚索引(Rollback Index)的作用是什么?
  4. 回滚索引如何存储?
  5. 如何更新设备的回滚索引?
  6. 回滚保护失败时会发生什么?
  7. AVB 的回滚保护如何与硬件安全模块(HSM)集成?
  8. 如何在 AVB 中禁用回滚保护?
  9. 回滚保护对 OTA 更新的要求是什么?
  10. 如何调试回滚保护相关问题?

10. 数据存储位置

  1. AVB 的公钥存储在哪里?
  2. vbmeta 镜像存储在设备的哪个分区?
  3. 哈希树存储在哪个分区?
  4. FEC 数据存储在哪个位置?
  5. 回滚索引存储在设备的哪个区域?
  6. AVB 的元数据存储在哪里?
  7. 如何从设备中提取 AVB 相关数据?
  8. AVB 的日志存储在哪里?
  9. AVB 的状态标志存储在哪个分区?
  10. 如何备份和恢复 AVB 相关数据?

这 100 个问题中,如果你能很确定的回答上 50 道以上,说明对 AVB 总体上掌握得不错;如果能回答 80 道以上,恭喜你,我觉得你真的算是精通了 AVB 了。

其它

我创建了一个 Android AVB 讨论群,主要讨论 Android 设备的 AVB 验证问题。

我还有几个 Android OTA 升级讨论群,主要讨论 Android 设备的 OTA 升级话题。

欢迎您加群和我们一起交流,请在加我微信时注明“Android AVB 交流”或“Android OTA 交流”。

仅限 Android 相关的开发者参与~

公众号“洛奇看世界”后台回复“wx”获取个人微信。

### Android Verified Boot (AVB)介绍 Android Verified Boot (AVB) 是一种增强设备安全性的机制,旨在防止未经授权修改启动过程中的关键组件。通过构建一个信任链来确保从最底层硬件到操作系统各个部分均未被篡改。这一链条依次经过 ROM code、BootLoader、boot image 及至 System 和 Vendor 分区[^1]。 ### AVB工作原理 在启动流程里,每个阶段都会加载并验证下一个阶段的数据完整性与真实性: - **ROM Code**: 设备上不可更改的第一段执行代码负责初始化基本硬件设置,并引导进入 bootloader。 - **Bootloader**: 验证 `boot.img` 文件(内含 Kernel Image),此文件包含了用于后续分区验证所需的公钥——verity_key,该密钥存储于 ramdisk 中而后者被打包进了 boot.img 之内[^2]。 - **Boot Image & Hash Tree Verification**: 当到达系统和供应商分区间时,则利用之前由 bootloader 解析出来的 verity metadata 来检验这些区域内的 hash tree 结构,从而确认其内容无损且未经非法改动。 ```python def verify_partition(partition_data, partition_hash_tree): """ Verify the integrity of a given partition using its associated hash tree. :param bytes partition_data: Raw data from the partition to be checked. :param list partition_hash_tree: List representing the Merkle tree hashes for verification. :return bool: True if valid, False otherwise. """ calculated_hashes = compute_merkle_tree(partition_data) return all(a == b for a, b in zip(calculated_hashes, partition_hash_tree)) ``` 对于采用 A/B 更新模式的系统而言,在版本切换期间同样遵循上述原则以保障新旧状态间的平滑过渡以及安全性。 ### 实现方式 实际部署中,AVB 主要依赖如下几个方面来达成目标: - **vbmeta Partition**: 自 Android Pie 开始引入的新概念,它保存着关于其他受保护分区的信息摘要及其签名信息;这使得即使当 primary slot 的数据遭到破坏或更新失败时也能借助 secondary slot 完成恢复操作而不影响整个验证逻辑的有效性。 - **Public Key Infrastructure(PKI)**: 整个过程中涉及到多个层次上的加密算法应用,比如 RSA 或者 ECDSA 等非对称密码技术用来签署重要资料,保证只有持有对应私钥的一方才能创建有效的签名,进而维护了整体架构的安全等级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛奇看世界

一分也是爱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值