Google 系统服务 APK 透明度

作为 Google 持续投资于产品透明度的一部分,我们将为两个新的 Google 系统服务 APK 添加透明度:Android System SafetyCore (com.google.android.safetycore) 和 Android System Key Verifier (com.google.android.contactkeys)。这些 APK 分别为 Google 信息中的敏感内容警告和加密密钥验证功能提供支持。我们发布的透明度日志,用于验证我们对这些 APK 所做的声明。

涵盖的软件包

本部分介绍了透明度日志中涵盖的软件包及其各自的代码公开透明签名密钥。

Android System SafetyCore

Android System SafetyCore (com.google.android.safetycore) 是一项 Android 系统组件,可为应用提供可保护隐私的设备端用户保护基础架构。

此 APK 中的代码目前使用此证书所述的以下密钥进行签名:

-----BEGIN CERTIFICATE-----
MIIFyDCCA7CgAwIBAgIUf3otg1DSj4EfxlP2OjAapoQ/moEwDQYJKoZIhvcNAQELBQAwdDELMAkG
A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDAS
BgNVBAoTC0dvb2dsZSBJbmMuMRAwDgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMCAX
DTI0MDcxNzIwNDQzMFoYDzIwNTQwNzE3MjA0NDMwWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
Q2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4x
EDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQCw93tMu9bD3tAfP1XDj2Y/vvBqDTvi86HesUK8gq0M7kxttep0BP2AkZS5AdVa
DNW6kuMhUN1XOao/Ib/mpgdi3pK6w0WDIlpHsg3coRuCxeniROw3+XUSLNox1mqfLSgHNg9gNoxK
dUyGf8nEIYVgLBUH8OX2oKeirRT7DyR64uVJmts0B0RvNt5VfP5vf6KFpa0prqCNGqQLHLyev3g/
35RH1oAVVsjZnylDYAm9qdAVugL0sgExY01vRNluZZKJuItNpdt+AMOTgStZAEwkhAg7pMbNF27g
AJDCC+XDS16/x1Jnxc+Exlw66aHB++1+dFK/rYkbB+ql4dHjs/LTGqPIeUuE3Xd7UkguKZRRLNtI
Ls9DP1UYuQGZ1IQ9kQamkxScNFgNmymkgTXhBajDKSPy4jb2t5yLHTIJn0OvyMLg2J7/ImHHmc99
07OuXCfy55aW99lqaYsc+rLPOHFi6GjvTUkkyxXqJlhQYb9uQznxkqsfbnBefxCCO924uVIwWDlt
rA+mQ3Bw7TNgb3NmKUmUrmFaRBmrAxnag/jj0N4ff7vXVBR0WkXpb3qRPlSvsEXGYOWPJtc2+U2Q
IFcNyEeu6zWD5yYIcnoX1go2zEVt99b1AFsN0zRWo0mNyeLizDNiDkGT9AtB8rdajhchDqfmZGGX
XqhhJVT9IRMBFQIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBQY4GYL4FxVcxk2Euj8
otSQHVYz7zAfBgNVHSMEGDAWgBQY4GYL4FxVcxk2Euj8otSQHVYz7zANBgkqhkiG9w0BAQsFAAOC
AgEAoDuItwszr0yIPcvn/l3s5xZs+3rXe52KcY+ZgMVyM4q5CTEHwX89+K+hMFMTqp8vkrLhjnhz
/SYEY0ZXMQsQ0GWrMHbfIbzUsLhIoMBYn1JA+AH+CCZIYo9GbxaCqu4KJPQNC7sqA3goWf6UqHya
rj8wzXT5+qmOVwBUHgQUap5406/DaPqU0g+w4+hiV/zI67ugWU1z+6WElYIsXjN59zA5rVIJTdnV
w04RNK5fldWUsbkPGQ7hwoyJG4wZewCZ0sU4NUqVecb8z52hdlGj15+rUhDJq0pbDRjFEnulfUFJ
gA5s6iosSYyXrGQgE6NOszxu7nMvSg7MPrS7GQUMnaadQAye/7ELBY4jxlHMOAuj9iwz2Asjuy0a
ye64nfcYBbFSIzV7xRgeUJy42jyRq9ZoILU9fW/I4rHNIcntgB2POpzFOZrKXLC/B8rHKZT9AZOd
iXEKqFRBnHEaGy+MARO7guCQLO8XIVQixDHWS6OJRIvw0LKaf4dSlCxcUEpYSSHJmt6JMOujapCa
JmKz7K+wZWSClJnrc0HhJnZFt6S3TakZx7ALVi0SqxBaxHYFieSn9rmXHOWrSxEz5cmASnsfqnc0
w//Yhjm+gGOmLs/5TzrCyYvYt8Ynsd1G1GHipwc8JXGxLqbOPrNcUpjM65m+sshERIua30du0GOm
4ZM=
-----END CERTIFICATE-----

