एंड-टू-एंड एन्क्रिप्शन की मदद से, मैसेज के डेटा को सुरक्षित रखना

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

पॉइंट टू पॉइंट एन्क्रिप्शन की एक सीमा यह है कि यह पूरे पाथ के लिए एन्क्रिप्ट नहीं किया जाता. इसमें सिर्फ़ भेजने वाला और पाने वाला ही मैसेज को डिकोड कर सकता है. इसलिए, FCM चैट मैसेज या पुष्टि करने वाले लेन-देन जैसे संवेदनशील कम्यूनिकेशन के लिए, एंड-टू-एंड एन्क्रिप्शन का इस्तेमाल करने का सुझाव देता है. पूरी तरह सुरक्षित (E2EE) सुविधा का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, इसे बेहतर लेवल पर लागू करना ज़रूरी है. जैसे, आपके सर्वर और ऐप्लिकेशन कोड में.

संवेदनशील डेटा के लिए एंड-टू-एंड एन्क्रिप्शन (E2EE) की सुविधा जोड़ना

निजी मैसेज या निजी क्रेडेंशियल जैसे संवेदनशील डेटा को मैनेज करने वाले ऐप्लिकेशन के लिए, एंड-टू-एंड एन्क्रिप्शन (E2EE) की मदद से सुरक्षा की एक और लेयर जोड़ी जा सकती है. इस प्रोसेस में, मैसेज के पेलोड को FCM पर भेजने से पहले, आपके सर्वर पर एन्क्रिप्ट (सुरक्षित) किया जाता है. इसके बाद, उपयोगकर्ता के डिवाइस पर आपके ऐप्लिकेशन में उसे डिक्रिप्ट किया जाता है. यह FCM डेटा मैसेज के साथ काम करता है, क्योंकि स्टैंडर्ड सूचना पेलोड को ऑपरेटिंग सिस्टम मैनेज करता है. साथ ही, इन्हें आपके ऐप्लिकेशन से डिक्रिप्ट नहीं किया जा सकता.

ध्यान दें कि FCM में, पूरी तरह सुरक्षित एन्क्रिप्शन की सुविधा पहले से मौजूद नहीं होती. अपने ऐप्लिकेशन में सुरक्षा की इस लेयर को लागू करने की ज़िम्मेदारी आपकी है. इस मकसद के लिए, बाहरी लाइब्रेरी और प्रोटोकॉल डिज़ाइन किए गए हैं. जैसे, Capillary या DTLS.

कॉन्सेप्चुअल उदाहरण

ई2ईई का इस्तेमाल करने पर, FCM data पेलोड में इस तरह बदलाव होता है.

एन्क्रिप्ट करने से पहले (स्टैंडर्ड पेलोड):

    {
      "token": "DEVICE_REGISTRATION_TOKEN",
      "data": {
        "sender": "user123",
        "message_body": "Your 2FA code is 555-123",
        "timestamp": "1661299200"
      }
    }

एन्क्रिप्ट करने के बाद (E2EE पेलोड):

  {
    "token": "DEVICE_REGISTRATION_TOKEN",
    "data": {
      "encrypted_payload": "aG9va2Vk...so much encrypted gibberish...ZW5jcnlwdA=="
    }
  }

अगर आपने एंड-टू-एंड एन्क्रिप्शन की सुविधा को सही तरीके से लागू किया है, तो क्लाइंट ऐप्लिकेशन ही एन्क्रिप्ट किए गए पेलोड को डिक्रिप्ट करके, ओरिजनल मैसेज को दिखा सकता है.

दूसरा तरीका: सीधे अपने सर्वर से कॉन्टेंट फ़ेच करना

अगर आपके ऐप्लिकेशन के लिए पूरी तरह सुरक्षित एन्क्रिप्शन की सुविधा सही नहीं है, तो इसके बजाय खाली डेटा मैसेज भेजे जा सकते हैं. ये मैसेज, ऐप्लिकेशन के लिए एक सिग्नल की तरह काम करते हैं. इससे ऐप्लिकेशन, सीधे आपके सर्वर से कॉन्टेंट फ़ेच करता है. इसका मतलब है कि संवेदनशील डेटा सिर्फ़ आपके ऐप्लिकेशन और आपके सर्वर के बीच ट्रांसफ़र किया जाता है. डेटा ट्रांसफ़र करने के लिए, FCM को बायपास किया जाता है.

इस तरीके का एक नुकसान यह है कि डेटा वापस पाने के लिए, ऐप्लिकेशन को आपके सर्वर से कनेक्ट होने में देरी हो सकती है. जब किसी ऐप्लिकेशन को डेटा मैसेज मिलता है, तो आम तौर पर उसके पास बैकग्राउंड में जाने से पहले, सूचना दिखाने के लिए कुछ ही सेकंड होते हैं. ऐसा हो सकता है कि आपके सर्वर से डेटा फ़ेच करने की प्रोसेस, इस समयावधि में पूरी न हो. इस डेटा को फ़ेच करने की सफलता, उपयोगकर्ता के डिवाइस की कनेक्टिविटी जैसे फ़ैक्टर पर निर्भर करती है.

इसलिए, ऐसी स्थितियों के लिए उपयोगकर्ता अनुभव के विकल्पों पर विचार करें जहां डेटा फ़ेच करने में ज़्यादा समय लग सकता है. उदाहरण के लिए, "आपको एक नया मैसेज मिला है" जैसी सामान्य सूचना दिखाई जा सकती है. इसके बाद, पूरा कॉन्टेंट मिलने पर उसे अपडेट किया जा सकता है.