Transferify
Zurück zum Blog

Wie ein großer verschlüsselter Upload einen Verbindungsabbruch übersteht

Ein gehosteter Upload von Dutzenden oder Hunderten Gigabyte dauert lange genug, dass etwas schiefgehen kann: Das WLAN wechselt den Zugangspunkt, ein Laptop geht in den Ruhezustand, ein Tab wird neu geladen. Transferify geht damit auf zwei Ebenen um. Solange die Seite offen ist, pausiert eine abgebrochene Verbindung den Upload nur. Ist die Seite selbst weg, kann derselbe Browser den Upload später fortsetzen und nur senden, was fehlt.

Der zweite Teil ist schwieriger, als er klingt, denn jede Datei wird in deinem Browser verschlüsselt, bevor sie hochgeladen wird. Hier erklären wir, wie beides funktioniert und warum das Fortsetzen eines verschlüsselten Uploads besondere Sorgfalt braucht.

Solange die Seite offen ist: warten, wiederholen, weitermachen

Eine gehostete Datei geht in vielen einzelnen Teilen hoch, und jeder Teil ist eine eigene Anfrage (wie der Upload selbst funktioniert). Scheitert eine Anfrage, weil die Verbindung abgebrochen ist oder die Wartezeit überschritten wurde, wird sie erneut versucht:

  • Der erste neue Versuch wartet höchstens eine halbe Sekunde, und die Obergrenze jeder weiteren Pause verdoppelt sich, bis 30 Sekunden.
  • Jede Pause wird zufällig aus der oberen Hälfte ihrer Obergrenze gewählt, damit viele Teile, die zusammen gescheitert sind, es nicht alle im selben Augenblick erneut versuchen.
  • Eine Anfrage versucht es bis zu zehn Minuten lang weiter, solange sie scheitert, bevor der Upload stoppt.
  • Solange dein Browser meldet, dass er offline ist, wartet der Upload auf das Netz, statt diese zehn Minuten zu verbrauchen, egal wie lange der Ausfall dauert.
  • Ein Teil, der zwei Minuten lang nichts sendet, gilt als verlorene Verbindung und wird erneut versucht.
  • Jeder neue Versuch eines Teils nutzt eine neu signierte Upload-Adresse. Eine Adresse, die ungültig geworden ist, während du offline warst, wird also ersetzt.

Ein scheiternder Teil stoppt die anderen nicht. Nur ein Teil, der keine Versuche mehr übrig hat, beendet den Upload, und selbst dann stoppt der Upload an einem Punkt, an dem du ihn fortsetzen kannst.

Eine Antwort wird anders behandelt. Antwortet unser Dienst, dass er den Speicher-Upload einer Datei nicht starten konnte, wird diese Anfrage innerhalb von ein, zwei Sekunden dreimal versucht, und der Upload stoppt dann auf dieselbe Weise, statt minutenlang neu zu versuchen, denn diese Antwort bedeutet nicht, dass deine Verbindung abgebrochen ist.

All das gilt, wenn du einen neuen gehosteten Transfer sendest. Das Hinzufügen von Dateien zu einem bereits gesendeten Transfer und das Hochladen von Dateien zu einer Dateianfrage von jemand anderem behalten stattdessen drei schnelle Versuche, damit eine verlorene Verbindung dort sofort sichtbar wird.

Nach einem Neuladen: im selben Browser fortsetzen

Bevor das erste Byte eines Uploads dein Gerät verlässt, notiert dein Browser, was er bräuchte, um ihn später fortzusetzen. Dieser Eintrag liegt im eigenen Speicher deines Browsers für diese Website (IndexedDB), auf deinem Gerät, und enthält:

  • den Verschlüsselungsschlüssel des Transfers, gespeichert als eigenes Schlüsselobjekt des Browsers,
  • einen geheimen Zufallswert, aus dem die Nonces der Dateien abgeleitet werden (unten erklärt),
  • welche Dateien zum Upload gehören, mit ihren Namen, Größen und Änderungsdaten,
  • bei einem Transfer im Zero-Knowledge-Modus den fertigen Freigabelink mit seinem Schlüssel.

