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, sodass sie nicht im Netzwerk abgefangen werden können. Dieses robuste Sicherheitsmodell ist für die meisten 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, da nur der Absender und der Empfänger die Nachricht entschlüsseln können. Aus diesem Grund empfiehlt FCM, für datenschutz relevante Kommunikation wie Chatnachrichten oder Authentifizierungstransaktionen die Ende-zu-Ende-Verschlüsselung zu verwenden. Damit die Ende-zu-Ende-Verschlüsselung optimal genutzt werden kann, 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 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 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 die E2EE-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 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, eine Benachrichtigung anzuzeigen, bevor sie in den Hintergrund verschoben wird. Das Abrufen von Daten von Ihrem Server ist möglicherweise nicht innerhalb dieses Zeitraums abgeschlossen. Der Erfolg dieses Datenabrufs hängt von Faktoren wie der Geräteverbindung des Nutzers ab.

Daher sollten Sie Alternativen für die Nutzererfahrung in Betracht ziehen, wenn 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.