אבטחת נתוני ההודעות באמצעות הצפנה מקצה לקצה

שכבת התעבורה של Android, יחד עם כל החיבור בין השרת, נקודות הקצה העורפיות של FCM ומכשירי הלקוח, מאובטחת באמצעות Transport Layer Security‏ (TLS). כך מתקבלת הצפנה חזקה מקצה לקצה לכל הנתונים בזמן ההעברה, והם מוגנים מפני יירוט ברשת. מודל האבטחה החזק הזה מתאים לרוב האפליקציות. פרטים נוספים זמינים במסמכי התיעוד בנושא ארכיטקטורת FCM.

אחד מהמגבלות של הצפנה מנקודה לנקודה הוא שהיא לא מוצפנת לאורך כל הנתיב שלה, ורק השולח והנמען יכולים לפענח את ההודעה. לכן FCM ממליצה להשתמש בהצפנה מקצה לקצה כדי לשמור על הפרטיות של תקשורת רגישה, כמו הודעות בצ'אט או עסקאות אימות. כדי להפיק את המרב מהצפנה מקצה לקצה, צריך להטמיע אותה ברמה גבוהה יותר, למשל בשרתים ובקוד האפליקציה.

הוספת הצפנה מקצה לקצה למידע אישי רגיש

באפליקציות שמטפלות בנתונים רגישים במיוחד, כמו הודעות פרטיות או פרטי כניסה אישיים, אפשר להוסיף שכבת הגנה נוספת באמצעות הצפנה מקצה לקצה (E2EE). התהליך כולל הצפנה של מטען ההודעה בשרת לפני שליחתו אל FCM ופענוח שלו באפליקציה במכשיר של המשתמש. ההצפנה הזו פועלת עם הודעות נתונים של FCM, כי מערכת ההפעלה מטפלת במטענים של התראות רגילות ואי אפשר לפענח אותם באפליקציה לפני שהם מוצגים.

שימו לב: FCM לא מספק פתרון מובנה להצפנה מקצה לקצה. אתם אחראים להטמעת שכבת האבטחה הזו באפליקציה שלכם. יש ספריות ופרוטוקולים חיצוניים שנועדו למטרה הזו, כמו Capillary או DTLS.

דוגמה קונספטואלית

כך משתנה מטען הייעודי (payload) של 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 לצורך העברת הנתונים.

חיסרון של השיטה הזו הוא העיכוב הפוטנציאלי שנגרם כשהאפליקציה מתחברת לשרת כדי לאחזר את הנתונים. כשמתקבלת באפליקציה הודעת נתונים, בדרך כלל יש לה רק כמה שניות להציג התראה לפני שהיא עוברת לפעול ברקע. יכול להיות שאיחזור הנתונים מהשרת לא יושלם במהלך הזמן הזה. הצלחת איחזור הנתונים תלויה בגורמים כמו הקישוריות של המכשיר של המשתמש.

לכן, כדאי לשקול חלופות לחוויית המשתמש במצבים שבהם אחזור הנתונים עלול להימשך זמן רב מדי. לדוגמה, אפשר להציג הודעה גנרית כמו "יש לך הודעה חדשה" ואז לעדכן אותה אחרי שהתוכן המלא יאוחזר.