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

يتم تأمين طبقة النقل في Android، بالإضافة إلى الاتصال الكامل بين الخادم وخلفيات FCM والأجهزة العميلة، باستخدام بروتوكول أمان طبقة النقل (TLS). يوفّر ذلك تشفيرًا قويًا من نقطة إلى نقطة لجميع البيانات أثناء نقلها، ما يحميها من الاختراق على الشبكة. ويناسب نموذج الأمان القوي هذا الغالبية العظمى من التطبيقات. يمكنك العثور على مزيد من التفاصيل في مستندات بنية FCM.

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

إضافة التشفير التام بين الأطراف للبيانات الحسّاسة

بالنسبة إلى التطبيقات التي تتعامل مع بيانات حساسة بشكل خاص، مثل الرسائل الخاصة أو بيانات الاعتماد الشخصية، يمكنك إضافة طبقة حماية إضافية باستخدام التشفير التام بين الأطراف. تتضمّن العملية تشفير حمولة الرسالة على خادمك قبل إرسالها إلى 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 في عملية نقل البيانات.

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

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