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