Wi-Fi operatora to funkcja automatycznego łączenia (używająca szyfrowanego IMSI) dostępna w Android 9 lub nowszy który pozwala urządzeniom automatycznie łączyć się z sieciami Wi-Fi udostępnianymi przez operatora. sieci. w obszarach z dużym ruchem lub minimalnym zasięgiem sieci komórkowych, takich jak na stadionie lub stacji metra, może użyć sieci Wi-Fi operatora użytkowników połączenia i zmniejszać obciążenie ruchu.
Urządzenia z funkcją Wi-Fi operatora automatycznie łączą się z skonfigurowane sieci Wi-Fi operatora (sieci z certyfikatem klucza publicznego). Kiedy użytkownik ręcznie odłączy się od sieci Wi-Fi operatora, zablokowany przez 24 godziny (brak automatycznego połączenia). Użytkownicy mogą ręcznie łączyć się z z czarnej listy.
Na urządzeniach z Androidem 9 lub nowszym z zaimplementowanym modułem Wi-Fi operatora automatyczne połączenie przez Wi-Fi operatora jest domyślnie wyłączone. Powiadomienie jest wysyłana do użytkownika, gdy urządzenie próbuje połączyć się z siecią Wi-Fi operatora. po raz pierwszy.
Implementacja
Producenci urządzeń i operatorzy sieci muszą wykonać te czynności, aby zaimplementować operatora Wi-Fi.
Producenci
Na urządzeniach z Androidem 11 lub nowszym użyj Interfejs API sugestii Wi-Fi aby dodać profile Wi-Fi dla każdego operatora.
W przypadku urządzeń z systemem 10 lub starszym dodaj profile Wi-Fi przez
konfigurując parametr carrier_wifi_string_array
dla każdego operatora w
menedżera konfiguracji operatora.
carrier_wifi_string_array
: Tablica ciągu, w której każdy ciąg znaków to identyfikator SSID sieci Wi-Fi zakodowany w standardzie Base64 i typ EAP rozdzielone przecinkiem, gdzie typ EAP jest liczbą całkowitą (patrz Rejestr Extensible Authentication Protocol (EAP)). Na przykład ta konfiguracja dotyczy sieci SOME_SSID_NAME używającej EAP-AKA i Some_Other_SSID za pomocą EAP-SIM:config { key: "carrier_wifi_string_array" text_array { item: "U09NRV9TU0lEX05BTUUK,23" item: "U29tZV9PdGhlcl9TU0lECg==,18" } }
W carrier config Manager, skonfigurować dla każdego operatora te parametry:
imsi_key_availability_int
: Wskazuje, czy klucz używany do szyfrowania IMSI jest dostępny przez sieć WLAN (ustawiony bit 1), EPDG (ustawiony bit 0) lub oba (bit 0 i bit 1) ustaw). Na przykład ta konfiguracja wskazuje, że IMSI szyfrowanie jest dostępne przez WLAN, ale nie w EPDG:config { key: "imsi_key_availability_int" int_value: 2 }
imsi_key_download_url_string
: Adres URL, z którego proto zawiera klucz publiczny operatora użytego do Szyfrowanie IMSI zostało pobrane. Na przykład ta konfiguracja podaje konkretny 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 który umożliwia pobieranie klucza publicznego operatora w sieci sieci komórkowej. Jeśli ta flaga nie jest ustawiona, nowe urządzenie bez Wi-Fi połączenie nie może połączyć się z siecią Wi-Fi operatora, ponieważ nie będzie mieć możliwości pobrania klucza.config { key: "allow_metered_network_for_cert_download_bool" bool_value: true }
Operatorzy
Aby można było wdrożyć Wi-Fi operatora, operator musi włączyć ochronę prywatności IMSI oraz i udostępnić im klucz publiczny.
Ochrona prywatności IMSI
Android chroni poufność stałej tożsamości subskrybenta (IMSI) przy użyciu kryptografii klucza publicznego. Android wdraża łączność bezprzewodową Specyfikacja Alliance (WBA) na potrzeby IMSI Privacy Protection for Wi-Fi. Gdy dla połączenia włączona jest ochrona prywatności IMSI, trwałe informacje o tożsamości subskrybentów nie są przesyłane 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>
. - Prefiks metody EAP to pojedynczy oktet definiujący metodę EAP, która jest
używane do uwierzytelniania:
0
: EAP1
: karta EAP-SIM6
: „EAP-AKA”
- Format obszaru NAI to
wlan.mncXXX.mccYYY.3gppnetwork.org
, gdzie NumerXXX
jest zastępowany kodem sieci komórkowej (MNC) karty SIM, a numerYYY
– zastąp kodem kraju na urządzenia mobilne (MCK). - Stała tożsamość jest szyfrowana przy użyciu klucza publicznego RSA udostępnionego przez operator sieci komórkowej. Klucz publiczny znajduje się w X.509.
- Schemat szyfrowania to RSAES-OAEP, z SHA-256 jako kryptograficzną funkcją skrótu. Ten schemat szyfrowania gwarantuje unikalny tekst szyfrowania przy każdym użyciu schematu, co pozwala uniknąć ale jeszcze jedną trwałą tożsamość, którą można śledzić.
- Klucz RSA ma 2048 bitów.
- Bufor szyfrowania ma 256 bajtów.
- Tekst szyfru jest zakodowany za pomocą Base64.
- Zaszyfrowana stała długość danych wyjściowych to 344 bajty.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Identyfikator klucza
Identyfikator klucza to opcjonalna para wartości atrybutu dołączana przez operatora
do certyfikatu, który umożliwia serwerowi odnalezienie odpowiedniego klucza prywatnego
uwierzytelnianie. Przykład identyfikatora klucza to
CertificateSerialNumber=123456
Jeśli zostanie podany identyfikator klucza, zostanie on wysłany.
w jasny sposób w ramach procesu uwierzytelniania.
Modyfikacje metod uwierzytelniania EAP opartych na karcie SIM
Gdy w połączeniu jest włączona ochrona prywatności IMSI, system nie wysyła
stałą tożsamość po otrzymaniu dokumentu EAP-Request/Identity
, a nie
odpowiada, używając anonimowego loginu:
SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>
Pole <prefix>
jest opcjonalne. Jeśli operator enable_eap_method_prefix_bool
konfiguracji jest ustawiony na true
, pierwszy znak tożsamości (przed
anonymous
) powiadamia serwer o typie metody EAP użytej przed
Rozpoczyna się wymiana EAP.
0
: EAP1
: karta EAP-SIM6
: „EAP-AKA”
Jeśli konfiguracja operatora ma wartość false
, ten prefiks nie jest uwzględniony w
wiadomość.
W odpowiedzi serwer wysyła komunikat EAP-Request/AKA-Identity
, a następnie
odpowiada w takim 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 informuje serwer, że tożsamości lub typ skonfigurowanej metody EAP:
\0
: zaszyfrowana stała tożsamość0
: EAP1
: karta EAP-SIM6
: „EAP-AKA”
Para wartości atrybutu identyfikatora klucza jest opcjonalna i nie jest dołączana do zakończenia zaszyfrowanej stałej tożsamości, jeśli nie jest używana.
Na tym etapie serwer znajduje klucz prywatny z identyfikatora klucza (jeśli udostępniane), odszyfrowuje zaszyfrowaną tożsamość przy użyciu klucza prywatnego operatora oraz będzie kontynuował zwykły proces EAP.
Po pomyślnym uwierzytelnieniu serwer może udostępnić do szybkiego ponownego uwierzytelniania lub tymczasowej tożsamości (pseudonim) używane w kolejnych połączeniach. Jeśli nie zostaną udostępnione żadne tożsamości tymczasowe system wysyła zaszyfrowaną tożsamość przy kolejnym połączeniu.
Pobieranie, wygaśnięcie i unieważnianie certyfikatów operatora
Jeśli w systemie nie jest zainstalowany żaden certyfikat, system używa protokołu
Adres URL podany w konfiguracji operatora imsi_key_download_url_string
do
pobierz certyfikat za pomocą metody HTTP GET. System wykorzystuje komórkową transmisję danych
tylko wtedy, gdy operator allow_metered_network_for_cert_download_bool
Wartość konfiguracji to true
. W przeciwnym razie system pobierze certyfikat
tylko wtedy, gdy dostępne jest połączenie Wi-Fi.
Wygaśnięcie certyfikatu jest wymuszane przez system. System próbuje do odnawiania certyfikatów na 21 dni przed datą wygaśnięcia certyfikatu oraz korzysta ten sam adres URL, aby pobrać nowy certyfikat.
Jeśli serwer nie może 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
EAP-Request/AKA-Notification
wiadomość z kodem AT_NOTIFICATION
Certificate Replacement Required
(16385), aby zakończyć wymianę EAP.
W odpowiedzi system stosuje heurystykę wewnętrzną, aby określić, czy
usuń certyfikat i spróbuj pobrać nowy certyfikat z tego samego
Adres URL.
Podaj klucz publiczny
Podaj publiczny adres URL serwera, który hostuje certyfikat przewoźnika, jeśli:
- Klucz publiczny i datę ważności można wyodrębnić z certyfikatu.
Informacje z serwera mają następujący format JSON:
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 znajdziesz 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-----" } ] }