Passpoint (Hotspot 2.0)

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

Asistencia para dispositivos

Para admitir Passpoint, los fabricantes de dispositivos deben implementar la interfaz de Supplicant. A partir de Android 13, la interfaz usa 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 se encuentran en hardware/interfaces/supplicant/1.x y los archivos AIDL, en hardware/interfaces/supplicant/aidl. El suplicante admite el estándar 802.11u, específicamente las funciones de descubrimiento y selección de redes, como el servicio de publicidad genérico (GAS) y el protocolo de consulta de redes de acceso (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. Todos los demás requisitos para admitir Passpoint se incluyen en el AOSP.

Android 10 o anterior

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

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

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

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

Todos los demás requisitos para admitir Passpoint se incluyen en el AOSP.

Validación

Para validar tu implementación de la función de Passpoint, ejecuta las siguientes pruebas de unidades del paquete de Passpoint:

Pruebas de servicio:

atest com.android.server.wifi.hotspot2

Pruebas de administrador:

atest android.net.wifi.hotspot2

Aprovisionamiento de Passpoint R1

Android admite Passpoint R1 desde Android 6.0, lo que permite el aprovisionamiento de 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 permite que el usuario vea partes de la información antes de aceptar o rechazar el contenido.

La información del perfil que se incluye en el archivo se usa para la correlación con los datos recuperados de los puntos de acceso habilitados para Passpoint, y las credenciales se aplican automáticamente a cualquier red correlacionada.

La implementación de referencia de Android admite EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA y EAP-AKA'.

Mecanismo de descarga

El archivo de configuración de Passpoint debe alojarse en un servidor web y protegerse con TLS (HTTPS), ya que puede contener contraseñas de texto sin formato o datos de claves privadas. El contenido se compone de texto MIME de varias partes ajustado, representado en UTF-8 y codificado en base64 según la sección 6.8 del RFC-2045.

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

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

El método HTTP que se usa para recuperar el archivo debe ser GET. Cada vez que una solicitud HTTP GET del navegador recibe una respuesta con estos encabezados MIME, se inicia la app de instalación. La descarga debe activarse cuando se presiona 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 proporcionar o no una funcionalidad similar.

Composición del archivo

El contenido codificado en Base64 debe constar de contenido multipartes 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 Descripción
Perfil application/x-passpoint-profile Siempre Carga útil con formato SyncML de OMA-DM 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 Es una carga útil de certificado único X.509v3 codificado en base64.
Clave de EAP-TLS application/x-pkcs12 Obligatorio para EAP-TLS Es una estructura ASN.1 de PKCS #12 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 PKCS 12, la clave privada y los certificados deben estar en texto sin formato y sin contraseña.

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

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

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

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

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

  • Realm: Debe ser una cadena no vacía.
  • UsernamePassword: Se requiere para EAP-TTLS con los siguientes nodos establecidos:

    • Username: Cadena que contiene el nombre de usuario
    • Password: Cadena codificada en Base64 (establecida en cGFzc3dvcmQ=, la cadena codificada en Base64 para "contraseña", en el siguiente ejemplo)
    • EAPMethod/EAPType: Se debe establecer en 21.
    • EAPMethod/InnerMethod: Debe establecerse en uno de los siguientes valores: PAP, CHAP, MS-CHAP o MS-CHAP-V2.
  • DigitalCertificate: Se requiere para EAP-TLS. Se deben establecer los siguientes nodos:

    • CertificateType definida como x509v3
    • CertSHA256Fingerprint establecido en el resumen SHA-256 correcto del certificado de cliente en la sección 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 cadena de IMSI puede constar completamente de dígitos decimales para forzar la coincidencia de igualdad completa o de 5 o 6 dígitos decimales seguidos de un asterisco (*) para relajar la coincidencia de IMSI solo para MCC/MNC. Por ejemplo, la cadena IMSI 123456* coincide con cualquier tarjeta SIM con MCC como 123 y MNC como 456.

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

Nombre de dominio independiente para la autenticación, la autorización y la contabilidad (AAA)

Los administradores de redes Passpoint que requieren un nombre de dominio AAA especificado independientemente del nombre de dominio completamente calificado (FQDN) que anuncia 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 extensión de Android

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

      • 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.
CA raíz privadas autofirmadas
Los administradores de redes de Passpoint que administran sus certificados de forma interna pueden aprovisionar perfiles con una CA privada autofirmada para la autenticación de AAA.
Permitir la instalación de perfiles sin un certificado de CA raíz
El certificado de CA raíz adjunto al perfil se usa para la autenticación del servidor AAA. Los administradores de redes Passpoint que deseen confiar en las AC raíz públicas de confianza para la autenticación de su servidor AAA pueden aprovisionar perfiles sin un certificado de AC raíz. En este caso, el sistema verifica los certificados de servidor AAA con los certificados públicos de CA raíz instalados en el almacén de confianza.

Aprovisionamiento de Passpoint R2

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 versiones posteriores admiten el aprovisionamiento de perfiles EAP-TTLS con el protocolo SOAP-XML a través de una ESS de OSU abierta.

Las funciones de Passpoint R2 admitidas solo requieren código de referencia de AOSP (no se requiere compatibilidad adicional con controladores o firmware). El código de referencia del 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. Guía al usuario por 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 aprovisionado recientemente.

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 algunos lugares y establecimientos para proporcionar acceso a la red. Esta función permite que las implementaciones de redes reemplacen portales cautivos no seguros, que usan redes abiertas, por una red segura de Passpoint. Se le muestra una notificación al usuario cuando debe aceptar términos y condiciones.

La URL de los Términos y Condiciones debe dirigir a un sitio web seguro que use HTTPS. Si la URL apunta 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 los establecimientos proporcionen información adicional al usuario, como mapas de establecimientos, directorios, promociones y cupones. Se muestra una notificación al usuario cuando se conecta la red.

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

Otras funciones de Passpoint

Android 11 introduce las siguientes capacidades de Passpoint que mejoran la experiencia del usuario, el uso de energía y la flexibilidad de la 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 con puntos de acceso con credenciales vencidas, que están destinados a fallar. Esto evita el uso de tiempo de comunicación y permite ahorrar 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 el perfil caducó.
Varios perfiles con FQDN idéntico
Los operadores que implementan redes de Passpoint y usan varios IDs de red móvil terrestre pública (PLMN) pueden aprovisionar varios perfiles de Passpoint con el mismo FQDN, uno para cada ID de PLMN, que se correlaciona automáticamente con la tarjeta SIM instalada y se usa para conectar la red.

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

Prefijo de identidad decorado
Cuando te autenticas en redes con una decoración de prefijo, el prefijo de identidad decorado permite que los operadores de red actualicen el identificador de acceso a la red (NAI) para realizar el enrutamiento explícito a través de varios proxies dentro de una red AAA (consulta RFC 7542). Android 12 implementa esta función según la especificación de WBA para extensiones PPS-MO.
Control de la desautenticación inminente
Permite que los operadores de red indiquen a un dispositivo que el servicio no está disponible para la credencial que se usó para autenticarse en la red durante un período determinado (especificado a través de un 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 venza el tiempo de espera. En cambio, 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 las siguientes características:

  • Se estableció el nombre descriptivo de la red en Example Network
  • El FQDN se estableció en hotspot.example.net.
  • OIs de consorcios de roaming (para roaming)
  • Credencial con el nombre de usuario user, la contraseña password codificada con Base64 y el dominio establecido en example.net
  • El método EAP se configuró como 21 (EAP-TTLS).
  • El método interno de la fase 2 se estableció en MS-CHAP-V2
  • Los nombres de dominio de AAA alternativos se establecieron 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 las siguientes características:

  • Se estableció el nombre descriptivo de la red en GlobalRoaming
  • El FQDN se estableció en globalroaming.net.
  • OIs 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 las siguientes características:

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

Aviso de autenticación

Los dispositivos que ejecutan Android 8.x o Android 9 con un perfil de 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, los operadores y los servicios, ya que reduce la descarga de Wi-Fi.

Segmento Impacto Tamaño del impacto
Operadores y proveedores de servicios de Passpoint Aumento de la carga en la red celular Cualquier operador que use Passpoint R1
Usuarios Se perdió la oportunidad de conectarse automáticamente a los puntos de acceso (PA) de Wi-Fi del operador, lo que generó costos de datos más altos. Cualquier usuario con un dispositivo que se ejecute en una red de operador que admita 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ó ninguna coincidencia para los proveedores de servicios que funcionaban anteriormente, por lo que los dispositivos Passpoint no se conectaron automáticamente.

Soluciones alternativas

Para solucionar el problema de los criterios de coincidencia modificados, los operadores y proveedores de servicios deben agregar el dominio del identificador de acceso a la red (NAI) a la información que publica 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 el tiempo de implementación más rápido. Una solución alternativa del dispositivo depende de que los OEM tomen una lista de cambios (CL) del AOSP y, luego, actualicen los dispositivos en el campo.

Corrección de red para operadores y proveedores de servicios de Passpoint

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

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

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

Corrección de dispositivos o AOSP para OEM

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

  • Android 9
  • Android 8.x

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