Mobilfunkanbieter-WLAN

Carrier Wi-Fi ist eine automatische Verbindungsfunktion (unter Verwendung verschlüsselter IMSI), die in Android 9 und höher verfügbar ist und es Geräten ermöglicht, automatisch eine Verbindung zu vom Carrier implementierten Wi-Fi-Netzwerken herzustellen. In Bereichen mit hoher Überlastung oder mit minimaler Mobilfunkabdeckung, wie etwa einem Stadion oder einer U-Bahn-Station, kann Carrier-WLAN genutzt werden, um die Konnektivität der Benutzer zu verbessern und den Datenverkehr zu entlasten.

Geräte mit der Carrier-Wi-Fi-Funktion stellen automatisch eine Verbindung zu konfigurierten Carrier-Wi-Fi-Netzwerken her (Netzwerke mit einem Public-Key-Zertifikat). Wenn ein Benutzer die Verbindung zu einem WLAN-Netzwerk eines Mobilfunkanbieters manuell trennt, wird das Netzwerk 24 Stunden lang auf die schwarze Liste gesetzt (keine automatische Verbindung). Benutzer können jederzeit manuell eine Verbindung zu Netzwerken auf der schwarzen Liste herstellen.

Auf Geräten mit Android 9 oder höher und implementiertem Mobilfunkanbieter-WLAN ist die automatische Verbindung über Mobilfunkanbieter-WLAN standardmäßig deaktiviert. Eine Benachrichtigung wird an den Benutzer gesendet, wenn das Gerät zum ersten Mal versucht, eine Verbindung zu einem WLAN-Netzwerk des Mobilfunkanbieters herzustellen.

Implementierung

Gerätehersteller und Netzbetreiber müssen Folgendes tun, um Netzbetreiber-WLAN zu implementieren.

Hersteller

Verwenden Sie für Geräte mit Android 11 und höher die Wi-Fi-Vorschlags-API , um Wi-Fi-Profile für jeden Mobilfunkanbieter hinzuzufügen.

Fügen Sie für Geräte mit Version 10 oder niedriger WLAN-Profile hinzu, indem Sie den Parameter carrier_wifi_string_array für jeden Anbieter im Carrier-Konfigurationsmanager konfigurieren.

  • carrier_wifi_string_array : Ein String-Array, bei dem jeder String-Eintrag eine Base64-codierte Wi-Fi-SSID und ein durch Komma getrennter EAP-Typ ist, wobei der EAP-Typ eine Ganzzahl ist (siehe Extensible Authentication Protocol (EAP) Registry ). Die folgende Konfiguration gilt beispielsweise für SOME_SSID_NAME mit EAP-AKA und Some_Other_SSID mit EAP-SIM :

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

Konfigurieren Sie im Carrier-Konfigurationsmanager die folgenden Parameter für jeden Carrier:

  • imsi_key_availability_int : Gibt an, ob der für die IMSI-Verschlüsselung verwendete Schlüssel für WLAN (Bit 1 ist gesetzt), EPDG (Bit 0 ist gesetzt) ​​oder beides (sowohl Bit 0 als auch Bit 1 sind gesetzt) ​​verfügbar ist. Die folgende Konfiguration zeigt beispielsweise an, dass die IMSI-Verschlüsselung für WLAN, jedoch nicht für EPDG verfügbar ist:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string : URL, von der das Protokoll heruntergeladen wird, das den öffentlichen Schlüssel des für die IMSI-Verschlüsselung verwendeten Anbieters enthält. Die folgende Konfiguration stellt beispielsweise eine bestimmte URL bereit:

    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 : Ein Flag, das angibt, ob das Herunterladen des öffentlichen Schlüssels des Netzbetreibers über ein getaktetes (Mobilfunk-)Netzwerk zugelassen werden soll. Wenn dieses Flag nicht gesetzt ist, kann ein neues Gerät ohne WLAN-Konnektivität keine Verbindung zum WLAN-Netzwerk des Mobilfunkanbieters herstellen, da es den Schlüssel nicht herunterladen darf.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

Träger

Um Carrier-WLAN zu implementieren, muss der Carrier den IMSI-Datenschutz aktivieren und einen öffentlichen Schlüssel bereitstellen.

IMSI-Datenschutz

Android schützt die Vertraulichkeit der permanenten Identität eines Abonnenten (IMSI) mithilfe der Public-Key-Kryptografie. Android implementiert die Wireless Broadband Alliance (WBA)-Spezifikation für IMSI Privacy Protection für Wi-Fi . Wenn der IMSI-Datenschutz für eine Verbindung aktiviert ist, wird die permanente Teilnehmeridentität nicht unverschlüsselt über die Luft übertragen.

Permanente Identitätsverschlüsselung

