שכבת התעבורה של Android, יחד עם כל החיבור בין השרת, נקודות הקצה העורפיות של FCM ומכשירי הלקוח, מאובטחת באמצעות Transport Layer Security (TLS). ההצפנה הזו מספקת הצפנה חזקה מקצה לקצה לכל הנתונים בזמן ההעברה, ומגנה עליהם מפני יירוט ברשת. מודל האבטחה החזק הזה מתאים לרוב המוחלט של האפליקציות. פרטים נוספים זמינים בתיעוד בנושא ארכיטקטורת FCM.
אחד מהמגבלות של הצפנה מנקודה לנקודה הוא שהיא לא מוצפנת לאורך כל הנתיב, ורק השולח והמקבל יכולים לפענח את ההודעה. לכן FCM ממליצה להשתמש בהצפנה מקצה לקצה כדי לשמור על הפרטיות של תקשורת רגישה, כמו הודעות בצ'אט או עסקאות אימות. כדי להפיק את המרב מהצפנה מקצה לקצה, צריך להטמיע אותה ברמה גבוהה יותר, למשל בשרתים ובקוד האפליקציה.
הוספת הצפנה מקצה לקצה למידע אישי רגיש
באפליקציות שמטפלות בנתונים רגישים במיוחד, כמו הודעות פרטיות או פרטי כניסה אישיים, אפשר להוסיף שכבת הגנה נוספת באמצעות הצפנה מקצה לקצה (E2EE). התהליך כולל הצפנה של מטען הייעודי (payload) של ההודעה בשרת לפני השליחה אל FCM, ופענוח שלו באפליקציה במכשיר של המשתמש. האפשרות הזו פועלת עם הודעות נתונים של FCM, כי מערכת ההפעלה מטפלת במטענים ייעודיים (payloads) של התראות רגילות, והאפליקציה לא יכולה לפענח אותם לפני שהם מוצגים.
שימו לב: 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 לצורך העברת הנתונים.
חיסרון של השיטה הזו הוא העיכוב הפוטנציאלי שנגרם בגלל שהאפליקציה מתחברת לשרת כדי לאחזר את הנתונים. כשמתקבלת באפליקציה הודעת נתונים, בדרך כלל יש לה רק כמה שניות להציג התראה לפני שהיא עוברת לפעול ברקע. יכול להיות שהבאת הנתונים מהשרת לא תושלם במהלך חלון הזמן הזה. הצלחת אחזור הנתונים תלויה בגורמים כמו הקישוריות של המכשיר של המשתמש.
לכן, כדאי לשקול חלופות לחוויית המשתמש במצבים שבהם אחזור הנתונים עלול להימשך זמן רב מדי. לדוגמה, אפשר להציג הודעה גנרית כמו "יש לך הודעה חדשה" ואז לעדכן אותה אחרי שהתוכן המלא יאוחזר.