Verschlüsselter Chat

Wählen Sie, wie Nachrichten aufbewahrt werden, und teilen Sie dann den Link.

Schritt 1 von 3

Nachrichten aufbewahren

So funktioniert es

So startest du

Wähle, wie Nachrichten aufbewahrt werden, wähle einen Raumnamen, lege ein schwer zu erratendes Passwort mit mindestens 16 Zeichen fest und teile den Link mit den Personen, mit denen du sprechen möchtest. Räume entstehen nur hier, damit jeder Raum ein starkes Passwort und einen bewusst gewählten Nachrichtenmodus bekommt; die Adresse eines nicht vorhandenen Raums führt zurück zu diesem Formular. Der Link enthält keinen Schlüssel: Alle müssen das Passwort eingeben, das du auf anderem Weg weitergeben solltest, zum Beispiel persönlich oder über eine andere App. Ein gespeicherter Raum hat kein Passwort: Er bekommt eine zufällige Adresse und einen zufälligen 256-Bit-Schlüssel nach dem # im Link, dieser Link ist also der Schlüssel und muss ebenso sorgfältig geteilt werden.

Nachrichten

Jede Nachricht wird in deinem Browser mit AES-256-GCM verschlüsselt. Beim Betreten des Raums durchläuft das Passwort einmal Argon2id mit 64 MiB Speicher und 3 Durchläufen, sodass jeder Offline-Rateversuch langsam und speicherhungrig ist. HKDF-SHA256 leitet daraus dann den Nachrichtenschlüssel ab, der auch vom Nachrichtenmodus des Raums abhängt, sowie einen zweiten, separaten Wert, der dem Server nur beweist, dass du in den Raum gehörst. Der Server erfährt diesen Wert, nie aber den Verschlüsselungsschlüssel, und der Raum auf dem Server ist nach einem Hash dieses Werts benannt, nicht nach deinem Raumnamen. Ein gespeicherter Raum überspringt das langsame Passwort-Hashing: Sein Schlüssel ist bereits zufällig, daher leitet HKDF-SHA256 den Nachrichtenschlüssel und den Zugangswert direkt daraus ab. In Räumen ohne Serververlauf bekommt jede Nachricht zusätzlich eine zweite Schicht mit Forward Secrecy, die unten beschrieben ist.

Was der Server sieht und speichert

Die Räume laufen auf Cloudflare Workers. Das Relay leitet verschlüsselte Nachrichten an die Personen im Raum weiter und speichert sie nicht, außer in gespeicherten Räumen, wo es die verschlüsselten Nachrichten, höchstens 1000 pro Raum, in der Europäischen Union behält, bis ein Mitglied den Raum löscht oder ihn 90 Tage niemand besucht hat. Sonst behält es nur die Raumeinstellungen und löscht sie, wenn der Raum 7 Tage lang leer war. Es sieht allerdings, wann Nachrichten gesendet werden, wie viele Personen verbunden sind und am Timing vermutlich auch, wann jemand tippt. Jede Nachricht wird auf eine von begrenzt vielen Größen aufgefüllt, mindestens 512 Bytes, sodass kurze Nachrichten, Tippanzeigen und Anwesenheitssignale gleich aussehen und längere nur ihre ungefähre Größe verraten. Cloudflare sieht wie jeder Hoster deine IP-Adresse, und der Raumname steht in der Adresse der Seite, die du lädst. In gespeicherten Räumen behält es außerdem die öffentlichen ML-DSA-Schlüssel der Mitglieder, verschlüsselt mit dem Raumschlüssel, sodass es ein wiederkehrendes Mitglied nicht an seinem Schlüssel erkennt.

Verlauf und verschwindende Nachrichten

Im Standardmodus speichert jede Person den Verlauf in ihrem eigenen Browser: die signierten Nachrichten, versiegelt mit einem aus dem Raumgeheimnis abgeleiteten Schlüssel, sodass sie ein Neuladen überstehen. Wer online ist, gibt Neuankömmlingen bis zu 200 der letzten Nachrichten weiter, nur für sie verschlüsselt und weiterhin mit der Signatur jeder Person, die sie geschrieben hat, sodass beim Weitergeben niemand anderen Worte in den Mund legen kann. Forward Secrecy schützt, was über das Relay geht; was die Browser der Mitglieder behalten, können sie allen zeigen, die mit dem Passwort beitreten, und genau dafür ist dieser Modus da. In einem gespeicherten Raum liegt der verschlüsselte Verlauf stattdessen auf dem Server, also ist er nach einem Neuladen, auf einem neuen Gerät und für später Hinzukommende da; dein Browser behält ebenfalls eine Kopie und holt vom Server nur, was ihm fehlt. Stattdessen kannst du alle Nachrichten zwischen 5 Sekunden und einem Tag nach dem Anzeigen verschwinden lassen; dann wird nichts gespeichert. In jedem Raum kannst du eine einzelne Nachricht mit !N beenden, etwa !30, dann verschwindet sie nach N Sekunden und landet nicht im gespeicherten Verlauf. Der Timer läuft im Browser jeder Person, ein manipulierter Client oder ein einfacher Screenshot kann also trotzdem eine Kopie behalten.

