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