Passpoint (Hotspot 2.0)

Passpoint es un protocolo de Wi-Fi Alliance (WFA) que permite que los dispositivos móviles descubran hotspots de Wi-Fi que proporcionan acceso a Internet y se autentiquen en ellos.

Asistencia para dispositivos

Para admitir Passpoint, los fabricantes de dispositivos deben implementar la interfaz de Supplicant. A partir de Android 13, la interfaz usa el AIDL para la definición de la HAL. En las versiones anteriores a Android 13, las interfaces y las particiones del proveedor usan HIDL. Los archivos HIDL están en hardware/interfaces/supplicant/1.x y los archivos AIDL están en hardware/interfaces/supplicant/aidl. El solicitante brinda compatibilidad con el estándar 802.11u, específicamente con las funciones de descubrimiento y selección de red, como el servicio de publicidad genérica (GAS) y el protocolo de consulta de red (ANQP).

Implementación

Android 11 o versiones posteriores

Para admitir Passpoint en dispositivos que ejecutan Android 11 o versiones posteriores, los fabricantes de dispositivos deben proporcionar compatibilidad de firmware para 802.11u. AOSP incluye todos los demás requisitos para admitir Passpoint.

Android 10 o anterior

En el caso de los dispositivos que ejecutan Android 10 o versiones anteriores, los fabricantes de dispositivos deben proporcionar compatibilidad con el framework y con HAL/firmware:

  • Framework: Habilita Passpoint (requiere una marca de función)
  • Firmware: Compatibilidad con 802.11u

Para admitir Passpoint, implementa la HAL de Wi-Fi y habilita la marca de función de Passpoint. En device.mk, ubicado en device/<oem>/<device>, modifica la variable de entorno PRODUCT_COPY_FILES para incluir compatibilidad con la función Passpoint:

PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml

AOSP incluye todos los demás requisitos para admitir Passpoint.

Validación

Para validar la implementación de la función Passpoint, usa el conjunto de pruebas de unidades y pruebas de integración que se proporcionan en el Conjunto de pruebas de comunicaciones de Android (ACTS).

Pruebas de unidades

Ejecuta las siguientes pruebas de unidades del paquete de Passpoint.

Pruebas de servicio:

atest com.android.server.wifi.hotspot2

Pruebas del administrador:

atest android.net.wifi.hotspot2

Pruebas de integración (ACTS)

El paquete de pruebas de ACTS Passpoint, ubicado en tools/test/connectivity/acts_tests/tests/google/wifi/WifiPasspointTest.py, implementa un conjunto de pruebas funcionales.

Aprovisionamiento R1 de Passpoint

Android es compatible con Passpoint R1 desde Android 6.0, lo que permite aprovisionar credenciales de Passpoint R1 (versión 1) a través de la descarga basada en la Web de un archivo especial que contiene información de perfil y credenciales. El cliente inicia automáticamente un instalador especial para la información de Wi-Fi y le permite al usuario ver partes de la información antes de aceptar o rechazar el contenido.

La información de perfil que se encuentra en el archivo se usa para hacer coincidir los datos recuperados de los puntos de acceso habilitados para Passpoint, y las credenciales se aplican automáticamente en cualquier red que coincida.

La implementación de la referencia de Android es compatible con EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA y EAP-AKA.

Mecanismo de descarga

El archivo de configuración de Passpoint debe estar alojado en un servidor web y debe estar protegido con TLS (HTTPS), ya que puede contener contraseñas en texto no encriptado o datos de clave privada. El contenido se compone de texto MIME multiparte unido, representado en UTF-8 y codificado con codificación base64, según RFC-2045, sección 6.8.

El cliente usa los siguientes campos del encabezado HTTP para iniciar automáticamente un instalador de Wi-Fi en el dispositivo:

  • Content-Type debe configurarse como application/x-wifi-config.
  • Content-Transfer-Encoding debe configurarse como base64.
  • No se debe establecer Content-Disposition.

El método HTTP que se usa para recuperar el archivo debe ser GET. Cada vez que un GET de HTTP del navegador recibe una respuesta con estos encabezados MIME, se inicia la app de instalación. La descarga debe activarse presionando un elemento HTML, como un botón (no se admiten los redireccionamientos automáticos a una URL de descarga). Este comportamiento es específico de Google Chrome; otros navegadores web pueden o no proporcionar una funcionalidad similar.

Composición del archivo

El contenido codificado en Base64 debe ser contenido de varias partes de MIME con un Content-Type de multipart/mixed. Las siguientes partes conforman las partes individuales del contenido de varias partes.

