Transferify
Zurück zum Blog

Wie dein Browser verschlüsselte Dateien direkt in den Speicher hochlädt

Wenn du einen gehosteten Transfer sendest, verschlüsselt dein Browser jede Datei und lädt sie direkt in unseren Objektspeicher in der EU hoch. Die Datei geht unterwegs nicht durch unsere API. Die API entscheidet, ob ein Upload starten darf, signiert für jeden Teil eine kurzlebige Adresse und prüft das Ergebnis, bevor der Link aktiv wird. Die schwere Arbeit macht dein Browser.

Hier gehen wir diesen Weg durch, von dem Moment, in dem du eine Datei ablegst, bis zu dem Moment, in dem der Link funktioniert.

Warum direkt in den Speicher

Üblicherweise baut man einen Upload so: Die Datei geht an einen Anwendungsserver, der sie dann in den Speicher schreibt. Dann durchquert jedes Byte zwei Netze, und der Anwendungsserver wird zum Engpass für alle großen Dateien gleichzeitig.

Transferify überspringt diesen Schritt. Unser Speicher spricht das S3-Protokoll, mit dem ein Dienst signierte Adressen ausgeben kann: eine Webadresse, die genau eine bestimmte Aktion erlaubt, etwa das Hochladen eines bestimmten Teils einer bestimmten Datei, bis die Adresse ungültig wird. Dein Browser sendet jeden verschlüsselten Teil direkt an eine solche Adresse. Die API verarbeitet die Bytes der Datei nie, nur die kleinen Anfragen, die den Upload einrichten und abschließen.

Der Speicher liegt in der EU. Neue Dateien gehen zu Cloudflare R2, beschränkt auf die EU-Jurisdiktion. Dateien, die vor dieser Umstellung gespeichert wurden, bleiben bei AWS S3 in Frankfurt.

Die Schritte eines gehosteten Uploads. Dein Browser registriert den Transfer bei unserem Dienst, dann startet unser Dienst für jede Gruppe von Dateien die Speicher-Uploads und signiert Teil-Adressen, dein Browser lädt die verschlüsselten Teile direkt in den Speicher hoch, und unser Dienst prüft Teilezahl und Größe jeder Datei, bevor der Link aktiv wird.Die Schritte eines gehosteten Uploads. Dein Browser registriert den Transfer bei unserem Dienst, dann startet unser Dienst für jede Gruppe von Dateien die Speicher-Uploads und signiert Teil-Adressen, dein Browser lädt die verschlüsselten Teile direkt in den Speicher hoch, und unser Dienst prüft Teilezahl und Größe jeder Datei, bevor der Link aktiv wird.
Ein gehosteter Upload. Die verschlüsselten Teile gehen direkt von deinem Browser in den Speicher; unser Dienst startet nur die Uploads, signiert die Adressen und prüft das Ergebnis.

Schritt 1: Der Transfer wird registriert

Bevor etwas hochgeladen wird, sagt dein Browser unserem Dienst, was er gleich sendet: die Angaben zu den Dateien und die Optionen, die du gewählt hast. Der Dienst prüft, ob der Transfer in deinen Plan passt, zum Beispiel in die Upload-Größe, die dein Plan erlaubt, und legt den Transfer an.

Schritt 2: Dateien gehen in Gruppen

Danach gehen die Dateien in Gruppen von bis zu 100. Für jede Gruppe bittet eine Anfrage unseren Dienst, für jede Datei darin einen Speicher-Upload zu starten, und der Plan wird erneut geprüft. Später schließt eine Anfrage die ganze Gruppe ab.

Die Gruppierung hält die Zahl der Anfragen klein. Ein Transfer mit 10.000 Dateien braucht etwa 300 Anfragen an unseren Dienst, wo eine Anfrage pro Datei und Schritt etwa 30.000 bräuchte.

Schritt 3: Die Datei wird verschlüsselt und in Teile zerlegt

Dein Browser liest die Datei als Datenstrom und verschlüsselt sie mit AES-256-GCM in Stücken: 8 MiB für die meisten Dateien und ein größeres Vielfaches von 8 MiB für sehr große. Der Speicher nimmt höchstens 10.000 Teile pro Datei an, und eine Datei hat genau so viele Teile wie verschlüsselte Stücke, also wächst die Stückgröße mit der Datei, um innerhalb dieser Grenze zu bleiben. Wie die Verschlüsselung selbst funktioniert und wohin der Schlüssel geht, erklärt wie Transferify Dateien in deinem Browser verschlüsselt.

Die Teile sind gleich lange Abschnitte des verschlüsselten Datenstroms, nicht die Stücke selbst, weil der Speicher verlangt, dass jeder Teil außer dem letzten exakt gleich lang ist.

Schritt 4: Jeder Teil bekommt seine eigene signierte Adresse

