تأمين بيانات الرسائل باستخدام التشفير التام بين الأطراف

يتم تأمين طبقة النقل في Android، بالإضافة إلى الاتصال الكامل بين الخادم والواجهات الخلفية لخدمة "مراسلة Firebase السحابية" وأجهزة العملاء، باستخدام بروتوكول أمان طبقة النقل (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 لنقل البيانات.

من عيوب هذه الطريقة التأخير المحتمل الناتج عن اتصال التطبيق بخادمك لاسترداد البيانات. عندما يتلقّى تطبيق رسالة بيانات، يكون لديه عادةً بضع ثوانٍ فقط لعرض إشعار قبل أن يتم نقله إلى الخلفية. قد لا تكتمل عملية جلب البيانات من الخادم خلال هذه الفترة. يعتمد نجاح عملية استرجاع البيانات هذه على عوامل مثل إمكانية اتصال جهاز المستخدم بالشبكة.

لذلك، ننصحك بالتفكير في بدائل لتجربة المستخدم في الحالات التي قد يستغرق فيها جلب البيانات وقتًا طويلاً. على سبيل المثال، يمكنك عرض إشعار عام مثل "لديك رسالة جديدة"، ثم تعديله بعد استرداد المحتوى الكامل.