Conscrypt 模塊可加速安全改進並提高設備安全性,而無需依賴 OTA 更新。它使用 Java 代碼和本機庫來提供 Android TLS 實現以及大部分 Android 加密功能,例如密鑰生成器、密碼和消息摘要。 Conscrypt 可作為一個開源庫使用,儘管它在包含在 Android 平台中時有一些專門化。
Conscrypt 模塊使用BoringSSL ,這是一個本地庫,它是 OpenSSL 的 Google 分支,在許多 Google 產品中用於加密和 TLS(最著名的是 Google Chrome),以及 Conscrypt 代碼(Java 和本地代碼)。 BoringSSL 沒有正式版本(所有用戶都是從頭開始構建的),並且不保證 API 或 ABI 的穩定性。
Android 10 的變化
Android 9 不包含用於 Conscrypt 的特定於 Android 的公共 API,而是使用安全提供程序來實現 Java 加密體系結構 (JCA) 的標準類,包括 Cipher 和 MessageDigest,以及 Java 安全套接字擴展 (JSSE),包括 SSLSocket 和 SSLEngine。用戶與這些類交互,一些非公共的 Conscrypt API 被libcore
或框架代碼使用。
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) 驗證的 BoringSSL 副本( 證書 #3753 )。
Conscrypt 模塊公開了以下 API:
- 公共 API是
java.*
和javax.*
下的包中的類和接口的擴展,以及android.net.ssl.*
下的類。外部應用程序代碼不直接調用 Conscrypt。平台 API 標準確保這些 API 保持向後和向前兼容。 - 核心平台 API是框架用來訪問非公共功能的隱藏 API。這些是相對有限的;最大的用戶是
NetworkSecurityConfig
,它擴展了 Conscrypt 信任管理器(驗證證書的組件)來實現網絡安全配置功能。 - 內核內 API僅限於由 JCA 和 JSEE 機制反射調用的零參數構造函數。