Parte Content-Type (menos comillas) Obligatorio Description
Perfil application/x-passpoint-profile Siempre Carga útil con formato de OMA-DM SyncML que contiene el MO con formato PerProviderSubscription de Passpoint R1 para HomeSP y Credential.
Certificado de confianza application/x-x509-ca-cert Obligatorio para EAP-TLS y EAP-TTLS Una única carga útil de certificado con codificación base64 X.509v3.
Clave EAP-TLS application/x-pkcs12 Obligatorio para EAP-TLS Una estructura PKCS #12 ASN.1 codificada en base64 que contiene una cadena de certificados de cliente con, al menos, el certificado de cliente y la clave privada asociada. El contenedor de PKCS 12, la clave privada y los certificados deben estar en texto claro y sin contraseña.

La sección del perfil se debe transferir como texto XML con codificación base64 y UTF-8, que especifica partes de los subárboles HomeSP y Credential en la versión 1.0.0 de la especificación técnica R2 de Passpoint, sección 9.1.

El nodo de nivel superior debe ser MgmtTree y el subnodo inmediato debe ser PerProviderSubscription. En el perfil de ejemplo de OMA-DM XML, se muestra un archivo en formato XML de ejemplo.

Los siguientes nodos del subárbol se usan en HomeSP:

  • FriendlyName: Se debe establecer y se usa como texto visible.
  • FQDN: Obligatorio
  • RoamingConsortiumOI

Los siguientes nodos del subárbol se usan en Credential:

  • Realm: Debe ser una string que no esté vacía
  • UsernamePassword: Obligatorio para EAP-TTLS con los siguientes nodos configurados:

    • Username: Es una cadena que contiene el nombre de usuario.
    • Password: Es la string codificada en base64 (configurada como cGFzc3dvcmQ=, la string codificada en base64 para "contraseña", que se muestra en el siguiente ejemplo).
    • EAPMethod/EAPType: Se debe establecer en 21.
    • EAPMethod/InnerMethod: Se debe establecer en PAP, CHAP, MS-CHAP o MS-CHAP-V2.
  • DigitalCertificate: Obligatorio para EAP-TLS. Se deben configurar los siguientes nodos:

    • CertificateType definida como x509v3
    • CertSHA256Fingerprint configurado en el resumen SHA-256 correcto del certificado de cliente en la sección de MIME de la clave EAP-TLS
  • SIM: Se requiere para EAP-SIM, EAP-AKA y EAP-AKA. El campo EAPType debe establecerse en el tipo de EAP adecuado, y IMSI debe coincidir con un IMSI de una de las tarjetas SIM instaladas en el dispositivo en el momento del aprovisionamiento. La string de IMSI puede consistir solo en dígitos decimales para forzar la coincidencia de igualdad completa, o de 5 o 6 dígitos decimales seguidos de un asterisco (*) a fin de relajar la coincidencia de IMSI solo con MCC/MNC. Por ejemplo, la cadena de IMSI 123456* coincide con cualquier tarjeta SIM con MCC como 123 y MNC como 456.

Android 11 presenta capacidades que hacen que el aprovisionamiento de R1 de Passpoint sea más flexible.

Nombre de dominio independiente de autenticación, autorización y contabilización (AAA)

Los administradores de red de Passpoint que requieran un nombre de dominio AAA especificado independientemente del nombre de dominio completamente calificado (FQDN) anunciado por la red a través del protocolo de consulta de red de acceso (ANQP) pueden especificar una lista de FQDN delimitada por punto y coma en un nodo nuevo en el subárbol Extension. Este es un nodo opcional, y los dispositivos que ejecutan Android 10 o versiones anteriores lo ignoran.

  • Android: Subárbol de la extensión de Android

    • AAAServerTrustedNames: Se requiere para los nombres de confianza del servidor AAA con los siguientes nodos configurados:

      • FQDN: Es una cadena que contiene los nombres de confianza del servidor AAA. Usa punto y coma para separar los nombres de confianza. Por ejemplo, example.org;example.com.
AC raíz privadas autofirmadas
Los administradores de red de Passpoint que administran sus certificados de forma interna pueden aprovisionar perfiles con una AC privada autofirmada para la autenticación AAA.
Permitir la instalación de perfiles sin un certificado de la AC raíz
El certificado de la AC raíz que se adjunta al perfil se usa para la autenticación del servidor AAA. Los administradores de red de Passpoint que deseen confiar en AC raíz públicas confiables para su autenticación del servidor AAA pueden aprovisionar perfiles sin un certificado de la AC raíz. En este caso, el sistema verifica los certificados de servidor AAA con los certificados públicos de la AC raíz instalados en el almacén de confianza.

Aprovisionamiento R2 de Passpoint