Der Eintrag bleibt auf deinem Gerät. Der geheime Wert darin wird nie an uns gesendet, und der rohe Schlüssel auch nicht: Im Standardmodus behält unser Dienst nur eine Kopie des Schlüssels, eingepackt mit einem Schlüssel in AWS KMS, und im Zero-Knowledge-Modus gar keine Kopie. Er wird gelöscht, wenn der Upload fertig ist, wenn du ihn verwirfst oder wenn er sich nicht mehr fortsetzen lässt. Für Besucher, die nie einen gehosteten Upload starten, wird überhaupt nichts geschrieben.

Wenn du zurückkommst, angemeldet im Konto, das den Upload gestartet hat, bietet Transferify dir das Fortsetzen an. Es fragt den Speicher, welche Teile jeder Datei er schon hat, behält jeden Teil, dessen Länge genau stimmt, und sendet den Rest. Dateien, die vor der Unterbrechung fertig wurden, werden ganz übersprungen.

Deine Dateien wiederfinden

Bei Uploads bis insgesamt 2 GiB, und nur wenn dein Browser mindestens das Doppelte der Upload-Größe an Platz übrig hat, behält der Browser auch eine Kopie der Dateien selbst, damit du sie nicht erneut auswählen musst. Bei allem, was größer ist, wählst du dieselben Dateien erneut aus.

Transferify ordnet jede Datei über Namen, Größe und Datum der letzten Änderung zu. Eine Datei, die du zwischendurch bearbeitet hast, hat ein neues Datum und wird abgelehnt, denn die Teile im Speicher enthalten den alten Inhalt, und der Rest muss aus denselben Bytes bestehen.

Warum das Fortsetzen eines verschlüsselten Uploads Sorgfalt braucht

AES-GCM, das Verfahren, das Transferify nutzt, hat eine Regel, die nie gebrochen werden darf: Derselbe Schlüssel und dieselbe Nonce dürfen nie zwei verschiedene Daten versiegeln. Wer beide Ergebnisse sähe, könnte erfahren, worin sich die beiden unterscheiden, und könnte unter diesem Schlüssel Daten fälschen.

Ein fortgesetzter Upload muss dieser Regel absichtlich nahekommen. Damit die fehlenden Teile an die Teile anschließen, die der Speicher schon hat, müssen sie erneut zu genau den Bytes verschlüsselt werden, die sie gehabt hätten. Das heißt: derselbe Schlüssel und dieselben Nonces wie vorher. Zwei Schutzmaßnahmen machen das sicher.

Nonces, die du nachbilden kannst, und nur du. Bei einem gehosteten Upload ist der Startwert der Nonces jeder Datei keine Zufallszahl, die verloren geht, wenn die Seite schließt. Er wird mit HMAC-SHA-256 aus dem geheimen Zufallswert im Eintrag deines Browsers abgeleitet, aus der Position der Datei in deiner Auswahl, aus der ID der Datei und aus dem Speicher-Upload, zu dem sie gehört. Dein Browser kann ihn nach einem Neuladen erneut ableiten. Unsere Server können das nicht, denn das Geheimnis verlässt dein Gerät nie.

Ein Nachweis, dass sich die Bytes nicht geändert haben. Bevor ein Teil dein Gerät verlässt, behält der Browser das Authentifizierungs-Tag jedes Stücks darin. Wird ein Upload fortgesetzt, verschlüsselt der Browser jedes Stück erneut und vergleicht das neue Tag mit dem behaltenen, bevor er etwas sendet. Gleiche Tags bedeuten gleiche Daten. Ein anderes Tag bedeutet, dass sich die Datei geändert hat, auch wenn Name, Größe und Datum gleich geblieben sind. Diese Datei beginnt dann von vorn, mit einem neuen Speicher-Upload und neuen Nonces, also wird keine Nonce je zweimal für verschiedene Daten verwendet.