Das Format der verschlüsselten permanenten Identität ist wie folgt:

  • Die permanente Identität hat das Format <EAP-Method><IMSI>@<NAI realm> .
  • Das EAP-Method-Präfix ist ein einzelnes Oktett, das die EAP-Methode definiert, die für die Authentifizierung verwendet wird:
    • 0 : EAP-AKA
    • 1 : EAP-SIM
    • 6 : EAP-AKA'
  • Das NAI-Realm-Format ist wlan.mnc XXX .mcc YYY .3gppnetwork.org wobei XXX durch den Mobilfunknetzcode (MNC) der SIM-Karte und YYY durch den Mobilfunkländercode (MCC) ersetzt wird.
  • Die permanente Identität wird mit einem vom Netzbetreiber bereitgestellten öffentlichen RSA-Schlüssel verschlüsselt. Der öffentliche Schlüssel ist in einem X.509- Zertifikat enthalten.
  • Das Verschlüsselungsschema ist RSAES-OAEP mit SHA-256 als kryptografischer Hash-Funktion. Dieses Verschlüsselungsschema garantiert bei jeder Verwendung des Schemas einen eindeutigen Chiffriertext und vermeidet so eine weitere persistente Identität, die nachverfolgbar sein könnte.
  • Die Länge des RSA-Schlüssels beträgt 2048 Bit.
  • Der Verschlüsselungspuffer beträgt 256 Byte.
  • Der Chiffriertext ist mit Base64 kodiert.
  • Die Länge der ausgegebenen verschlüsselten permanenten Identität beträgt 344 Byte.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Schlüsselidentifikator

Der Schlüsselbezeichner ist ein optionales Attributwertpaar, das der Anbieter einem Zertifikat hinzufügt, damit der Server während der Authentifizierung den richtigen privaten Schlüssel finden kann. Ein Beispiel für eine Schlüsselkennung ist CertificateSerialNumber=123456 . Wenn die Schlüsselkennung angegeben wird, wird sie im Rahmen des Authentifizierungsprozesses im Klartext gesendet.

Änderungen an SIM-basierten EAP-Authentifizierungsmethoden

Wenn der IMSI-Datenschutz für eine Verbindung aktiviert ist, sendet das System beim Empfang von EAP-Request/Identity nicht die permanente Identität, sondern antwortet stattdessen mit einer anonymen Anmeldung:

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

<prefix> ist optional. Wenn die Trägerkonfiguration enable_eap_method_prefix_bool “ auf true festgelegt ist, benachrichtigt das erste Zeichen der Identität (vor anonymous “) den Server über den Typ der verwendeten EAP-Methode, bevor der EAP-Austausch beginnt.

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

Wenn die Carrier-Konfiguration auf false gesetzt ist, ist dieses Präfix nicht in der Nachricht enthalten.

Als Antwort sendet der Server eine EAP-Request/AKA-Identity Nachricht und das System antwortet im folgenden Format:

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

Das erste Zeichen der Identität benachrichtigt den Server entweder darüber, dass eine verschlüsselte Identität verwendet wird, oder über den Typ der konfigurierten EAP-Methode:

  • \0 : Verschlüsselte permanente Identität
  • 0 : EAP-AKA
  • 1 : EAP-SIM
  • 6 : EAP-AKA'

Das Schlüssel-ID-Attribut-Wert-Paar ist optional und wird nicht an das Ende der verschlüsselten permanenten Identität angehängt, wenn es nicht verwendet wird.

Zu diesem Zeitpunkt findet der Server den privaten Schlüssel anhand der Schlüsselkennung (falls vorhanden), entschlüsselt die verschlüsselte Identität mithilfe des privaten Schlüssels des Trägers und setzt den normalen EAP-Fluss fort.

Nach erfolgreicher Authentifizierung kann der Server eine schnelle erneute Authentifizierungsidentität oder eine temporäre Identität (Pseudonym) bereitstellen, die bei nachfolgenden Verbindungen verwendet wird. Werden vom Server keine temporären Identitäten bereitgestellt, sendet das System bei der darauffolgenden Verbindung die verschlüsselte Identität.

Abruf, Ablauf und Widerruf von Trägerzertifikaten

Falls kein Zertifikat im System installiert ist, verwendet das System die in der Trägerkonfiguration imsi_key_download_url_string angegebene URL, um ein Zertifikat mithilfe der HTTP-GET-Methode herunterzuladen. Das System verwendet Mobilfunkdaten nur, wenn die Carrier-Konfiguration allow_metered_network_for_cert_download_bool “ auf „ true gesetzt ist. Andernfalls lädt das System das Zertifikat nur herunter, wenn eine WLAN-Verbindung verfügbar ist.

Der Ablauf des Zertifikats wird vom System erzwungen. Das System beginnt 21 Tage vor dem Ablaufdatum des Zertifikats mit dem Versuch, Zertifikate zu erneuern, und verwendet dieselbe URL, um das neue Zertifikat herunterzuladen.

Falls der Server die verschlüsselte Identität nicht entschlüsseln kann, sendet der Server eine EAP-Request/AKA-Notification mit dem AT_NOTIFICATION Code General Failure (16384), um den EAP-Austausch zu beenden.

Für den Fall, dass das Zertifikat widerrufen wird oder abgelaufen ist, sendet der Server eine EAP-Request/AKA-Notification -Nachricht mit dem AT_NOTIFICATION Code Certificate Replacement Required (16385), um den EAP-Austausch zu beenden. Als Reaktion darauf wendet das System interne Heuristiken an, um zu bestimmen, ob das Zertifikat entfernt und versucht werden soll, ein neues Zertifikat von derselben URL herunterzuladen.

Bereitstellung des öffentlichen Schlüssels

Geben Sie eine öffentliche URL zu einem Server an, vorzugsweise unter Verwendung von HTTP über TLS, der das Zertifikat des Netzbetreibers hostet, wobei:

  1. Der öffentliche Schlüssel und das Ablaufdatum können aus dem Zertifikat extrahiert werden.
  2. Die Informationen vom Server liegen im JSON-Format wie folgt vor:

    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.
    

    Das Folgende ist ein Beispiel für einen öffentlichen Schlüssel.

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