मोबाइल और इंटरनेट सेवा देने वाली कंपनी का वाई-फ़ाई

कैरियर वाई-फ़ाई, अपने-आप कनेक्ट होने की सुविधा है. यह सुविधा, एन्क्रिप्ट किए गए आईएमएसआई का इस्तेमाल करती है. यह सुविधा Android 9 और इसके बाद के वर्शन में उपलब्ध है. इसकी मदद से, डिवाइसों को कैरियर के लागू किए गए वाई-फ़ाई नेटवर्क से अपने-आप कनेक्ट किया जा सकता है. ज़्यादा भीड़-भाड़ वाले इलाकों या कम मोबाइल नेटवर्क कवरेज वाले इलाकों, जैसे कि स्टेडियम या अंडरग्राउंड ट्रेन स्टेशन में, उपयोगकर्ताओं के कनेक्टिविटी अनुभव को बेहतर बनाने और ट्रैफ़िक को कम करने के लिए, कैरियर वाई-फ़ाई का इस्तेमाल किया जा सकता है.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के वाई-फ़ाई की सुविधा वाले डिवाइस, कॉन्फ़िगर किए गए मोबाइल और इंटरनेट सेवा देने वाली कंपनी के वाई-फ़ाई नेटवर्क (सार्वजनिक कुंजी सर्टिफ़िकेट वाले नेटवर्क) से अपने-आप कनेक्ट हो जाते हैं. जब कोई उपयोगकर्ता, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के वाई-फ़ाई नेटवर्क से मैन्युअल तरीके से डिसकनेक्ट करता है, तो उस नेटवर्क को 24 घंटे के लिए ब्लैकलिस्ट कर दिया जाता है. इसका मतलब है कि डिवाइस उस नेटवर्क से अपने-आप कनेक्ट नहीं होगा. उपयोगकर्ता, ब्लैकलिस्ट किए गए नेटवर्क से कभी भी मैन्युअल तरीके से कनेक्ट कर सकते हैं.

लागू करना

डिवाइस बनाने वाली कंपनियों और मोबाइल और इंटरनेट सेवा देने वाली कंपनियों को, कैरियर वाई-फ़ाई की सुविधा लागू करने के लिए ये काम करने होंगे.

निर्माता

Android 11 और इसके बाद के वर्शन वाले डिवाइसों के लिए, हर कैरियर के लिए वाई-फ़ाई प्रोफ़ाइलें जोड़ने के लिए, वाई-फ़ाई सुझाव एपीआई का इस्तेमाल करें.

Android 10 या उससे पहले के वर्शन वाले डिवाइसों के लिए, वाई-फ़ाई प्रोफ़ाइलें जोड़ें. इसके लिए, कैरियर कॉन्फ़िगर मैनेजर में जाकर, हर कैरियर के लिए carrier_wifi_string_array पैरामीटर को कॉन्फ़िगर करें.

  • carrier_wifi_string_array: एक स्ट्रिंग कलेक्शन, जहां हर स्ट्रिंग एंट्री, Base64 में कोड किया गया वाई-फ़ाई SSID और एक EAP टाइप होता है. इन दोनों को कॉमा से अलग किया जाता है. EAP टाइप एक पूर्णांक होता है. ज़्यादा जानकारी के लिए, Extensible Authentication Protocol (EAP) Registry देखें. उदाहरण के लिए, यह कॉन्फ़िगरेशन EAP-AKA का इस्तेमाल करने वाले SOME_SSID_NAME और EAP-SIM का इस्तेमाल करने वाले Some_Other_SSID के लिए है:

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

कैरियर कॉन्फ़िगर मैनेजर में, हर कैरियर के लिए ये पैरामीटर कॉन्फ़िगर करें:

  • imsi_key_availability_int: यह बताता है कि IMSI एन्क्रिप्शन के लिए इस्तेमाल की गई कुंजी, WLAN (बिट 1 सेट है), ईपीडीजी (बिट 0 सेट है) या दोनों के लिए उपलब्ध है (बिट 0 और बिट 1, दोनों सेट हैं). उदाहरण के लिए, नीचे दिए गए कॉन्फ़िगरेशन से पता चलता है कि आईएमएसआई एन्क्रिप्शन, WLAN के लिए उपलब्ध है, लेकिन ईपीडीजी के लिए नहीं:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string: यूआरएल से, आईएमएसआई एन्क्रिप्शन के लिए इस्तेमाल किए जाने वाले कैरियर की सार्वजनिक कुंजी वाला प्रोटो डाउनलोड किया जाता है. उदाहरण के लिए, यहां दिया गया कॉन्फ़िगरेशन एक खास यूआरएल उपलब्ध कराता है:

    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
    }
    

