Passpoint は、モバイル デバイスがインターネットにアクセスするための Wi-Fi アクセス ポイントを探知して認証できるようにする Wi-Fi Alliance(WFA)プロトコルです。
デバイスのサポート
Passpoint に対応するのは、デバイス メーカーによりサプリカント インターフェースが実装されたデバイスのみです。Android 13 以降では、このインターフェースは AIDL を HAL の定義に使用します。Android 13 より前のリリースでは、インターフェースとベンダー パーティションは HIDL を使用します。HIDL ファイルは hardware/interfaces/supplicant/1.x
にあり、AIDL ファイルは hardware/interfaces/supplicant/aidl
にあります。サプリカントは、802.11u 規格、特に Generic Advertisement Service(GAS)や Access Network Query Protocol(ANQP)などのネットワーク検出機能および選択機能をサポートします。
実装
Android 11 以降
Android 11 以降を実行するデバイスで Passpoint をサポートするには、デバイス メーカーが 802.11u のファームウェア サポートを提供する必要があります。Passpoint に対応するために必要なその他の要素はすべて AOSP に含まれています。
Android 10 以前
Android 10 以前を実行するデバイスでは、デバイス メーカーがフレームワークと HAL / ファームウェア サポートの両方を提供する必要があります。
- フレームワーク: Passpoint を有効にする(機能フラグが必要)
- ファームウェア: 802.11u のサポート
Passpoint に対応するには、Wi-Fi HAL を実装し、Passpoint の機能フラグを有効にします。device/<oem>/<device>
にある device.mk
で PRODUCT_COPY_FILES
環境変数を変更して、次のように Passpoint 機能のサポートを追加します。
PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml
Passpoint に対応するために必要なその他の要素はすべて AOSP に含まれています。
検証
Passpoint 機能の実装を検証するには、Android Comms テストスイート(ACTS)に備えられている単体テストと統合テストを組み合わせて使用します。
単体テスト
次の Passpoint パッケージ単体テストを実行します。
Service テスト:
atest com.android.server.wifi.hotspot2
マネージャー テスト:
atest android.net.wifi.hotspot2
統合テスト(ACTS)
tools/test/connectivity/acts_tests/tests/google/wifi/WifiPasspointTest.py
にある ACTS Passpoint テストスイートには、複数の機能テストが実装されています。
Passpoint R1 のプロビジョニング
Android 6.0 以降では Passpoint R1 をサポートしており、プロファイル情報と認証情報を含む特別なファイルをウェブベースでダウンロードすることによって、Passpoint R1(リリース 1)の認証情報をプロビジョニングできます。クライアントは、Wi-Fi 情報用の特別なインストーラを自動的に起動するため、ユーザーは情報の一部を確認してからコンテンツを承認または拒否できます。
ファイルに含まれるプロフィール情報は、Passpoint に対応するアクセス ポイントから取得したデータとの照合に使用され、一致したネットワークに認証情報が自動的に適用されます。
Android リファレンス実装は、EAP-TTLS、EAP-TLS、EAP-SIM、EAP-AKA、EAP-AKA' をサポートしています。
ダウンロード メカニズム
Passpoint 構成ファイルにはクリアテキストのパスワードまたは秘密鍵データが含まれている可能性があるため、ウェブサーバーでホストして TLS(HTTPS)によって保護する必要があります。コンテンツは UTF-8 で表され、RFC-2045 のセクション 6.8 に従って base64 でエンコードされたマルチパート MIME テキストで構成されています。
クライアントは次の HTTP ヘッダー フィールドを使用して、デバイスで Wi-Fi インストーラを自動的に起動します。
Content-Type
はapplication/x-wifi-config
に設定する必要があります。Content-Transfer-Encoding
はbase64
に設定する必要があります。Content-Disposition
は設定しないでください。
ファイルを取得するには、HTTP メソッドの GET を使用する必要があります。ブラウザからの HTTP GET がこうした MIME ヘッダーを含む応答を受信するたびに、インストール アプリが起動します。ボタンなどの HTML 要素をタップしてダウンロードをトリガーする必要があります(ダウンロード URL への自動リダイレクトはサポートされていません)。これは Google Chrome に固有の動作です。他のウェブブラウザには、同様の機能が搭載されていない場合があります。
ファイルの構成
base64 でエンコードされたコンテンツは、Content-Type
が multipart/mixed
の MIME マルチパート コンテンツで構成されている必要があります。次のパートは、マルチパート コンテンツの各パートを構成するものです。
パート | コンテンツ タイプ(引用符不要) | 必須 | 説明 |
---|---|---|---|
プロファイル |
application/x-passpoint-profile
|
常時 | HomeSP および Credential の Passpoint R1 PerProviderSubscription 形式の MO を含む OMA-DM SyncML 形式のペイロード。 |
信用できる証明書 |
application/x-x509-ca-cert
|
EAP-TLS と EAP-TTLS については必須 | 単一の X.509v3 base64 エンコード証明書ペイロード。 |
EAP-TLS キー |
application/x-pkcs12
|
EAP-TLS については必須 | クライアント証明書と関連する秘密鍵を最小要件とするクライアント証明書チェーンを備えた、base64 でエンコードされた PKCS #12 ASN.1 構造。PKCS 12 コンテナ、秘密鍵、証明書はすべて、パスワードなしのクリアテキストであることが必要です。 |
プロファイル セクションは、Passpoint R2 Technical Specification Version 1.0.0、セクション 9.1 の HomeSP
および Credential
サブツリーの一部を指定する、base64 エンコード、UTF-8 エンコードの XML テキストとして転送する必要があります。
最上位ノードは MgmtTree
とし、即時サブノードは PerProviderSubscription
にする必要があります。XML ファイルの例については、OMA-DM XML プロファイルの例をご覧ください。
次のサブツリー ノードが HomeSP
で使用されます。
FriendlyName
: 設定が必要(表示テキストとして使用)FQDN
: 必須RoamingConsortiumOI
次のサブツリー ノードが Credential
で使用されます。
Realm
: 空でない文字列を指定する必要があります。UsernamePassword
: 次のノードが設定された EAP-TTLS に必要です。Username
: ユーザー名を含む文字列Password
: Base64 エンコードされた文字列(次の例では、「パスワード」に対して base64 エンコードされた文字列cGFzc3dvcmQ=
に設定)EAPMethod/EAPType
:21
に設定する必要がありますEAPMethod/InnerMethod
:PAP
、CHAP
、MS-CHAP
、MS-CHAP-V2
のいずれかに設定する必要があります
DigitalCertificate
: EAP-TLS の場合は必須です。次のノードを設定する必要があります。CertificateType
をx509v3
に設定- EAP-TLS キーの MIME セクションで、
CertSHA256Fingerprint
をクライアント証明書の正しい SHA-256 ダイジェストに設定
SIM
: EAP-SIM、EAP-AKA、EAP-AKA' の場合は必須です。EAPType
フィールドは適切な EAP タイプに設定する必要があり、IMSI
はプロビジョニング時にデバイスにインストールされている SIM カードのいずれか 1 つの IMSI と一致する必要があります。IMSI 文字列は、完全一致するように 10 進数字だけで構成するか、IMSI の一致条件を MCC / MNC のみとするため、アスタリスク(*)を後に付け足した 5~6 桁の 10 進数字で構成します。たとえば、IMSI 文字列 123456* は、MCC が 123 で MNC が 456 の SIM カードに一致します。
Android 11 には、Passpoint R1 のプロビジョニングの柔軟性を高める機能が導入されています。
- 個別の認証、認可、アカウンティング(AAA)用のドメイン名
Access Network Query Protocol(ANQP)を使用してネットワークによってアドバタイズされる完全修飾ドメイン名(FQDN)とは別に指定された AAA ドメイン名を必要とする Passpoint ネットワーク管理者は、
Extension
サブツリーの配下にある新しいノードの FQDN のセミコロン区切りリストを指定できます。これは省略可能なノードであり、Android バージョン 10 以前を搭載しているデバイスはこのノードを無視します。
Android
: Android 拡張サブツリーAAAServerTrustedNames
: AAA サーバーの信頼できる名前に対して必須。次のノードを設定します。FQDN
: AAA サーバーの信頼できる名前を含む文字列。セミコロンで信頼できる名前を区切ることができます。例:example.org;example.com
。
- 自己署名のプライベート ルート CA
- 内部の証明書を管理する Passpoint ネットワーク管理者は、AAA 認証用の自己署名のプライベート CA を使用するプロファイルをプロビジョニングできます。
- ルート CA 証明書のないプロファイルのインストールを許可する
- プロファイルに関連付けられているルート CA 証明書は、AAA サーバー認証に使用されます。AAA サーバー認証に信頼できるパブリック ルート CA を使用する Passpoint ネットワーク管理者は、ルート CA 証明書のないプロファイルをプロビジョニングできます。この場合、システムは AAA サーバー証明書を、トラストストアにインストールされているパブリック ルート CA 証明書と照合して確認します。
Passpoint R2 のプロビジョニング
Android 10 では、Passpoint R2 機能のサポートが追加されました。Passpoint R2 には、新たな Passpoint プロファイルをプロビジョニングする標準的な手法である、オンライン サインアップ(OSU)が実装されています。Android 10 以降では、オープンな OSU ESS を介した SOAP-XML プロトコルを使用する EAP-TTLS プロファイルのプロビジョニングをサポートしています。
サポートされている Passpoint R2 機能には、AOSP リファレンス コードのみが必要です(追加のドライバまたはファームウェアのサポートは不要です)。AOSP リファレンス コードには、設定アプリ内に Passpoint R2 UI のデフォルトの実装も含まれています。
Android が Passpoint R2 のアクセス ポイントを検出すると、Android フレームワークは次の処理を行います。
- (SSID の表示とともに)Wi-Fi 選択ツールで AP がアドバタイズするサービス プロバイダのリストを表示します。
- いずれか 1 つのサービス プロバイダをタップして Passpoint プロファイルを設定するようユーザーに求めるプロンプトを表示します。
- Passpoint プロファイル設定フローを表示します。
- 生成された Passpoint プロファイルをインストールします。
- 新たにプロビジョニングされた Passpoint プロファイルを使用して、Passpoint ネットワークに関連付けます。
Passpoint R3 の機能
Android 12 には、ユーザー エクスペリエンスを改善し、ネットワークが地域の法律を遵守できるようにする以下の Passpoint R3 機能が導入されています。
- 利用規約
ネットワーク アクセスを提供するにあたり、場所や会場によっては、利用規約に同意する必要があります。この機能を使用すると、ネットワーク デプロイにおいて、オープン ネットワークを使用する安全でないキャプティブ ポータルを安全な Passpoint ネットワークに置き換えることができます。利用規約への同意が必要な場合は、通知が表示されます。
利用規約の URL は、HTTPS を使用している安全なウェブサイトを指している必要があります。安全ではないウェブサイトを URL が指している場合、フレームワークがネットワークを直ちに切断してブロックします。
- 会場情報の URL
ネットワーク事業者や会場が、会場の地図、案内、プロモーション、クーポンなどの追加情報を提供できるようにします。ネットワークが接続されると、ユーザーに通知が表示されます。
場所情報の URL は、HTTPS を使用している安全なウェブサイトを指している必要があります。安全ではないウェブサイトを URL が指している場合、フレームワークはその URL を無視して通知を表示しません。
その他の Passpoint 機能
Android 11 には、ユーザー エクスペリエンス、消費電力、デプロイの柔軟性を改善する以下の Passpoint 機能が導入されています。
- 有効期限の適用と通知
- プロファイルに有効期限を適用すると、フレームワークは期限切れの認証情報を持つアクセス ポイントに自動接続して失敗することを回避できます。これにより、通信時間の消費を抑え、電池とバックエンドの帯域幅を節約できます。プロファイルに一致したネットワークが圏内にあり、プロファイルが期限切れになっている場合は、フレームワークによる通知がユーザーに表示されます。
- 同一の FQDN を持つ複数のプロファイル
- Passpoint ネットワークをデプロイし、複数のパブリック ランド モバイル ネットワーク(PLMN)ID を使用する携帯通信会社は、同一の FQDN を持つ複数の Passpoint プロファイルを、PLMN ID ごとに 1 つプロビジョニングできます。プロビジョニングされたプロファイルは、インストールされている SIM カードの情報と一致するかどうかが自動的に判定され、ネットワーク接続に使用されます。
Android 12 には、ユーザー エクスペリエンス、消費電力、デプロイの柔軟性を改善する以下の Passpoint 機能が導入されています。
- 装飾された ID プレフィックス
- : プレフィックス装飾でネットワークの認証を行う場合、装飾された ID プレフィックスにより、ネットワーク事業者はネットワーク アクセス識別子(NAI)を更新して、AAA ネットワーク内の複数のプロキシを経由して明示的なルーティングを行えます(RFC 7542 をご覧ください)。Android 12 では、この機能を PPS-MO 拡張機能の WBA 仕様に従って実装しています。
- 緊急認証解除処理
- ネットワーク事業者が、ネットワークの認証に使用する認証情報が一定時間(タイムアウト時間で指定)使用できないことをデバイスに通知できるようにします。この通知を受け取ったデバイスは、タイムアウト時間が経過するまで、このネットワークに同じ認証情報で再接続を試みません。それに対して、この機能をサポートしていないデバイスは、サービスが利用できない間、このネットワークへの再接続を繰り返し試みる可能性があります。
OMA-DM PerProviderSubscription-MO XML プロファイルの例
ユーザー名とパスワードによる認証情報(EAP-TTLS)を使用するプロファイル
次の例は、以下のように設定されているネットワークのプロファイルを示しています。
- ネットワーク フレンドリー名が
Example Network
に設定されている - FQDN が
hotspot.example.net
に設定されている - ローミング コンソーシアム OI(ローミング用)
- 認証情報としてユーザー名
user
と base64 でエンコードされたパスワードpassword
を使用し、レルムがexample.net
に設定されている - EAP メソッドが
21
(EAP-TTLS)に設定されている - フェーズ 2 内部メソッドが
MS-CHAP-V2
に設定されている - AAA 代替ドメイン名が
trusted.com
とtrusted.net
に設定されている
<MgmtTree xmlns="syncml:dmddf1.2">
<VerDTD>1.2</VerDTD>
<Node>
<NodeName>PerProviderSubscription</NodeName>
<RTProperties>
<Type>
<DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
</Type>
</RTProperties>
<Node>
<NodeName>i001</NodeName>
<Node>
<NodeName>HomeSP</NodeName>
<Node>
<NodeName>FriendlyName</NodeName>
<Value>Example Network</Value>
</Node>
<Node>
<NodeName>FQDN</NodeName>
<Value>hotspot.example.net</Value>
</Node>
<Node>
<NodeName>RoamingConsortiumOI</NodeName>
<Value>112233,445566</Value>
</Node>
</Node>
<Node>
<NodeName>Credential</NodeName>
<Node>
<NodeName>Realm</NodeName>
<Value>example.net</Value>
</Node>
<Node>
<NodeName>UsernamePassword</NodeName>
<Node>
<NodeName>Username</NodeName>
<Value>user</Value>
</Node>
<Node>
<NodeName>Password</NodeName>
<Value>cGFzc3dvcmQ=</Value>
</Node>
<Node>
<NodeName>EAPMethod</NodeName>
<Node>
<NodeName>EAPType</NodeName>
<Value>21</Value>
</Node>
<Node>
<NodeName>InnerMethod</NodeName>
<Value>MS-CHAP-V2</Value>
</Node>
</Node>
</Node>
</Node>
<Node>
<NodeName>Extension</NodeName>
<Node>
<NodeName>Android</NodeName>
<Node>
<NodeName>AAAServerTrustedNames</NodeName>
<Node>
<NodeName>FQDN</NodeName>
<Value>trusted.com;trusted.net</Value>
</Node>
</Node>
</Node>
</Node>
</Node>
</Node>
</MgmtTree>
デジタル証明書の認証情報(EAP-TLS)を使用するプロファイル
次の例は、以下のように設定されているネットワークのプロファイルを示しています。
- ネットワーク フレンドリー名が
GlobalRoaming
に設定されている - FQDN が
globalroaming.net
に設定されている - ローミング コンソーシアム OI(ローミング用)
- レルムが
users.globalroaming.net
に設定されている - 指定された指紋を持つデジタル証明書を使用する認証情報
<MgmtTree xmlns="syncml:dmddf1.2">
<VerDTD>1.2</VerDTD>
<Node>
<NodeName>PerProviderSubscription</NodeName>
<RTProperties>
<Type>
<DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
</Type>
</RTProperties>
<Node>
<NodeName>i001</NodeName>
<Node>
<NodeName>HomeSP</NodeName>
<Node>
<NodeName>FriendlyName</NodeName>
<Value>GlobalRoaming</Value>
</Node>
<Node>
<NodeName>FQDN</NodeName>
<Value>globalroaming.net</Value>
</Node>
<Node>
<NodeName>RoamingConsortiumOI</NodeName>
<Value>FFEEDDCC0,FFEEDDCC1,009999,008888</Value>
</Node>
</Node>
<Node>
<NodeName>Credential</NodeName>
<Node>
<NodeName>Realm</NodeName>
<Value>users.globalroaming.net</Value>
</Node>
<Node>
<NodeName>DigitalCertificate</NodeName>
<Node>
<NodeName>CertificateType</NodeName>
<Value>x509v3</Value>
</Node>
<Node>
<NodeName>CertSHA256Fingerprint</NodeName>
<Value>0ef08a3d2118700474ca51fa25dc5e6d3d63d779aaad8238b608a853761da533</Value>
</Node>
</Node>
</Node>
</Node>
</Node>
</MgmtTree>
SIM 認証情報(EAP-AKA)を使用するプロファイル
次の例は、以下のように設定されているネットワークのプロファイルを示しています。
- ネットワーク フレンドリー名が
Purple Passpoint
に設定されている - FQDN が
wlan.mnc888.mcc999.3gppnetwork.org
に設定されている - PLMN ID が
999888
の SIM 認証情報 - EAP メソッドが
23
(EAP-AKA)に設定されている
<MgmtTree xmlns="syncml:dmddf1.2">
<VerDTD>1.2</VerDTD>
<Node>
<NodeName>PerProviderSubscription</NodeName>
<RTProperties>
<Type>
<DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
</Type>
</RTProperties>
<Node>
<NodeName>i001</NodeName>
<Node>
<NodeName>HomeSP</NodeName>
<Node>
<NodeName>FriendlyName</NodeName>
<Value>Purple Passpoint</Value>
</Node>
<Node>
<NodeName>FQDN</NodeName>
<Value>purplewifi.com</Value>
</Node>
</Node>
<Node>
<NodeName>Credential</NodeName>
<Node>
<NodeName>Realm</NodeName>
<Value>wlan.mnc888.mcc999.3gppnetwork.org</Value>
</Node>
<Node>
<NodeName>SIM</NodeName>
<Node>
<NodeName>IMSI</NodeName>
<Value>999888*</Value>
</Node>
<Node>
<NodeName>EAPType</NodeName>
<Value>23</Value>
</Node>
</Node>
</Node>
</Node>
</Node>
</MgmtTree>
認証アドバイザリ
Passpoint R1 EAP-SIM、EAP-AKA、または EAP-AKA' プロファイルで Android 8.x または Android 9 を搭載するデバイスは、Passpoint ネットワークに自動接続されません。この問題により Wi-Fi オフロードが減少するため、ユーザーや携帯通信会社、サービスに影響を及ぼします。
セグメント | 影響 | 影響の規模 |
---|---|---|
携帯通信会社と Passpoint サービス プロバイダ | モバイル ネットワークの負荷が増加。 | Passpoint R1 を利用する携帯通信会社。 |
ユーザー | 携帯通信会社の Wi-Fi アクセス ポイント(AP)に自動接続する機会を逃し、データコストが増加。 | 携帯通信会社のネットワークにおいて Passpoint R1 に対応したデバイスを使用するユーザー。 |
障害の原因
Passpoint は、デバイスにインストールされたプロファイルに、アドバタイズされた(ANQP)サービス プロバイダを一致させるメカニズムを特定します。EAP-SIM、EAP-AKA、EAP-AKA' に関する次の一致規則は、EAP-SIM/AKA/AKA' の障害に重点を置いた規則の一部のセットです。
If the FQDN (Fully Qualified Domain Name) matches
then the service is a Home Service Provider.
Else: If the PLMN ID (3GPP Network) matches
then the service is a Roaming Service Provider.
Android 8.0 では、2 つ目の条件が次のように変更されました。
Else: If the PLMN ID (3GPP Network) matches AND the NAI Realm matches
then the service is a Roaming Service Provider.
この変更により、システムは以前に機能していたサービス プロバイダとの一致を確認できなかったため、Passpoint デバイスが自動接続されませんでした。
回避策
変更された一致条件の問題を回避するには、Passpoint AP によって公開された情報に携帯通信会社とサービス プロバイダがネットワーク アクセス識別子(NAI)領域を追加する必要があります。
ネットワーク サービス プロバイダがネットワーク側の回避策を実装して、デプロイにかかる時間を短縮することが推奨されます。デバイス側の回避策は、AOSP からチェンジリスト(CL)を選択してフィールド内のデバイスを更新する OEM に応じて異なります。
携帯通信会社と Passpoint サービス プロバイダのネットワーク修正
ネットワーク側の回避策として、ネットワークを再構成し、以下のように NAI 領域の ANQP 要素を追加する必要があります。Passpoint の仕様として NAI 領域の ANQP 要素は不要ですが、プロパティの追加は Passpoint の仕様に則しているため、仕様に準拠したクライアントの実装は中断されません。
- NAI 領域の ANQP 要素を追加します。
- デバイスにインストールされているプロファイルの
Realm
に一致する NAI 領域サブフィールドを設定します。 各 EAP タイプに基づいて次の情報を設定します。
- EAP-TTLS:
EAPMethod(21)
とサポートされている認証タイプ(PAP
、CHAP
、MS-CHAP
、またはMS-CHAP-V2
)を設定します - EAP-TLS:
EAPMethod(13)
を設定します - EAP-SIM:
EAPMethod(18)
を設定します - EAP:
EAPMethod(23)
を設定します - EAP-AKA':
EAPMethod(50)
を設定します
- EAP-TTLS:
OEM 向けのデバイス / AOSP の修正
デバイス側で回避策を実装するには、OEM がパッチ CL aosp/718508 を適用する必要があります。このパッチは次のリリースに適用できます(Android 10 以降には適用できません)。
- Android 9
- Android 8.x
パッチを選択した場合、OEM はフィールド内のデバイスを更新する必要があります。