Für jeden Teil signiert unser Dienst eine Adresse, die das Hochladen genau dieses Teils erlaubt, gültig für 12 Stunden. Dein Browser fordert die Adressen in Paketen an, ein wenig vor den Teilen, die sie nutzen werden, also wird eine Adresse lange vor ihrem Ablauf genutzt. Muss ein Teil erneut gesendet werden, bekommt er eine neu signierte Adresse.

Schritt 5: viele Teile unterwegs, innerhalb eines Speicherbudgets

Eine einzelne Verbindung zum Speicher lastet eine schnelle Leitung selten aus. Deshalb hält dein Browser mehrere Teile gleichzeitig unterwegs, und während ein Teil übertragen wird, wird der nächste schon verschlüsselt.

Wie viele Teile parallel unterwegs sind, wird auf deinem Gerät entschieden, in zwei Schritten:

  • Ein Speicherbudget. Verschlüsselte Teile müssen im Arbeitsspeicher bleiben, bis der Objektspeicher sie bestätigt. Der Browser setzt ein Budget für deinen Gerätetyp, auf Handys deutlich kleiner, und hält nie mehr Teile unterwegs, als hineinpassen.
  • Gemessen, nicht geraten. Der Browser startet mit der Breite, die das Budget erlaubt, normalerweise vier Teile, und probiert weitere parallele Uploads aus, solange das gemessene Tempo besser wird, bis zu 16 gleichzeitig. Er geht nie unter seine Startbreite, also kann diese Suche einen Upload nicht langsamer machen, als er sonst gewesen wäre.

Die Datei wird nur so schnell von der Festplatte gelesen, wie Teile abgehen. So lässt sich auch eine Datei hochladen, die weit größer ist als der Arbeitsspeicher deines Geräts.

Schritt 6: Der Speicher bestätigt, unser Dienst prüft

Wenn alle Teile der Dateien einer Gruppe im Speicher sind, bittet dein Browser unseren Dienst, sie abzuschließen. Bevor eine Datei angenommen wird, prüft der Dienst:

  • dass die Zahl der Teile der Zahl der verschlüsselten Stücke entspricht, die die Datei haben muss,
  • dass die gespeicherte Größe aufs Byte dem entspricht, was eine verschlüsselte Datei der angekündigten Größe haben muss.

Stimmt die gespeicherte Größe nicht, wird die gespeicherte Kopie gelöscht und die Datei nicht angenommen. Sobald jede Datei des Transfers vollständig ist, wird der Freigabelink aktiv.

Wenn etwas schiefgeht

  • Ein Teil schlägt fehl. Er wird mit einer neu signierten Adresse erneut versucht. Verlorene Verbindungen werden abgewartet, und ein Upload, den ein Neuladen der Seite unterbrochen hat, lässt sich später im selben Browser fortsetzen. Die Einzelheiten stehen in wie ein großer verschlüsselter Upload einen Verbindungsabbruch übersteht.
  • Der Speicher weigert sich, eine Datei abzuschließen. Diese Datei wird erneut hochgeladen, insgesamt bis zu dreimal, bevor der Upload aufgibt.
  • Du brichst ab. Die noch offenen Uploads im Speicher werden abgebrochen, und der Transfer wird verworfen. Was der Speicher von einem unfertigen Upload noch hält, wird sieben Tage nach dem Start dieses Uploads automatisch gelöscht.

Probier es aus

Lege eine große Datei in Transferify ab, wähle einen gehosteten Link und sieh dir den Fortschritt an: Was du siehst, ist dein eigener Browser, der parallel verschlüsselt und hochlädt. Sende jetzt eine Datei.

Häufige Fragen

Geht meine Datei auf dem Weg in den Speicher über die API von Transferify?

Nein. Dein Browser sendet die verschlüsselte Datei direkt in unseren Objektspeicher in der EU. Unsere API registriert den Transfer, signiert für jeden Teil eine kurzlebige Adresse und prüft am Ende das Ergebnis, aber die Bytes der Datei gehen nicht durch sie.

Warum wird meine Datei in Teile zerlegt?

Mit Teilen kann eine große Datei über mehrere Verbindungen gleichzeitig hochgehen, und ein fehlgeschlagener Teil lässt sich erneut senden, ohne die ganze Datei neu zu starten. Jeder Teil ist ein Abschnitt der bereits verschlüsselten Datei.

Braucht das Hochladen einer großen Datei viel Arbeitsspeicher?

Nein. Dein Browser liest und verschlüsselt die Datei Stück für Stück und hält nur die Teile, die gerade unterwegs sind. Wie viele Teile gleichzeitig unterwegs sind, begrenzt ein Speicherbudget für deinen Gerätetyp.

Was verhindert, dass ein fehlerhafter oder unvollständiger Upload zu einem Download-Link wird?

Wenn eine Datei fertig ist, prüft unser Dienst, dass der Speicher genau die Zahl der Teile und genau die verschlüsselte Größe enthält, die die Datei haben muss. Stimmt die gespeicherte Größe nicht, wird die gespeicherte Kopie gelöscht und die Datei nicht angenommen.

Ähnliche Seiten

Nach oben