Passpoint (Ponto de acesso 2.0)

O Passpoint é um protocolo da Wi-Fi Alliance (WFA) que permite que dispositivos móveis descubram e se autentiquem em pontos de acesso Wi-Fi que oferecem acesso à Internet.

Suporte do dispositivo

Para oferecer suporte ao Passpoint, os fabricantes de dispositivos precisam implementar a interface Supplicant. No Android 13 e versões mais recentes, a interface usa AIDL para a definição da HAL. Em versões anteriores ao Android 13, interfaces e partições do fornecedor usam HIDL. Os arquivos HIDL estão em hardware/interfaces/supplicant/1.x e os arquivos AIDL estão em hardware/interfaces/supplicant/aidl. O suplicante oferece suporte ao padrão 802.11u, especificamente recursos de descoberta e seleção de rede, como o serviço de publicidade genérico (GAS, na sigla em inglês) e o protocolo de consulta de rede de acesso (ANQP, na sigla em inglês).

Implementação

Android 11 ou versão mais recente

Para oferecer suporte ao Passpoint em dispositivos com Android 11 ou versões mais recentes, os fabricantes precisam fornecer suporte de firmware para 802.11u. Todos os outros requisitos para oferecer suporte ao Passpoint estão incluídos no AOSP.

Android 10 ou versão anterior

Para dispositivos com o Android 10 ou versões anteriores, os fabricantes precisam oferecer suporte para framework e HAL/firmware:

  • Framework: ativar o Passpoint (requer uma flag de recurso)
  • Firmware: suporte para 802.11u

Para oferecer suporte ao Passpoint, implemente a HAL do Wi-Fi e ative a flag de recurso para o Passpoint. Em device.mk, localizado em device/<oem>/<device>, modifique a variável de ambiente PRODUCT_COPY_FILES para incluir suporte ao recurso 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 os outros requisitos para oferecer suporte ao Passpoint estão incluídos no AOSP.

Validação

Para validar a implementação do recurso Passpoint, execute os seguintes testes de unidade do pacote Passpoint:

Testes de serviço:

atest com.android.server.wifi.hotspot2

Testes de gerente:

atest android.net.wifi.hotspot2

Provisionamento do Passpoint R1

O Android oferece suporte ao Passpoint R1 desde a versão 6.0, permitindo o provisionamento de credenciais do Passpoint R1 (versão 1) por meio do download baseado na Web de um arquivo especial que contém informações de perfil e credenciais. O cliente inicia automaticamente um instalador especial para as informações de Wi-Fi e permite que o usuário veja partes das informações antes de aceitar ou recusar o conteúdo.

As informações do perfil contidas no arquivo são usadas para corresponder aos dados recuperados de pontos de acesso compatíveis com Passpoint, e as credenciais são aplicadas automaticamente a qualquer rede correspondente.

A implementação de referência do Android é compatível com EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA e EAP-AKA'.

Mecanismo de download

O arquivo de configuração do Passpoint precisa ser hospedado em um servidor da Web e protegido com TLS (HTTPS), porque pode conter senha de texto simples ou dados de chave privada. O conteúdo é composto de texto MIME multipart embrulhado representado em UTF-8 e codificado em base64 de acordo com a seção 6.8 da RFC-2045.

Os seguintes campos de cabeçalho HTTP são usados pelo cliente para iniciar automaticamente um instalador de Wi-Fi no dispositivo:

  • Content-Type precisa ser definido como application/x-wifi-config.
  • Content-Transfer-Encoding precisa ser definido como base64.
  • O campo Content-Disposition não pode ser definido.

O método HTTP usado para recuperar o arquivo precisa ser GET. Sempre que um HTTP GET do navegador recebe uma resposta com esses cabeçalhos MIME, o app de instalação é iniciado. O download precisa ser acionado ao tocar em um elemento HTML, como um botão. Redirecionamentos automáticos para um URL de download não são aceitos. Esse comportamento é específico do Google Chrome. Outros navegadores da Web podem ou não oferecer funcionalidades semelhantes.

Composição de arquivos

O conteúdo codificado em Base64 precisa consistir em conteúdo multipart MIME com um Content-Type de multipart/mixed. As partes a seguir compõem as partes individuais do conteúdo multipart.

