So erstellen Sie einen sicheren Chat mit AppFriends und Virgil Security

Wir haben kürzlich eine Verschlüsselungserweiterung für AppFriends geschrieben und konnten in Zusammenarbeit mit unserem AppFriends SDK in weniger als 3 Tagen ein Beispiel für eine End-to-End-verschlüsselte Chat-App erstellen. Die App finden Sie hier.

Nach dem Start unseres In-App-Chat-Dienstes AppFriends bestand großes Interesse daran, den Chat-Inhalt vollständig privat und sicher zu gestalten. Das Team bewegte sich schnell und erkannte, was wir tun mussten:

  1. müssen asymmetrisch verschlüsselt werden, und nur der Benutzer sollte den Schlüssel zum Entschlüsseln der an ihn gesendeten Nachricht haben
  2. Wenn eine Nachricht empfangen wird, muss es eine Möglichkeit geben, den Ursprung der Nachricht zu überprüfen
  3. In einem Gruppenchat muss eine Nachricht so verschlüsselt werden, dass jeder in der Gruppe sie entschlüsseln kann
  4. Einige unserer Kunden möchten weiterhin den Chat-Inhalt sehen können, daher muss die Verschlüsselung eine optionale Funktion sein, die einfach ein- und ausgeschaltet werden kann. AppFriends sollten nicht vom Verschlüsselungsdienst eines Drittanbieters abhängig sein.

Nach der Suche entschieden wir uns für Virgil. Detaillierte Informationen zu Virgil Security finden Sie auf der Website. In diesem Artikel konzentrieren wir uns darauf, wie wir die oben genannten Ziele erreichen.

Ziel 1: Absoluter Datenschutz - Nur der Benutzer hat den Schlüssel zum Entschlüsseln einer Nachricht

Schritt 1: Wir generieren die Private-Public-Key-Paare in der App auf dem Gerät des Benutzers.

Schritt 2: Der private Schlüssel wird nur im sicheren Speicher des Geräts gespeichert

Schritt 3: Der öffentliche Schlüssel wird auf unserem Server veröffentlicht, damit er von anderen zum Verschlüsseln der Nachrichten verwendet werden kann

Ergebnis: Da der private Schlüssel nur auf dem Gerät gespeichert ist, kann nur der Benutzer des Geräts darauf zugreifen. Dies bedeutet, dass niemand die mit dem öffentlichen Schlüssel verschlüsselte Nachricht entschlüsseln kann, es sei denn, der Benutzer hat das Gerät und das Kennwort für das Gerät an jemanden verloren. Obwohl die verschlüsselten Nachrichten auf unserem Server gespeichert sind, haben wir oder Dritte keine Möglichkeit, sie zu lesen.

Ziel 2: Überprüfen Sie den Ursprung der Nachricht

Da die öffentlichen Schlüssel öffentlich sind, kann möglicherweise jeder eine Nachricht mit Ihrem öffentlichen Schlüssel senden und sich als Sie ausgeben. Daher ist es unbedingt erforderlich, den Ursprung der Nachricht zu authentifizieren.

Virgil bietet eine sehr praktische API, mit der ein Benutzer die Nachricht vor dem Senden mit einem privaten Schlüssel signieren kann. Auf der Empfängerseite müssen wir nur die Signatur der Nachricht mit dem öffentlichen Schlüssel authentifizieren, um den Ursprung der Nachricht zu überprüfen.

Ziel 3: Gruppenchatnachrichten müssen für alle Benutzer in der Gruppe lesbar sein

Mit der Virgil-API können wir die Nachricht mit allen öffentlichen Schlüsseln der Mitglieder der Gruppe verschlüsseln. Die Nachricht kann dann mit einem der privaten Schlüssel der Benutzer in der Chat-Gruppe entschlüsselt werden.

Es gibt einen kleinen Haken: Wenn ein Benutzer einem Gruppenchat beigetreten ist, nachdem bereits eine Unterhaltung stattgefunden hat, kann der neu beigetretene Benutzer die Nachrichten nicht lesen, die gesendet wurden, bevor er beigetreten ist. Wir glauben, dass dies für die meisten Anwendungen in Ordnung sein wird.

Ziel 4: Die Verschlüsselung sollte optional sein und AppFriends sollten keine Abhängigkeit von Virgil haben

Damit AppFriends nicht von Virgil abhängig ist, haben wir die Verschlüsselungsfunktion als Erweiterung für AppFriends erstellt, anstatt sie in AppFriend SDK aufzunehmen. Wir haben zunächst das Protokoll / die Schnittstelle der Verschlüsselungserweiterung definiert, damit AppFriends SDK einfach die Erweiterung aufrufen kann, die das Protokoll / die Schnittstelle implementiert, und sich nicht darum kümmern kann, wie sie implementiert werden. Daher ist AppFriends nicht von Virgil abhängig. Möglicherweise kann die Erweiterung mithilfe anderer Dienste erfolgen, die Virgil ähneln.

Wenn eine Implementierung der Erweiterung nicht für das AppFriend SDK bereitgestellt wird, kann davon ausgegangen werden, dass keine Verschlüsselung erforderlich ist, und es werden einfach keine Nachrichten über die Verschlüsselungserweiterung gesendet. Unsere Kunden, die keine Verschlüsselung benötigen, können weiterhin die alten Dienste nutzen, ohne etwas zu ändern.

Raum für Verbesserung

Mit dem aktuellen Setup wird der private Schlüssel auf dem Gerät des Benutzers gespeichert. Wenn der Benutzer das Gerät verliert, hat er keinen Zugriff mehr auf die von ihm gesendeten / empfangenen Nachrichten. Mithilfe der Multifaktorauthentifizierung können Benutzer nach dem Verlust des alten Geräts ein neues Gerät hinzufügen. Da der private Schlüssel jedoch nicht wiederhergestellt werden kann, können die alten Nachrichten nicht mehr entschlüsselt werden.

Danke fürs Lesen! Wenn Sie Kommentare oder Vorschläge haben, lassen Sie es mich bitte wissen. Lassen Sie mich auch wissen, ob Sie schreiben oder eine Chat-Funktion in Ihrer App benötigen.

Viel Spaß beim Codieren!