שכבת התעבורה של 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"
}
}
אחרי ההצפנה (מטען ייעודי (payload) של E2EE):
{
"token": "DEVICE_REGISTRATION_TOKEN",
"data": {
"encrypted_payload": "aG9va2Vk...so much encrypted gibberish...ZW5jcnlwdA=="
}
}
אם הטמעתם את ההצפנה מקצה לקצה בצורה נכונה, רק אפליקציית הלקוח יכולה לפענח את מטען הנתונים המוצפן כדי לחשוף את ההודעה המקורית.
אפשרות חלופית: שליפת תוכן ישירות מהשרת
אם הצפנה מקצה לקצה לא מתאימה לאפליקציה שלכם, אתם יכולים לשלוח הודעות נתונים ריקות. ההודעות האלה משמשות כאות לאפליקציה לאחזור התוכן ישירות מהשרתים שלכם. כלומר, הנתונים הרגישים מועברים רק בין האפליקציה לשרתים שלכם, בלי לעבור דרך FCM.
חיסרון של השיטה הזו הוא העיכוב הפוטנציאלי שנגרם בגלל שהאפליקציה מתחברת לשרת כדי לאחזר את הנתונים. כשאפליקציה מקבלת הודעת נתונים, בדרך כלל יש לה רק כמה שניות להציג התראה לפני שהיא עוברת לרקע. יכול להיות שאיחזור הנתונים מהשרת לא יושלם במסגרת הזמן הזו. הצלחת אחזור הנתונים תלויה בגורמים כמו הקישוריות של המכשיר של המשתמש.
לכן, כדאי לשקול חלופות לחוויית המשתמש במצבים שבהם יכול להיות שייקח יותר מדי זמן לאחזר את הנתונים. לדוגמה, אפשר להציג הודעה גנרית כמו "יש לך הודעה חדשה" ואז לעדכן אותה אחרי שמאחזרים את התוכן המלא.