Conscrypt

Conscrypt モジュールは、OTA アップデートに依存することなく、セキュリティの向上を加速し、デバイスの保護を強化します。Java コードとネイティブ ライブラリを使用して、Android TLS の実装とほとんどの Android 暗号機能(キー ジェネレーター、暗号、メッセージ ダイジェストなど)を提供します。Conscrypt はオープンソース ライブラリとして利用できますが、Android プラットフォームに含める場合は、特別な仕様がいくつかあります。

Conscrypt モジュールは、BoringSSL を使用します。BoringSSL は Google が OpenSSL からフォークしたネイティブ ライブラリであり、Conscrypt コード(Java とネイティブ コードの両方)と組み合わせて、多くの Google プロダクト(特に Google Chrome)で暗号化と TLS に使用されています。BoringSSL には公式リリースがなく、すべてのユーザーはゼロから構築する必要があります。また、API または ABI の安定性を保証するものではありません。

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 機構によってリフレクティブに呼び出される引数なしのコンストラクタに使用が制限されています。