Wi-Fi operatora

Carrier Wi-Fi to funkcja automatycznego łączenia (przy użyciu szyfrowanego IMSI) dostępna w systemie Android 9 i nowszych wersjach, która umożliwia urządzeniom automatyczne łączenie się z sieciami Wi-Fi obsługiwanymi przez operatora. W obszarach o dużym natężeniu ruchu lub przy minimalnym zasięgu sieci komórkowej, takich jak stadion lub stacja metra, można wykorzystać Wi-Fi operatora, aby poprawić jakość łączności użytkowników i odciążyć ruch.

Urządzenia wyposażone w funkcję Wi-Fi operatora automatycznie łączą się ze skonfigurowanymi sieciami Wi-Fi operatora (sieciami z certyfikatem klucza publicznego). Gdy użytkownik ręcznie rozłączy się z siecią Wi-Fi operatora, sieć zostanie umieszczona na czarnej liście na 24 godziny (bez automatycznego połączenia). Użytkownicy mogą w dowolnym momencie ręcznie połączyć się z sieciami znajdującymi się na czarnej liście.

Na urządzeniach z systemem Android 9 lub nowszym i wdrożoną siecią Wi-Fi operatora automatyczne połączenie przez sieć Wi-Fi operatora jest domyślnie wyłączone. Gdy urządzenie po raz pierwszy spróbuje połączyć się z siecią Wi-Fi operatora, do użytkownika zostanie wysłane powiadomienie.

Realizacja

Producenci urządzeń i operatorzy muszą wykonać następujące czynności, aby wdrożyć Wi-Fi operatora.

Producenci

W przypadku urządzeń z systemem Android 11 lub nowszym użyj interfejsu API sugestii Wi-Fi , aby dodać profile Wi-Fi dla każdego operatora.

