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