Android Mainline 模块透明度日志使用可验证的数据结构来确保 Mainline 模块的完整性。
Pixel Binary Transparency 和 证书透明度 等项目已证明透明度日志的实用性。
透明度日志基于 Merkle 树构建。 本页面假定您对 Merkle 树和二进制透明度有一般了解。 如需大致了解 Merkle 树,请参阅可验证的数据结构;如需大致了解 Android 中的二进制透明度工作,请参阅 主页。
日志实现
Android Mainline 模块透明度日志使用 Tessera 实现,并遵循 tlog-tiles 规范,图块高度为 8(每个 图块或软件包最多包含 28 = 256 个项)。
日志内容的根目录位于:
https://gstatic.com/android/binary_transparency/mainline/2026/02/tile/entries/
图块内容的根目录位于:
https://gstatic.com/android/binary_transparency/mainline/2026/02/tile/
请注意,这些网址不是标准网页。相反,应使用 Tessera 或 Golang SumDB Tlog library 等工具以编程方式访问其 子目录中的日志条目。
- 树图块:Merkle 树内部和叶节点哈希在
tile/<level>/<path>下提供(例如,tile/0/000、tile/1/000)。 - 条目软件包:日志叶载荷在
tile/entries/<path>下整理到条目软件包中(例如,tile/entries/000、tile/entries/001), 每个软件包最多包含 256 个串联条目。
如需了解每个 条目包含的内容,请参阅日志内容。
日志的 Merkle 树根哈希包含在 检查点中,以 检查点格式在 https://gstatic.com/android/binary_transparency/mainline/2026/02/checkpoint 提供。检查点来源为 gstatic.com/android/binary_transparency/mainline/modules/2026/1。
检查点签名使用 Ed25519 签名算法生成。
可以使用以下公钥
以备注验证器格式(如 golang.org/x/mod/sumdb/note 中所定义)
或标准 PEM 格式验证检查点的签名:
- 备注验证器格式 (
<name>+<key_hash>+<public_key_bytes>):
MainlineModulesLogV2+e490c9dd+AfwnHm59rNQTJICchMd7a2W5PQa7nC5h2gTEfq3fhCEI
- PEM 格式 (SubjectPublicKeyInfo):
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA/Ccebn2s1BMkgJyEx3trZbk9BrucLmHaBMR+rd+EIQg=
-----END PUBLIC KEY-----
已归档的日志 (V1)
在 2026 年第 3 季度更新之前,日志在早期 V1 实现下运行,使用 ECDSA(NIST P-256,采用 SHA-256) 签名。 V1 日志已归档且为只读,但仍可公开访问,以验证历史条目:
- 检查点:https://gstatic.com/android/binary_transparency/mainline/2026/01/checkpoint.txt
- 数据叶:https://gstatic.com/android/binary_transparency/mainline/2026/01/module_info.txt
- 图块根:
https://gstatic.com/android/binary_transparency/mainline/2026/01/tile/ - 公钥(PEM 格式,ECDSA P-256):
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEr6nPds8eKCYU42avidXNM1GDCtQ/
66GjGuIpUcZjqQNngwRFVCFZDpWuvDnqXzhJRxqccL9lbeEVVZGpa4x6pg==
-----END PUBLIC KEY-----
由于 Mainline 模块与 APK 类似,因此 Google APK 验证页面上介绍的验证方法也适用于此处。您可以使用其中的方法来验证 声明者模型中所做的声明。