Android 10 introdujo compatibilidad con las funciones de Passpoint R2. Passpoint R2 implementa el registro en línea (OSU), un método estándar para aprovisionar perfiles nuevos de Passpoint. Android 10 y las versiones posteriores admiten el aprovisionamiento de perfiles EAP-TTLS con el protocolo SOAP-XML en vez de OSU ESS abierto.

Las funciones compatibles de Passpoint R2 solo requieren el código de referencia de AOSP (no se requiere compatibilidad con firmware ni controlador adicional). El código de referencia de AOSP también incluye una implementación predeterminada de la IU de Passpoint R2 en la app de Configuración.

Cuando Android detecta un punto de acceso R2 de Passpoint, el framework de Android hace lo siguiente:

  1. Muestra una lista de los proveedores de servicios anunciados por el AP en el selector de Wi-Fi (además de mostrar los SSID).
  2. Le solicita al usuario que presione uno de los proveedores de servicios para configurar un perfil de Passpoint.
  3. Explica al usuario el flujo de configuración del perfil de Passpoint.
  4. Instala el perfil de Passpoint resultante cuando se completa correctamente.
  5. Se asocia a la red de Passpoint con el perfil de Passpoint recién aprovisionado.

Funciones de Passpoint R3

Android 12 introduce las siguientes funciones de Passpoint R3 que mejoran la experiencia del usuario y permiten que las redes cumplan con las leyes locales:

Términos y Condiciones

La aceptación de los Términos y Condiciones es un requisito legal en algunas ubicaciones y lugares para proporcionar acceso a la red. Esta función permite que las implementaciones de red reemplacen los portales cautivos no seguros, que usan redes abiertas, por una red de Passpoint segura. Se muestra una notificación al usuario cuando es necesario aceptar los términos y condiciones.

La URL de los Términos y Condiciones debe dirigir a un sitio web seguro con HTTPS. Si la URL dirige a un sitio web no seguro, el framework se desconecta y bloquea la red de inmediato.

URL de información del lugar

Permite que los operadores de redes y lugares proporcionen información adicional al usuario, como mapas de lugares, directorios, promociones y cupones. Se muestra una notificación al usuario cuando se conecta la red.

La URL de información del lugar debe dirigir a un sitio web seguro con HTTPS. Si la URL dirige a un sitio web no seguro, el framework ignora la URL y no muestra una notificación.

Otras funciones de Passpoint

Android 11 presenta las siguientes capacidades de Passpoint que mejoran la experiencia del usuario, el uso de energía y la flexibilidad de implementación.

Aplicación y notificación de la fecha de vencimiento
La aplicación de fechas de vencimiento en los perfiles permite que el framework evite la conexión automática a puntos de acceso con credenciales vencidas, que están destinadas a fallar. Esto evita el uso del tiempo de comunicación y ahorra batería y ancho de banda de backend. El framework muestra una notificación al usuario cuando una red que coincide con su perfil está dentro del rango y este vence.
Varios perfiles con FQDN idéntico
Los operadores que implementan redes de Passpoint y usan varios IDs de redes móviles públicas por tierra (PLMN) pueden aprovisionar varios perfiles de Passpoint con el mismo FQDN, uno para cada ID de PLMN, que coincide automáticamente con la tarjeta SIM instalada y se usa para conectar la red.

Android 12 presenta las siguientes funciones de Passpoint que mejoran la experiencia del usuario, el uso de energía y la flexibilidad de implementación:

Prefijo de identidad decorado
Cuando se autentica en redes con una decoración de prefijo, el prefijo de identidad decorado permite a los operadores de red actualizar el identificador de acceso a la red (NAI) para realizar un enrutamiento explícito a través de varios proxies dentro de una red AAA (consulta RFC 7542). Android 12 implementa esta función de acuerdo con la especificación de WBA para extensiones PPS-MO.
Manejo inminente de la desautenticación
Permite a los operadores de red indicarle a un dispositivo que el servicio no está disponible para la credencial utilizada para autenticarse en la red durante un cierto tiempo (especificado a través de un retraso de tiempo de espera). Después de recibir esta señal, los dispositivos no intentarán volver a conectarse a la red con la misma credencial hasta que se venza el tiempo de espera. Por el contrario, los dispositivos que no admiten esta función podrían intentar volver a conectarse a la red de forma reiterada mientras el servicio no esté disponible.

Ejemplos de perfiles XML de OMA-DM PerProviderSubscription-MO

Perfil con una credencial de nombre de usuario y contraseña (EAP-TTLS)

