Wi-Fi Operator

Wi-Fi operator adalah fitur koneksi otomatis (menggunakan IMSI terenkripsi) yang tersedia di Android 9 dan lebih tinggi yang memungkinkan perangkat terhubung secara otomatis ke jaringan Wi-Fi yang diterapkan oleh 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 yang memiliki fitur Wi-Fi operator akan otomatis terhubung ke jaringan Wi-Fi operator yang dikonfigurasi (jaringan dengan public key certificate). 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 yang 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 operator 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-AKA
    • 1: EAP-SIM
    • 6: EAP-AKA'
  • Format realm NAI adalah wlan.mncXXX.mccYYY.3gppnetwork.org dengan XXX diganti dengan kode jaringan seluler (MNC) kartu SIM dan YYY 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 tersebut 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 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 di koneksi, sistem tidak akan mengirimkan identitas 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-AKA
  • 1: EAP-SIM
  • 6: 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 terenkripsi
  • 0: EAP-AKA
  • 1: EAP-SIM
  • 6: 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 menggunakan data seluler hanya 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 gunakan HTTP daripada TLS, yang menghosting sertifikat operator dengan:

  1. Kunci publik dan masa berlaku dapat diekstrak dari sertifikat.
  2. 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-----"
    } ]
    }