Conscrypt モジュールは、OTA アップデートに依存することなく、セキュリティの向上を加速し、デバイスの保護を強化します。Java コードとネイティブ ライブラリを使用して、Android TLS の実装とほとんどの Android 暗号機能(キー ジェネレーター、暗号、メッセージ ダイジェストなど)を提供します。Conscrypt はオープンソース ライブラリとして利用できますが、Android プラットフォームに含める場合は、特別な仕様がいくつかあります。
Conscrypt モジュールは、BoringSSL を使用します。BoringSSL は Google が OpenSSL からフォークしたネイティブ ライブラリであり、Conscrypt コード(Java とネイティブ コードの両方)と組み合わせて、多くの Google プロダクト(特に Google Chrome)で暗号化と TLS に使用されています。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 モジュールの変更点は次のとおりです。
- MAC 実装 AES-CMAC が追加されました。
- MAC 実装「PBEwithHmacSHA2-*」のサポートが終了し、削除されました。
- X25519 鍵、鍵合意、署名の限定的サポートが追加されました。
- X.509 の正確性に合わせて BoringSSL が更新されました。
- 一般公開の CertPath API における MD5 署名の証明書サポートが廃止されました。API レベル 16 以降、TLS 接続でこのような証明書は承認されません。
Android 10 の変更点
Android 9 には、Conscrypt 用の Android 固有の公開 API は含まれていません。代わりにセキュリティ プロバイダを使用して、Cipher や MessageDigest などの Java 暗号化アーキテクチャ(JCA)と、SLSocket や SSLEngine などの Java Secure Socket Extension(JSSE)用の標準クラスを実装します。ユーザーがこれらのクラスを操作し、libcore
またはフレームワーク コードが一部の非公開の Conscrypt API を使用します。
Android 10 では、少数の公開 API メソッドが android.net.ssl
に追加され、javax.net.ssl
の下のクラスが非公開の Conscrypt 機能にアクセスできるようになりました。さらに、Android 10 には、軽量版の Bouncy Castle が含まれています。Bouncy Castle は、Android ランタイムの一部である、あまり知られていない暗号ツールを提供します(Conscrypt モジュールには含まれていません)。
形式と依存関係
Conscrypt モジュール(com.android.conscrypt
)は、Conscrypt Java コードと、Android NDK ライブラリ(liblog
など)に動的にリンクする Conscrypt ネイティブ ライブラリを含む APEX ファイルとして配布されます。ネイティブ ライブラリには、NIST の暗号モジュール検証プログラム(CMVP)で検証済み(認証番号 3753)の BoringSSL のコピーも含まれています。
Conscrypt モジュールが公開している API は以下のとおりです。
- 公開 API は、
java.*
とjavax.*
の下のパッケージに含まれるクラスおよびインターフェースと、android.net.ssl.*
の下にあるクラスの拡張です。外部アプリコードは Conscrypt を直接呼び出しません。これらの API は、Platform API 規格により下位互換性と上位互換性が保証されています。 - コア プラットフォーム API は、フレームワークが非公開の機能にアクセスするために使用する非公開 API です。これらの API は、比較的使用が制限されています。この API をよく使用するのは
NetworkSecurityConfig
で、Conscrypt トラスト マネージャー(証明書を検証するコンポーネント)を拡張してネットワーク セキュリティ構成機能を実装します。 - コア内 API は、JCA および JSEE 機構によってリフレクティブに呼び出される引数なしのコンストラクタに使用が制限されています。