Mobilfunkanbieter-WLAN

Mobilfunkanbieter-Wi-Fi ist eine automatische Verbindungsfunktion (mit verschlüsselter IMSI), die in Android 9 und höher verfügbar ist und es Geräten ermöglicht, sich automatisch mit anbieterimplementierten Wi-Fi-Netzwerken zu verbinden. In Gebieten mit hoher Überlastung oder mit minimaler Mobilfunkabdeckung wie einem Stadion oder einer U-Bahn-Station kann Carrier-WLAN verwendet werden, um die Konnektivitätserfahrung der Benutzer zu verbessern und den Verkehr zu entlasten.

Geräte mit der Mobilfunkanbieter-WLAN-Funktion verbinden sich automatisch mit konfigurierten Mobilfunkanbieter-WLAN-Netzwerken (Netzwerke mit einem öffentlichen Schlüsselzertifikat). Wenn ein Benutzer die Verbindung zu einem WLAN-Netz eines Mobilfunkanbieters manuell trennt, wird das Netzwerk für 24 Stunden auf die schwarze Liste gesetzt (keine automatische Verbindung). Benutzer können sich jederzeit manuell mit Netzwerken auf der schwarzen Liste verbinden.

Auf Geräten mit Android 9 oder höher mit 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-Netz eines Anbieters herzustellen.

Implementierung

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

Hersteller

Für Geräte mit Android 11 und höher, verwenden Sie den Wi-Fi - Vorschlag API Wi-Fi - Profile für jeden Träger hinzuzufügen.

Wi-Fi - Profile für Geräte 10 oder niedriger ausgeführt wird , hinzufügen , indem Sie die Konfiguration carrier_wifi_string_array Parameter für jeden Träger in der Trägerkonfigurationsmanager .

  • carrier_wifi_string_array : ein String - Array , wobei jeder Zeichenfolgeneintrag ist ein Base64-kodiert WLAN SSID und ein EAP - Typ durch ein Komma getrennt, wobei der EAP - Typ eine ganze Zahl ist (siehe Extensible Authentication Protocol (EAP) Registry ). Zum Beispiel ist die folgende Konfiguration für SOME_SSID_NAME mit EAP-AKA und Some_Other_SSID EAP-SIM verwenden:

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

Im Träger Config Manager , konfigurieren Sie die folgenden Parameter für jeden Träger:

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

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string : URL , von dem die Proto den öffentlichen Schlüssel des verwendeten Trägers für IMSI - Verschlüsselung enthalten , heruntergeladen wird. 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/"
    }
    
  • allow_metered_network_for_cert_download_bool : Ein Flag , das anzeigt , ob das Herunterladen des öffentlichen Schlüssels des Trägers über eine abgemessene (zelluläre) Netzwerk zu ermöglichen. 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
    }
    

Transportunternehmen

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

IMSI-Datenschutz

Android schützt die Vertraulichkeit der permanenten Identität (IMSI) eines Abonnenten mithilfe von Kryptografie mit öffentlichem Schlüssel. Android Geräte der Wireless Broadband Alliance (WBA) Spezifikation für IMSI Datenschutz für Wi-Fi . Wenn der IMSI-Datenschutz für eine Verbindung aktiviert ist, wird die permanente Teilnehmeridentität nicht drahtlos übertragen.

Permanente Identitätsverschlüsselung

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

  • Die permanente Identität ist im Format <IMSI>@<NAI realm> . Das NAI Reich Format ist wlan.mnc XXX .mcc YYY .3gppnetwork.org wo XXX mit der SIM - Karte des Mobilnetzwerkcode (MNC) und ersetzt YYY mit dem mobilen Ländercode (MCC) ersetzt wird .
  • Die permanente Identität wird mit einem vom Netzbetreiber bereitgestellten öffentlichen RSA-Schlüssel verschlüsselt. Der öffentliche Schlüssel wird in einem eingeschlossenen X.509 - Zertifikat.
  • Das Verschlüsselungsschema ist RSAES-OAEP mit SHA-256 als kryptographischer Hash - Funktion. Dieses Verschlüsselungsschema garantiert jedes Mal, wenn das Schema verwendet wird, einen eindeutigen Chiffriertext, wodurch eine weitere persistente Identität vermieden wird, die verfolgt werden kann.
  • Die RSA-Schlüssellänge beträgt 2048 Bit.
  • Der Verschlüsselungspuffer ist 256 Byte groß.
  • Der Chiffretext wird mit codiertem Base64 .
  • Die Länge der verschlüsselten permanenten Identität der Ausgabe beträgt 344 Byte.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<IMSI>@<NAI Realm>))
Schlüsselkennung

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

Änderungen an SIM-basierten EAP-Authentifizierungsmethoden

Wenn der Schutz der Privatsphäre IMSI für eine Verbindung aktiviert ist, wird das System nicht die permanente Identität bei Empfang sendet EAP-Request/Identity , sondern antwortet sie mit einem anonymen Login:

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

<prefix> ist optional. Wenn die enable_eap_method_prefix_bool Trägerkonfiguration eingestellt ist true , das erste Zeichen der Identität (vor anonymous benachrichtigt) , um den Server über die Art der EAP - Methode verwendet , bevor der EAP Austausch beginnt.

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

Wenn die Trägerkonfiguration gesetzt ist false , wird dieser Präfix nicht in der Nachricht enthalten ist .

Als Antwort sendet der Server eine EAP-Request/AKA-Identity - Nachricht und das System reagiert in folgendem 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 teilt dem Server mit, dass entweder eine verschlüsselte Identität verwendet wird oder die Art der konfigurierten EAP-Methode:

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

Das Wertpaar des Schlüsselbezeichnerattributs ist optional und wird nicht an das Ende der verschlüsselten permanenten Identität angehängt, wenn es nicht verwendet wird.

An diesem Punkt lokalisiert der Server den privaten Schlüssel aus der Schlüsselkennung (sofern vorhanden), entschlüsselt die verschlüsselte Identität unter Verwendung des privaten Schlüssels des Trägers und setzt den normalen EAP-Fluss fort.

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

Abruf, Ablauf und Widerruf von Carrier-Zertifikaten

In dem Fall , in dem kein Zertifikat im System installiert ist, verwendet das System die URL in der mitgelieferten imsi_key_download_url_string Trägerkonfiguration ein Zertifikats zum Download bereit . Das System verwendet zellulären Daten nur , wenn die allow_metered_network_for_cert_download_bool Trägerkonfiguration eingestellt ist true . Andernfalls lädt das System das Zertifikat nur herunter, wenn eine Wi-Fi-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.

In dem Fall , in dem das Zertifikat widerrufen wird oder wenn der Server nicht in der Lage ist , die verschlüsselte Identität zu entschlüsseln, der Server sendet eine EAP-Request/AKA-Notification Nachricht mit dem AT_NOTIFICATION Code General failure (16385) , um den EAP Austausch zu beenden. Als Antwort entfernt das System das Zertifikat und versucht, ein neues Zertifikat von derselben URL herunterzuladen.

Bereitstellung des öffentlichen Schlüssels

Stellen Sie einem Server, vorzugsweise mit HTTP über TLS, eine öffentliche URL bereit, die 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-----"
    } ]
    }