孔雀

Conscrypt 模組可加快安全性改善作業,並改善裝置安全性,不必仰賴 OTA 更新。它會使用 Java 程式碼和原生程式庫,提供 Android TLS 實作,以及大部分的 Android 密碼編譯功能,例如金鑰產生器、密碼和訊息摘要。Conscrypt 可做為開放原始碼程式庫使用,但在 Android 平台中加入時,它會具備一些專門功能。

Conscrypt 模組會使用 BoringSSL,這是 Google 分支自 OpenSSL 的本機程式庫,在許多 Google 產品中用於加密編譯和傳輸層安全標準 (TLS) (最著名的是 Google Chrome),並與 Conscrypt 程式碼 (Java 和本機程式碼) 搭配使用。BoringSSL 沒有官方版本 (所有使用者都是從頭建構),因此無法保證 API 或 ABI 的穩定性。

Android 15 的變更

Android 15 限制 TLS 1.0 和 1.1 版本的使用。這些版本先前已在 Android 中淘汰,但現在已禁止用於指定 Android 15 為目標版本的應用程式。

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 Cryptography Architecture (JCA) 的標準類別,包括 Cipher 和 MessageDigest,以及 Java Secure Socket Extension (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 程式碼和 Conscrypt 原生程式庫,可動態連結至 Android NDK 程式庫 (例如 liblog)。原生程式庫也包含 BoringSSL 副本,該副本已通過 NIST 的加密編譯資料庫驗證計畫 (CMVP) 驗證 (憑證 #3753)。

Conscrypt 模組會公開下列 API:

  • 公用 APIjava.*javax.* 下套件中的類別和介面擴充功能,以及 android.net.ssl.* 下類別的擴充功能。外部應用程式程式碼不會直接呼叫 Conscrypt。平台 API 標準可確保這些 API 維持回溯和前向相容性。
  • 核心平台 API 是架構用來存取非公開功能的隱藏 API。這些元件相對較少;最大的使用者是 NetworkSecurityConfig,它會擴充 Conscrypt 信任管理工具 (用於驗證憑證的元件),以實作網路安全性設定功能
  • 核心內 API僅限於由 JCA 和 JSEE 機制以反射方式呼叫的零引數建構函式。