Entscheidungsweg für das Fortsetzen eines Uploads. Hat dieser Browser den Upload behalten, findet Transferify die Dateien, fragt den Speicher, was er hat, verschlüsselt jedes fehlende Stück erneut und vergleicht sein Tag mit dem vor dem Senden behaltenen: Bei Übereinstimmung wird es gesendet, bei Abweichung startet diese Datei mit neuen Nonces neu.Entscheidungsweg für das Fortsetzen eines Uploads. Hat dieser Browser den Upload behalten, findet Transferify die Dateien, fragt den Speicher, was er hat, verschlüsselt jedes fehlende Stück erneut und vergleicht sein Tag mit dem vor dem Senden behaltenen: Bei Übereinstimmung wird es gesendet, bei Abweichung startet diese Datei mit neuen Nonces neu.
Einen verschlüsselten Upload fortsetzen. Ein Stück wird nur dann unter derselben Nonce erneut gesendet, wenn sein Tag beweist, dass die Bytes unverändert sind.

Die Grenzen

  • Ein Upload lässt sich nur in dem Browser und auf dem Gerät fortsetzen, die ihn gestartet haben, denn das Geheimnis, aus dem seine Nonces abgeleitet werden, liegt nur in diesem Browser.
  • Das Angebot zum Fortsetzen gilt bis zu sieben Tage nach dem Start des Uploads oder bis sein Link abgelaufen wäre, falls das früher ist. Der Speicher behält die Teile eines unfertigen Uploads sieben Tage ab dem Start des Uploads jeder Datei, also sind sie noch da, solange das Angebot gilt.
  • Nur eine Seite auf einmal kann an einem bestimmten Upload arbeiten. Setzt ihn schon ein anderer Tab fort, sagt dir die Seite das, statt eine zweite Kopie zu starten.
  • Wurde der Transfer in der Zwischenzeit gelöscht oder ist er abgelaufen, gibt es nichts mehr fortzusetzen, und die Seite sagt dir das.
  • Erlaubt dein Browser dieser Website nicht, Daten zu behalten, funktioniert der Upload trotzdem, lässt sich aber nach einem Neuladen nicht fortsetzen.

Probier es aus

Starte einen großen gehosteten Upload, schließe den Tab mittendrin und öffne Transferify im selben Browser wieder: Der Upload wird dir wieder angeboten. Sende jetzt eine Datei.

Häufige Fragen

Was passiert, wenn meine Verbindung während eines Uploads abbricht?

Der Upload wartet und versucht es erneut. Eine Anfrage wird bis zu zehn Minuten lang wiederholt, solange sie scheitert, mit wachsenden Pausen zwischen den Versuchen, und Zeit, die dein Browser offline verbringt, zählt nicht zu diesen zehn Minuten. Teile, die bereits im Speicher angekommen sind, werden nicht erneut gesendet.

Kann ich einen Upload fortsetzen, nachdem ich den Tab geschlossen oder die Seite neu geladen habe?

Ja, im selben Browser auf demselben Gerät, angemeldet im selben Konto, bis zu sieben Tage nach dem Start des Uploads oder bis sein Link abgelaufen wäre, falls das früher ist. Wenn du Transferify wieder öffnest, bietet es dir das Fortsetzen an und sendet nur, was der Speicher noch nicht hat.

Kann ich den Upload auf einem anderen Computer fortsetzen?

Nein. Das Geheimnis, aus dem die Nonces eines unfertigen Uploads abgeleitet werden, liegt nur in dem Browser, der ihn gestartet hat, und verlässt ihn nie. Ein fortgesetzter Upload bleibt also in diesem Browser.

Muss ich die Dateien erneut auswählen?

Bei Uploads bis insgesamt 2 GiB behält dein Browser meist eine eigene Kopie, dann musst du das nicht. Bei größeren Uploads wählst du dieselben Dateien erneut aus, und Transferify prüft, dass es dieselben Dateien sind, bevor es weitermacht.

Ähnliche Seiten

Nach oben