Pixel 二进制透明度技术详情页面

像素二进制透明度日志采用了透明度日志技术。

透明度日志的效用已通过 证书透明度 (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) 日志特有的日志。