像素二进制透明度日志采用了透明度日志技术。
透明度日志的效用已通过 证书透明度 (Certificate Transparency) 该协议要求证书授权机构发布其证书 公开 Certificate Transparency 日志的问题。这一过程大大减少了 可以防止证书误发,从而提升 互联网。许多证书透明度日志运算符都依赖于 transparency.dev 中找到透明度日志。
透明度日志是使用 Merkle 树实现的。本页假设一般 Merkle 树和二元透明度的相关知识。请参阅 可验证的数据结构 Merkle 树的概述, 着陆页,简要了解二进制文件 透明度。
日志实现
像素二进制透明度日志的实现方式是 基于图块的 Merkle 树。根 的图块内容 https://developers.google.com/android/binary_transparency/tile.注意:这是 不是常规网页;其子目录中包含的日志条目应 使用 Golang SumDB 以编程方式读取 TLog 库,而不是通过 。
请参阅记录内容,获取 条目所含内容的说明。
日志的 Merkle 树根哈希(包含在检查点中)在以下位置提供: https://developers.google.com/android/binary_transparency/checkpoint.txt. 它位于 检查点格式。 此 Merkle 树的叶子在 https://developers.google.com/android/binary_transparency/image_info.txt 中提供。 可以使用以下公钥验证检查点的签名:
-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----
验证流程会读取检查点和图块 包含日志中的日志条目。
验证流程
透明度日志是使用由哈希组成的 Merkle 树实现的。答 叶节点包含数据,父节点包含其子节点的哈希值。
对 Merkle 树执行两项计算,以验证防篡改 透明度日志的属性:收录证明和一致性证明。通过 用于证明日志包含与映像版本对应的条目, 。日志条目包含 VBMeta 摘要、 表示操作系统映像的哈希,可以从设备返回。通过 后者用于证明,当有新条目添加到树中时, 与前一版本树保持一致。
如需验证您的 Pixel 图片,请出示包含证明。执行 一致性证明计算是可选的,因为第三方会不断 。
如果您想熟悉 Pixel 中的验证概念 二进制透明度,您可以按照以下说明使用映像 。如果您想运行具有最高性能的 Pixel 固件, 请查看验证过程, 像素二进制透明度完整验证。
前提条件
确保以下依赖项可用:
- Golang:验证工具必须是使用 Go 1.17 或更高版本(可用)构建的 (位于 Go 网站)。
- Android 调试桥 (adb):与 Android 设备通信以检查 可在 Android SDK Platform Tools 网站。
- 收录证明验证程序:与日志交互,以检查 Pixel 图片位于二进制透明度日志中。
# Source code for the inclusion proof verifier is found at avb/tools/transparency/verify
git clone https://android.googlesource.com/platform/external/avb
包容性证明
Pixel 所有者可以先提取 相关元数据,然后比较其重新计算的根哈希与根哈希 包含在 已发布的检查点: 如果两者相符,Pixel 机主就一定会获得一些保护 示例 威胁模型。
如需查看 Pixel 设备上的图片是否在透明度日志中,请按以下步骤操作: 使用 adb 连接到设备, 然后运行以下命令:
FINGERPRINT=$(adb shell getprop ro.build.fingerprint)
VBMETA_DIGEST=$(adb shell getprop ro.boot.vbmeta.digest)
LOG_ENTRY="${FINGERPRINT}\n${VBMETA_DIGEST}\n"
PAYLOAD_PATH="/tmp/log_payload.txt"
echo -e $LOG_ENTRY >> $PAYLOAD_PATH
cd avb/tools/transparency/verify/
go build cmd/verifier/verifier.go
./verifier --payload_path=$PAYLOAD_PATH
第一个节以
日志条目,并将其保存到 /tmp/log_payload.txt。
第二个节运行在 Android 启动时验证代码库。 此工具会计算候选日志条目的哈希值,然后检索另一个 从日志中重新计算检查点所需的哈希,并将其与 日志发布的检查点。
该命令的输出将写入 stdout:
- 如果图片包含在日志中,则为
OK; - 如果未使用,则为
FAILURE。
一致证明(可选)
由于 Google 会定期发布新版 Pixel 出厂映像, 透明度日志在不断增加。见证者检查树是否正常成长 其运行方式与之前的叶子保持一致。目击者追踪 树根哈希,并请求新的候选根哈希, 从树中获取叶哈希。透明度日志必须 以确保一致性
透明度日志的仅附加行为由第三个主动检查 因此大多数用户无需自行执行此操作, 让任何人都可以监控日志的一致性Google 已发布了一个开源软件 在这个示例中, GitHub 代码库。您必须 使用 配置 Pixel Binary Transparency (PixelBT) 日志特有的日志。