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

يتم تأمين طبقة النقل في 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 لنقل البيانات.

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

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