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

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

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

लागू करना

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

निर्माता

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

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

  • carrier_wifi_string_array:

    यह एक स्ट्रिंग कलेक्शन होता है. इसमें हर स्ट्रिंग एंट्री, Base64-कोड में बदला गया वाई-फ़ाई एसएसआईडी और कॉमा से अलग किया गया EAP टाइप होता है. EAP टाइप एक पूर्णांक होता है. इसके बारे में जानने के लिए, एक्सटेंसिबल ऑथेंटिकेशन प्रोटोकॉल (ईएपी) रजिस्ट्री देखें. उदाहरण के लिए, यहां दिया गया कॉन्फ़िगरेशन 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 (bit 1 सेट है), EPDG (bit 0 सेट है) या दोनों (bit 0 और bit 1 दोनों सेट हैं) के लिए उपलब्ध है या नहीं. उदाहरण के लिए, यहां दिए गए कॉन्फ़िगरेशन से पता चलता है कि IMSI एन्क्रिप्शन की सुविधा, WLAN के लिए उपलब्ध है, लेकिन EPDG के लिए नहीं:

    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
    }
    

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

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

IMSI की निजता सुरक्षा

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

पहचान को हमेशा के लिए एन्क्रिप्ट (सुरक्षित) करना

एन्क्रिप्ट की गई स्थायी पहचान का फ़ॉर्मैट यहां दिया गया है:

  • स्थायी पहचान, <EAP-Method><IMSI>@<NAI realm> फ़ॉर्मैट में होती है.
  • ईएपी-मेथड प्रीफ़िक्स एक ऑक्टेट होता है. यह पुष्टि करने के लिए इस्तेमाल किए जाने वाले ईएपी के तरीके को तय करता है:
    • 0: EAP-AKA
    • 1: EAP-SIM
    • 6: EAP-AKA'
  • NAI का फ़ॉर्मैट wlan.mnc<var>XXX</var>.mcc<var>YYY</var>.3gppnetwork.org होता है. इसमें XXX की जगह सिम कार्ड के मोबाइल नेटवर्क कोड (एमएनसी) और YYY की जगह मोबाइल देश कोड (एमसीसी) का इस्तेमाल किया जाता है.
  • स्थायी आइडेंटिटी को, कैरियर की ओर से उपलब्ध कराई गई RSA सार्वजनिक कुंजी का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया जाता है. पब्लिक की, 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 पुष्टि करने के तरीकों में बदलाव

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

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

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

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

सार्वजनिक पासकोड दें

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

  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-----"
    } ]
    }