मोबाइल और इंटरनेट सेवा देने वाली कंपनियां

मोबाइल और इंटरनेट सेवा देने वाली कंपनी का वाई-फ़ाई लागू करने के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी को आईएमएसआई की निजता सुरक्षा की सुविधा चालू करनी होगी और एक सार्वजनिक पासकोड देना होगा.

आईएमएसआई की निजता सुरक्षा

Android, सार्वजनिक पासकोड क्रिप्टोग्राफ़ी का इस्तेमाल करके, सदस्य की हमेशा की पहचान (आईएमएसआई) की गोपनीयता की सुरक्षा करता है. Android, वाई-फ़ाई के लिए आईएमएसआई की निजता सुरक्षा के लिए, वायरलेस ब्रॉडबैंड अलायंस (डब्ल्यूबीए) के स्पेसिफ़िकेशन को लागू करता है. जब किसी कनेक्शन के लिए आईएमएसआई निजता सुरक्षा की सुविधा चालू होती है, तो ग्राहक की हमेशा के लिए बनी हुई पहचान को साफ़ तौर पर एयर पर ट्रांसमिट नहीं किया जाता.

पहचान की जानकारी को हमेशा के लिए एन्क्रिप्ट करना

एन्क्रिप्ट की गई हमेशा के लिए बनी रहने वाली पहचान का फ़ॉर्मैट इस तरह का होता है:

  • हमेशा के लिए बनी पहचान, <EAP-Method><IMSI>@<NAI realm> फ़ॉर्मैट में होती है.
  • EAP-Method प्रीफ़िक्स एक ऑक्टेट होता है, जो पुष्टि करने के लिए इस्तेमाल किए जाने वाले EAP तरीके के बारे में बताता है:
    • 0: EAP-AKA
    • 1: EAP-SIM
    • 6: EAP-AKA'
  • एनएआई रीएल्म का फ़ॉर्मैट wlan.mncXXX.mccYYY.3gppnetwork.org है. इसमें XXX की जगह सिम कार्ड का मोबाइल नेटवर्क कोड (एमएनसी) और YYY की जगह मोबाइल देश कोड (एमसीसी) का इस्तेमाल किया जाता है.
  • हमेशा के लिए बनी पहचान को, कैरियर की दी गई आरएसए सार्वजनिक कुंजी का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया जाता है. सार्वजनिक कुंजी, X.509 सर्टिफ़िकेट में शामिल होती है.
  • एन्क्रिप्शन स्कीम, RSAES-OAEP है. इसमें क्रिप्टोग्राफ़िक हैश फ़ंक्शन के तौर पर SHA-256 का इस्तेमाल किया जाता है. एन्क्रिप्शन की इस स्कीम का इस्तेमाल करने पर, हर बार एक यूनीक सिफर टेक्स्ट जनरेट होता है. इससे, ट्रैक की जा सकने वाली किसी और पहचान से बचा जा सकता है.
  • आरएसए कुंजी की लंबाई 2048 बिट है.
  • एन्क्रिप्शन बफ़र 256 बाइट का होता है.
  • सिफर टेक्स्ट को Base64 में कोड में बदला गया है.
  • एन्क्रिप्ट (सुरक्षित) की गई परमानेंट आइडेंटिटी की लंबाई 344 बाइट होती है.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
डिजिटल बटन का आइडेंटिफ़ायर

की आइडेंटिफ़ायर, वैल्यू के साथ इस्तेमाल होने वाला एक वैकल्पिक एट्रिब्यूट है. कैरियर इसे सर्टिफ़िकेट में जोड़ता है, ताकि पुष्टि करने के दौरान सर्वर सही निजी कुंजी ढूंढ सके. मुख्य आइडेंटिफ़ायर का उदाहरण CertificateSerialNumber=123456 है. अगर कुंजी आइडेंटिफ़ायर दिया जाता है, तो पुष्टि करने की प्रोसेस के तहत, उसे साफ़ तौर पर भेजा जाता है.

सिम पर आधारित ईएपी पुष्टि करने के तरीकों में बदलाव

