Wi-Fi Operator adalah fitur koneksi otomatis (menggunakan IMSI terenkripsi) yang tersedia di Android 9 dan yang lebih tinggi yang memungkinkan perangkat terhubung secara otomatis ke jaringan Wi-Fi yang diterapkan operator. Di area yang padat atau dengan cakupan sel minimal seperti stadion atau stasiun kereta bawah tanah, Wi-Fi operator dapat digunakan untuk meningkatkan pengalaman konektivitas pengguna dan untuk mengurangi traffic.
Perangkat dengan fitur Wi-Fi operator akan otomatis terhubung ke jaringan Wi-Fi operator yang dikonfigurasi (jaringan dengan sertifikat kunci publik). Saat pengguna memutuskan koneksi secara manual dari jaringan Wi-Fi operator, jaringan tersebut akan masuk daftar hitam selama 24 jam (tidak ada koneksi otomatis). Pengguna dapat terhubung secara manual ke jaringan yang diblokir kapan saja.
Implementasi
Produsen perangkat dan operator harus melakukan hal berikut untuk menerapkan Wi-Fi operator.
Produsen
Untuk perangkat yang menjalankan Android 11 dan yang lebih tinggi, gunakan Wi-Fi suggestion API untuk menambahkan profil Wi-Fi untuk setiap operator.
Untuk perangkat yang menjalankan Android 10 atau yang lebih lama, tambahkan profil Wi-Fi dengan
mengonfigurasi parameter carrier_wifi_string_array
untuk setiap operator di
pengelola konfigurasi operator.
carrier_wifi_string_array
: Array string dengan setiap entri string adalah SSID Wi-Fi yang dienkode Base64 dan jenis EAP yang dipisahkan koma, dengan jenis EAP berupa bilangan bulat (lihat Registry Protokol Autentikasi yang Dapat Diperluas (EAP)). Misalnya, konfigurasi berikut adalah untuk SOME_SSID_NAME menggunakan EAP-AKA dan Some_Other_SSID menggunakan EAP-SIM:config { key: "carrier_wifi_string_array" text_array { item: "U09NRV9TU0lEX05BTUUK,23" item: "U29tZV9PdGhlcl9TU0lECg==,18" } }
Di pengelola konfigurasi operator, konfigurasi parameter berikut untuk setiap operator:
imsi_key_availability_int
: Mengidentifikasi apakah kunci yang digunakan untuk enkripsi IMSI tersedia untuk WLAN (bit 1 ditetapkan), EPDG (bit 0 ditetapkan), atau keduanya (bit 0 dan bit 1 ditetapkan). Misalnya, konfigurasi berikut menunjukkan bahwa enkripsi IMSI tersedia untuk WLAN, tetapi tidak untuk EPDG:config { key: "imsi_key_availability_int" int_value: 2 }
imsi_key_download_url_string
: URL tempat proto yang berisi kunci publik operator yang digunakan untuk enkripsi IMSI didownload. Misalnya, konfigurasi berikut menyediakan URL tertentu: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
: Flag yang menunjukkan apakah akan mengizinkan download kunci publik operator melalui jaringan berbayar (seluler). Jika tanda ini tidak ditetapkan, perangkat baru tanpa konektivitas Wi-Fi tidak akan dapat terhubung ke jaringan Wi-Fi Operator karena perangkat tidak akan diizinkan untuk mendownload kunci.config { key: "allow_metered_network_for_cert_download_bool" bool_value: true }
Operator
Untuk menerapkan Wi-Fi operator, operator harus mengaktifkan perlindungan privasi IMSI dan menyediakan kunci publik.
Perlindungan privasi IMSI
Android melindungi kerahasiaan identitas permanen pelanggan (IMSI) menggunakan kriptografi kunci publik. Android menerapkan spesifikasi Wireless Broadband Alliance (WBA) untuk Perlindungan Privasi IMSI untuk Wi-Fi. Jika perlindungan privasi IMSI diaktifkan untuk koneksi, identitas pelanggan permanen tidak akan dikirimkan secara jelas melalui udara.
Enkripsi identitas permanen
Format identitas permanen terenkripsi adalah sebagai berikut:
- Identitas permanen menggunakan format
<EAP-Method><IMSI>@<NAI realm>
. - Awalan EAP-Method adalah octet tunggal yang menentukan metode EAP yang
digunakan untuk autentikasi:
0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA'
- Format realm NAI adalah
wlan.mncXXX.mccYYY.3gppnetwork.org
denganXXX
diganti dengan kode jaringan seluler (MNC) kartu SIM danYYY
diganti dengan kode negara seluler (MCC). - Identitas permanen dienkripsi menggunakan kunci publik RSA yang disediakan oleh operator. Kunci publik disertakan dalam sertifikat X.509.
- Skema enkripsinya adalah RSAES-OAEP dengan SHA-256 sebagai fungsi hash kriptografis. Skema enkripsi ini menjamin ciphertext unik setiap kali skema digunakan, sehingga menghindari identitas persisten lainnya yang dapat dilacak.
- Panjang kunci RSA adalah 2048 bit.
- Buffer enkripsi adalah 256 byte.
- Teks cipher dienkode dengan Base64.
- Panjang identitas permanen terenkripsi output adalah 344 byte.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
ID kunci
ID kunci adalah pasangan nilai atribut opsional yang dilampirkan
oleh operator ke sertifikat untuk memungkinkan server menemukan kunci pribadi yang tepat selama
autentikasi. Contoh ID kunci adalah
CertificateSerialNumber=123456
. Jika disediakan, ID kunci akan dikirim
secara jelas sebagai bagian dari proses autentikasi.
Modifikasi pada metode autentikasi EAP berbasis SIM
Jika perlindungan privasi IMSI diaktifkan pada koneksi, sistem tidak akan mengirim
ID permanen setelah menerima EAP-Request/Identity
, tetapi
akan merespons dengan login anonim:
SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>
<prefix>
bersifat opsional. Jika konfigurasi operator
enable_eap_method_prefix_bool
ditetapkan ke true
, karakter pertama identitas (sebelum
anonymous
) akan memberi tahu server tentang jenis metode EAP yang digunakan sebelum
pertukaran EAP dimulai.
0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA'
Jika konfigurasi operator ditetapkan ke false
, awalan ini tidak disertakan dalam
pesan.
Sebagai respons, server mengirimkan pesan EAP-Request/AKA-Identity
dan
sistem merespons dalam format berikut:
SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"
Karakter pertama identitas memberi tahu server bahwa identitas terenkripsi digunakan, atau jenis metode EAP yang dikonfigurasi:
\0
: Identitas permanen terenkripsi0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA'
Pasangan nilai atribut ID kunci bersifat opsional dan tidak ditambahkan ke akhir identitas permanen terenkripsi jika tidak digunakan.
Pada tahap ini, server akan menemukan kunci pribadi dari ID kunci (jika disediakan), mendekripsi identitas terenkripsi menggunakan kunci pribadi operator, dan melanjutkan alur EAP normal.
Setelah autentikasi berhasil, server dapat memberikan identitas autentikasi ulang yang cepat atau identitas sementara (pseudonim), yang digunakan dalam koneksi berikutnya. Jika tidak ada identitas sementara yang diberikan oleh server, sistem akan mengirimkan identitas terenkripsi dalam koneksi berikutnya.
Pengambilan, masa berlaku, dan pencabutan sertifikat operator
Jika tidak ada sertifikat yang diinstal di sistem, sistem akan menggunakan
URL yang disediakan dalam konfigurasi operator imsi_key_download_url_string
untuk
mendownload sertifikat menggunakan metode HTTP GET. Sistem hanya menggunakan data seluler
jika konfigurasi operator
allow_metered_network_for_cert_download_bool
disetel ke true
. Jika tidak, sistem hanya akan mendownload sertifikat
saat koneksi Wi-Fi tersedia.
Masa berlaku sertifikat diterapkan oleh sistem. Sistem mulai mencoba memperpanjang sertifikat 21 hari sebelum tanggal habis masa berlaku sertifikat, dan menggunakan URL yang sama untuk mendownload sertifikat baru.
Jika server tidak dapat mendekripsi identitas terenkripsi, server
akan mengirim pesan EAP-Request/AKA-Notification
dengan kode AT_NOTIFICATION
General Failure
(16384) untuk menghentikan pertukaran EAP.
Jika sertifikat dicabut atau sudah tidak berlaku lagi, server akan mengirim
pesan EAP-Request/AKA-Notification
dengan kode AT_NOTIFICATION
Certificate Replacement Required
(16385) untuk menghentikan pertukaran EAP.
Sebagai respons, sistem menerapkan heuristik internal untuk menentukan apakah akan
menghapus sertifikat dan mencoba mendownload sertifikat baru dari URL
yang sama.
Berikan kunci publik
Berikan URL publik ke server, sebaiknya menggunakan HTTP melalui TLS, yang menghosting sertifikat operator dengan:
- Kunci publik dan masa berlaku dapat diekstrak dari sertifikat.
Informasi dari server dalam format JSON sebagai berikut:
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.
Berikut adalah contoh kunci publik.
{ "carrier-keys" : [ { "key-identifier" : "CertificateSerialNumber=5xxe06d4", "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----" } ] }