Android System Key Verifier

Android 系统密钥验证器 APK (com.google.android.contactkeys) 是一项用于在 Android 设备上进行联系人验证的服务。它允许用户验证联系人的公钥,以确认他们正在与预期的消息接收对象通信。该服务是一个统一的系统,用于跨不同应用进行公钥验证,可通过扫描二维码或对比数字进行验证。

此 APK 中的代码目前使用此证书所述的以下密钥进行签名:

-----BEGIN CERTIFICATE-----
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
PLM=
-----END CERTIFICATE-----

威胁模型

透明度系统可用于检测供应链攻击,从而阻止此类攻击。我们通过一些示例来加以说明。

假设攻击者恶意修改了 Google 系统服务 APK,甚至设法使用 Google Play 使用的签名密钥对其进行签名。收到恶意 APK 的任何人都可以查询二进制公开透明日志,以验证 APK 的真实性。他们会发现 Google 尚未向日志添加相应的 APK 元数据,并会知道不应信任已遭到入侵的 APK。

由于发布到日志是与签名发布流程分开的流程(如生态系统图所示),因此攻击者不仅要破坏密钥,还需要跨越更多障碍。

虽然我们还计划使用标准见证协议将此日志集成到公开见证网络中,但我们鼓励外部独立方监控此公开日志的完整性。这些实体可以证明日志的只附加属性,并报告任何篡改行为。

此类透明度系统的存在以及攻击的额外可检测性会抑制恶意活动。如果某个 APK 遭到入侵,但用户只信任日志中的 APK,则需要公开披露遭到入侵的 APK。这样可以提高发现存在被入侵 APK 的几率,并采取措施移除其分发。

版权主张方模型

声明者模型是一种框架,用于在可验证系统中定义角色和工件。对于 Google 系统服务 APK 透明度,我们声明此日志中记录的已签名二进制文件的哈希代表相应 Google 系统服务 APK 的官方代码。

  • 声明 GoogleSystemServicesApk:(我,Google,声明 $codeSignature 适用于 $googleSystemServicesApk),其中:
    • $codeSignature 是一个已签名的 JSON Web 令牌 (JWT),其中包含特定版本的 $googleSystemServicesApk 中所含 DEX 文件和原生库的列表,以及这些 DEX 文件和原生库对应的哈希值。
    • $googleSystemServicesApk 是以下软件包中的 Android 软件包 (APK):{Android System SafetyCore (com.google.android.safetycore), Android System Key Verifier (com.google.android.contactkeys)}

拥有 $googleSystemServicesApk 副本的任何人都可以验证上述声明,我们在验证页面中详细介绍了此流程。

日志内容

当 Google 发布上述 APK 的新版本时,会向 Google 系统服务 APK 透明度日志添加相应条目。

此日志中的每个条目都包含四部分 APK 元数据:

  1. Google 开发的 APK 的代码签名的哈希值。 这是代码公开透明令牌(也称为代码公开透明 JWT)的 SHA256 摘要的十六进制字符串。
  2. 上述哈希类型的说明。这是一个字符串。
  3. APK 的软件包名称。这是一个字符串。
  4. APK 的版本号 (versionCode)。这是一个整数。

日志条目的格式是将这四条信息与换行符 (\n) 字符串联在一起,如下所示:

hash\nSHA256(Signed Code Transparency JWT)\npackage_name\npackage_version\n

请注意,在此版本中,我们正在尝试使用代码公开透明机制。这意味着,我们会记录代码公开透明令牌的摘要,而不是 APK 的哈希。因此,哈希说明目前固定为 SHA256(Signed Code Transparency JWT)

此外,这也展示了当应用开发者的应用签名密钥由 Google Play 持有时,他们可以利用代码公开透明的方式。

生态系统图

可验证日志生态系统示意图