Wi-Fi da operadora é um recurso de conexão automática (usando IMSI criptografado) disponível no Android 9 e superior que permite que os dispositivos se conectem automaticamente a redes Wi-Fi implementadas pela operadora. Em áreas de grande congestionamento ou com cobertura celular mínima, como um estádio ou uma estação de trem subterrânea, o Wi-Fi da operadora pode ser usado para melhorar a experiência de conectividade dos usuários e aliviar o tráfego.
Os dispositivos com o recurso Wi-Fi da operadora se conectam automaticamente às redes Wi-Fi da operadora configuradas (redes com certificado de chave pública). Quando um usuário se desconecta manualmente de uma rede Wi-Fi de uma operadora, a rede fica na lista negra por 24 horas (sem conexão automática). Os usuários podem se conectar manualmente às redes da lista negra a qualquer momento.
Em dispositivos com Android 9 ou superior com Wi-Fi da operadora implementado, a conexão automática por meio do Wi-Fi da operadora fica desativada por padrão. Uma notificação é enviada ao usuário quando o dispositivo tenta se conectar a uma rede Wi-Fi da operadora pela primeira vez.
Implementação
Os fabricantes de dispositivos e as operadoras devem fazer o seguinte para implementar o Wi-Fi da operadora.
Fabricantes
Para dispositivos com Android 11 e superior, use a API de sugestão de Wi-Fi para adicionar perfis de Wi-Fi para cada operadora.
Para dispositivos com versão 10 ou inferior, adicione perfis Wi-Fi configurando o parâmetro carrier_wifi_string_array
para cada operadora no gerenciador de configuração da operadora .
carrier_wifi_string_array
: uma matriz de strings onde cada entrada de string é um SSID Wi-Fi codificado em Base64 e um tipo EAP separado por vírgula, onde o tipo EAP é um número inteiro (consulte Registro do Extensible Authentication Protocol (EAP) ). Por exemplo, a configuração a seguir é para SOME_SSID_NAME usando EAP-AKA e Some_Other_SSID usando EAP-SIM :config { key: "carrier_wifi_string_array" text_array { item: "U09NRV9TU0lEX05BTUUK,23" item: "U29tZV9PdGhlcl9TU0lECg==,18" } }
No gerenciador de configuração da operadora , configure os seguintes parâmetros para cada operadora:
imsi_key_availability_int
: Identifica se a chave usada para criptografia IMSI está disponível para WLAN (bit 1 está definido), EPDG (bit 0 está definido) ou ambos (bit 0 e bit 1 estão definidos). Por exemplo, a configuração a seguir indica que a criptografia IMSI está disponível para WLAN, mas não para EPDG:config { key: "imsi_key_availability_int" int_value: 2 }
imsi_key_download_url_string
: URL da qual é baixado o proto contendo a chave pública da operadora usada para criptografia IMSI. Por exemplo, a configuração a seguir fornece um URL específico:config { key: "imsi_key_download_url_string" text_value: "https://www.some_company_name.com:5555/some_directory_name/some_filename.json" }
allow_metered_network_for_cert_download_bool
: Um sinalizador que indica se é permitido o download da chave pública da operadora por meio de uma rede medida (celular). Se esse sinalizador não estiver definido, um novo dispositivo sem conectividade Wi-Fi não conseguirá se conectar à rede Wi-Fi da operadora porque não terá permissão para baixar a chave.config { key: "allow_metered_network_for_cert_download_bool" bool_value: true }
Operadoras
Para implementar o Wi-Fi da operadora, a operadora deve ativar a proteção de privacidade IMSI e fornecer uma chave pública.
Proteção de privacidade IMSI
O Android protege a confidencialidade da identidade permanente (IMSI) de um assinante usando criptografia de chave pública. O Android implementa a especificação Wireless Broadband Alliance (WBA) para IMSI Privacy Protection para Wi-Fi . Quando a proteção de privacidade IMSI está habilitada para uma conexão, a identidade permanente do assinante não é transmitida de forma clara pelo ar.
Criptografia de identidade permanente
O formato da identidade permanente criptografada é o seguinte:
- A identidade permanente está no formato
<EAP-Method><IMSI>@<NAI realm>
. - O prefixo EAP-Method é um octeto único que define o método EAP usado para autenticação:
-
0
: EAP-AKA -
1
: EAP-SIM -
6
: EAP-AKA'
-
- O formato do domínio NAI é
wlan.mnc XXX .mcc YYY .3gppnetwork.org
ondeXXX
é substituído pelo código de rede móvel (MNC) do cartão SIM eYYY
é substituído pelo código de país móvel (MCC). - A identidade permanente é criptografada usando uma chave pública RSA fornecida pela operadora. A chave pública está incluída em um certificado X.509 .
- O esquema de criptografia é RSAES-OAEP com SHA-256 como função de hash criptográfico. Este esquema de criptografia garante um texto cifrado único sempre que o esquema é usado, evitando assim outra identidade persistente que possa ser rastreável.
- O comprimento da chave RSA é de 2.048 bits.
- O buffer de criptografia tem 256 bytes.
- O texto cifrado é codificado com Base64 .
- O comprimento da identidade permanente criptografada de saída é de 344 bytes.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Identificador de chave
O identificador de chave é um par de valores de atributo opcional que a operadora anexa a um certificado para permitir que o servidor localize a chave privada adequada durante a autenticação. Um exemplo de identificador de chave é CertificateSerialNumber=123456
. Se o identificador de chave for fornecido, ele será enviado de forma transparente como parte do processo de autenticação.
Modificações nos métodos de autenticação EAP baseados em SIM
Quando a proteção de privacidade IMSI está habilitada em uma conexão, o sistema não envia a identidade permanente após o recebimento de EAP-Request/Identity
, em vez disso ele responde com um login anônimo:
SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>
<prefix>
é opcional. Se a configuração da operadora enable_eap_method_prefix_bool
estiver definida como true
, o primeiro caractere da identidade (antes de anonymous
) notificará o servidor sobre o tipo de método EAP usado antes do início da troca EAP.
-
0
: EAP-AKA -
1
: EAP-SIM -
6
: EAP-AKA'
Se a configuração da operadora estiver definida como false
, esse prefixo não será incluído na mensagem.
Em resposta, o servidor envia uma mensagem EAP-Request/AKA-Identity
e o sistema responde no seguinte formato:
SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"
O primeiro caractere da identidade notifica o servidor que uma identidade criptografada é usada ou o tipo de método EAP configurado:
-
\0
: Identidade permanente criptografada -
0
: EAP-AKA -
1
: EAP-SIM -
6
: EAP-AKA'
O par de valores do atributo do identificador de chave é opcional e não é anexado ao final da identidade permanente criptografada se não estiver em uso.
Neste ponto, o servidor localiza a chave privada do identificador de chave (se fornecido), descriptografa a identidade criptografada usando a chave privada da transportadora e continua o fluxo EAP normal.
Após a autenticação bem-sucedida, o servidor pode fornecer uma identidade de reautenticação rápida ou uma identidade temporária (pseudônimo), que é usada em conexões subsequentes. Se nenhuma identidade temporária for fornecida pelo servidor, o sistema enviará a identidade criptografada na conexão subsequente.
Recuperação, expiração e revogação de certificado de operadora
No caso em que nenhum certificado está instalado no sistema, o sistema usa a URL fornecida na configuração da operadora imsi_key_download_url_string
para fazer download de um certificado usando o método HTTP GET. O sistema usa dados de celular somente se a configuração da operadora allow_metered_network_for_cert_download_bool
estiver definida como true
. Caso contrário, o sistema baixará o certificado somente quando uma conexão Wi-Fi estiver disponível.
A expiração do certificado é imposta pelo sistema. O sistema começa a tentar renovar os certificados 21 dias antes da data de expiração do certificado e usa a mesma URL para fazer download do novo certificado.
Caso o servidor não consiga descriptografar a identidade criptografada, o servidor envia uma mensagem EAP-Request/AKA-Notification
com o código AT_NOTIFICATION
General Failure
(16384) para encerrar a troca EAP.
No caso de o certificado ser revogado ou expirado, o servidor envia uma mensagem EAP-Request/AKA-Notification
com o código AT_NOTIFICATION
Certificate Replacement Required
(16385) para encerrar a troca EAP. Em resposta, o sistema aplica heurística interna para determinar se deve remover o certificado e tentar fazer download de um novo certificado a partir do mesmo URL.
Fornecendo a chave pública
Forneça uma URL pública para um servidor, preferencialmente usando HTTP sobre TLS, que hospede o certificado da operadora onde:
- A chave pública e a expiração podem ser extraídas do certificado.
As informações do servidor estão no formato JSON da seguinte forma:
Property: key-identifier Type: String Encoding: UTF-8 Description: Specifies an identifier that the carrier would like to attach to the certificate. Optional: Yes Property: certificate Property alternative name: public-key Type: String Encoding: Base64 Description: The content of the carrier's X.509 certificate. Optional: No Property: key-type Type: String Encoding: UTF-8 Description: Specifies the module that will use the key. The value for type must be either WLAN or EPDG. Optional: Yes. If the key-type property isn't included, then its value defaults to WLAN.
A seguir está um exemplo de chave pública.
{ "carrier-keys" : [ { "key-identifier" : "CertificateSerialNumber=5xxe06d4", "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----" } ] }