Android 13 以降を搭載したデバイスの場合、Android では初回使用時の信頼(TOFU)認証方法(RFC7435)がサポートされています。ユーザーはサーバーで使用されるルート CA をインストールし、保存済みネットワークにドメイン名を設定することで、エンタープライズ(EAP)ネットワークを信頼できます。TOFU を使用すると、デバイスは、ユーザーが最初にエンタープライズ ネットワークに接続する際に未認証の公開鍵を取得し、以降の接続のためにその鍵を保持できます。
背景
パスワードだけが必要な個人用ネットワークとは異なり、エンタープライズ ネットワークでは、クライアントが証明書をプリインストールする必要がある公開鍵基盤(PKI)認証が使用されます。Android 11 以前では、ユーザーは、ネットワーク設定でサーバー CA 証明書の [検証しない] オプションを選択して、サーバー側の証明書の検証を回避できます。一方、セキュリティを強化し、WPA R2 の仕様に準拠するため、Android 12 ではエンタープライズ ネットワークでのサーバー証明書の検証が必須になりました。この追加要件により、該当するネットワークを使用するユーザーに、CA 証明書をインストールしなければならないという障壁が発生しました。TOFU を使用すると、ユーザーはルート CA を受け入れるだけで、PKI ベースのエンタープライズ ネットワークに接続できます。
機能の動作
TOFU をサポートするデバイスは、インストール済みで認証済み公開鍵を持たないエンタープライズ ネットワークにユーザーが接続したときに、次の動作を行います。
Wi-Fi 選択ツールを使って新しいネットワークに接続する
Wi-Fi 選択ツールで新しいエンタープライズ ネットワークを選択します。
デバイスに、ネットワークが信頼できるかどうかを確認するためのダイアログ(図 1)が表示されます。
[はい、接続します] をタップしてネットワーク接続を受け入れるか、[いいえ、接続しません] をタップして拒否します。
[はい、接続します] をタップすると、デバイスがセキュリティ パラメータを自動的に設定してネットワークに接続し、ネットワークの自動接続が有効になります。
[いいえ、接続しません] をタップすると、デバイスがネットワークから切断され、ネットワークの自動接続が無効になります。
図 1. TOFU 機能のダイアログ
自動接続を有効にして既存のネットワークに接続する
自動接続が有効であるが、有効な CA 証明書がないエンタープライズ ネットワークに接続すると、デバイスが自動的に接続され、固定された(非表示にできない)通知が表示されます。
通知をタップします。
デバイスに、ネットワークが信頼できるかどうかを確認するためのダイアログ(図 1)が表示されます。
[はい、接続します] をタップしてネットワーク接続を受け入れるか、[いいえ、接続しません] をタップして拒否します。
[はい、接続します] をタップすると、デバイスがセキュリティ パラメータを自動的に設定してネットワークに接続し、ネットワークの自動接続が有効になります。
[いいえ、接続しません] をタップすると、デバイスがネットワークから切断され、ネットワークの自動接続が無効になります。
実装
TOFU 機能をサポートするには、/hardware/interfaces/wifi/supplicant/aidl/android/hardware/wifi/supplicant
の Android オープンソース プロジェクト(AOSP)で提供されるサプリカント HAL を実装します。
Android 13 では、次の公開 API をアプリで使用できます。
WifiManager#isTrustOnFirstUseSupported()
: デバイスが TOFU をサポートしているかどうかを示します。WifiEnterpriseConfig#enableTrustOnFirstUse(boolean)
: TOFU を有効にします。WifiEnterpriseConfig#isTrustOnFirstUseEnabled()
: TOFU が有効かどうかを示します。
検証
デバイスでの TOFU の実装を検証するには、次のテストを使用します。
- CTS:
CtsWifiTestCases
- VTS:
VtsHalWifiSupplicantStaNetworkTargetTest