Parte Content-Type (sem aspas) Obrigatório Descrição
Perfil application/x-passpoint-profile Sempre Payload formatado em SyncML OMA-DM que contém o MO formatado em PerProviderSubscription do Passpoint R1 para HomeSP e Credential.
Certificado de confiança application/x-x509-ca-cert Necessário para EAP-TLS e EAP-TTLS Um único payload de certificado X.509v3 codificado em base64.
Chave EAP-TLS application/x-pkcs12 Necessário para EAP-TLS Uma estrutura PKCS nº 12 ASN.1 codificada em Base64 que contém uma cadeia de certificados de cliente com pelo menos o certificado de cliente e a chave privada associada. O contêiner PKCS 12, a chave privada e os certificados precisam estar em texto simples sem senha.

A seção "Profile" precisa ser transferida como texto XML codificado em UTF-8 e base64 que especifica partes das subárvores HomeSP e Credential na Especificação técnica do Passpoint R2, versão 1.0.0, seção 9.1.

O nó de nível superior precisa ser MgmtTree e o subnó imediato precisa ser PerProviderSubscription. Um exemplo de arquivo XML aparece em Exemplo de perfil XML OMA-DM.

Os seguintes nós de subárvore são usados em HomeSP:

  • FriendlyName: precisa ser definido e usado como texto de exibição.
  • FQDN: obrigatório
  • RoamingConsortiumOI

Os seguintes nós de subárvore são usados em Credential:

  • Realm: precisa ser uma string não vazia
  • UsernamePassword: obrigatório para EAP-TTLS com os seguintes nós definidos:

    • Username: string que contém o nome de usuário
    • Password: string codificada em base64 (definida como cGFzc3dvcmQ=, a string codificada em base64 para "password", no exemplo abaixo)
    • EAPMethod/EAPType: precisa ser definido como 21
    • EAPMethod/InnerMethod: precisa ser definido como um de PAP, CHAP, MS-CHAP ou MS-CHAP-V2
  • DigitalCertificate: obrigatório para EAP-TLS. Os seguintes nós precisam ser definidos:

    • CertificateType definida para x509v3
    • CertSHA256Fingerprint definido como o resumo SHA-256 correto do certificado do cliente na seção MIME da chave EAP-TLS
  • SIM: obrigatório para EAP-SIM, EAP-AKA e EAP-AKA'. O campo EAPType precisa ser definido como o tipo EAP apropriado, e IMSI precisa corresponder a um IMSI de um dos chips instalados no dispositivo no momento do provisionamento. A string IMSI pode consistir inteiramente de dígitos decimais para forçar uma correspondência de igualdade total ou de 5 ou 6 dígitos decimais seguidos de um asterisco (*) para flexibilizar a correspondência de IMSI apenas para MCC/MNC. Por exemplo, a string IMSI 123456* corresponde a qualquer chip com MCC 123 e MNC 456.

O Android 11 introduz recursos que tornam o provisionamento do Passpoint R1 mais flexível.

Nome de domínio separado para autenticação, autorização e contabilidade (AAA)

Os administradores de rede Passpoint que precisam de um nome de domínio AAA especificado independente do nome de domínio totalmente qualificado (FQDN) anunciado pela rede pelo Access Network Query Protocol (ANQP) podem especificar uma lista de FQDNs delimitada por ponto e vírgula em um novo nó na subárvore Extension. Esse é um nó opcional, e os dispositivos com o Android versão 10 ou anterior ignoram esse nó.

  • Android: subárvore de extensão do Android

    • AAAServerTrustedNames: obrigatório para nomes confiáveis do servidor AAA com os seguintes nós definidos:

      • FQDN: string que contém os nomes confiáveis do servidor AAA. Use ponto e vírgula para separar os nomes confiáveis. Por exemplo: example.org;example.com.
CAs raiz particulares autoassinadas
Os administradores de rede do Passpoint que gerenciam os certificados internamente podem provisionar perfis com uma CA autoassinada particular para autenticação AAA.
Permitir a instalação de perfis sem um certificado de CA raiz
O certificado da CA raiz anexado ao perfil é usado para autenticação do servidor AAA. Os administradores de rede Passpoint que querem usar CAs raiz públicas confiáveis para autenticação do servidor AAA podem provisionar perfis sem um certificado de CA raiz. Nesse caso, o sistema verifica os certificados do servidor AAA em relação aos certificados de CA raiz públicos instalados no armazenamento de confiança.

Provisionamento do Passpoint R2