जब किसी कनेक्शन पर आईएमएसआई निजता सुरक्षा चालू होती है, तो 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-AKA
  • 1: EAP-SIM
  • 6: 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-AKA
  • 1: EAP-SIM
  • 6: EAP-AKA'

पासकोड आइडेंटिफ़ायर एट्रिब्यूट की वैल्यू का जोड़ा ज़रूरी नहीं है. अगर इसका इस्तेमाल नहीं किया जा रहा है, तो एन्क्रिप्ट की गई हमेशा के लिए बनी पहचान के आखिर में इसे नहीं जोड़ा जाता.

इस समय, सर्वर कुंजी आइडेंटिफ़ायर (अगर दिया गया हो) से निजी कुंजी ढूंढता है. इसके बाद, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की निजी कुंजी का इस्तेमाल करके, एन्क्रिप्ट की गई पहचान को डिक्रिप्ट करता है और सामान्य ईएपी फ़्लो जारी रखता है.

पुष्टि हो जाने के बाद, सर्वर तुरंत फिर से पुष्टि करने के लिए कोई पहचान या अस्थायी पहचान (बदला हुआ नाम) दे सकता है. इसका इस्तेमाल बाद के कनेक्शन में किया जाता है. अगर सर्वर से कोई अस्थायी पहचान नहीं दी जाती है, तो सिस्टम अगले कनेक्शन में एन्क्रिप्ट की गई पहचान भेजता है.

कैरियर सर्टिफ़िकेट वापस पाना, उसकी समयसीमा खत्म होना, और उसे रद्द करना

अगर सिस्टम में कोई सर्टिफ़िकेट इंस्टॉल नहीं है, तो सिस्टम imsi_key_download_url_string कैरियर कॉन्फ़िगरेशन में दिए गए यूआरएल का इस्तेमाल करता है. इससे, एचटीटीपी जीईटी तरीके का इस्तेमाल करके सर्टिफ़िकेट डाउनलोड किया जाता है. सिस्टम, सेल्युलर डेटा का इस्तेमाल सिर्फ़ तब करता है, जब allow_metered_network_for_cert_download_bool कैरियर कॉन्फ़िगरेशन को true पर सेट किया गया हो. अगर ऐसा नहीं किया जाता है, तो सिस्टम सिर्फ़ वाई-फ़ाई कनेक्शन उपलब्ध होने पर सर्टिफ़िकेट डाउनलोड करता है.

सर्टिफ़िकेट की समयसीमा खत्म होने की तारीख, सिस्टम तय करता है. सिस्टम, सर्टिफ़िकेट की समयसीमा खत्म होने की तारीख से 21 दिन पहले, सर्टिफ़िकेट रिन्यू करने की कोशिश शुरू कर देता है. साथ ही, नया सर्टिफ़िकेट डाउनलोड करने के लिए उसी यूआरएल का इस्तेमाल करता है.

अगर सर्वर, एन्क्रिप्ट की गई पहचान को डिक्रिप्ट नहीं कर पाता है, तो वह EAP एक्सचेंज को खत्म करने के लिए, AT_NOTIFICATION कोड General Failure (16384) के साथ एक EAP-Request/AKA-Notification मैसेज भेजता है.

अगर सर्टिफ़िकेट रद्द कर दिया गया है या उसकी समयसीमा खत्म हो गई है, तो ईएपी एक्सचेंज को खत्म करने के लिए, सर्वर EAP-Request/AKA-Notification कोड के साथ AT_NOTIFICATION मैसेजCertificate Replacement Required (16385) भेजता है. इसके जवाब में, सिस्टम अपने हिसाब से यह तय करता है कि सर्टिफ़िकेट को हटाया जाए या नहीं. साथ ही, उसी यूआरएल से नया सर्टिफ़िकेट डाउनलोड करने की कोशिश करता है.

सार्वजनिक कुंजी दें

किसी सर्वर को सार्वजनिक यूआरएल दें. इसके लिए, TLS के साथ एचटीटीपी का इस्तेमाल करना बेहतर होता है. यह यूआरएल, कैरियर का सर्टिफ़िकेट होस्ट करता है. इसमें:

  1. सर्टिफ़िकेट से सार्वजनिक पासकोड और समयसीमा की जानकारी निकाली जा सकती है.
  2. सर्वर से मिली जानकारी, 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-----"
    } ]
    }