Wi-Fi Operator

Wi-Fi operator adalah fitur koneksi otomatis (menggunakan IMSI terenkripsi) yang tersedia di Android 9 dan yang lebih baru yang memungkinkan perangkat terhubung secara otomatis ke Wi-Fi yang diterapkan operator jaringan. Di area dengan kemacetan tinggi atau dengan cakupan sel yang minimal seperti stadion atau stasiun kereta bawah tanah, Wi-Fi operator dapat digunakan untuk meningkatkan pengguna konektivitas dan untuk melimpahkan lalu lintas data.

Perangkat yang memiliki fitur Wi-Fi operator akan otomatis terhubung ke jaringan Wi-Fi operator yang dikonfigurasi (jaringan dengan public key certificate). Kapan pengguna memutuskan secara manual dari jaringan Wi-Fi operator, jaringan masuk daftar hitam selama 24 jam (tidak ada sambungan otomatis). Pengguna dapat terhubung secara manual ke jaringan yang ada dalam daftar hitam.

Pada perangkat yang menjalankan Android 9 atau yang lebih tinggi dengan implementasi Wi-Fi operator, koneksi otomatis melalui Wi-Fi operator dinonaktifkan secara default. Notifikasi dikirim ke pengguna saat perangkat mencoba terhubung ke Wi-Fi operator jaringan untuk pertama kalinya.

Implementasi

Produsen dan operator perangkat harus melakukan hal berikut untuk menerapkan operator Wi-Fi.

Produsen

Untuk perangkat yang menjalankan Android 11 dan yang lebih baru, gunakan API saran Wi-Fi menambahkan profil Wi-Fi untuk setiap operator.

Untuk perangkat yang menjalankan 10 atau lebih rendah, tambahkan profil Wi-Fi paling lambat 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, di mana jenis EAP adalah 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 yang menggunakan EAP-SIM:

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

Di kolom operator konfigurasi operator, konfigurasikan parameter berikut untuk setiap ekspedisi:

  • imsi_key_availability_int: Mengidentifikasi apakah kunci yang digunakan untuk enkripsi IMSI tersedia untuk WLAN (bit 1 diatur), EPDG (bit 0 diatur), atau keduanya (keduanya ditetapkan). Misalnya, konfigurasi berikut menunjukkan bahwa IMSI enkripsi tersedia untuk WLAN namun 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 telah didownload. Misalnya, konfigurasi berikut menyediakan URL spesifik:

    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 untuk memungkinkan download kunci publik operator melalui (seluler). Jika tanda ini tidak ditetapkan, berarti perangkat baru tanpa Wi-Fi konektivitas tidak dapat terhubung ke jaringan Wi-Fi Operator karena akses itu tidak akan diizinkan untuk mengunduh kuncinya.

    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 mengimplementasikan {i>Wireless Broadband<i} Spesifikasi Alliance (WBA) untuk IMSI Privacy Protection for Wi-Fi. Jika perlindungan privasi IMSI diaktifkan untuk koneksi, identitas pelanggan tidak dikirimkan secara terbuka melalui udara.

Enkripsi identitas permanen

Format identitas permanen terenkripsi adalah sebagai berikut:

  • Identitas permanen memiliki format <EAP-Method><IMSI>@<NAI realm>.
  • Awalan Metode EAP adalah oktet tunggal yang mendefinisikan metode EAP yang digunakan untuk otentikasi:
    • 0: EAP-AKA
    • 1: EAP-SIM
    • 6: EAP-AKA
  • Format realm NAI adalah wlan.mncXXX.mccYYY.3gppnetwork.org di mana XXX diganti dengan kode jaringan seluler (MNC) kartu SIM dan YYY adalah diganti dengan kode negara seluler (MCC).
  • Identitas permanen dienkripsi menggunakan kunci publik RSA yang disediakan oleh operator. Kunci publik disertakan dalam sebuah X.509.
  • Skema enkripsinya adalah RSAES-OAEP SHA-256 sebagai fungsi kriptografi {i>hash<i}. Skema enkripsi ini menjamin teks penyandian yang unik setiap kali skema itu digunakan, sehingga menghindari satu lagi identitas persisten yang dapat dilacak.
  • Panjang kunci RSA adalah 2048 bit.
  • Buffer enkripsi adalah 256 byte.
  • Teks tersandi{i> <i}dikodekan 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 dipasang oleh operator ke sertifikat untuk memungkinkan server menemukan kunci pribadi yang tepat selama autentikasi. Contoh ID kunci adalah CertificateSerialNumber=123456. Jika ID kunci tersedia, ID tersebut akan dikirim di proses otentikasi sebagai bagian dari proses otentikasi.

Modifikasi pada metode autentikasi EAP berbasis SIM

Jika perlindungan privasi IMSI diaktifkan di koneksi, sistem tidak akan mengirim identitas permanen setelah menerima EAP-Request/Identity, bukan merespons dengan login anonim:

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

<prefix> bersifat opsional. Jika operator enable_eap_method_prefix_bool disetel ke true, karakter pertama dari identitas (sebelum anonymous) 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 disetel ke false, awalan ini tidak akan disertakan dalam menulis pesan.

Sebagai respons, server akan 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 dari identitas memberi tahu server bahwa alamat email 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.

Di tahap ini, server menemukan kunci pribadi dari pengidentifikasi kunci (jika disediakan), membongkar enkripsi identitas terenkripsi menggunakan kunci pribadi operator, dan melanjutkan alur EAP normal.

Setelah otentikasi berhasil, server dapat memberikan identitas otentikasi ulang cepat atau identitas sementara (pseudonim), yang yang digunakan di koneksi berikutnya. Jika tidak ada identitas sementara yang disediakan oleh server, sistem akan mengirimkan identitas terenkripsi di koneksi berikutnya.

Pengambilan, masa berlaku, dan pencabutan sertifikat operator

Jika tidak ada sertifikat yang diinstal dalam sistem, sistem akan menggunakan URL yang disediakan di konfigurasi operator imsi_key_download_url_string untuk mendownload sertifikat menggunakan metode GET HTTP. Sistem menggunakan data seluler hanya jika operator allow_metered_network_for_cert_download_bool konfigurasi disetel ke true. Jika tidak, sistem akan mendownload sertifikat hanya saat koneksi Wi-Fi tersedia.

Akhir masa berlaku sertifikat diberlakukan oleh sistem. Sistem mulai mencoba memperpanjang sertifikat 21 hari sebelum tanggal habis masa berlaku sertifikat, dan menggunakan URL yang sama untuk mengunduh 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 habis masa berlakunya, server akan mengirimkan 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 mengunduh sertifikat baru dari .

Berikan kunci publik

Sediakan URL publik ke server, sebaiknya gunakan HTTP daripada TLS, yang menghosting sertifikat ekspedisi jika:

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