Man kennt das Problem: Man verwaltet alle möglichen Zugangsdaten für ein ganzes Team. Nun kann man einerseits diese vertraulichen Daten nicht offen verteilen, weil man dadurch nicht mehr übersehen kann, ob, wann und wer nun eigenständig irgendwo herumändert, auf der anderen Seite jedoch wäre die Arbeit des ganzen Teams massiv beeinträchtigt, wenn man selber plötzlich nicht mehr in der Lage ist, diese Verwaltungsarbeit wahrzunehmen.
Früher hätte man dazu wahrscheinlich einen Umschlag mit den wichtigsten Daten beim Notar hinterlegt mit der Ansage, dass mindestens 5 der 8 Teammitglieder gemeinsam auf der Matte stehen müssen, bevor der Notar den Umschlag rausrücken darf, damit nicht ein Einzelner heimlich Schindluder treibt.
Im digitalen Zeitalter jedoch kann auch hier der Computer eingreifen und mit etwas Mathematik- Zauberei den Job des Notars übernehmen…
Man kann sich das Ganze vorstellen wie eine Schatzkiste mit mehreren Schlössern und einem Einwurfschlitz: Jeder kann was in die Kiste werfen, aber man muß eine bestimmte Anzahl von Schlüsseln für die Schlösser haben, um die Kiste aufzukriegen. Die Schlüssel werden an die Leute vom Team verteilt, und erst wenn sich diese Mindestanzahl an Leute einig ist, dass es jetzt geboten ist, die Kiste zu öffnen, kann das auch passieren.
Technisch wird die Schatzkiste einfach dargestellt, das man per pgp die Daten so verschlüsselt, das nur der virtuelle User der Schatzkiste diese Daten auch wieder lesen kann.
Umgesetzt ist das Ganze als simples Linux- Shellscript. Dies benötigt noch ein paar mehr installierte Programme (namentlich gpg, ssss, zip), die aber alle über den normalen debian- Packetmanager zu kriegen sind.
Wer selber auch Daten in die Kiste ablegen möchte, sollte sich eine GPG- Umgebung seiner Wahl installieren. Hinzufügen von Dateien geschieht durch einfaches Verschlüsseln der gewünschten Daten und Ablegen derselben auf einem zentralem, dem Team zugänglichen Ort.
Das Script kennt folgende Kommandos
treasurebox.sh treasureboxname create
Erzeugt alle Dateien, die man zur Schatzkisten- Verwaltung. Das wären im Einzelnen:
<treasureboxname>.list_of_keys : Liste der “shared keys” Jede Zeile dieser Liste enthält einen der Schlüssel, die man dan tunlichst einzeln an die Teammitglieder verteilt.
<treasureboxname>.treasurebox : Diese treasurebox Datei enthält alle Daten, um die Schatzkiste mal irgendwann öffnen zu können. Diese Datei sollte man so plazieren, dass alle Teammitglieder schnell und problemlos darauf zugreifen können, wenn die Kiste geöffnet werden soll.
<treasureboxname>.pub : Dies ist der public pgp key der Schatzkiste. Diesen kann man veröffentlichen und/oder teilen. Damit kann jeder, der gpg hat, Daten in die Schatzkiste legen
<treasureboxname>.sec : Dies ist der secret pgp key der Schatzkiste. Diesen kann der Erzeuger der Schatzkiste behalten, um jederzeit selber in die Kiste kucken zu können. Verteilen sollte man ihn besser nicht, das würde ja die ganze Schatzkiste hinfällig machen….
<treasureboxname>.passphrase : Dies ist die secret pgp passphrase. Auch sie braucht der Erzeuger, um in die Kiste schauen zu können
treasurebox.sh treasureboxname add file
Dies ist die Stand-alone Variante, um mit gpg und dem öffentlichen <treasureboxname>.pub Schlüssel Dateien zu verschlüsseln, um sie dann als Inhalt der Kiste dort abzulegen, wo auch die anderen Daten liegen
treasurebox.sh treasureboxname openbox treasure-keys-file
Hiermit wird nun so eine Kiste wieder geöffnet. Zuerst kopiert man die einzelnen wieder zusammengetragenen Schlüssel zeilenweise in eine Textdatei. Wieviele man braucht, erkennt man übrigens an der =zahl= im Schlüsseltext.
Der Aufruf erzeugt dann <treasureboxname>.sec und <treasureboxname>.passphrase, also die beiden Dateien, die man braucht, um alle bislang für die Schatzkiste verschlüsselten Dateien mit Hilfe von gpg lesen zu können - die Kiste ist geöffnet!
Wie immer ist es meistens ganz einfach, wenn man die richtigen Stellen findet, wo man abkucken kann
Also verschlüsselt werden die Daten ganz konventionell per gpg mit dem public Key, der für die Schatzkiste beim Init erzeugt wird. Da ist ja nichts besonderes dabei.
Auch die Entschlüsselung ist Karo Einfach, nämlich mit dem secret key und der Passphrase der Schatzkiste. Nur den muß mal erst mal haben, und da wirds langsam interessant. Der ist nämlich veschlüsselt im Treasure- File, und zwar diesmal mit symetrischer Verschlüsselung, was bedeutet, man braucht nur das passende Passwort. Das wiederum gibt es aber nicht in einem Stück, sondern das ist mathematisch aufgeteilt auf die einzelnen Schlüssel der Teammitglieder. Hätte man das Passwort jetzt nur in gleichgroße Stücke geschnitten, dann bräuchte man **alle* Teilstücke. Dank einer einfachen, aber genialen mathematischen Spielerei braucht man aber nur eine gewisse Menge aller Teilstücke, um den gesammten Schlüssel wieder zusammen zu bauen.
Dieser Trick wurde u.a. von Amir Sharon entwickelt (Sharon ist auch das S in RSA) und findet sich in der Literatur als Sharons Shared Secret:
Wer sich noch an seine Schulzeit erinnern kann, erinnert sich vielleicht auch noch an die allgemeine Funktionsgleichung
y = c + a * x + b * x^2 + z * x ^ n
und die Behauptung des Paukers, das man mindestens n Punkte einer Kurve kennen muss, um die Funktionsgleichung einer Kurve n-ten Grades bestimmen zu können.
Sharon macht nun einfach folgendes: Eine Passphrase ist, richtig umgerechnet, auch nichts anderes als eine ziemlich große Zahl. Diese Zahl ist die Konstante c in der Gleichung. Wenn man dann auch noch weiß, mit vieviel Teilstücken n man den Schlüssel wieder herstellen will, denkt man sich eine x-beliebige Gleichung n-ten Grades mit c als Konstante aus.
Aus dieser Gleichnung kann man dann soviele Punkte der Kurve berechnen, wie man braucht, um für m Leute einen Schlüssel zu haben. Jeder dieser Leute kriegt dann eine Punktkoordinate als seinen persönlichen Teilschlüssel.
Wenn man dann die Passphase (also c) wieder herstellen will, ist es völlig egal, wieviel verschiedene Leute m es gibt. Man muß nur n Punkte wieder zusammen bekommen, um daraus die Gleichung und damit auch c wieder herstellen zu können.
Und selbst für so'n Quatsch gibts schon fertige Software (namens ssss) ferig als Debian- Package, und die ist es auch, die hier den Zaubertrick vollführt