Horcrux: Dateien in verschlüsselte Fragmente aufteilen
(github.com/jesseduffield)- Horcrux ist ein CLI-Tool, das Dateien in verschlüsselte Horcrux-Fragmente aufteilt und es ermöglicht, die Originaldatei wiederherzustellen, ohne sich ein Passwort merken zu müssen
- Gedacht für Nutzer, die große sensible Dateien verschlüsseln müssen, aber Jahre später das Passwort möglicherweise nicht mehr wissen, sowie für Nutzer, die Dateien über mehrere Kanäle übertragen wollen, um die Wahrscheinlichkeit eines Abfangens durch Angreifer deutlich zu senken
splitfragt beim Aufteilen einer Datei ab, wie viele Fragmente erstellt werden sollen und wie viele Fragmente zur Wiederherstellung des Originals nötig sind; das Beispiel zeigt eine Konfiguration, bei der beliebige 3 von 5 Fragmenten zur Wiederherstellung ausreichenbindist der Befehl, der in einem Verzeichnis mit Horcrux-Fragmenten die Originaldatei wieder zusammensetzt; alternativ kann das Verzeichnis auch als Argument übergeben werden- Intern nutzt es das Shamir Secret Sharing Scheme, bei dem der Verschlüsselungsschlüssel in mehrere Teile aufgeteilt wird und der ursprüngliche Schlüssel rekonstruiert werden kann, sobald mindestens die festgelegte Schwelle (threshold) an Fragmenten vorhanden ist
- Die Schlüsselerzeugung verwendet die Funktion
Readauscrypto/randder Go-Standardbibliothek; die Shamir-Implementierung ist eine angepasste Version der Implementierung aus Hashicorps vault repo - Die Installation ist per Homebrew mit
brew install jesseduffield/horcrux/horcrux, über scoop mitscoop bucket add extras; scoop install horcruxoder über ein Binary Release möglich - Die als Alternative genannte Lösung
ssssfunktioniert laut Beschreibung zwar mit Schlüsseln, aber nicht mit Dateien selbst; andere Tools namenshorcruxundHaystackunterscheiden sich dadurch, dass sie keine Horcrux-Schwelle unterstützen
1 Kommentare
Meinungen auf Hacker News
Zu beachten ist, dass dieses Tool für die Ver- und Entschlüsselung von Dateien den AES-OFB-Modus verwendet und keine Integrität des Chiffrats garantiert, also keinen MAC hat.
[0]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation...
Unter den papierbasierten Backup-Tools gibt es ein cooles Projekt, das Shamir Secret Sharing nutzt, um mehrere Papierkopien an Freunde zu verteilen und später optisch einzulesen, damit die Datei wiederhergestellt werden kann.
https://github.com/cyphar/paperback
Im Moment funktioniert alles, aber man muss den Inhalt der QR-Codes in die Kommandozeile kopieren und einfügen, und das Format auf der Festplatte – beziehungsweise auf dem Papier – muss auch noch festgezurrt werden.
https://github.com/paritytech/banana_split
Levchin hat kürzlich etwas über Shamir Secret Sharing und das Chaos geschrieben, das es bei PayPal ausgelöst hat: https://max.levch.in/post/724289457144070144/shamir-secret-s...
Das ist einer meiner Lieblingsalgorithmen, aber ehrlich gesagt frage ich mich inzwischen, ob ich ihn heutzutage eher aus akademischer Sicht faszinierend finde oder ob die tatsächlichen Anwendungsfälle begrenzter sind, als ich dachte.
Es ist so einfach, dass man es auch mit kaum Kryptografie-Hintergrund oder höherer Mathematik verstehen kann; im Grunde reicht ein bisschen Algebra. Dass es überhaupt möglich ist, ist verblüffend, und zumindest am Anfang sieht man auch klare konkrete Anwendungsfälle, außerdem kann man es selbst implementieren. Natürlich gibt es trotzdem Fallstricke.
Deshalb taucht es meiner Meinung nach nicht nur in Diskussionsforen, sondern auch in Branchenlösungen übermäßig häufig auf.
Ich weiß nicht, ob du zwischen beidem einen Kausalzusammenhang siehst, aber das Problem war nicht der Algorithmus selbst, sondern das Interface, über das man auf ihn zugriff.
Laut FAQ teilt dieses Tool den Verschlüsselungsschlüssel per Shamir Secret Sharing auf. Tatsächlich kann man dasselbe Ziel aber auch ohne Verschlüsselungsschlüssel mit Reed-Solomon erreichen.
Man verarbeitet die Eingabedaten zuerst mit einer All-or-Nothing-Transformation (AONT) und teilt sie dann in Reed-Solomon-Fragmente auf. Die AONT ist nötig, weil Reed-Solomon anfällig für Distinguishing-Angriffe ist und mit hoher Wahrscheinlichkeit Informationen über die Eingabe preisgeben kann.
[1] <https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_cor...>
[2] <https://en.wikipedia.org/wiki/All-or-nothing_transform>
[3] <https://en.wikipedia.org/wiki/Distinguishing_attack>
Streng genommen ist auch bei Shamir der Verschlüsselungsschritt nicht zwingend erforderlich. Es hat aber Vorteile, das Geheimnis selbst zu verschlüsseln und SSS nur für den Schlüssel zu verwenden. Ich weiß nicht, ob Horcrux so funktioniert, aber mein ähnliches Tool Paperback macht es so.
[1]: https://github.com/cyphar/paperback
Paper: <https://www.usenix.org/legacy/event/fast11/tech/full_papers/...>
Es gibt zwar mehrere Ansätze, wie man „eine per Passwort verschlüsselte Datei so aufteilt, dass sie sich auch dann wieder zusammensetzen lässt, wenn einige Teile fehlen“, aber dass das ohne Passwort möglich ist, fand ich interessant.
Für jemanden, der Sicherheitsthemen oder Algorithmen mag, ist das ziemlich spannend. Ich werde wohl im Quellcode wühlen und die dazugehörigen Techniken nachlesen, weil ich wissen will, wie es umgesetzt wurde. Allerdings bin ich mir nicht sicher, wofür so etwas nützlich ist. Ich frage mich, ob es als eine Art Schicht der „Zwiebelschale“ zum Schutz sensibler Daten ein sinnvolles Threat Model gibt, oder ob es gegenüber Use Cases, die bereits auf andere Weise besser gelöst sind, irgendwo überlegen ist.
Der Autor vergleicht scherzhaft auch das Problem, sich an das Passwort eines alten Tagebuchs und an genügend Verstecke zu erinnern; persönlich glaube ich, dass Letzteres das deutlich größere Problem wäre. Man müsste die Zahl der Fragmente reduzieren und die Zahl der Verstecke erhöhen, aber dadurch sinkt die gebotene Sicherheit[0].
Multisignatur kommt einem zwar in den Sinn, aber was ich damit erlebt habe, war eher: „Um ein Update auszurollen, mussten wir einen USB-Key einstecken und zusammen mit zwei Kollegen ein Programm ausführen.“ Alle mussten ihren Key beisteuern, und es war der Zustand „Wenn ich krank bin, kann das Update nicht raus“. Ich weiß nicht, ob das eine Grenze des Tools war oder ob es damals nur deshalb so konfiguriert war, weil es noch Alpha war.
Trotzdem sehr interessant.
[0] Allerdings dürfte „unter der Matratze“ ungefähr das gleiche Sicherheitsniveau haben wie das Passwort auf „password“ zu setzen.
Die eigentliche Sicherheitsmaßnahme ist die bestehende physische Zugangskontrolle. Ein Dieb müsste in drei Orte einbrechen, um an die Daten zu kommen.
Man könnte die Daten auch verschlüsseln und das Passwort in drei Teile aufteilen und an verschiedenen Orten speichern, aber dann müsste man sowohl die Daten als auch das Passwort aufbewahren.
Dem Namen nach scheinen diese Dinge verwandt zu sein. Vermutlich gibt es mehr als ein Projekt. Was gibt es noch?
Horcrux: Split your file into encrypted fragments - https://news.ycombinator.com/item?id=29395575 - November 2021, 11 Kommentare
Show HN: Horcrux, a Playground for Shamir Secret Sharing - https://news.ycombinator.com/item?id=26256726 - Februar 2021, 40 Kommentare
Horcrux Encrypted Messaging - https://news.ycombinator.com/item?id=24322069 - August 2020, 93 Kommentare
I made an app that lets you split a file into horcruxes - https://news.ycombinator.com/item?id=24026445 - August 2020, 80 Kommentare
You can now make horcruxes out of your confidential files - https://news.ycombinator.com/item?id=21933983 - Januar 2020, 17 Kommentare
Das erinnert mich an Paritätsdateien im Usenet. Man lud ein großes Archiv aufgeteilt in mehrere kleine Dateien und eine bestimmte Anzahl von Paritätsdateien hoch, und zum Beispiel konnte man das ursprüngliche Archiv wiederherstellen, selbst wenn von n Dateien nur n-3 vorhanden waren.
https://en.wikipedia.org/wiki/Parchive
Vor Kurzem habe ich erfahren, dass auch Clevis Shamir Secret Sharing unterstützt. Tatsächlich ist das die einzige Möglichkeit, mehrere Pins desselben Typs und mit denselben Berechtigungen einzurichten; gewissermaßen RAID0 für SSS.
https://github.com/latchset/clevis#pin-shamir-secret-sharing
Ich fand das hier sauber gemacht und habe mir das Repository angesehen; da stellte sich heraus, dass es vom Macher von lazygit/lazydocker stammt. Schön zu sehen, wie produktiv er ist.
In den FAQ gibt es auf die Frage „Ist das nicht anders als ein Horkrux im Harry-Potter-Universum?“ die Antwort: „Ziemlich ähnlich. Ein einzelner Horkrux sollte die Originaldatei nicht wiederbeleben können, aber man kann es so machen, dass es mit zwei geht, also ist es nur ein Unterschied von eins. Schachmatt, Harry-Potter-Fans.“
Der Kern eines Horkrux ist aber, Backups an mehreren Orten zu haben. Dieses Tool, das Backups an mehreren Orten sichert, ist ein deutlich besseres Beispiel für die Verwendung des Namens: https://github.com/chrispoole643/horcrux. Schachmatt, jesseduffield ;)
Ein partielles Backup passt besser zum Geist dieser Idee.
Nebenbei: Ich habe das Konzept als Angriff auf Promiskuität gelesen. Wie „Whore crux“. Umgekehrt kann man Lord of the Rings als Angriff auf die Ehe lesen, weil man unsichtbar wird, wenn man einen Ring trägt, und allmählich zu nichts verblasst, wie „Butter, die auf zu viel Brot verstrichen wurde“.