Transferify
Zurück zum Blog

Wie ein Peer-to-Peer-Transfer funktioniert, von Browser zu Browser

Bei einem Instant-Transfer geht die Datei aus deinem Browser in den Browser deines Empfängers. Sie wird nicht erst hochgeladen und wird nie auf unseren Servern gespeichert. Unser Dienst macht die beiden Browser miteinander bekannt. Unterwegs wird die Datei zweimal verschlüsselt und geht für mehr Tempo über mehrere Verbindungen gleichzeitig, und der Browser des Empfängers bestimmt das Tempo, damit keiner Seite der Arbeitsspeicher ausgeht.

Hier erklären wir jeden dieser Schritte. Für den Vergleich mit gehosteten Transfers siehe Peer-to-Peer und gehostete Transfers.

Die Schritte eines Instant-Transfers. Dein Browser registriert den Transfer und setzt den Schlüssel in den Link; der Empfänger öffnet den Link, unser Dienst prüft ihn, die beiden Browser tauschen Verbindungsdaten über den Signalisierungsdienst aus, und dann geht die verschlüsselte Datei von deinem Browser in den Browser des Empfängers.Die Schritte eines Instant-Transfers. Dein Browser registriert den Transfer und setzt den Schlüssel in den Link; der Empfänger öffnet den Link, unser Dienst prüft ihn, die beiden Browser tauschen Verbindungsdaten über den Signalisierungsdienst aus, und dann geht die verschlüsselte Datei von deinem Browser in den Browser des Empfängers.
Ein Instant-Transfer. Unser Dienst prüft den Link und macht die Browser miteinander bekannt. Die Datei geht zwischen den beiden Browsern, über ein TURN-Relais nur dann, wenn ein Netz eine direkte Verbindung blockiert. Der Schlüssel reist in dem Link, den du teilst.

Schritt 1: Der Link ist fertig, bevor etwas gesendet wird

Wenn du einen Instant-Transfer wählst, registriert dein Browser den Transfer bei unserem Dienst: die Angaben zu den Dateien und die Optionen, die du gewählt hast. Es werden keine Datei-Bytes gesendet. Sobald der Dienst antwortet, erzeugt dein Browser einen neuen AES-256-Schlüssel für diesen Transfer und hängt ihn im Freigabelink hinter das „#“. Browser senden diesen Teil eines Links an keinen Server, also erreicht der Schlüssel unseren Dienst nie.

Der Link funktioniert sofort. Dein Tab hält jetzt die Dateien bereit und wartet auf Empfänger.

Schritt 2: Die beiden Browser finden einander

Wenn dein Empfänger den Link öffnet, fragt sein Browser zuerst unseren Dienst nach dem Transfer. Der Dienst prüft den Link: dass er nicht abgelaufen ist, dass das Passwort stimmt, falls du eines gesetzt hast, und dass sein Download-Limit nicht aufgebraucht ist. Erst nach diesen Prüfungen sagt er dem Browser des Empfängers, welchen Browser er kontaktieren soll.

Zwei Browser in verschiedenen Netzen können einander nicht einfach anrufen. Sie tauschen Verbindungsdaten über unseren Signalisierungsdienst aus, der kurze Nachrichten über einen WebSocket zwischen ihnen weiterreicht. Diese Nachrichten beschreiben, wie die Verbindung zustande kommt. Sie enthalten keine Dateidaten und keinen Schlüssel. Dann ermittelt jeder Browser, wie er erreichbar ist:

  • STUN. Öffentliche STUN-Server sagen jedem Browser seine Adresse, wie das Internet sie sieht, und das reicht für die meisten Heim- und Büronetze.
  • TURN, wenn nötig. Manche Netze blockieren direkte Verbindungen. Für sie erstellt unser Dienst auf Anfrage Zugangsdaten für ein Relais, die nur 24 Stunden gültig sind, und die Verbindung geht dann über ein TURN-Relais.

Das Abrufen der Relais-Zugangsdaten hält einen Transfer nie lange auf: Dauert es länger als zwei Sekunden, starten die Browser nur mit STUN, und die Zugangsdaten werden beim nächsten Verbindungsversuch genutzt.

