Wi-Fi dell'operatore

Wi-Fi operatore è una funzione di connessione automatica (utilizzando IMSI crittografata) disponibile in Android 9 e versioni successive che consente ai dispositivi di connettersi automaticamente alle reti Wi-Fi implementate dall'operatore. Nelle aree ad alta congestione o con copertura cellulare minima come uno stadio o una stazione della metropolitana, il vettore Wi-Fi può essere utilizzato per migliorare l'esperienza di connettività degli utenti e scaricare il traffico.

I dispositivi con la funzione Wi-Fi dell'operatore si connettono automaticamente alle reti Wi-Fi dell'operatore configurate (reti con un certificato di chiave pubblica). Quando un utente si disconnette manualmente da una rete Wi-Fi dell'operatore, la rete viene inserita nella lista nera per 24 ore (nessuna connessione automatica). Gli utenti possono connettersi manualmente alle reti nella lista nera in qualsiasi momento.

Sui dispositivi con Android 9 o versioni successive con Wi-Fi dell'operatore implementato, la connessione automatica tramite Wi-Fi dell'operatore è disattivata per impostazione predefinita. Viene inviata una notifica all'utente quando il dispositivo tenta di connettersi a una rete Wi-Fi dell'operatore per la prima volta.

Implementazione

I produttori di dispositivi e gli operatori devono effettuare le seguenti operazioni per implementare il Wi-Fi dell'operatore.

Produttori

Per i dispositivi con Android 11 e superiori, utilizzare il suggerimento API Wi-Fi per aggiungere profili Wi-Fi per ciascun vettore.

Per i dispositivi con 10 o più basso, aggiungere i profili Wi-Fi configurando il carrier_wifi_string_array parametro per ciascun vettore nel direttore portante config .

  • carrier_wifi_string_array : Un array di stringhe dove ogni voce di stringa è una codifica Base64 SSID Wi-Fi e un tipo EAP separati da una virgola, in cui il tipo EAP è un numero intero (consultare Extensible Authentication Protocol (EAP) Registro ). Ad esempio, la seguente configurazione sono per SOME_SSID_NAME tramite EAP-AKA e Some_Other_SSID tramite EAP-SIM:

    config {
      key: "carrier_wifi_string_array"
      text_array {
        item: "U09NRV9TU0lEX05BTUUK,23"
        item: "U29tZV9PdGhlcl9TU0lECg==,18"
      }
    }
    

Nella direttore portante di configurazione , configurare i seguenti parametri per ciascun vettore:

  • imsi_key_availability_int : Identifica se la chiave utilizzata per la crittografia IMSI è disponibile per WLAN (bit 1 viene impostato), EPDG (bit 0 è impostato), o entrambi (entrambi bit 0 e bit 1 sono set). Ad esempio, la seguente configurazione indica che la crittografia IMSI è disponibile per WLAN ma non per EPDG:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string : URL da cui viene scaricato il proto contenente la chiave pubblica del vettore utilizzato per la crittografia IMSI. Ad esempio, la seguente configurazione fornisce un URL specifico:

    config {
      key: "imsi_key_download_url_string"
      text_value: "https://www.some_company_name.com:5555/some_directory_name/"
    }
    
  • allow_metered_network_for_cert_download_bool : Un flag che indica se consentire il download della chiave pubblica del vettore attraverso una rete misurata (cellulare). Se questo flag non è impostato, un nuovo dispositivo senza connettività Wi-Fi non sarà in grado di connettersi alla rete Wi-Fi dell'operatore perché non sarà autorizzato a scaricare la chiave.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

vettori

Per implementare il Wi-Fi dell'operatore, l'operatore deve abilitare la protezione della privacy IMSI e fornire una chiave pubblica.

Protezione della privacy IMSI

Android protegge la riservatezza dell'identità permanente di un abbonato (IMSI) utilizzando la crittografia a chiave pubblica. Implementa Android Wireless Broadband Alliance (WBA) specifica per IMSI protezione della privacy per il Wi-Fi . Quando la protezione della privacy IMSI è abilitata per una connessione, l'identità dell'abbonato permanente non viene trasmessa in chiaro via etere.

Crittografia dell'identità permanente

