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 operator. Di area dengan kepadatan tinggi atau dengan jangkauan seluler minimal seperti stadion atau stasiun kereta bawah tanah, Wi-Fi operator dapat digunakan untuk meningkatkan pengalaman konektivitas pengguna dan untuk menurunkan beban lalu lintas.

Perangkat dengan fitur Wi-Fi operator secara otomatis terhubung ke jaringan Wi-Fi operator yang dikonfigurasi (jaringan dengan sertifikat kunci publik). Saat pengguna memutuskan sambungan secara manual dari jaringan Wi-Fi operator, jaringan akan masuk daftar hitam selama 24 jam (tidak ada sambungan otomatis). Pengguna dapat terhubung secara manual ke jaringan yang masuk daftar hitam kapan saja.

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

Penerapan

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

Produsen

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

Untuk perangkat yang menjalankan 10 atau lebih rendah, tambahkan profil Wi-Fi dengan mengonfigurasi parameter carrier_wifi_string_array untuk setiap operator di pengelola konfigurasi operator .

  • carrier_wifi_string_array : Array string di mana setiap entri string adalah SSID Wi-Fi berkode Base64 dan tipe EAP yang dipisahkan oleh koma, di mana tipe EAP adalah integer (lihat Extensible Authentication Protocol (EAP) Registry ). Misalnya, konfigurasi berikut 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 , konfigurasikan 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 dari mana proto yang berisi kunci publik dari operator yang digunakan untuk enkripsi IMSI diunduh. 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/"
    }
    
  • allow_metered_network_for_cert_download_bool : Bendera yang menunjukkan apakah akan mengizinkan pengunduhan kunci publik operator melalui jaringan terukur (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 mengunduh 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 . Ketika perlindungan privasi IMSI diaktifkan untuk koneksi, identitas pelanggan permanen tidak ditransmisikan secara clear over the air.

Enkripsi identitas permanen

Format identitas tetap terenkripsi adalah sebagai berikut:

  • Identitas permanen dalam format <EAP-Method><IMSI>@<NAI realm> .
  • Awalan Metode EAP adalah oktet tunggal yang mendefinisikan metode EAP yang digunakan untuk autentikasi:
    • 0 : EAP-AKA
    • 1 : EAP-SIM
    • 6 : EAP-AKA'
  • Format ranah NAI adalah wlan.mnc XXX .mcc YYY .3gppnetwork.org di mana 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 enkripsi adalah RSAES-OAEP dengan SHA-256 sebagai fungsi hash kriptografi. 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 sandi dikodekan dengan Base64 .
  • Panjang identitas permanen terenkripsi keluaran adalah 344 byte.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Pengidentifikasi kunci

Pengidentifikasi kunci adalah pasangan nilai atribut opsional yang dilampirkan operator ke sertifikat untuk memungkinkan server menemukan kunci pribadi yang tepat selama otentikasi. Contoh pengidentifikasi kunci adalah CertificateSerialNumber=123456 . Jika pengidentifikasi kunci diberikan, pengidentifikasi tersebut akan dikirim dengan jelas sebagai bagian dari proses autentikasi.

Modifikasi metode otentikasi EAP berbasis SIM

Ketika perlindungan privasi IMSI diaktifkan pada koneksi, sistem tidak mengirim 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> adalah opsional. Jika konfigurasi 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 disertakan dalam pesan.

Sebagai tanggapan, 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 pengidentifikasi kunci adalah opsional dan tidak ditambahkan ke akhir identitas permanen terenkripsi jika tidak digunakan.

Pada titik ini, server menemukan kunci privat dari pengidentifikasi kunci (jika disediakan), mendekripsi identitas terenkripsi menggunakan kunci privat operator, dan melanjutkan aliran EAP normal.

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

Pengambilan, kedaluwarsa, dan pencabutan sertifikat pembawa

Jika tidak ada sertifikat yang dipasang di sistem, sistem menggunakan URL yang disediakan dalam konfigurasi operator imsi_key_download_url_string untuk mengunduh 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 mengunduh sertifikat hanya jika koneksi Wi-Fi tersedia.

Kedaluwarsa sertifikat diberlakukan oleh sistem. Sistem mulai mencoba memperbarui sertifikat 21 hari sebelum tanggal kedaluwarsa sertifikat, dan menggunakan URL yang sama untuk mengunduh sertifikat baru.

Jika server tidak dapat mendekripsi identitas terenkripsi, server mengirimkan pesan EAP-Request/AKA-Notification dengan kode AT_NOTIFICATION General Failure (16384) untuk menghentikan pertukaran EAP.

Dalam kasus di mana sertifikat dicabut atau kedaluwarsa, server mengirimkan pesan EAP-Request/AKA-Notification dengan kode AT_NOTIFICATION Certificate Replacement Required (16385) untuk menghentikan pertukaran EAP. Sebagai tanggapan, sistem menerapkan heuristik internal untuk menentukan apakah akan menghapus sertifikat dan mencoba mengunduh sertifikat baru dari URL yang sama.

Menyediakan kunci publik

Berikan URL publik ke server, sebaiknya menggunakan HTTP melalui TLS, yang menghosting sertifikat operator di mana:

  1. Kunci publik dan kedaluwarsa dapat diekstraksi 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 ini 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-----"
    } ]
    }