Android Verified Boot,验证程序用来保护用户使用软件在设备上运行的完整性。它通常从设备固件的只读部分开始,该部分加载代码并仅在密码验证代码是真实的且没有任何已知的安全缺陷之后执行。AVB是经过验证的引导的一种实现。
BOARD_AVB_ENABLE 默认为true,可以设置为false关闭avb。
1. avbtool工具
1.1 位置
HOST_OUT_ROOT := $(OUT_DIR)/host
HOST_OUT := $(HOST_OUT_ROOT)/$(HOST_OS)-$(HOST_PREBUILT_ARCH)
所以HOST_OUT := out/host/linux-x86
HOST_OUT_EXECUTABLES := $(HOST_OUT)/bin
AVBTOOL := $(HOST_OUT_EXECUTABLES)/avbtool$(HOST_EXECUTABLE_SUFFIX)
Windows下HOST_EXECUTABLE_SUFFIX是“.exe”表示后缀,linux下为空。
所以ubuntu下avbtool工具为out/host/linux-x86/avbtool
1.2 源码
源码路径:external/avb/avbtool
Android.bp中:
python_binary_host {
name: "avbtool",
srcs: [":avbtool_py"],
main: "avbtool.py",
required: ["fec"],
version: {
py2: {
enabled: true,
embedded_launcher: true,
},
py3: {
enabled: false,
},
},
}
采用python实现。
1.2.1 RSA私钥语法
RSA定义私钥语法:
version |
版本 |
modulus |
RSA合数模 n |
publicExponent |
RSA公开幂 e |
privateExponent |
RSA私有幂 d |
prime1 |
n的素数因子p |
prime2 |
/n的素数因子q |
exponent1 |
值 d mod (p-1) |
exponent2 |
值 d mod (q-1) |
coefficient |
CRT系数 (inverse of q) mod p |
otherPrimeInfos |
OtherPrimeInfos OPTIONAL |
1.2.2 TLV编码结构
BER编码的一种,ASN1标准,全称Tag(标签),Length(长度),Value(值)。
IS-IS数据通信领域中,tlv三元组: tag-length-value(TLV)。T、L字段的长度往往固定(通常为1~4bytes),V字段长度可变。顾名思义,T字段表示报文类型,L字段表示报文长度、V字段往往用来存放报文的内容。
可以通过下属命令查看vbmeta信息。