Il formato dell'identità permanente crittografata è il seguente:

  • L'identità permanente è nel formato di <IMSI>@<NAI realm> . Il formato regno NAI è wlan.mnc XXX .mcc YYY .3gppnetwork.org dove XXX è sostituito con il codice di rete mobile della carta SIM (MNC) e YYY viene sostituito con il codice del paese cellulare (MCC).
  • L'identità permanente viene crittografata utilizzando una chiave pubblica RSA fornita dal vettore. La chiave pubblica è incluso in un X.509 certificato.
  • Lo schema di crittografia è RSAES-OAEP con SHA-256 come funzione hash crittografica. Questo schema di crittografia garantisce un testo cifrato univoco ogni volta che lo schema viene utilizzato, evitando così un'altra identità persistente che può essere rintracciabile.
  • La lunghezza della chiave RSA è 2048 bit.
  • Il buffer di crittografia è di 256 byte.
  • Il testo cifrato è codificato con Base64 .
  • La lunghezza dell'identità permanente crittografata in output è di 344 byte.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<IMSI>@<NAI Realm>))
Identificatore chiave

L'identificatore della chiave è una coppia di valori di attributo facoltativa che il vettore allega a un certificato per consentire al server di individuare la chiave privata corretta durante l'autenticazione. Un esempio di un identificatore chiave è CertificateSerialNumber=123456 . Se viene fornito l'identificatore della chiave, viene inviato in chiaro come parte del processo di autenticazione.

Modifiche ai metodi di autenticazione EAP basati su SIM

Quando la protezione della privacy IMSI è abilitato su una connessione, il sistema non invia l'identità permanente momento del ricevimento di EAP-Request/Identity , invece risponde con un accesso anonimo:

SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>

<prefix> è opzionale. Se enable_eap_method_prefix_bool configurazione portante è impostata su true , il primo carattere dell'identità (prima anonymous ) notifica al server sul tipo di metodo EAP utilizzato prima dell'inizio dello scambio EAP.

  • 0 - EAP-AKA
  • 1 - EAP-SIM
  • 6 - EAP-AKA'

Se la configurazione portante è impostata su false , questo prefisso non è incluso nel messaggio.

In risposta, il server invia un EAP-Request/AKA-Identity messaggio e gli risponde di sistema nel seguente formato:

SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"

Il primo carattere dell'identità notifica al server che viene utilizzata un'identità crittografata o il tipo di metodo EAP configurato:

  • \0 - crittografati identità permanente
  • 0 - EAP-AKA
  • 1 - EAP-SIM
  • 6 - EAP-AKA'

La coppia valore attributo identificatore chiave è facoltativa e non viene aggiunta alla fine dell'identità permanente crittografata se non è in uso.

A questo punto, il server individua la chiave privata dall'identificatore della chiave (se fornito), decrittografa l'identità crittografata utilizzando la chiave privata dell'operatore e continua il normale flusso EAP.

Dopo l'autenticazione riuscita, il server può fornire un'identità di riautenticazione rapida o un'identità temporanea (pseudonimo), che viene utilizzata nelle connessioni successive. Se il server non fornisce identità temporanee, il sistema invia l'identità crittografata nella connessione successiva.

Recupero, scadenza e revoca del certificato del vettore

Nel caso in cui nessun certificato è installato nel sistema, il sistema utilizza l'URL fornito nella imsi_key_download_url_string configurazione del vettore per scaricare un certificato. Il sistema utilizza dati cellulare solo se allow_metered_network_for_cert_download_bool configurazione portante è impostata su true . In caso contrario, il sistema scarica il certificato solo quando è disponibile una connessione Wi-Fi.

La scadenza del certificato viene imposta dal sistema. Il sistema inizia a tentare di rinnovare i certificati 21 giorni prima della data di scadenza del certificato e utilizza lo stesso URL per scaricare il nuovo certificato.

Nel caso in cui il certificato è stato revocato o se il server non è in grado di decifrare l'identità crittografato, il server invia un EAP-Request/AKA-Notification messaggio con AT_NOTIFICATION codice di General failure (16385) per terminare lo scambio EAP. In risposta, il sistema rimuove il certificato e tenta di scaricare un nuovo certificato dallo stesso URL.

Fornire la chiave pubblica

Fornire un URL pubblico a un server, preferibilmente utilizzando HTTP su TLS, che ospita il certificato del vettore dove:

  1. La chiave pubblica e la scadenza possono essere estratte dal certificato.
  2. Le informazioni dal server sono in formato JSON come segue:

    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.
    

    Di seguito è riportato un esempio di chiave pubblica.

    {
    "carrier-keys" : [ {
      "key-identifier" : "CertificateSerialNumber=5xxe06d4",
      "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----"
    } ]
    }