Conscrypt 模組可加速安全改進,提高設備安全性,無需依賴 OTA 更新。它使用 Java 程式碼和本機程式庫來提供 Android TLS 實作以及大部分 Android 加密功能,例如金鑰產生器、密碼和訊息摘要。 Conscrypt 可作為開源程式庫使用,但在 Android 平台中包含時它有一些專業化。
Conscrypt 模組使用BoringSSL ,這是一個本機庫,它是OpenSSL 的Google 分支,在許多Google 產品中用於加密和TLS(最著名的是Google Chrome),並與Conscrypt 程式碼(Java 和本機程式碼)結合使用。 BoringSSL 沒有正式版本(所有使用者從頭開始建置)並且不保證 API 或 ABI 穩定性。
Android 14 的變化
Android 14 在 Conscrypt 中引入了可更新的根信任儲存。 CA 憑證(或憑證)為 Android 和整個網路中使用的公鑰提供信任根源。定期檢查這些憑證以確保正確的加密簽名,因此必須提供它們並將其儲存在依賴它們的所有裝置上。
在 Mainline 之前,Android 將證書儲存在系統分區中(在system/ca-certificates
中),並在每個 Android 版本中更新它們。現在,透過 Mainline,可以使用 Mainline 列車更新更頻繁地更新證書。這項新功能應該能夠簡化更新流程,讓我們更快解決問題,並有助於延長設備的使用壽命。
從 Android 14 開始,根信任憑證儲存在 Conscrypt 模組 APEX 和系統分割區中。應用程式仍然可以選擇自己的憑證並使用NetworkSecurityConfig
修改憑證行為。
Android 14 包括以下其他 Conscrypt 模組變更:
- 新增了 AES-CMAC MAC 實作。
- 棄用並刪除了“PBEwithHmacSHA2-*” MAC 實作。
- 新增了對 X25519 金鑰、金鑰協定和簽章的有限支援。
- 更新了 BoringSSL 以確保 X.509 的正確性。
- 公共 CertPath API 中不再支援 MD5 簽署憑證。自 API 等級 16 以來,TLS 連線不再接受此類憑證。
Android 10 的變化
Android 9 不包含適用於Conscrypt 的Android 特定公共API,而是使用安全提供者來實作Java 加密架構(JCA) 的標準類,包括Cipher 和MessageDigest,以及Java 安全通訊端擴充(JSSE),包括SSLSocket 和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 本機庫。本機庫還包括 BoringSSL 的副本,該副本已通過 NIST 的加密模組驗證計劃 (CMVP)進行驗證( 憑證#3753 )。
Conscrypt 模組公開以下 API:
- 公共 API是
java.*
和javax.*
下的套件中的類別和介面以及android.net.ssl.*
下的類別的擴展。外部應用程式程式碼不會直接呼叫 Conscrypt。平台 API 標準確保這些 API 保持向後和向前相容。 - 核心平台 API是框架用來存取非公共功能的隱藏 API。這些都是相對有限的;最大的用戶是
NetworkSecurityConfig
,它擴展了 Conscrypt 信任管理器(驗證憑證的元件)來實現網路安全配置功能。 - 核心內 API僅限於由 JCA 和 JSEE 機制反射呼叫的零參數建構函數。