O Android 10 introduziu suporte para recursos do Passpoint R2. O Passpoint R2 implementa a inscrição on-line (OSU, na sigla em inglês), um método padrão para provisionar novos perfis do Passpoint. O Android 10 e versões mais recentes são compatíveis com o provisionamento de perfis EAP-TTLS usando o protocolo SOAP-XML em OSU ESS aberto.

Os recursos compatíveis do Passpoint R2 exigem apenas o código de referência do AOSP. Não é necessário suporte adicional de driver ou firmware. O código de referência do AOSP também inclui uma implementação padrão da interface do Passpoint R2 no app Configurações.

Quando o Android detecta um ponto de acesso do Passpoint R2, o framework Android:

  1. Mostra uma lista dos provedores de serviços anunciados pelo PA no seletor de Wi-Fi (além de mostrar os SSIDs).
  2. Pede que o usuário toque em um dos provedores de serviços para configurar um perfil do Passpoint.
  3. Guia o usuário pelo fluxo de configuração do perfil do Passpoint.
  4. Instala o perfil do Passpoint resultante após a conclusão.
  5. Associa-se à rede Passpoint usando o perfil Passpoint recém-provisionado.

Recursos do Passpoint R3

O Android 12 apresenta os seguintes recursos do Passpoint R3 que melhoram a experiência do usuário e permitem que as redes obedeçam às leis locais:

Termos e Condições

A aceitação dos Termos e Condições é exigida por lei em alguns locais e estabelecimentos para fornecer acesso à rede. Com esse recurso, as implantações de rede podem substituir o portal cativo não seguro, que usa redes abertas, por uma rede do Passpoint segura. O usuário recebe uma notificação quando ele for solicitado a aceitar os Termos e Condições.

O URL dos termos e condições precisa apontar para um site seguro usando HTTPS. Se o URL apontar para um site não seguro, o framework vai se desconectar e bloquear a rede imediatamente.

URL das informações do local

Permite que operadores de redes e locais forneçam informações adicionais ao usuário, como mapas, diretórios, promoções e cupons. Uma notificação é exibida ao usuário quando a rede é conectada.

O URL das informações do local precisa apontar para um site seguro usando HTTPS. Se o URL apontar para um site não seguro, o framework vai ignorar o URL e não vai mostrar uma notificação.

Outros recursos do Passpoint

O Android 11 apresenta os seguintes recursos do Passpoint que melhoram a experiência do usuário, o uso de energia e a flexibilidade de implantação.

Notificação e aplicação da data de validade
A aplicação de datas de validade em perfis permite que o framework evite a conexão automática com pontos de acesso com credenciais inválidas, que falharão. Isso evita o uso do tempo de transmissão e economiza bateria e largura de banda de back-end. A estrutura mostra uma notificação ao usuário quando uma rede compatível com o perfil está no intervalo e o perfil expirou.
Vários perfis com FQDNs idênticos
As operadoras que implantam redes Passpoint e usam vários IDs de rede móvel terrestre pública (PLMN, na sigla em inglês) podem provisionar vários perfis do Passpoint com o mesmo FQDN, um para cada ID de PLMN, que é correspondido automaticamente com o chip instalado e usado para conectar a rede.

O Android 12 apresenta os seguintes recursos do Passpoint que melhoram a experiência do usuário, o uso de energia e a flexibilidade de implantação:

Prefixo de identidade decorado
Ao autenticar em redes com uma decoração prefixada, o prefixo de identidade decorado permite que os operadores de rede atualizem o identificador de acesso à rede (NAI) para executar o roteamento explícito usando vários proxies dentro de uma rede AAA. Consulte RFC 7542 (link em inglês). O Android 12 implementa esse recurso de acordo com a especificação da WBA para extensões PPS-MO.
Tratamento de desautenticação iminente
Permite que os operadores de rede sinalizem a um dispositivo que o serviço não está disponível para a credencial usada para autenticar na rede por um determinado período (especificado por um atraso de tempo limite). Depois de receber esse sinal, os dispositivos não vão tentar se reconectar à rede com a mesma credencial até que o tempo limite expire. Por outro lado, os dispositivos que não são compatíveis com esse recurso podem tentar se reconectar à rede várias vezes enquanto o serviço está indisponível.

Exemplos de perfis XML OMA-DM PerProviderSubscription-MO

Perfil com uma credencial de nome de usuário/senha (EAP-TTLS)

