Operatör Wi-Fi'ı, Android 9 ve sonraki sürümlerde kullanılabilen, cihazların operatör tarafından uygulanan Wi-Fi ağlarına otomatik olarak bağlanmasına olanak tanıyan bir otomatik bağlantı özelliğidir (şifrelenmiş IMSI kullanır). Stadyum veya yer altı tren istasyonu gibi yoğunluğun yüksek olduğu ya da hücresel kapsama alanının sınırlı olduğu yerlerde, kullanıcıların bağlantı deneyimini iyileştirmek ve trafiği azaltmak için operatörün kablosuz ağı kullanılabilir.
Operatör Wi-Fi özelliği olan cihazlar, yapılandırılmış operatör Wi-Fi ağlarına (herkese açık anahtar sertifikası olan ağlar) otomatik olarak bağlanır. Bir kullanıcı operatörün kablosuz ağ bağlantısını manuel olarak kestiğinde ağ 24 saat boyunca kara listeye alınır (otomatik bağlantı olmaz). Kullanıcılar, kara listeye alınan ağlara istedikleri zaman manuel olarak bağlanabilir.
Uygulama
Cihaz üreticileri ve operatörler, operatör Wi-Fi'yi uygulamak için aşağıdakileri yapmalıdır.
Üreticiler
Android 11 ve sonraki sürümleri çalıştıran cihazlarda her operatör için kablosuz ağ profilleri eklemek üzere kablosuz ağ önerisi API'sini kullanın.
10 veya daha eski sürümleri çalıştıran cihazlarda, carrier config manager'da her operatör için carrier_wifi_string_array
parametresini yapılandırarak kablosuz ağ profilleri ekleyin.
carrier_wifi_string_array
: Her dize girişinin virgülle ayrılmış bir Base64 kodlu kablosuz SSID ve bir EAP türü olduğu bir dize dizisi. EAP türü bir tam sayıdır (Extensible Authentication Protocol (EAP) Registry'ye bakın). Örneğin, aşağıdaki yapılandırma EAP-AKA kullanan SOME_SSID_NAME ve EAP-SIM kullanan Some_Other_SSID içindir:config { key: "carrier_wifi_string_array" text_array { item: "U09NRV9TU0lEX05BTUUK,23" item: "U29tZV9PdGhlcl9TU0lECg==,18" } }
Operatör yapılandırma yöneticisinde her operatör için aşağıdaki parametreleri yapılandırın:
imsi_key_availability_int
: IMSI şifreleme için kullanılan anahtarın WLAN (bit 1 ayarlanır), EPDG (bit 0 ayarlanır) veya her ikisi için de (hem bit 0 hem de bit 1 ayarlanır) kullanılabilir olup olmadığını tanımlar. Örneğin, aşağıdaki yapılandırma, IMSI şifrelemenin WLAN için kullanılabildiğini ancak EPDG için kullanılamadığını gösterir:config { key: "imsi_key_availability_int" int_value: 2 }
imsi_key_download_url_string
: IMSI şifrelemesi için kullanılan operatörün herkese açık anahtarını içeren proto'nun indirildiği URL. Örneğin, aşağıdaki yapılandırma belirli bir URL sağlar: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
: Ücretli (hücresel) ağ üzerinden operatörün genel anahtarının indirilmesine izin verilip verilmeyeceğini belirten bir işaret. Bu işaret ayarlanmazsa kablosuz bağlantısı olmayan yeni bir cihaz, anahtarı indirmesine izin verilmeyeceği için operatörün kablosuz ağına bağlanamaz.config { key: "allow_metered_network_for_cert_download_bool" bool_value: true }
Operatörler
Operatör Wi-Fi'yi uygulamak için operatörün IMSI gizlilik korumasını etkinleştirmesi ve ortak anahtar sağlaması gerekir.
IMSI gizlilik koruması
Android, ortak anahtar kriptografisini kullanarak abonenin kalıcı kimliğinin (IMSI) gizliliğini korur. Android, Kablosuz Ağ İçin IMSI Gizlilik Koruması ile ilgili Wireless Broadband Alliance (WBA) spesifikasyonunu uygular. Bir bağlantı için IMSI gizlilik koruması etkinleştirildiğinde kalıcı abone kimliği kablosuz olarak açık bir şekilde iletilmez.
Kalıcı kimlik şifreleme
Şifrelenmiş kalıcı kimliğin biçimi şu şekildedir:
- Kalıcı kimlik
<EAP-Method><IMSI>@<NAI realm>
biçimindedir. - EAP-Method öneki, kimlik doğrulama için kullanılan EAP yöntemini tanımlayan tek bir sekiz bitliktir:
0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA
- NAI alanı biçimi
wlan.mncXXX.mccYYY.3gppnetwork.org
şeklindedir. BuradaXXX
yerine SIM kartın mobil ağ kodu (MNC) veYYY
yerine mobil ülke kodu (MCC) girilir. - Kalıcı kimlik, operatör tarafından sağlanan bir RSA ortak anahtarı kullanılarak şifrelenir. Ortak anahtar, X.509 sertifikasına dahil edilir.
- Şifreleme şeması, şifreleme karma işlevi olarak SHA-256 ile RSAES-OAEP'dir. Bu şifreleme şeması, her kullanıldığında benzersiz bir şifreli metin oluşturarak izlenebilir başka bir kalıcı kimliğin oluşmasını önler.
- RSA anahtar uzunluğu 2048 bittir.
- Şifreleme arabelleği 256 bayttır.
- Şifreli metin, Base64 ile kodlanır.
- Çıkışın şifrelenmiş kalıcı kimlik uzunluğu 344 bayttır.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Anahtar tanımlayıcı
Anahtar tanımlayıcı, sunucunun kimlik doğrulama sırasında uygun özel anahtarı bulmasına olanak tanımak için kargo şirketinin sertifikaya eklediği isteğe bağlı bir özellik değer çiftidir. Önemli tanımlayıcıya örnek olarak CertificateSerialNumber=123456
verilebilir. Anahtar tanımlayıcı sağlanırsa kimlik doğrulama işlemi kapsamında açık olarak gönderilir.
SIM tabanlı EAP kimlik doğrulama yöntemlerinde yapılan değişiklikler
Bir bağlantıda IMSI gizlilik koruması etkinleştirildiğinde sistem, EAP-Request/Identity
alındıktan sonra kalıcı kimliği göndermez. Bunun yerine anonim bir girişle yanıt verir:
SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>
<prefix>
isteğe bağlıdır. enable_eap_method_prefix_bool
taşıyıcı yapılandırması true
olarak ayarlanırsa kimliğin ilk karakteri (anonymous
öncesi), EAP değişimi başlamadan önce kullanılan EAP yönteminin türü hakkında sunucuyu bilgilendirir.
0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA
Operatör yapılandırması false
olarak ayarlanmışsa bu önek iletiye dahil edilmez.
Buna karşılık olarak sunucu bir EAP-Request/AKA-Identity
mesajı gönderir ve sistem aşağıdaki biçimde yanıt verir:
SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"
Kimliğin ilk karakteri, sunucuya şifrelenmiş bir kimliğin kullanıldığını veya yapılandırılan EAP yönteminin türünü bildirir:
\0
: Şifrelenmiş kalıcı kimlik0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA
Anahtar tanımlayıcı özellik değer çifti isteğe bağlıdır ve kullanılmıyorsa şifrelenmiş kalıcı kimliğin sonuna eklenmez.
Bu noktada sunucu, anahtar tanımlayıcıdan (sağlanmışsa) özel anahtarı bulur, şifrelenmiş kimliğin şifresini operatörün özel anahtarını kullanarak çözer ve normal EAP akışına devam eder.
Başarılı kimlik doğrulamanın ardından sunucu, sonraki bağlantılarda kullanılan hızlı yeniden kimlik doğrulama kimliği veya geçici kimlik (takma ad) sağlayabilir. Sunucu tarafından geçici kimlik sağlanmazsa sistem, sonraki bağlantıda şifrelenmiş kimliği gönderir.
Operatör sertifikası alma, geçerlilik bitişi ve iptali
Sisteme sertifika yüklenmediği durumlarda sistem, HTTP GET yöntemini kullanarak sertifika indirmek için imsi_key_download_url_string
operatör yapılandırmasında sağlanan URL'yi kullanır. Sistem, yalnızca allow_metered_network_for_cert_download_bool
operatör yapılandırması true
olarak ayarlanmışsa hücresel verileri kullanır. Aksi takdirde sistem, sertifikayı yalnızca kablosuz bağlantı olduğunda indirir.
Sertifikanın geçerlilik süresi, sistem tarafından zorunlu kılınır. Sistem, sertifikaların yenilenmesini sertifikanın geçerlilik süresi dolmadan 21 gün önce denemeye başlar ve yeni sertifikayı indirmek için aynı URL'yi kullanır.
Sunucu, şifrelenmiş kimliğin şifresini çözemezse EAP değişimini sonlandırmak için EAP-Request/AKA-Notification
koduyla AT_NOTIFICATION
mesajını gönderir
General Failure
(16384).
Sertifikanın iptal edildiği veya süresinin dolduğu durumlarda, sunucu EAP değişimini sonlandırmak için EAP-Request/AKA-Notification
mesajını AT_NOTIFICATION
koduyla Certificate Replacement Required
(16385) gönderir.
Buna karşılık sistem, sertifikanın kaldırılıp kaldırılmayacağını ve aynı URL'den yeni bir sertifika indirmeye çalışıp çalışmayacağını belirlemek için dahili sezgisel yöntemler uygular.
Ortak anahtarı sağlama
Tercihen TLS üzerinden HTTP kullanarak bir sunucuya herkese açık bir URL sağlayın. Bu sunucu, operatörün sertifikasını barındırır.
- Ortak anahtar ve geçerlilik bitiş tarihi sertifikadan çıkarılabilir.
Sunucudan gelen bilgiler JSON biçimindedir:
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.
Aşağıda, ortak anahtar örneği verilmiştir.
{ "carrier-keys" : [ { "key-identifier" : "CertificateSerialNumber=5xxe06d4", "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----" } ] }