Android Mainline 模块透明度日志

Android Mainline 模块透明度日志使用可验证的数据结构来确保 Mainline 模块的完整性。

Pixel 二进制文件透明度和证书透明度等项目已证明透明度日志的实用性。

透明度日志基于 Merkle 树构建。 本页面假定您对 Merkle 树和二进制文件透明度有大致的了解。 如需简要了解 Merkle 树,请参阅可验证的数据结构;如需简要了解 Android 中的二进制文件透明度工作,请参阅主页。

日志实现

Android Mainline 模块透明度日志使用 Tessera 实现,并遵循 tlog-tiles 规范,图块高度为 8(每个图块或软件包最多包含 28 = 256 项)。

日志内容的根目录位于: https://www.gstatic.com/android/binary_transparency/mainline/2026/02/tile/entries/

图块内容的根目录位于: https://www.gstatic.com/android/binary_transparency/mainline/2026/02/tile/

请注意,这些网址并非标准网页。相反,应使用 Tessera 或 Golang SumDB Tlog 库等工具,以编程方式访问其子目录中的日志条目。

  • 树图块:Merkle 树内部和叶节点哈希在 tile/<level>/<path> 下提供(例如 tile/0/000、tile/1/000)。
  • 条目包:日志叶载荷会整理到 tile/entries/<path> 下的条目包中(例如 tile/entries/000、tile/entries/001),每个包最多可容纳 256 个串联条目。

如需了解每个条目包含的内容,请参阅日志内容。

日志的 Merkle 树根哈希包含在检查点中,以检查点格式在 https://www.gstatic.com/android/binary_transparency/mainline/2026/02/checkpoint 中提供。 检查点来源为 android.transparency.goog/mainline/modules/2026/1。

检查点签名是使用 Ed25519 签名算法生成的。您可以使用以下公钥(采用 note 验证方格式 [如 golang.org/x/mod/sumdb/note 中所定义] 或标准 PEM 格式)验证检查点的签名:

  • 备注验证器格式 (<name>+<key_hash>+<public_key_bytes>):
android.transparency.goog/mainline/modules/2026/1+1a8e4064+AfwnHm59rNQTJICchMd7a2W5PQa7nC5h2gTEfq3fhCEI
  • PEM 格式 (SubjectPublicKeyInfo):
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA/Ccebn2s1BMkgJyEx3trZbk9BrucLmHaBMR+rd+EIQg=
-----END PUBLIC KEY-----

归档日志 (V1)

在 2026 年第 3 季度更新之前,该日志在早期 V1 实现下运行,使用 ECDSA(NIST P-256 与 SHA-256)签名。V1 日志已归档且为只读,但仍可公开访问,以便验证历史条目:

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEr6nPds8eKCYU42avidXNM1GDCtQ/
66GjGuIpUcZjqQNngwRFVCFZDpWuvDnqXzhJRxqccL9lbeEVVZGpa4x6pg==
-----END PUBLIC KEY-----

由于 Mainline 模块与 APK 类似,因此 Google APK 验证页面上介绍的验证方法也适用于此处。您可以使用其中的方法来验证版权主张方模型中提出的版权主张。