Anrufe

Sprach- und Videoanrufe nutzen WebRTC. Zusätzlich zur üblichen DTLS-SRTP-Verschlüsselung verschlüsselt Ihr Browser jeden Audio- und Videoframe, auch die Bildschirmfreigabe, vor dem Senden mit AES-256-GCM nach dem Vorbild von SFrame. Jede Person erzeugt beim Beitreten einen zufälligen Medienschlüssel und gibt ihn jeder anderen einzeln weiter: innerhalb des verschlüsselten Raumkanals und zusätzlich mit einem Schlüssel versiegelt, den für diesen Anruf nur diese beiden Browser teilen (ECDH P-256). Verlässt jemand den Anruf, wechseln alle Verbleibenden zu einem neuen Schlüssel, sodass die Person, die gegangen ist, das Folgende nicht entschlüsseln kann. Frames, die sich nicht entschlüsseln lassen, werden verworfen und nie abgespielt, und ein Browser, der keine Frames verschlüsseln kann, kann keinem Anruf beitreten. Der Verbindungsaufbau läuft als verschlüsselte Nachrichten über den Raum. Die Medien gehen immer über ein TURN-Relay, sodass die Teilnehmenden nie die IP-Adressen der anderen sehen; das Relay leitet nur verschlüsselte Pakete weiter. Jede Person verbindet sich mit jeder anderen, daher funktionieren Anrufe in kleinen Gruppen am besten.

Dateien

Dateien bis 90 MB werden in deinem Browser mit einem eigenen zufälligen Schlüssel verschlüsselt, einschließlich des Dateinamens. Schlüssel und Download-Link reisen nur in der verschlüsselten Nachricht, eine Datei ist also genau so geschützt wie die Nachricht, die sie trägt, Forward Secrecy eingeschlossen. Die verschlüsselte Datei wird in den eigenen Speicher von encrypt.click hochgeladen oder, falls das fehlschlägt, über den Server von encrypt.click zu Ausweich-Hostern (nur Dateien bis 50 MB). Die Hoster sehen nur die verschlüsselte Datei, ihre Größe und die hochladende Adresse. Hochgeladene Dateien werden 24 Stunden nach dem Upload gelöscht; die Nachricht bleibt im Verlauf, der Download nicht.

Gut zu wissen

Der Chat ist nur so privat wie der Link oder das Passwort: Wer sie hat, kann beitreten und ab dann mitlesen. In Räumen mit Forward Secrecy öffnet ein später erfahrenes Passwort aber keinen vorher aufgezeichneten Verkehr, auch wenn im Standardmodus Mitglieder, die online sind, den jüngsten Verlauf an alle weitergeben, die beitreten. Ein falsches Passwort führt zu einem Raum, den es nicht gibt. Meldet die Seite also, dass der Raum nicht existiert, obwohl du andere erwartet hast, überprüfe das Passwort. Bis zu 32 Personen können einem Raum beitreten.

Schlüssel der Mitglieder in gespeicherten Räumen

In jedem Raum erzeugt Ihr Browser einen Signaturschlüssel für diesen Raum und behält ihn für sich; jede Nachricht trägt die öffentliche Hälfte und eine Signatur, und alles Unsignierte wird verworfen, auch Verlauf, den andere Mitglieder weitergeben. Namen sind nur Etiketten: der zufällige Alias oder was ein Mitglied eingetippt hat. Die anderen Mitglieder merken sich, mit welchem Schlüssel ein Name zuerst aufgetaucht ist, und warnen Sie, wenn derselbe oder ein zum Verwechseln ähnlicher Name unter einem neuen Schlüssel erscheint, denn genau so sähe ein Betrüger aus, der das Passwort oder den Link kennt. Die Mitgliederliste zeigt zu jedem Mitglied einen Schlüsselcode, einen kurzen Fingerabdruck dieses einen Schlüssels, und eine Sicherheitsnummer aus beiden Schlüsseln, die auf beiden Bildschirmen gleich ist: vergleichen Sie sie persönlich oder per Stimme. In einem gespeicherten Raum ist der Schlüssel eines Mitglieds das Paar aus seinem Ed25519- und seinem ML-DSA-44-Schlüssel, und Schlüsselcode und Sicherheitsnummer decken beide ab. Ein neuer Browser oder ein neues Gerät erhält einen neuen Schlüssel, rechnen Sie nach einem Wechsel also mit dieser Warnung. Die Signatur beweist, wer im Raum eine Nachricht geschrieben hat, nicht, wer die Person ist, und nur das Passwort oder der Link lässt jemanden hinein. Der Nachrichtenmodus ist Teil des Raumschlüssels, daher kann der Server einen Raum mit verschwindenden Nachrichten nicht heimlich in einen verwandeln, der den Verlauf behält. In einem gespeicherten Raum kann jeder, der den Link gesehen hat, alles lesen, solange der Raum existiert; teilen Sie ihn also mit Bedacht und löschen Sie den Raum, wenn er seinen Zweck erfüllt hat. Das Löschen entfernt den Verlauf vom Server und aus den Browsern aller Verbundenen.

