يتم تأمين طبقة النقل في Android، بالإضافة إلى الاتصال الكامل بين الخادم وخوادم FCM الخلفية والأجهزة العميلة، باستخدام بروتوكول أمان طبقة النقل (TLS). يوفّر ذلك تشفيرًا قويًا من نقطة إلى نقطة لجميع البيانات أثناء نقلها، ما يحميها من الاختراق على الشبكة. ويناسب نموذج الأمان القوي هذا الغالبية العظمى من التطبيقات. يمكنك العثور على مزيد من التفاصيل في مستندات بنية FCM.
من القيود المفروضة على التشفير من نقطة إلى نقطة أنّه لا يتم تشفيره طوال مساره، بل يمكن للمرسل والمستلم فقط فك تشفير الرسالة. لهذا السبب، تنصح FCM باستخدام التشفير التام بين الأطراف للمراسلات التي تتضمّن معلومات حساسة، مثل رسائل المحادثة أو معاملات المصادقة. للاستفادة إلى أقصى حدّ من التشفير التام بين الأطراف، يجب تنفيذه على مستوى أعلى، مثلاً ضمن خوادمك ورمز تطبيقك.
إضافة التشفير التام بين الأطراف للبيانات الحسّاسة
بالنسبة إلى التطبيقات التي تتعامل مع بيانات حساسة بشكل خاص، مثل الرسائل الخاصة أو بيانات الاعتماد الشخصية، يمكنك إضافة طبقة حماية إضافية باستخدام التشفير التام بين الأطراف (E2EE). تتضمّن العملية تشفير حمولة الرسالة على خادمك قبل إرسالها إلى FCM وفك تشفيرها داخل تطبيقك على جهاز المستخدم. تعمل هذه الطريقة مع رسائل بيانات FCM، لأنّ حمولات الإشعارات العادية تتم معالجتها بواسطة نظام التشغيل ولا يمكن لتطبيقك فك تشفيرها قبل عرضها.
يُرجى العلم أنّ FCM لا يوفّر حلاً مدمجًا للتشفير التام بين الأطراف. وتتحمّل أنت مسؤولية تنفيذ طبقة الأمان هذه داخل تطبيقك. تتوفّر مكتبات وبروتوكولات خارجية مصمّمة لهذا الغرض، مثل Capillary أو DTLS.
مثال مفاهيمي
في ما يلي كيفية تغيير حمولة FCM data عند استخدام التشفير التام بين الأطراف.
قبل التشفير (الحِمل العادي):
{
"token": "DEVICE_REGISTRATION_TOKEN",
"data": {
"sender": "user123",
"message_body": "Your 2FA code is 555-123",
"timestamp": "1661299200"
}
}
بعد التشفير (حمولة التشفير التام بين الأطراف):
{
"token": "DEVICE_REGISTRATION_TOKEN",
"data": {
"encrypted_payload": "aG9va2Vk...so much encrypted gibberish...ZW5jcnlwdA=="
}
}
إذا نفّذت عملية التشفير التام بشكل صحيح، سيكون تطبيق العميل هو الجهة الوحيدة القادرة على فك تشفير الحمولة المشفّرة للكشف عن الرسالة الأصلية.
بديل: استرجاع المحتوى مباشرةً من الخادم
إذا لم يكن التشفير التام بين الأطراف مناسبًا لتطبيقك، يمكنك بدلاً من ذلك إرسال رسائل بيانات فارغة. تعمل هذه الرسائل كإشارة للتطبيق لجلب المحتوى مباشرةً من خوادمك. وهذا يعني أنّه يتم نقل البيانات الحسّاسة فقط بين تطبيقك وخوادمك، مع تجاوز FCM في عملية نقل البيانات.
من عيوب هذه الطريقة التأخير المحتمل الناتج عن اتصال التطبيق بخادمك لاسترداد البيانات. عندما يتلقّى تطبيق رسالة بيانات، لا يتوفّر له عادةً سوى بضع ثوانٍ لعرض إشعار قبل أن يتم تشغيله في الخلفية. قد لا يكتمل استرداد البيانات من الخادم خلال هذه الفترة. يعتمد نجاح عملية استرجاع البيانات هذه على عوامل مثل إمكانية اتصال جهاز المستخدم بالشبكة.
لذلك، ننصحك بالتفكير في بدائل لتجربة المستخدم في الحالات التي قد يستغرق فيها جلب البيانات وقتًا طويلاً. على سبيل المثال، يمكنك عرض إشعار عام مثل "لديك رسالة جديدة" ثم تعديله بعد استرداد المحتوى الكامل.