En el siguiente ejemplo, se muestra un perfil para una red con lo siguiente:

  • Se estableció el nombre optimizado para la red en Example Network
  • FQDN configurado en hotspot.example.net
  • OI del consorcio de roaming (para roaming)
  • Credencial con el nombre de usuario user, la contraseña password codificada con Base64 y el dominio con el valor example.net
  • El método EAP se estableció en 21 (EAP-TTLS)
  • El método interno de la fase 2 se estableció en MS-CHAP-V2
  • Nombres de dominio AAA alternativos configurados en trusted.com y 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>

Perfil con una credencial de certificado digital (EAP-TLS)

En el siguiente ejemplo, se muestra un perfil para una red con lo siguiente:

  • Se estableció el nombre optimizado para la red en GlobalRoaming
  • FQDN configurado en globalroaming.net
  • OI del consorcio de roaming (para roaming)
  • Se estableció el dominio en users.globalroaming.net
  • Credencial con un certificado digital que tiene la huella digital especificada
<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>

Perfil con una credencial de SIM (EAP-AKA)

En el siguiente ejemplo, se muestra un perfil para una red con lo siguiente:

  • Se estableció el nombre optimizado para la red en Purple Passpoint
  • FQDN configurado en wlan.mnc888.mcc999.3gppnetwork.org
  • Credencial SIM con ID de PLMN de 999888
  • El método EAP se estableció en 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>

Asesoría de autenticación

Los dispositivos que ejecutan Android 8.x o Android 9 con un perfil Passpoint R1 EAP-SIM, EAP-AKA o EAP-AKA no se conectarán automáticamente a la red de Passpoint. Este problema afecta a los usuarios, operadores y servicios porque se reduce la descarga de Wi-Fi.

Segmentar Impacto Tamaño del impacto
Operadores y proveedores de servicios de Passpoint Mayor carga en la red móvil Cualquier operador que use Passpoint R1.
Usuarios Se perdió la oportunidad de conectarse automáticamente a los puntos de acceso Wi-Fi (PA) del operador, lo que generaba mayores costos de datos. Cualquier usuario que tenga un dispositivo que se ejecute en una red de operador compatible con Passpoint R1.

Causa de la falla

Passpoint especifica un mecanismo para hacer coincidir un proveedor de servicios anunciado (ANQP) con un perfil instalado en el dispositivo. Las siguientes reglas de coincidencia para EAP-SIM, EAP-AKA y EAP-AKA' son un conjunto parcial de reglas que se enfocan en las fallas de 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.

El segundo criterio se modificó en Android 8.0:

Else: If the PLMN ID (3GPP Network) matches AND the NAI Realm matches
    then the service is a Roaming Service Provider.

Con esta modificación, el sistema no observó coincidencias con los proveedores de servicios que anteriormente trabajaban, por lo que los dispositivos de Passpoint no se conectaban automáticamente.

Soluciones alternativas

Para solucionar el problema de la modificación de los criterios de coincidencia, los operadores y proveedores de servicios deben agregar el dominio del identificador de acceso a la red (NAI) a la información publicada por el AP de Passpoint.

La solución recomendada es que los proveedores de servicios de red implementen una solución alternativa del lado de la red para lograr la implementación más rápida. Una solución alternativa del dispositivo depende de que los OEM seleccionen una lista de cambios (CL) de AOSP y, luego, actualicen los dispositivos en el campo.

Solución de red para empresas de transporte y proveedores de servicios de Passpoint

La solución alternativa del lado de la red requiere volver a configurar la red para agregar el elemento ANQP del dominio de NAI, como se especifica a continuación. Las especificaciones de Passpoint no requieren el elemento ANQP del dominio de NAI, pero la adición de esta propiedad cumple con las especificaciones de Passpoint, por lo que las implementaciones de clientes que cumplen con esas especificaciones no deben fallar.

  1. Agrega el elemento ANQP del dominio de NAI.
  2. Configura el subcampo de dominio de NAI para que coincida con el Realm del perfil instalado en el dispositivo.
  3. Configura la siguiente información según cada tipo de EAP:

    • EAP-TTLS: Configura EAPMethod(21) y los tipos de autenticación interna compatibles (PAP, CHAP, MS-CHAP o MS-CHAP-V2).
    • EAP-TLS: establece EAPMethod(13)
    • EAP-SIM: Establecer EAPMethod(18)
    • EAP-AKA: Configurar EAPMethod(23)
    • EAP-AKA': Establece EAPMethod(50).

Corrección de dispositivo/AOSP para OEM

Para implementar una solución alternativa del dispositivo, los OEMs deben elegir la CL del parche aosp/718508. Este parche se puede aplicar sobre las siguientes versiones (no se aplica a Android 10 ni a versiones posteriores):

  • Android 9
  • Android 8.x

Cuando se recupera el parche, los OEM deben actualizar los dispositivos en el campo.