
End-to-End-diskretes Web-Chat mit starker Kryptographie
Mit 0FC können Sie einen sicheren Chat in den Browser-Gruppen mit isolierten Chatrooms ausführen und einige Besonderheiten haben:
- End-to-End für einen bestimmten Chatraum: Der Server kann es nicht besser machen als DoS-Angriff
- Der Server wird als minimal vertrauenswürdige Zone angesehen, alle wichtigen Vorgänge erfolgen auf der Client -Seite:
- Im Rahmen des Roombesitzerbrowser
- Geheime Token, die zum Zugriff auf den Chatroom verwendet werden, werden auf der Client -Seite generiert (obwohl ein Teil der Überprüfung auf der Serverseite stattfindet)
- Während der Teilen von Teilen wird jede Servicenachricht durch Schlüssel geschützt, die aus zufälligen Daten von mehr als einer Partei abgeleitet sind
- Ausgehende Nachrichten werden verschlüsselt und nur einmal gesendet (alle Zimmermitglieder teilen den gleichen symmetrischen Schlüssel)
- Secret Access Token wird einmal verwendet (nach Schlüsselbestätigung gelöscht)
0FC wurde als Testspielplatz für einige anspruchsvolle Anwendungsfälle von Themis/Webthemis begonnen, wurde aber interessant genug, um ihn als separaten Codeklob zu veröffentlichen.
Wichtig: Um als wirklich sicher angesehen zu werden, sollte 0FC von Dritten validiert und ordnungsgemäß bereitgestellt werden. Kein kryptografisches Instrument sollte ohne Audit von Drittanbietern vertrauen. Bevor dies geschieht (falls dies jemals der Fall ist), gibt es am Ende dieses Dokuments eine Protokollbeschreibung, mit der Sie sich die Innenarbeit von 0FC ansehen und Ihr eigenes Urteilsvermögen fällen können. Wir selbst sind uns einiger selten möglicher Bedrohungen bewusst, die nicht mit der Kryptographie zu tun haben, sondern mit der Art und Weise, wie Browser funktioniert (siehe Abschnitt des Bedrohungsmodells des Blog -Posts).
0FC Backend ist in Python geschrieben, Front-End ist Webthemis-basiert und funktioniert also (noch) in Google Chrome-basierten Browsern.
0FC wird über die Apache 2 -Lizenz lizenziert. Wir würden uns freuen, wenn Sie etwas basierend auf diesem Code und dem Protokoll von 0FC erstellen. Wenn Sie dabei helfen möchten, setzen Sie sich mit uns in Verbindung.
Lesen Sie den Blog -Beitrag, um mehr über 0FC und zugrunde liegende Technologien zu erfahren.
Installieren und Verwenden
0FC besteht aus zwei Komponenten: einem Server und Client.
0FC Server
0FC Server erfordert:
- Python 3.4
- Pip
- themis (bauen und installieren)
Zunächst müssen Sie Python -Abhängigkeiten installieren:
pip install -r requirements.txt
Nachdem Sie dies getan haben, können Sie den Server ausführen:
Standardmäßig hört Server Port 5103 an. So ändern Sie den Port -add -p <port> :
python3 server.py -port 333
0FC Client
0FC -Client wird bereits in / static / Ordner kompiliert. Beachten Sie, dass es die Serverschlüssel hardcodiert hat. Wenn Sie die Schlüssel regenerieren, müssen Sie den Kunden umgebaut werden (siehe unten).
Mit 0FC
... ist ziemlich selbsterklärend. Sie können einen neuen Raum erstellen, Token generieren und Personen einladen, sich anzuschließen, oder vorhandene Token eingeben, um den Raum zu betreten.
Wiederaufbau von 0FC -Client
Wenn Sie den 0FC -Client (PNACL -Objekt) selbst neu kompilieren möchten, müssen Sie Folgendes tun:
- Um ein PNACL -Objekt zu erstellen, müssen Sie NaCl SDK installieren und eine Umweltvariable
PNACL_ROOT mit Pfad zu installierten SDK -Dateien erstellen. - Clone 0FC -Repository mit Submodules aus GitHub:
git clone https://github.com/cossacklabs/0fc
cd 0fc
git submodules update --init --recursive
- Webthemis erstellen:
- Build 0FC PNACl -Modul:
Du bist fertig!
Architektur

0FC besteht aus 2 klassischen Komponenten: Client und Server.
Kunden sind verantwortlich für:
- UI dem Benutzer anzeigen
- Alle kryptografischen und vertrauenswürdigen Managementfunktionen
- Kommunikation mit Relay Server
Der Server ist verantwortlich für:
- Servieren von UI + PEXE (PNACL -Modul) an Clients über http erhalten
- Ausführen von WebSocket -Relay -Dienst, der Nachrichten empfängt und an alle weiterleitet.
Über WebSocket-Link sprechen Clients mit dem Server über das Objekt von SecureSession themis, das eine Transportsicherheit auf hohem Niveau bietet. Serverschlüssel sind in Clients festgelegt, sodass das Vertrauen auf der Grundlage der Korrelation zwischen dem realen Serverschlüssel und dem Serverschlüssel in Binärdateien aufgenommen wird.
Innerhalb dieses SecureSession-Links werden die von Secellecell-verkürzten Nachrichten übertragen.
Protokoll & Schema