Ein Relais leitet den verschlüsselten Datenstrom weiter. Lesen kann es ihn nicht.

Schritt 3: doppelt verschlüsselt

Jeder WebRTC-Datenkanal ist zwischen den beiden Browsern mit DTLS verschlüsselt. Das allein schützt die Datei schon vor jedem, der das Netz beobachtet, auch vor dem Relais.

DTLS hat allerdings eine Abhängigkeit. Jeder Browser weist seine Identität mit dem Fingerabdruck eines Zertifikats nach, und diese Fingerabdrücke gehen über den Signalisierungsdienst. Ein kompromittierter Signalisierungsserver könnte sie austauschen und sich dazwischenschalten, und DTLS würde es nicht bemerken.

Drei ineinanderliegende Schichten. Die Datei-Bytes liegen in einer AES-256-GCM-Verschlüsselung, deren Schlüssel nur im Link steht, und diese liegt in der DTLS-Verschlüsselung der WebRTC-Verbindung. Das Netz und jedes Relais sehen nur die äußere Schicht, und der Signalisierungsdienst sieht weder den Schlüssel noch die Datei.Drei ineinanderliegende Schichten. Die Datei-Bytes liegen in einer AES-256-GCM-Verschlüsselung, deren Schlüssel nur im Link steht, und diese liegt in der DTLS-Verschlüsselung der WebRTC-Verbindung. Das Netz und jedes Relais sehen nur die äußere Schicht, und der Signalisierungsdienst sieht weder den Schlüssel noch die Datei.
Zwei Verschlüsselungsschichten bei einem Peer-to-Peer-Transfer. DTLS schützt die Verbindung; die innere AES-256-GCM-Schicht mit dem Schlüssel aus dem Link schützt die Datei auch dann, wenn der Signalisierungsdienst unehrlich wäre.

Deshalb fügt Transferify eine eigene Schicht hinzu. Dein Browser versiegelt jedes Stück der Datei mit AES-256-GCM, mit dem Schlüssel aus dem Link, bevor das Stück in die Verbindung geht. Der Signalisierungsdienst sieht diesen Schlüssel nie. Ein Server dazwischen würde nur verschlüsselte Stücke sehen, und jede Änderung, die er macht, würde an der Prüfung beim Empfänger scheitern. Jedes Stück ist außerdem an diesen Transfer, diese Datei und seine Position gebunden, also lassen sich Stücke nicht umstellen, weglassen oder gegen die einer anderen Datei tauschen. Die Einzelheiten stehen in wie Transferify Dateien in deinem Browser verschlüsselt.

Diese Schicht lässt sich nicht abschalten. Kann dein Browser sie nicht einrichten, startet der Transfer nicht, und der Browser eines Empfängers nimmt nur verschlüsselte Stücke an.

Schritt 4: mehrere Verbindungen gleichzeitig

Eine einzelne WebRTC-Verbindung nutzt eine schnelle Leitung selten voll aus, weil jede Verbindung ihr Sendetempo für sich vorsichtig steigert. Deshalb bittet der Browser des Empfängers deinen Browser, den Transfer über vier parallele Verbindungen zu senden, jede mit eigenem Weg und eigenem Tempo. Die beiden Browser nutzen die kleinere der Zahlen, die jede Seite erlaubt, nie mehr als acht.

Dein Browser verteilt die Stücke reihum auf die Verbindungen, und der Browser des Empfängers setzt sie wieder in die richtige Reihenfolge. Die Verbindungen gelingen oder scheitern gemeinsam: Fällt eine aus, stoppt der Transfer an diesen Empfänger als Ganzes.

Schritt 5: Der Empfänger bestimmt das Tempo

Ein Netz kann Stücke schneller liefern, als eine langsame Festplatte sie speichern kann. Ohne Grenze würden sich die wartenden Stücke im Arbeitsspeicher des Empfängers stapeln, bis der Browser aufgibt.

Stattdessen gewährt der Browser des Empfängers deinem Browser ein Budget von 32 MiB verschlüsselter Daten auf einmal und füllt es auf, während Stücke entschlüsselt und weggeschrieben werden. Dein Browser sendet nur, solange Budget übrig ist. Pausiert der Empfänger den Download, wartet dein Browser einfach und macht weiter, sobald der Download wieder vorankommt.

