आपके सर्वर, FCM बैकएंड, और क्लाइंट डिवाइसों के बीच के पूरे कनेक्शन को Android ट्रांसपोर्ट लेयर के साथ-साथ ट्रांसपोर्ट लेयर सिक्योरिटी (टीएलएस) का इस्तेमाल करके सुरक्षित किया जाता है. इससे, डेटा को ट्रांसफ़र करने के दौरान, सभी डेटा के लिए बेहतर पॉइंट-टू-पॉइंट एन्क्रिप्शन की सुविधा मिलती है. इससे डेटा को नेटवर्क पर इंटरसेप्ट होने से बचाया जा सकता है. यह मज़बूत सुरक्षा मॉडल, ज़्यादातर ऐप्लिकेशन के लिए सही है. ज़्यादा जानकारी के लिए, FCM आर्किटेक्चर दस्तावेज़ देखें.
पॉइंट टू पॉइंट एन्क्रिप्शन की एक सीमा यह है कि यह पूरे पाथ के लिए एन्क्रिप्ट नहीं किया जाता. इसमें सिर्फ़ भेजने वाला और पाने वाला ही मैसेज को डिकोड कर सकता है. इसलिए, FCM चैट मैसेज या पुष्टि से जुड़े लेन-देन जैसे संवेदनशील कम्यूनिकेशन के लिए, एंड-टू-एंड एन्क्रिप्शन का इस्तेमाल करने का सुझाव देता है. एंड-टू-एंड एन्क्रिप्शन का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, इसे ज़्यादा सुरक्षित तरीके से लागू किया जाना चाहिए. जैसे, आपके सर्वर और ऐप्लिकेशन कोड में.
संवेदनशील डेटा के लिए एंड-टू-एंड एन्क्रिप्शन (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 को बायपास किया जाता है.
इस तरीके का एक नुकसान यह है कि ऐप्लिकेशन को डेटा पाने के लिए आपके सर्वर से कनेक्ट करना पड़ता है. इस वजह से, डेटा मिलने में देरी हो सकती है. जब किसी ऐप्लिकेशन को डेटा मैसेज मिलता है, तो आम तौर पर उसके पास सूचना दिखाने के लिए कुछ ही सेकंड होते हैं. इसके बाद, ऐप्लिकेशन बैकग्राउंड में चला जाता है. ऐसा हो सकता है कि आपके सर्वर से डेटा फ़ेच करने की प्रोसेस, इस समयावधि में पूरी न हो. इस डेटा को फ़ेच करने की सफलता, उपयोगकर्ता के डिवाइस की कनेक्टिविटी जैसे फ़ैक्टर पर निर्भर करती है.
इसलिए, ऐसी स्थितियों के लिए उपयोगकर्ता अनुभव के विकल्पों पर विचार करें जहां डेटा फ़ेच करने में ज़्यादा समय लग सकता है. उदाहरण के लिए, "आपको एक नया मैसेज मिला है" जैसी सामान्य सूचना दिखाई जा सकती है. इसके बाद, पूरा कॉन्टेंट मिलने पर उसे अपडेट किया जा सकता है.