iX 8/2021
S. 136
Praxis
Tools und Tipps

Dateien mit dem Werkzeug croc übertragen

Datenkrokodil

Dr. Thomas Romeyke

Um Daten zwischen Rechnern zu übertragen, gibt es viele Optionen. croc fungiert als Relay-Server und ist dadurch besonders komfortabel.

Häufig möchte man eine Datei spontan an einen anderen Rechner schicken. Wenn sowohl Sender als auch Empfänger lediglich Clients sind, ist die direkte Übertragung schwierig: Das Zielgerät nimmt ohne eine Serversoftware (HTTP, SSH) keine von außen kommenden Datenpakete an. Befindet sich zwischen beiden Systemen das Internet, muss zudem eine Portfreigabe eingerichtet und aktiviert sein. Zum Konfigurationsaufwand kommen Problemfälle hinzu, die durch dynamische Adressvergaben und abbrechende Übertragungen bei großen Dateien auftreten können.

Eine Lösung besteht darin, die Daten über ein Relay (Vermittler) zu übertragen, zu dem beide Clients eine Verbindung aufbauen: Das Relay gibt die vom Sender eintreffenden Daten unmittelbar an den Empfänger weiter. Da der Empfänger dabei lediglich Antwortpakete in der von ihm initiierten Verbindung zum Relay erhält, ist NAT kein Problem. Auch eine Firewall lässt die vom Relay kommenden Pakete durch.

Ein wesentlicher Aspekt in einem solchen Konzept ist die Sicherheit der Daten: Eine bloße HTTPS-Transportverschlüsselung würde die Daten dem Relay gegenüber offenlegen und ein separater Verschlüsselungsschritt der Datei vor dem Versenden und nach dem Empfangen durch ein Schlüsselmanagement den Aufwand erhöhen.

Das in Go entwickelte Kommandozeilentool croc geht einen eleganteren Weg: Der Sender gibt seinen Sendewunsch an das Relay, aber noch nicht die Datei. Dabei erzeugt der Client lokal einen (einfachen) Code, der beispielsweise telefonisch an den Empfänger weitergegeben und vom Client an das Relay übermittelt wird. Der Client des Empfängers sendet dann seinen Empfangswunsch ebenfalls mit dem gleichen Teil des Codes an das Relay, das nun beide Clients einander zuordnen kann. Ab jetzt vermittelt das Relay nur noch TCP-Pakete zwischen den beiden Clients.

Die Clients von Sender und Empfänger vereinbaren über diese Verbindung auf Basis des beiden vorliegenden Codes zunächst einen gemeinsamen Schlüssel. Dabei kommt das PAKE2-Verfahren (Password-authenticated Key Exchange) zum Einsatz, das aus einem beiden Teilnehmern bekannten schwachen Code im Dialog der Clients einen starken Session-Schlüssel ableitet. Dieser schützt die zu übertragenden Datenpakete. Soweit technisch möglich, sind die Dateien dann ohne Umweg über das Relay austauschbar.

Das magische Wurmloch

Dieses Konzept ist seit einigen Jahren auch im Tool Magic-Wormhole implementiert. Zudem gab es von Mozilla den Versuch, mit Firefox Send etwas Vergleichbares anzubieten. Mit croc, das als Wormhole-Fork entstand, wird seit 2017 eine prüfbare Open-Source-Implementierung (MIT-Lizenz) entwickelt, die die Hürden für das Verwenden des Konzepts weiter senken und die Anwendbarkeit verbessern soll. Die Software läuft auf vielen Betriebssystemen und kommt als einzelne ausführbare Datei auf den Rechner. Ohne weitere Konfigurationen und Einstellungen am Router lassen sich beliebig große Dateien und Verzeichnisse zwischen zwei Rechnern übertragen, wenn auf beiden Systemen das croc-Binary vorhanden ist.

Die fertigen Installationsdateien finden sich auf GitHub. Zusätzlich lässt sich croc auch auf Android-Telefonen installieren, wenn man dort Termux nutzt. Auf F-Droid gibt es außerdem eine App, die croc in ein GUI einbindet.

Um die Datei meineDatei.zip zu übertragen, gibt man auf dem Gerät des Senders

croc send meineDatei.zip

ein. Als Quittung bekommt man einen Three-Word-Code angezeigt, den man dem Empfänger mitteilt, beispielsweise balloon-lotus-mouse. Der Empfänger gibt dann an seinem Gerät den folgenden Befehl ein:

croc balloon-lotus-mouse

Nach einer Rückfrage beim Empfänger beginnt der Datentransfer. Ein eventueller Verbindungsabbruch während der Übertragung ist kein Problem, da bei einem erneuten Übertragungsversuch nur die noch nicht übertragenen Daten über die Leitung geschickt werden. croc bietet auch die Option, ein eigenes Relay zu betreiben (siehe ix.de/zwft). Anwender aktivieren beim Start des Tools die im Code enthaltene Relay-Komponente mit croc relay, geben zu Beginn der Datenübertragung auf den Clients das zu verwendende Relay an:

croc --relay croc.meinRelay.de send meineDatei.zip

und beim Empfänger den Three-Word-Code:

croc --relay croc.meinRelay.de <Three-Word-Code>

Um das nicht bei jeder neuen Übertragung anzugeben, lässt sich einmalig auf den Clients die Zusatzoption --remember festlegen. Die gewählten Optionen sind dann in einer lokalen Konfigurationsdatei auf dem Client für spätere Aufrufe voreingestellt. Im Unternehmen bietet es sich an, eine passende Konfiguration gleich zusammen mit dem croc-Binary auf die Clients zu bringen. Dann kann man dort auch ein Passwort eintragen, mit dem sich das Relay auf die Teilnehmer beschränken lässt, denen der Relay-Betreiber das Passwort mitgeteilt hat. (nb@ix.de)

Dr. Thomas Romeyke

ist Professor für Wirtschaftsinformatik an der TH Lübeck. 

Kommentare lesen (2 Beiträge)