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

Die Android-Transportschicht und die gesamte Verbindung zwischen Ihrem Server, den FCM-Back-Ends und den Clientgeräten werden mit Transport Layer Security (TLS) gesichert. Dadurch wird eine starke Punkt-zu-Punkt-Verschlüsselung für alle Daten während der Übertragung bereitgestellt, die sie vor dem Abfangen im Netzwerk schützt. Dieses robuste Sicherheitsmodell ist für die überwiegende Mehrheit der Anwendungen geeignet. Weitere Informationen finden Sie in der FCM-Architektur Dokumentation.

Eine der Einschränkungen der Punkt-zu-Punkt-Verschlüsselung besteht darin, dass sie nicht für den gesamten Pfad verschlüsselt ist, wobei nur der Absender und der Empfänger die Nachricht decodieren können. Aus diesem Grund empfiehlt FCM, die Ende-zu-Ende-Verschlüsselung für datenschutz relevante Kommunikation wie Chatnachrichten oder Authentifizierungstransaktionen zu verwenden. Um die Ende-zu-Ende-Verschlüsselung optimal zu nutzen, muss sie auf einer höheren Ebene implementiert werden, z. B. auf Ihren Servern und im App-Code.

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

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

Vor der Verschlüsselung (Standardnutzlast):

    {
      "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 Ihre E2E-Verschlüsselung korrekt implementiert haben, kann nur die Clientanwendung die verschlüsselte Nutzlast entschlüsseln, um die ursprüngliche Nachricht zu lesen.

Alternative: Inhalte direkt von Ihrem Server abrufen

Wenn die Ende-zu-Ende-Verschlüsselung für Ihre App nicht geeignet ist, können Sie stattdessen leere Datennachrichten senden. Diese Nachrichten dienen als Signal für die App, die Inhalte direkt von Ihren Servern abzurufen. Das bedeutet, dass die sensiblen Daten nur zwischen Ihrer App und Ihren Servern übertragen werden und FCM für die Datenübertragung umgangen wird.

Ein Nachteil dieser Methode ist die potenzielle 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, eine Benachrichtigung anzuzeigen, bevor sie in den Hintergrund verschoben wird. Das Abrufen von Daten von Ihrem Server kann in diesem Zeitraum möglicherweise nicht abgeschlossen werden. Der Erfolg dieses Datenabrufs hängt von Faktoren wie der Geräteverbindung des Nutzers ab.

Berücksichtigen Sie daher Alternativen für die Nutzererfahrung in Situationen, in denen der Datenabruf zu lange dauern könnte. Sie könnten beispielsweise eine allgemeine Benachrichtigung wie „Sie haben eine neue Nachricht“ anzeigen und sie dann aktualisieren, sobald der vollständige Inhalt abgerufen wurde.