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 dengan kepadatan tinggi atau dengan cakupan seluler minimal seperti stadion atau stasiun kereta bawah tanah, Wi-Fi operator dapat digunakan untuk meningkatkan pengalaman konektivitas pengguna dan mengalihkan traffic.
Perangkat dengan fitur Wi-Fi operator akan otomatis terhubung ke jaringan Wi-Fi operator yang dikonfigurasi (jaringan dengan sertifikat kunci publik). Jika pengguna memutus sambungan dari jaringan Wi-Fi operator secara manual, jaringan tersebut akan masuk daftar hitam selama 24 jam (tidak ada koneksi otomatis). Pengguna dapat terhubung secara manual ke jaringan yang masuk daftar hitam 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 berenkode Base64 dan jenis EAP yang dipisahkan dengan koma, dengan jenis EAP adalah bilangan bulat (lihat Extensible Authentication Protocol (EAP) Registry). 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 disetel), EPDG (bit 0 disetel), atau keduanya (bit 0 dan bit 1 disetel). 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 disetel, perangkat baru tanpa konektivitas Wi-Fi tidak akan dapat terhubung ke jaringan Wi-Fi Operator karena 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 memberikan 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 tetap tidak dikirimkan secara jelas melalui jaringan nirkabel.
Enkripsi identitas permanen
Format identitas permanen terenkripsi adalah sebagai berikut:
- Identitas permanen menggunakan format
<EAP-Method><IMSI>@<NAI realm>
. - Awalan EAP-Method adalah satu oktet 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 enkripsi adalah RSAES-OAEP dengan SHA-256 sebagai fungsi hash kriptografis. Skema enkripsi ini menjamin teks sandi yang unik setiap kali skema digunakan, sehingga menghindari identitas persisten lain 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 operator
ke sertifikat untuk memungkinkan server menemukan kunci pribadi yang tepat selama
autentikasi. Contoh ID utama adalah
CertificateSerialNumber=123456
. Jika ID kunci diberikan, ID tersebut dikirim
tanpa dienkripsi sebagai bagian dari proses autentikasi.
Modifikasi pada metode autentikasi EAP berbasis SIM
Jika perlindungan privasi IMSI diaktifkan pada koneksi, sistem tidak akan mengirimkan
identitas permanen setelah menerima EAP-Request/Identity
, melainkan
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
disetel 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 menemukan kunci pribadi dari ID kunci (jika diberikan), mendekripsi identitas terenkripsi menggunakan kunci pribadi operator, dan melanjutkan alur EAP normal.
Setelah autentikasi berhasil, server dapat memberikan identitas autentikasi ulang 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 diberikan dalam konfigurasi operator imsi_key_download_url_string
untuk
mendownload sertifikat menggunakan metode HTTP GET. Sistem menggunakan data seluler hanya jika konfigurasi operator allow_metered_network_for_cert_download_bool
disetel ke true
. Jika tidak, sistem akan mendownload sertifikat
hanya jika 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, server akan mengirimkan pesan EAP-Request/AKA-Notification
dengan kode AT_NOTIFICATION
Certificate Replacement Required
(16385) untuk mengakhiri 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 tempat:
- 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-----" } ] }