Conscrypt

借助 Conscrypt 模块,无需依赖于 OTA 更新,即可加速实现安全改进并提高设备安全性。它使用 Java 代码和原生库来提供 Android TLS 实现以及大部分 Android 加密功能(例如密钥生成器、加密算法和消息摘要)。Conscrypt 以开源库的形式提供,但包含在 Android 平台中时有一些特殊化。

Conscrypt 模块使用 BoringSSL,后者是 Google 在 OpenSSL 基础上派生出的一个原生库,在很多 Google 产品(最值得注意的是 Google Chrome)中和 Conscrypt 代码(Java 代码和原生代码)一起用于加密和传输层安全协议 (TLS)。BoringSSL 没有正式版本(所有用户都需要从头构建),并且无法保证 API 或 ABI 的稳定性。

Android 10 中的变化

Android 9 不包含 Android 特有的公共 Conscrypt API,而是使用一种安全提供程序。该安全提供程序可为 Java 加密架构 (JCA)(包括加密算法和消息摘要)和 Java 安全套接字扩展 (JSSE)(包括 SLSocket 和 SSLEngine)实现标准类。用户与这些类进行互动,libcore 或框架代码会使用一些非公共 Conscrypt API。

Android 10 在 android.net.ssl 中添加了少量公共 API 方法,以访问 javax.net.ssl 下的类未提供的 Conscrypt 功能。此外,Android 10 还包含精简版的 Bouncy Castle,后者作为 Android 运行时的一部分提供不太热门的加密工具(未包含在 Conscrypt 模块中)。

格式和依赖项

Conscrypt 模块(“com.android.conscrypt”)以 APEX 文件的形式分发,该文件包含 Conscrypt Java 代码以及一个动态链接到 Android NDK 库(如 liblog)的 Conscrypt 原生库。该原生库还包含一个已通过 NIST 的加密模块验证计划 (CMVP) 进行验证(证书 #3753)的 BoringSSL 副本。

Conscrypt 模块公开以下 API:

  • 公共 APIjava.*javax.* 下软件包中的类和接口以及 android.net.ssl.* 下的类的扩展。外部应用代码无法直接调用 Conscrypt。平台 API 标准确保这些 API 保持向后和向前兼容性。
  • 核心平台 API 是框架访问非公开功能时使用的隐藏 API。这些 API 相对有限;最大的使用者是 NetworkSecurityConfig,它扩展 Conscrypt 信任管理器(用于验证证书的组件)来实现网络安全配置功能
  • 核心内 API 仅限于由 JCA 和 JSEE 机制以反射方式调用的零参数构造函数。