Forward Secrecy

In Räumen, die den Verlauf nur in Browsern behalten, und in Räumen mit verschwindenden Nachrichten öffnet der Raumschlüssel allein keine Nachricht. Jeder Browser erzeugt beim Beitreten ein neues P-256-Schlüsselpaar und hält es nur im Arbeitsspeicher. Jedes Mitglied hat eine eigene Sendekette: Jede Nachricht wird mit AES-256-GCM unter einem Schlüssel verschlüsselt, den HKDF-SHA256 aus der Kette ableitet, danach rückt die Kette einen Schritt weiter, und benutzte Schlüssel werden gelöscht. Den aktuellen Kettenschlüssel erhält jedes andere Mitglied einzeln, versiegelt mit einem Schlüssel aus ihren beiden kurzlebigen Schlüsseln (ECDH) zusammen mit einem aus dem Raumpasswort abgeleiteten Geheimnis, und wie immer im signierten Raumkanal. Wer den Verkehr aufzeichnet und das Passwort später erfährt, kann die Nachrichten nicht lesen, ohne den Schlüsselaustausch zu brechen, und nach dem Ende der Sitzung sind die nötigen Schlüssel auf keinem Gerät mehr. Ein künftiger Quantencomputer, der P-256 bricht, bräuchte weiterhin das Passwort; gegen jemanden, der das Passwort und einen solchen Rechner hat, gilt Forward Secrecy nicht. Ketten werden nach 100 Nachrichten oder 10 Minuten ersetzt und jedes Mal, wenn jemand geht: Die neue Kette bekommen nur Mitglieder, die antworten, wer gegangen ist, kann mit seinen Schlüsseln also nicht weiterlesen. Neuankömmlinge erhalten jede Kette erst in ihrem aktuellen Schritt, sodass nichts, was vor ihrer Ankunft über das Relay ging, mit ihren Schlüsseln aufgeht. Gespeicherte Räume haben keine Forward Secrecy: Ihr Verlauf muss auf jedem Gerät mit dem Link lesbar bleiben.

Gespeicherte Räume: vollständiger Verlauf und Post-Quanten-Signaturen

Gespeicherte Räume prüfen stattdessen, ob ihr Verlauf vollständig ist. Jede gespeicherte Nachricht trägt die laufende Nummer ihres Autors und den Hash seiner vorherigen gespeicherten Nachricht, beides unter den Signaturen. Dein Browser verfolgt beim Eintreffen des Verlaufs die Kette jedes Autors und merkt sich, wie weit er gekommen ist, und Mitglieder, die online sind, nennen ihre letzte Nummer und ihren Hash. Lässt der Server Nachrichten weg, bringt er die Nachrichten eines Autors in eine andere Reihenfolge oder hält er die neuesten zurück, oder beanspruchen zwei verschiedene Nachrichten denselben Platz, zeigt der Chat eine Warnung. Der Server löscht weiterhin die ältesten Nachrichten, sobald ein Raum 1000 enthält, und der Chat weist darauf hin, wenn das während deiner Abwesenheit geschah; er kann außerdem die neuesten Nachrichten von jemandem zurückhalten, der nicht online ist, und die Reihenfolge zwischen verschiedenen Autoren wird nicht geprüft. Gespeicherte Räume signieren außerdem jede Nachricht neben Ed25519 auch mit ML-DSA-44 (FIPS 204), und eine Nachricht zählt nur, wenn beide Signaturen gültig sind; wer eine fälschen will, müsste also beide brechen. Jeder Browser hält seinen ML-DSA-Schlüssel versiegelt mit einem aus dem Raumlink abgeleiteten Schlüssel. Nachrichten verweisen per Hash auf ihn, und der Server behält die öffentlichen Schlüssel der Mitglieder verschlüsselt mit dem Raumschlüssel, damit sich auch Nachrichten von Mitgliedern prüfen lassen, die nicht online sind. Eine Nachricht ohne gültige ML-DSA-Signatur wird verworfen, auch eine, deren ML-DSA-Schlüssel nicht verfügbar ist.