Raumkreation
- Der Raumbesitzer generiert ein Schlüsselpaar
[client] - Der Raumbesitzer generiert Raumschlüssel (mit deren Verschlüsseln von Nachrichten im Raum)
[client] - Der Raumbesitzer fordert den Server auf, den Raum zu erstellen, und empfängt die Raum -ID als Antwort
[client] + [server]
Andere einladen (Schlüsselfreigabe)
- Der Raumbesitzer generiert einen zufälligen (einmaligen) Einladungs-Token
[client] - Der Raumbesitzer sendet eine Einladung durch einen Out-of-Band-Kanal (wie E-Mail), der einladung Token, seinen öffentlichen Schlüssel und seinen Raum-ID
[client] enthält. - Der Benutzer empfängt das Einladungs -Token
[client] - Der Benutzer generiert ein Schlüsselpaar
[client] - Der Benutzer generiert zufälligen Verbindungsschlüssel
[client] - Der Benutzer sendet eine sichere Nachricht an den Raumbesitzer über Server mit verschlüsseltem Verbindungsschlüssel
[client] - Der Server kann über ACL einchecken, ob diese Einladung gültig ist, und übergeben die Nachricht an den Raumbesitzer
[server] - Der Raumbesitzer packt sich aus und beiträgt den Schlüssel aus
[client] - Der Raumbesitzer sendet den versiegelten Raumschlüssel über den Server mit dem Verbindungsschlüssel als Hauptschlüssel und laden Sie Token als Kontext ein
[client] ein. - Der Server kann über ACL überprüfen, ob diese Antwort gültig ist, und übergeben die Nachricht an den Benutzer
[server] - Benutzer versieht den Raumschlüssel
[client] - Der Benutzer sendet eine versiegelte Nachricht an den Raumbesitzer.
[client] - Der Eigentümer unterschreibt nach Überprüfung der Bestätigungsmeldung von Benutzern seinen öffentlichen Schlüssel und sendet an Server
[client] + [server] - Der Server überprüft die Signatur und berücksichtigt den Benutzer als hinzugefügt im Chatroom
[server] - Sobald eingeladen wurde, dass Token verwendet wurden, wird es vom Raumbesitzer
[server] verworfen.
Nachrichtenaustausch
- Zimmermitglieder tauschen Nachrichten aus und versiegeln sie mit Raumschlüssel. Der Server leitet nur verschlüsselte Nachrichten weiter, ohne auf seinen Inhalt zugreifen zu können.
[server]
Schlüsselmanagement
- Tastair wird für jeden Raum generiert
[client] - Keypair wird im Browser Persistenten Speicher
[client] gespeichert - Der persistente Speicher von Browser wird mit Secure Cell (Seal -Modus) verschlüsselt, der vom Benutzer des Benutzers abgeleitet wird, gibt beim Verbinden des CHAT
[client] eingegeben.
Serverkommunikation
- Clients kommunizieren mit dem Server mit der themis Secure Session
[server] - Der vertrauenswürdige öffentliche Schlüssel des Servers ist in den Clients
[client] - Der Server führt keine Client -Authentifizierung durch, vertraut automatisch jedem SS -Client -Schlüssel (dies ist der erste offensichtliche Schritt, um zu härten, wenn die Sicherheit wichtiger ist als Allgegenwart und Anonymität)
[server]
Schlüsselrotation
- Alle 100 (konfigurierbaren) gesendeten und empfangenen Nachrichten generieren der Raumbesitzer neuer Schlüssel, verschlüsselt ihn mit dem alten Schlüssel und sendet eine spezielle Nachricht
[client] - Der Server erzwingt, dass solche Nachrichten nur vom Raumbesitzer
[server] stammen.
Zimmerorchestrierung
- Für jeden Raum wird eine Liste von Mitgliedern als Liste der öffentlichen Schlüssel (+Angabe, wer Raumbesitzer)
[server] - In jedem Raum verfügt man über einen Raumbesitzer (ursprünglich Raumersteller)
[server] - Der Raumbesitzer ist für die Schlüsselrotation verantwortlich
[client]
Chat -Geschichte
- Server ermöglicht Clients, den Chat -Historie seit seiner letzten Abreise für Mitglieder, die online waren, vor der Rotation
[server] zu Kenntnissen vor der Rotation abzurufen und zu kennen. - Server ermöglicht Clients, den Chat -Verlauf seit der letzten Schlüsselrotation für neue Mitglieder zu holen
[server]
Willst du mehr wissen?
Lesen Sie unseren Blog -Beitrag mit einem Hintergrund zur 0FC -Entwicklung und verschiedenen Sicherheitsüberlegungen.