AVB Key(Android Verified Boot )学习记录

官方链接:https://android.googlesource.com/platform/external/avb/
它是什么?
验证启动是向最终用户保证设备上运行的软件完整性的过程。它通常从设备固件的只读部分开始,该部分加载代码并仅在加密验证代码是真实的并且没有任何已知的安全漏洞后才执行。AVB 是验证启动的一种实现。
在芯片刚启动的时候会利用芯片中的OTP fuse的值对bootloader 镜像文件进行校验。bootloader启动后会根据Android verify boot 的规则去验证 kernel 也就是boot.img。kernel启动后会利用DM-verity 去验证system 和vendor的image。如果验证通过就正常运行。否则就会报错,运行失败。说起来有些繁琐,看下图,简单地描述这个部分的验证关系。
在这里插入图片描述
VBMeta 结构
AVB 中使用的中央数据结构是 VBMeta 结构。该数据结构包含许多描述符(和其他元数据),并且所有这些数据都经过加密签名。描述符用于图像哈希、图像哈希树元数据和所谓的链式分区。一个简单的例子如下:
在这里插入图片描述

带有引导、系统和供应商的 AVB

其中分区在散列描述符中vbmeta保存分区的散列。boot对于system和vendor分区,哈希树跟随文件系统数据,vbmeta分区在哈希树描述符中保存哈希树的根哈希、salt 和偏移量。因为分区中的 VBMeta 结构vbmeta是加密签名的,所以引导加载程序可以检查签名并验证它是由 的所有者创建的key0(例如通过嵌入 的公共部分key0),从而信任用于boot、system和 的哈希值vendor。
链式分区描述符用于委托权限 - 它包含委托权限的分区的名称以及在该特定分区上签名时受信任的公钥。例如,请考虑以下设置:在这里插入图片描述
在此设置中,xyz分区具有用于完整性检查的哈希树。哈希树之后是一个 VBMeta 结构,它包含具有哈希树元数据(根哈希、盐、偏移量等)的哈希树描述符,并且该结构使用key1. 最后,分区的末尾是一个页脚,它具有 VBMeta 结构的偏移量。

此设置允许引导加载程序使用链分区描述符找到分区末尾的页脚(使用链分区描述符中的名称),这反过来有助于定位 VBMeta 结构并验证它是否由(使用key1存储key1_pub在链分区描述符)。至关重要的是,因为有一个带偏移量的页脚,所以无需对分区进行任何更改xyz即可更新分区。vbmeta

VBMeta 结构足够灵活,允许任何分区的哈希描述符和哈希树描述符存在于分区中vbmeta,它们用于完整性检查的分区(通过链分区描述符)或任何其他分区(通过链分区描述符) . 这允许广泛的组织和信任关系。

链式分区不需要使用页脚 - 允许链式分区指向 VBMeta 结构开头的分区(例如,就像分区一样vbmeta)。这对于整个组织拥有的分区的所有哈希和哈希树描述符都存储在专用分区中的用例很有用,例如vbmeta_google。在此示例中,哈希树描述符system位于vbmeta_google分区中,这意味着引导加载程序根本不需要访问该system分区,如果将system分区作为逻辑分区进行管理(例如通过LVM 技术或类似技术),这将很有帮助。

AVB key
AVB key 是一对非对称密钥。私钥用来签名,公钥用来验证。如关系如图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值