Auf der Seite des Empfängers wird jedes Stück beim Eintreffen entschlüsselt und geprüft und über die eigene Download-Funktion der Website, die im Browser des Empfängers arbeitet, in einen normalen Browser-Download geschrieben. Auch eine sehr große Datei muss also nie in den Arbeitsspeicher passen. Schlägt eine Prüfung fehl, wird dieser Download abgebrochen statt gespeichert. In einem Browser, in dem die Download-Funktion nicht verfügbar ist, werden Dateien bis 1 GiB im Arbeitsspeicher zusammengesetzt, und größere lassen sich dort nicht empfangen.

Schritt 6: Du siehst, wer die Datei hat

Wenn der Browser des Empfängers eine Datei vollständig hat, schickt er deinem Browser eine Empfangsbestätigung dafür. Deine Seite listet jeden Empfänger, der den Link geöffnet hat, mit seinem Fortschritt auf und zählt eine Datei als zugestellt, wenn die Bestätigung des Empfängers sagt, dass sie vollständig angekommen ist.

Mehrere Empfänger können gleichzeitig herunterladen, jeder über eigene Verbindungen zu deinem Browser.

Was einen Transfer beendet

  • Du schließt den Tab. Die Datei wird aus deinem Browser bereitgestellt, also stoppt der Transfer.
  • Du löschst den Transfer. Unser Dienst sagt es deinem Tab, der die Verbindungen aller Empfänger auf einmal schließt. Die Datei kommt aus deinem Browser, nicht aus unserem Dienst, also muss die Anweisung deinen Browser erreichen, und das tut sie. Dasselbe passiert, wenn wir einen Transfer nach Missbrauchsmeldungen sperren.
  • Der Link erreicht sein Ablaufdatum. Neue Empfänger können ihn nicht mehr öffnen.

Wann du ihn nutzt

Instant-Transfers eignen sich für große Dateien, wenn du den Tab offen lassen kannst, bis dein Empfänger sie hat. Kannst du das nicht, hält ein gehosteter Transfer eine verschlüsselte Kopie online bereit.

Probier es aus

Wähle eine Datei, wähle einen Instant-Transfer und schicke den Link an ein zweites Gerät von dir: Du siehst, wie das Gerät auf deiner Seite erscheint und die Datei herüberkommt. Starte einen Instant-Transfer.

Häufige Fragen

Geht eine Peer-to-Peer-Datei über die Server von Transferify?

Sie wird nie auf unseren Servern gespeichert. Unser Dienst registriert den Transfer und reicht die kurzen Nachrichten weiter, die die beiden Browser brauchen, um einander zu finden, und dann geht die Datei zwischen den Browsern. Wenn ein Netz eine direkte Verbindung blockiert, geht der verschlüsselte Datenstrom über ein TURN-Relais, das Bytes weiterleitet, die es nicht lesen kann.

Warum einen WebRTC-Transfer verschlüsseln, wenn WebRTC schon verschlüsselt ist?

WebRTC verschlüsselt die Verbindung mit DTLS, aber die beiden Browser bestätigen einander ihre DTLS-Identität über Nachrichten, die unser Signalisierungsdienst weiterreicht. Ein unehrlicher Signalisierungsserver könnte sich dazwischenschalten. Deshalb wird die Datei zusätzlich mit AES-256-GCM verschlüsselt, mit einem Schlüssel, der nur im Link reist und den kein Server erhält.

Können mehrere Personen denselben Instant-Link gleichzeitig herunterladen?

Ja. Jeder Empfänger, der den Link öffnet, bekommt eigene Verbindungen zu deinem Browser, und deine Seite listet jeden davon mit seinem Fortschritt auf.

Was passiert, wenn ich meinen Tab schließe?

Der Transfer endet, weil die Datei aus deinem Browser bereitgestellt wird. Für einen Link, der auch nach dem Schließen des Tabs funktioniert, sende stattdessen einen gehosteten Transfer.

Ähnliche Seiten

Nach oben