Google 致力于为黑人社区推动种族平等。查看具体举措

fs-verity 集成

fs-verity 是一项 Linux 内核功能,可让系统持续通过受信任的数字证书来验证 APK 文件。在平台提供这种访问时验证机制的情况下,有了来自某个受支持商店(例如 Play)的受信任证书,该商店便可以安装具有 fs-verity 签名的 APK 文件来进行持续验证。受 fs-verity 保护的文件是不可变的,并且仅在内容通过验证后读取请求才会成功。

内核支持 fs-verity 后,合作伙伴可以将来自其受信任商店的新型证书存放在产品分区 /product/etc/security/fsverity 内,证书会在启动期间加载到内核密钥环。在支持此功能的设备上,受信任的商店可以安装具有相应 fs-verity 签名的 APK。

实现

搭载 Android R 的设备

fs-verity 是一项从 5.4 版起在上游实现的 Linux 内核功能,并且已向后移植到 Android 通用内核 4.14 及更高版本。如果新设备使用的是通用内核 4.14 或更高版本,并且用户数据分区采用的是 ext4 或 f2fs 格式,那么该设备就不需要采取任何措施,因为其已通过 Linux 内核支持 fs-verity。

升级到 Android R 的设备

fs-verity 补丁程序需要向后移植到设备内核。如果是 ext4,请将 fsverity 添加到 fstabfs_mgr 标记中。然后,您就可以通过以下设置启用该功能:

ro.apk_verity.mode=2

API

我们引入了新的公共 API,用于查询设备的支持状态以及确定某个证书是否为设备信任的证书。

  public final class FileIntegrityManager {
    public boolean isApkVeritySupported();
    @RequiresPermission(anyOf={
        android.Manifest.permission.INSTALL_PACKAGES,
        android.Manifest.permission.REQUEST_INSTALL_PACKAGES})
    public boolean isAppSourceCertificateTrusted(@NonNull java.security.cert.X509Certificate)
            throws java.security.cert.CertificateEncodingException;
  }

验证

请运行以下 VTS、CTS 和 GTS 测试来验证实现。

  • [VTS] ApkVerityTest
  • [CTS] CtsAppSecurityHostTestCases:android.appsecurity.cts.ApkVerityInstallTest
  • [CTS] CtsSecurityHostTestCases#android.security.cts.KernelConfigTest
  • [GTS] GtsPlayFsiTestCases & GtsPlayFsiHostTestCases