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