W przypadku urządzeń z wersją 10 lub starszą dodaj profile Wi-Fi, konfigurując carrier_wifi_string_array dla każdego operatora w menedżerze konfiguracji operatora .

  • carrier_wifi_string_array : Tablica ciągów, w której każdy wpis ciągu jest identyfikatorem SSID Wi-Fi zakodowanym w formacie Base64 i typem EAP oddzielonymi przecinkami, gdzie typ EAP jest liczbą całkowitą (więcej informacji można znaleźć w sekcji Rejestr protokołu Extensible Authentication Protocol (EAP ). Na przykład poniższa konfiguracja dotyczy SOME_SSID_NAME korzystającego z protokołu EAP-AKA i Some_Other_SSID korzystającego z protokołu EAP-SIM :

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

W menedżerze konfiguracji operatora skonfiguruj następujące parametry dla każdego operatora:

  • imsi_key_availability_int : Określa, czy klucz używany do szyfrowania IMSI jest dostępny dla sieci WLAN (ustawiony bit 1), EPDG (ustawiony bit 0) lub obu (ustawiony jest zarówno bit 0, jak i bit 1). Na przykład poniższa konfiguracja wskazuje, że szyfrowanie IMSI jest dostępne dla sieci WLAN, ale nie dla EPDG:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string : Adres URL, z którego pobierane jest proto zawierające klucz publiczny nośnika używany do szyfrowania IMSI. Na przykład poniższa konfiguracja zapewnia określony adres URL:

    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 : Flaga wskazująca, czy zezwolić na pobieranie klucza publicznego operatora przez sieć pomiarową (komórkową). Jeśli ta flaga nie jest ustawiona, nowe urządzenie bez łączności Wi-Fi nie będzie mogło połączyć się z siecią Wi-Fi Operatora, ponieważ nie będzie mogło pobrać klucza.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

Przewoźnicy

Aby wdrożyć Wi-Fi operatora, musi on włączyć ochronę prywatności IMSI i udostępnić klucz publiczny.

Ochrona prywatności IMSI

Android chroni poufność stałej tożsamości abonenta (IMSI) za pomocą kryptografii klucza publicznego. W systemie Android wdrożono specyfikację Wireless Broadband Alliance (WBA) dotyczącą ochrony prywatności IMSI dla sieci Wi-Fi . Gdy dla połączenia włączona jest ochrona prywatności IMSI, stała tożsamość abonenta nie jest przesyłana bezprzewodowo.

Trwałe szyfrowanie tożsamości

Format zaszyfrowanej stałej tożsamości jest następujący:

  • Stała tożsamość ma format <EAP-Method><IMSI>@<NAI realm> .
  • Przedrostek metody EAP to pojedynczy oktet definiujący metodę EAP używaną do uwierzytelniania:
    • 0 : EAP-AKA
    • 1 : EAP-SIM
    • 6 : EAP-AKA”
  • Format dziedziny NAI to wlan.mnc XXX .mcc YYY .3gppnetwork.org , gdzie XXX zastępuje się kodem sieci komórkowej karty SIM (MNC), a YYY zastępuje się kodem kraju telefonu komórkowego (MCC).
  • Stała tożsamość jest szyfrowana przy użyciu klucza publicznego RSA dostarczonego przez operatora. Klucz publiczny jest zawarty w certyfikacie X.509 .
  • Schemat szyfrowania to RSAES-OAEP z SHA-256 jako kryptograficzną funkcją skrótu. Ten schemat szyfrowania gwarantuje unikalny tekst zaszyfrowany za każdym razem, gdy jest używany, unikając w ten sposób kolejnej trwałej tożsamości, którą można śledzić.
  • Długość klucza RSA wynosi 2048 bitów.
  • Bufor szyfrowania ma wielkość 256 bajtów.
  • Tekst zaszyfrowany jest kodowany algorytmem Base64 .
  • Wyjściowa zaszyfrowana trwała długość tożsamości wynosi 344 bajty.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Identyfikator klucza

Identyfikator klucza to opcjonalna para wartości atrybutów, którą przewoźnik dołącza do certyfikatu, aby umożliwić serwerowi zlokalizowanie odpowiedniego klucza prywatnego podczas uwierzytelniania. Przykładowym identyfikatorem klucza jest CertificateSerialNumber=123456 . Jeśli podano identyfikator klucza, jest on wysyłany jawnie w ramach procesu uwierzytelniania.

Modyfikacje metod uwierzytelniania EAP opartych na karcie SIM

Gdy na połączeniu włączona jest ochrona prywatności IMSI, system nie wysyła stałej tożsamości po otrzymaniu EAP-Request/Identity , zamiast tego odpowiada anonimowym loginem:

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

<prefix> jest opcjonalny. Jeśli konfiguracja operatora enable_eap_method_prefix_bool jest ustawiona na true , pierwszy znak tożsamości (przed anonymous ) powiadamia serwer o typie zastosowanej metody EAP przed rozpoczęciem wymiany EAP.

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

Jeśli konfiguracja operatora jest ustawiona na false , ten prefiks nie jest uwzględniany w wiadomości.

W odpowiedzi serwer wysyła komunikat EAP-Request/AKA-Identity , a system odpowiada w następującym formacie:

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

Pierwszy znak tożsamości powiadamia serwer o tym, że używana jest zaszyfrowana tożsamość lub o skonfigurowanym typie metody EAP:

  • \0 : Zaszyfrowana trwała tożsamość
  • 0 : EAP-AKA
  • 1 : EAP-SIM
  • 6 : EAP-AKA”

Para wartości atrybutu identyfikatora klucza jest opcjonalna i nie jest dołączana na końcu zaszyfrowanej trwałej tożsamości, jeśli nie jest używana.

W tym momencie serwer lokalizuje klucz prywatny na podstawie identyfikatora klucza (jeśli został podany), odszyfrowuje zaszyfrowaną tożsamość przy użyciu klucza prywatnego operatora i kontynuuje normalny przepływ EAP.

Po pomyślnym uwierzytelnieniu serwer może udostępnić tożsamość szybkiego ponownego uwierzytelnienia lub tożsamość tymczasową (pseudonim), która będzie wykorzystywana w kolejnych połączeniach. Jeżeli serwer nie podał żadnych tymczasowych tożsamości, system przesyła zaszyfrowaną tożsamość w kolejnym połączeniu.

Odzyskiwanie, wygaśnięcie i unieważnienie certyfikatu przewoźnika

W przypadku, gdy w systemie nie jest zainstalowany żaden certyfikat, system wykorzystuje adres URL podany w konfiguracji operatora imsi_key_download_url_string w celu pobrania certyfikatu metodą HTTP GET. System korzysta z danych komórkowych tylko wtedy, gdy konfiguracja operatora allow_metered_network_for_cert_download_bool jest ustawiona na true . W przeciwnym razie system pobierze certyfikat tylko wtedy, gdy dostępne będzie połączenie Wi-Fi.

Wygaśnięcie certyfikatu jest wymuszane przez system. System rozpoczyna próbę odnowienia certyfikatów 21 dni przed datą wygaśnięcia certyfikatu i używa tego samego adresu URL do pobrania nowego certyfikatu.

W przypadku, gdy serwer nie jest w stanie odszyfrować zaszyfrowanej tożsamości, wysyła wiadomość EAP-Request/AKA-Notification z kodem AT_NOTIFICATION General Failure (16384), aby zakończyć wymianę EAP.

W przypadku unieważnienia lub wygaśnięcia certyfikatu serwer wysyła wiadomość EAP-Request/AKA-Notification z kodem AT_NOTIFICATION Certificate Replacement Required (16385), aby zakończyć wymianę EAP. W odpowiedzi system stosuje wewnętrzną heurystykę, aby określić, czy usunąć certyfikat i podjąć próbę pobrania nowego certyfikatu z tego samego adresu URL.

Podanie klucza publicznego

Podaj publiczny adres URL serwera, najlepiej przy użyciu protokołu HTTP przez TLS, na którym znajduje się certyfikat przewoźnika, gdzie:

  1. Z certyfikatu można wyodrębnić klucz publiczny i datę ważności.
  2. Informacje z serwera są w formacie JSON w następujący sposób:

    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.
    

    Poniżej znajduje się przykład klucza publicznego.

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