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 kemacetan tinggi atau dengan jangkauan seluler minimal seperti stadion atau stasiun kereta bawah tanah, Wi-Fi operator dapat digunakan untuk meningkatkan pengalaman konektivitas pengguna dan mengurangi 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 tersebut masuk daftar hitam selama 24 jam (tidak ada koneksi otomatis). Pengguna dapat terhubung secara manual ke jaringan yang masuk daftar hitam kapan saja.

Pada perangkat yang menjalankan Android 9 atau lebih tinggi yang menerapkan Wi-Fi operator, koneksi otomatis melalui Wi-Fi operator dinonaktifkan secara default. Pemberitahuan dikirimkan kepada 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 untuk 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 manajer konfigurasi operator .

  • carrier_wifi_string_array : Array string yang setiap entri stringnya adalah SSID Wi-Fi berkode Base64 dan tipe EAP yang dipisahkan dengan koma, dengan tipe EAP adalah bilangan bulat (lihat Registri Extensible Authentication Protocol (EAP) ). 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 manajer 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 diatur), EPDG (bit 0 diatur), atau keduanya (bit 0 dan bit 1 diatur). Misalnya, konfigurasi berikut menunjukkan bahwa enkripsi IMSI 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 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/some_filename.json"
    }
    
  • allow_metered_network_for_cert_download_bool : Sebuah tanda yang menunjukkan apakah akan mengizinkan pengunduhan kunci publik operator melalui jaringan terukur (seluler). Jika tanda ini tidak disetel, perangkat baru yang tidak memiliki konektivitas Wi-Fi tidak akan dapat terhubung ke jaringan Wi-Fi Operator karena tidak diizinkan 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 mengimplementasikan spesifikasi Wireless Broadband Alliance (WBA) untuk Perlindungan Privasi IMSI untuk Wi-Fi . Ketika perlindungan privasi IMSI diaktifkan untuk sambungan, identitas pelanggan permanen tidak dikirimkan secara jelas melalui udara.

Enkripsi identitas permanen

Format identitas permanen 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 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 kriptografinya. Skema enkripsi ini menjamin teks sandi yang unik setiap kali skema tersebut digunakan, sehingga menghindari identitas persisten lainnya 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 oleh operator ke sertifikat untuk memungkinkan server menemukan kunci pribadi yang tepat selama otentikasi. Contoh pengidentifikasi kunci adalah CertificateSerialNumber=123456 . Jika pengidentifikasi kunci diberikan, itu dikirim dengan jelas sebagai bagian dari proses otentikasi.

Modifikasi metode otentikasi EAP berbasis SIM

Ketika perlindungan privasi IMSI diaktifkan pada koneksi, sistem tidak 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> adalah opsional. Jika konfigurasi operator enable_eap_method_prefix_bool diatur ke true , karakter pertama 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 dari 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 bersifat opsional dan tidak ditambahkan ke akhir identitas permanen terenkripsi jika tidak digunakan.

Pada titik ini, server menemukan kunci pribadi dari pengidentifikasi kunci (jika tersedia), mendekripsi identitas terenkripsi menggunakan kunci pribadi 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 diberikan oleh server, sistem mengirimkan identitas terenkripsi pada koneksi berikutnya.

Pengambilan, kedaluwarsa, dan pencabutan sertifikat operator

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 diatur ke true . Jika tidak, sistem hanya mengunduh sertifikat ketika koneksi Wi-Fi tersedia.

Kedaluwarsa sertifikat diberlakukan oleh sistem. Sistem mulai mencoba memperbarui 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 mengirimkan pesan EAP-Request/AKA-Notification dengan kode AT_NOTIFICATION General Failure (16384) untuk menghentikan pertukaran EAP.

Jika 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.

Memberikan kunci publik

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

  1. Kunci publik dan masa berlakunya dapat diambil 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-----"
    } ]
    }