O exemplo a seguir demonstra um perfil para uma rede com:

  • Nome amigável da rede definido como Example Network
  • FQDN definido como hotspot.example.net
  • OIs do consórcio de roaming (para roaming)
  • Credencial com nome de usuário user, senha password codificada com Base64 e domínio definido como example.net
  • Método EAP definido como 21 (EAP-TTLS)
  • O método interno da fase 2 foi definido como MS-CHAP-V2
  • Nomes de domínio AAA alternativos definidos como trusted.com e 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 com uma credencial de certificado digital (EAP-TLS)

O exemplo a seguir demonstra um perfil para uma rede com:

  • Nome amigável da rede definido como GlobalRoaming
  • FQDN definido como globalroaming.net
  • OIs de consórcio de roaming (para roaming)
  • O domínio foi definido como users.globalroaming.net
  • Credencial com um certificado digital que tem a impressão 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 com uma credencial de SIM (EAP-AKA)

O exemplo a seguir demonstra um perfil para uma rede com:

  • Nome amigável da rede definido como Purple Passpoint
  • FQDN definido como wlan.mnc888.mcc999.3gppnetwork.org
  • Credencial do chip com ID PLMN de 999888
  • Método EAP definido 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 autenticação

Dispositivos com Android 8.x ou Android 9 com um perfil EAP-SIM, EAP-AKA ou EAP-AKA' do Passpoint R1 não se conectam automaticamente à rede Passpoint. Esse problema afeta usuários, operadoras e serviços ao reduzir o descarregamento de Wi-Fi.

Segmento Impacto Tamanho do impacto
Operadoras e provedores de serviços do Passpoint Aumento da carga na rede celular. Qualquer operadora que use o Passpoint R1.
Usuários Perda da oportunidade de conexão automática com pontos de acesso (APs) Wi-Fi da operadora, resultando em custos de dados mais altos. Qualquer usuário com um dispositivo que funcione em uma rede de operadora compatível com Passpoint R1.

Causa da falha

O Passpoint especifica um mecanismo para corresponder um provedor de serviços anunciado (ANQP) a um perfil instalado no dispositivo. As seguintes regras de correspondência para EAP-SIM, EAP-AKA e EAP-AKA' são um conjunto parcial de regras com foco nas falhas 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.

O segundo critério foi modificado no Android 8.0:

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

Com essa modificação, o sistema não observou correspondência para provedores de serviços que funcionavam antes, então os dispositivos Passpoint não se conectaram automaticamente.

Soluções alternativas

Para contornar o problema dos critérios de correspondência modificados, as operadoras e os provedores de serviços precisam adicionar o domínio do identificador de acesso à rede (NAI, na sigla em inglês) às informações publicadas pelo AP do Passpoint.

A solução recomendada é que os provedores de serviços de rede implementem uma solução alternativa no lado da rede para reduzir o tempo de implantação. Uma solução alternativa do lado do dispositivo depende de OEMs que pegam uma lista de mudanças (CL) do AOSP e atualizam os dispositivos em campo.

Correção de rede para operadoras e provedores de serviços Passpoint

A solução alternativa do lado da rede exige a reconfiguração da rede para adicionar o elemento ANQP do domínio NAI, conforme especificado abaixo. As especificações do Passpoint não exigem o elemento ANQP do domínio NAI, mas a adição dessa propriedade está em conformidade com as especificações do Passpoint. Portanto, as implementações de clientes compatíveis com as especificações não devem ser interrompidas.

  1. Adicione o elemento ANQP do domínio NAI.
  2. Defina o subcampo do domínio da NAI para corresponder ao Realm do perfil instalado no dispositivo.
  3. Defina as seguintes informações com base em cada tipo de EAP:

    • EAP-TTLS:defina EAPMethod(21) e os tipos de autenticação interna compatíveis (PAP, CHAP, MS-CHAP ou MS-CHAP-V2).
    • EAP-TLS:defina EAPMethod(13)
    • EAP-SIM:definir EAPMethod(18)
    • EAP-AKA:defina EAPMethod(23)
    • EAP-AKA': Defina EAPMethod(50)

Correção de dispositivo/AOSP para OEMs

Para implementar uma solução alternativa no dispositivo, os OEMs precisam escolher o patch CL aosp/718508. Ele pode ser aplicado nas seguintes versões (não se aplica ao Android 10 ou mais recente):

  • Android 9
  • Android 8.x

Quando o patch é escolhido, os OEMs precisam atualizar os dispositivos em campo.