कैरियर वाई-फ़ाई, अपने-आप कनेक्ट होने की सुविधा है. यह Android 9 और इसके बाद के वर्शन में उपलब्ध है. इसमें एन्क्रिप्ट (सुरक्षित) किए गए IMSI का इस्तेमाल किया जाता है. इससे डिवाइस, कैरियर के वाई-फ़ाई नेटवर्क से अपने-आप कनेक्ट हो जाते हैं. स्टेडियम या अंडरग्राउंड ट्रेन स्टेशन जैसी जगहों पर, मोबाइल नेटवर्क की कवरेज कम होती है या नेटवर्क में काफ़ी रुकावटें आती हैं. ऐसे में, कैरियर वाई-फ़ाई का इस्तेमाल करके, लोगों को बेहतर कनेक्टिविटी दी जा सकती है और नेटवर्क पर ट्रैफ़िक कम किया जा सकता है.
मोबाइल और इंटरनेट सेवा देने वाली कंपनी के वाई-फ़ाई की सुविधा वाले डिवाइस, कॉन्फ़िगर किए गए मोबाइल और इंटरनेट सेवा देने वाली कंपनी के वाई-फ़ाई नेटवर्क (सार्वजनिक पासकोड वाले नेटवर्क) से अपने-आप कनेक्ट हो जाते हैं. जब कोई उपयोगकर्ता, कैरियर के वाई-फ़ाई नेटवर्क से मैन्युअल तरीके से डिसकनेक्ट करता है, तो उस नेटवर्क को 24 घंटे के लिए ब्लैकलिस्ट कर दिया जाता है. इस दौरान, वह नेटवर्क अपने-आप कनेक्ट नहीं होता. उपयोगकर्ता, ब्लैकलिस्ट किए गए नेटवर्क से मैन्युअल तरीके से किसी भी समय कनेक्ट कर सकते हैं.
लागू करना
डिवाइस बनाने वाली कंपनियों और मोबाइल और इंटरनेट सेवा देने वाली कंपनियों को, Carrier Wi-Fi की सुविधा लागू करने के लिए ये काम करने होंगे.
निर्माता
Android 11 और इसके बाद के वर्शन पर काम करने वाले डिवाइसों के लिए, हर कैरियर के लिए वाई-फ़ाई प्रोफ़ाइलें जोड़ने के लिए, वाई-फ़ाई का सुझाव देने वाले एपीआई का इस्तेमाल करें.
Android 10 या इससे पहले के वर्शन वाले डिवाइसों के लिए, वाई-फ़ाई प्रोफ़ाइलें जोड़ें. इसके लिए, कैरियर कॉन्फ़िग मैनेजर में हर कैरियर के लिए carrier_wifi_string_array
पैरामीटर कॉन्फ़िगर करें.
carrier_wifi_string_array
: यह एक स्ट्रिंग कलेक्शन होता है. इसमें हर स्ट्रिंग एंट्री, Base64-encoded वाई-फ़ाई SSID और कॉमा से अलग किया गया EAP टाइप होता है. EAP टाइप एक पूर्णांक होता है (Extensible Authentication Protocol (EAP) Registry देखें). उदाहरण के लिए, यहां दिया गया कॉन्फ़िगरेशन, SOME_SSID_NAME के लिए EAP-AKA और Some_Other_SSID के लिए EAP-SIM का इस्तेमाल करता है:config { key: "carrier_wifi_string_array" text_array { item: "U09NRV9TU0lEX05BTUUK,23" item: "U29tZV9PdGhlcl9TU0lECg==,18" } }
कैरियर कॉन्फ़िगरेशन मैनेजर में जाकर, हर कैरियर के लिए इन पैरामीटर को कॉन्फ़िगर करें:
imsi_key_availability_int
: इससे यह पता चलता है कि IMSI को एन्क्रिप्ट (सुरक्षित) करने के लिए इस्तेमाल की गई कुंजी, WLAN (पहला बिट सेट है), EPDG (शून्यवां बिट सेट है) या दोनों (शून्यवां और पहला बिट, दोनों सेट हैं) के लिए उपलब्ध है या नहीं. उदाहरण के लिए, यहां दिए गए कॉन्फ़िगरेशन से पता चलता है कि IMSI encryption, WLAN के लिए उपलब्ध है, लेकिन EPDG के लिए नहीं:config { key: "imsi_key_availability_int" int_value: 2 }
imsi_key_download_url_string
: यह उस यूआरएल से डाउनलोड किया जाता है जिसमें IMSI एन्क्रिप्शन के लिए इस्तेमाल किए गए कैरियर की सार्वजनिक कुंजी वाला प्रोटो होता है. उदाहरण के लिए, यहां दिए गए कॉन्फ़िगरेशन से एक खास यूआरएल मिलता है: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
: यह फ़्लैग बताता है कि मीटर वाले (मोबाइल) नेटवर्क पर, कैरियर की सार्वजनिक कुंजी को डाउनलोड करने की अनुमति देनी है या नहीं. अगर यह फ़्लैग सेट नहीं किया जाता है, तो वाई-फ़ाई से कनेक्ट न होने वाला नया डिवाइस, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के वाई-फ़ाई नेटवर्क से कनेक्ट नहीं हो पाएगा. ऐसा इसलिए होगा, क्योंकि उसे कुंजी डाउनलोड करने की अनुमति नहीं होगी.config { key: "allow_metered_network_for_cert_download_bool" bool_value: true }
मोबाइल और इंटरनेट सेवा देने वाली कंपनियां
मोबाइल और इंटरनेट सेवा देने वाली कंपनी को IMSI की निजता सुरक्षा की सुविधा चालू करनी होगी. साथ ही, उसे एक सार्वजनिक पासकोड देना होगा, ताकि वह वाई-फ़ाई की सुविधा लागू कर सके.
IMSI की निजता सुरक्षा
Android, सार्वजनिक पासकोड क्रिप्टोग्राफ़ी का इस्तेमाल करके, किसी सदस्य की स्थायी पहचान (आईएमएसआई) की गोपनीयता को सुरक्षित रखता है. Android, वाई-फ़ाई के लिए IMSI की निजता सुरक्षा के लिए, Wireless Broadband Alliance (WBA) की खास बातों को लागू करता है. किसी कनेक्शन के लिए IMSI की निजता सुरक्षा की सुविधा चालू होने पर, स्थायी सदस्य की पहचान को एयरवेव पर साफ़ तौर पर ट्रांसमिट नहीं किया जाता है.
पहचान को हमेशा के लिए एन्क्रिप्ट (सुरक्षित) करना
एन्क्रिप्ट की गई स्थायी पहचान का फ़ॉर्मैट यहां दिया गया है:
- स्थायी पहचान,
<EAP-Method><IMSI>@<NAI realm>
फ़ॉर्मैट में होती है. - ईएपी-मेथड प्रीफ़िक्स एक ऑक्टेट होता है. यह पुष्टि करने के लिए इस्तेमाल किए जाने वाले ईएपी के तरीके को तय करता है:
0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA'
- NAI का फ़ॉर्मैट
wlan.mncXXX.mccYYY.3gppnetwork.org
है. इसमेंXXX
की जगह सिम कार्ड का मोबाइल नेटवर्क कोड (एमएनसी) औरYYY
की जगह मोबाइल देश कोड (एमसीसी) डाला जाता है. - स्थायी आइडेंटिटी को कैरियर की ओर से उपलब्ध कराई गई आरएसए सार्वजनिक कुंजी का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया जाता है. पब्लिक की, X.509 सर्टिफ़िकेट में शामिल होती है.
- क्रिप्टोग्राफ़िक हैश फ़ंक्शन के तौर पर SHA-256 के साथ, एन्क्रिप्शन स्कीम RSAES-OAEP का इस्तेमाल किया जाता है. इस एन्क्रिप्शन स्कीम का इस्तेमाल करने पर, हर बार एक यूनीक सिफ़र टेक्स्ट मिलता है. इससे एक और ऐसी स्थायी पहचान नहीं बनती जिसे ट्रैक किया जा सके.
- आरएसए कुंजी की लंबाई 2048 बिट है.
- एन्क्रिप्शन बफ़र 256 बाइट का होता है.
- साइफ़र टेक्स्ट को Base64 की मदद से कोड में बदला जाता है.
- एन्क्रिप्ट (सुरक्षित) की गई स्थायी पहचान की लंबाई 344 बाइट होती है.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
बटन का आइडेंटिफ़ायर
कुंजी आइडेंटिफ़ायर, एट्रिब्यूट वैल्यू पेयर होता है. इसे कैरियर, किसी सर्टिफ़िकेट से जोड़ता है. इससे सर्वर को पुष्टि के दौरान, सही निजी कुंजी का पता लगाने में मदद मिलती है. हालांकि, यह एट्रिब्यूट वैल्यू पेयर जोड़ना ज़रूरी नहीं है. मुख्य आइडेंटिफ़ायर का एक उदाहरण CertificateSerialNumber=123456
है. अगर कुंजी का आइडेंटिफ़ायर दिया जाता है, तो उसे पुष्टि करने की प्रोसेस के हिस्से के तौर पर साफ़ तौर पर भेजा जाता है.
सिम कार्ड पर आधारित EAP पुष्टि करने के तरीकों में बदलाव
किसी कनेक्शन पर IMSI की निजता सुरक्षा चालू होने पर, सिस्टम EAP-Request/Identity
मिलने पर स्थायी पहचान नहीं भेजता. इसके बजाय, वह पहचान छिपाकर लॉगिन करने की सुविधा देता है:
SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>
<prefix>
की जानकारी देना ज़रूरी नहीं है. अगर enable_eap_method_prefix_bool
कैरियर कॉन्फ़िगरेशन को true
पर सेट किया गया है, तो आइडेंटिटी का पहला वर्ण (anonymous
से पहले) सर्वर को, EAP एक्सचेंज शुरू होने से पहले इस्तेमाल किए गए EAP तरीके के बारे में सूचना देता है.
0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA'
अगर कैरियर कॉन्फ़िगरेशन को false
पर सेट किया जाता है, तो यह प्रीफ़िक्स मैसेज में शामिल नहीं होता.
इसके जवाब में, सर्वर EAP-Request/AKA-Identity
मैसेज भेजता है. साथ ही, सिस्टम इस फ़ॉर्मैट में जवाब देता है:
SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"
पहला वर्ण, सर्वर को सूचना देता है कि एन्क्रिप्ट (सुरक्षित) की गई पहचान का इस्तेमाल किया गया है या कॉन्फ़िगर किए गए ईएपी तरीके का टाइप:
\0
: एन्क्रिप्ट की गई स्थायी पहचान0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA'
मुख्य आइडेंटिफ़ायर एट्रिब्यूट वैल्यू पेयर ज़रूरी नहीं है. अगर इसका इस्तेमाल नहीं किया जाता है, तो इसे एन्क्रिप्ट (सुरक्षित) की गई स्थायी पहचान के आखिर में नहीं जोड़ा जाता.
इस समय, सर्वर कुंजी के आइडेंटिफ़ायर से निजी पासकोड का पता लगाता है. अगर यह जानकारी दी गई है, तो मोबाइल और इंटरनेट सेवा देने वाली कंपनी के निजी पासकोड का इस्तेमाल करके, एन्क्रिप्ट (सुरक्षित) की गई पहचान को डिक्रिप्ट करता है. इसके बाद, सामान्य ईएपी फ़्लो जारी रखता है.
पुष्टि हो जाने के बाद, सर्वर तुरंत फिर से पुष्टि करने के लिए पहचान या कुछ समय के लिए पहचान (छद्म नाम) दे सकता है. इसका इस्तेमाल बाद के कनेक्शन में किया जाता है. अगर सर्वर कोई भी अस्थायी आइडेंटिटी नहीं देता है, तो सिस्टम अगले कनेक्शन में एन्क्रिप्ट (सुरक्षित) की गई आइडेंटिटी भेजता है.
कैरियर सर्टिफ़िकेट को वापस पाना, उसकी समयसीमा खत्म होना, और उसे रद्द करना
अगर सिस्टम में कोई सर्टिफ़िकेट इंस्टॉल नहीं है, तो सिस्टम imsi_key_download_url_string
कैरियर कॉन्फ़िगरेशन में दिए गए यूआरएल का इस्तेमाल करता है. इससे, एचटीटीपी GET तरीके का इस्तेमाल करके सर्टिफ़िकेट डाउनलोड किया जाता है. सिस्टम, सेल्युलर डेटा का इस्तेमाल सिर्फ़ तब करता है, जब allow_metered_network_for_cert_download_bool
कैरियर कॉन्फ़िगरेशन को true
पर सेट किया गया हो. अगर ऐसा नहीं किया जाता है, तो सिस्टम सिर्फ़ वाई-फ़ाई कनेक्शन उपलब्ध होने पर ही सर्टिफ़िकेट डाउनलोड करता है.
सर्टिफ़िकेट की समयसीमा खत्म होने की जानकारी सिस्टम से मिलती है. सिस्टम, सर्टिफ़िकेट के खत्म होने की तारीख से 21 दिन पहले, सर्टिफ़िकेट रिन्यू करने की कोशिश शुरू कर देता है. साथ ही, नए सर्टिफ़िकेट को डाउनलोड करने के लिए उसी यूआरएल का इस्तेमाल करता है.
अगर सर्वर, एन्क्रिप्ट (सुरक्षित) की गई पहचान को डिक्रिप्ट नहीं कर पाता है, तो सर्वर EAP-Request/AKA-Notification
मैसेज के साथ AT_NOTIFICATION
कोड General Failure
(16384) भेजता है, ताकि EAP एक्सचेंज को बंद किया जा सके.
अगर सर्टिफ़िकेट रद्द कर दिया गया है या उसकी समयसीमा खत्म हो गई है, तो सर्वर EAP-Request/AKA-Notification
मैसेज के साथ AT_NOTIFICATION
कोड Certificate Replacement Required
(16385) भेजता है, ताकि EAP एक्सचेंज को खत्म किया जा सके.
इसके जवाब में, सिस्टम इंटरनल ह्यूरिस्टिक्स लागू करता है. इससे यह तय किया जाता है कि सर्टिफ़िकेट को हटाना है या नहीं. साथ ही, उसी यूआरएल से नया सर्टिफ़िकेट डाउनलोड करने की कोशिश की जाती है.
सार्वजनिक पासकोड दें
सर्वर के लिए सार्वजनिक यूआरएल दें. हमारा सुझाव है कि आप एचटीटीपी ओवर टीएलएस का इस्तेमाल करें. इस यूआरएल पर, कैरियर का सर्टिफ़िकेट होस्ट किया जाता है. इसमें:
- सर्टिफ़िकेट से सार्वजनिक पासकोड और इसके खत्म होने की तारीख निकाली जा सकती है.
सर्वर से मिली जानकारी, JSON फ़ॉर्मैट में इस तरह से होती है:
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.
यहां सार्वजनिक कुंजी का एक उदाहरण दिया गया है.
{ "carrier-keys" : [ { "key-identifier" : "CertificateSerialNumber=5xxe06d4", "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----" } ] }