Nachrichtendaten mit Ende-zu-Ende-Verschlüsselung schützen

Die Android-Transportschicht sowie die gesamte Verbindung zwischen Ihrem Server, FCM-Backends und Clientgeräten werden mit Transport Layer Security (TLS) geschützt. Dies bietet eine starke Punkt-zu-Punkt-Verschlüsselung für alle Daten während der Übertragung und schützt sie davor, im Netzwerk abgefangen zu werden. Dieses robuste Sicherheitsmodell ist für die meisten Anwendungen geeignet. Weitere Informationen finden Sie in der Dokumentation zur FCM-Architektur.

Eine der Einschränkungen der Punkt-zu-Punkt-Verschlüsselung besteht darin, dass die Daten nicht auf dem gesamten Weg verschlüsselt sind, sodass nur der Absender und der Empfänger die Nachricht decodieren können. Daher empfiehlt FCM die Verwendung einer Ende-zu-Ende-Verschlüsselung für datenschutzrelevante Kommunikation wie Chatnachrichten oder Authentifizierungstransaktionen. Damit Sie die Ende-zu-Ende-Verschlüsselung optimal nutzen können, muss sie auf einer höheren Ebene implementiert werden, z. B. auf Ihren Servern und im Anwendungscode.

Ende-zu-Ende-Verschlüsselung für sensible Daten hinzufügen

Für Anwendungen, die besonders sensible Daten wie private Nachrichten oder persönliche Anmeldedaten verarbeiten, können Sie mit der Ende-zu-Ende-Verschlüsselung (E2EE) eine zusätzliche Schutzebene hinzufügen. Dabei wird die Nachrichtennutzlast auf Ihrem Server verschlüsselt, bevor sie an FCM gesendet wird, und dann in Ihrer App auf dem Gerät des Nutzers entschlüsselt. Dies funktioniert mit FCM-Datennachrichten, da Standardbenachrichtigungsnutzlasten vom Betriebssystem verarbeitet werden und von Ihrer App nicht entschlüsselt werden können, bevor sie angezeigt werden.

Beachten Sie, dass FCM keine integrierte Lösung für die Ende-zu-Ende-Verschlüsselung bietet. Sie sind für die Implementierung dieser Sicherheitsebene in Ihrer Anwendung verantwortlich. Es gibt externe Bibliotheken und Protokolle, die für diesen Zweck entwickelt wurden, z. B. Capillary oder DTLS.

Konzeptionelles Beispiel

So ändert sich die FCM-data-Nutzlast bei Verwendung der E2E-Verschlüsselung.

Vor der Verschlüsselung (Standard-Nutzlast):

    {
      "token": "DEVICE_REGISTRATION_TOKEN",
      "data": {
        "sender": "user123",
        "message_body": "Your 2FA code is 555-123",
        "timestamp": "1661299200"
      }
    }

Nach der Verschlüsselung (E2EE-Nutzlast):

  {
    "token": "DEVICE_REGISTRATION_TOKEN",
    "data": {
      "encrypted_payload": "aG9va2Vk...so much encrypted gibberish...ZW5jcnlwdA=="
    }
  }

Wenn Sie die E2E-Verschlüsselung korrekt implementiert haben, ist die Clientanwendung die einzige Partei, die die verschlüsselte Nutzlast entschlüsseln kann, um die ursprüngliche Nachricht anzuzeigen.

Alternative: Inhalte direkt von Ihrem Server abrufen

Wenn die Ende-zu-Ende-Verschlüsselung für deine App nicht geeignet ist, kannst du stattdessen leere Datennachrichten senden. Diese Nachrichten dienen als Signal für die App, den Inhalt direkt von Ihren Servern abzurufen. Das bedeutet, dass die sensiblen Daten nur zwischen Ihrer App und Ihren Servern übertragen werden und FCM bei der Datenübertragung umgangen wird.

Ein Nachteil dieser Methode ist die mögliche Verzögerung, die dadurch entsteht, dass die App eine Verbindung zu Ihrem Server herstellt, um die Daten abzurufen. Wenn eine App eine Datennachricht empfängt, hat sie in der Regel nur wenige Sekunden Zeit, um eine Benachrichtigung anzuzeigen, bevor sie in den Hintergrund verschoben wird. Das Abrufen von Daten von Ihrem Server wird möglicherweise nicht innerhalb dieses Zeitfensters abgeschlossen. Der Erfolg dieses Datenabrufs hängt von Faktoren wie der Gerätekonnektivität des Nutzers ab.

Ziehen Sie daher Alternativen für die Nutzererfahrung in Betracht, wenn das Abrufen der Daten zu lange dauern könnte. Sie können beispielsweise eine allgemeine Benachrichtigung wie „Sie haben eine neue Nachricht“ anzeigen und diese dann aktualisieren, sobald der vollständige Inhalt abgerufen wurde.