Ups! Diese Seite braucht JavaScript, und es scheint, dass JavaScript nicht aktiviert ist. Vielleicht möchtest Du einen anderen Browser verwenden? Oder es liegt daran, dass irgendwie der JavaScript Teil abhanden gekommen ist.
Wenn Du von jemandem für Notfälle einen verschlüsselten Teil eines Passworts bekommen hast, dann hat diese Person hoffentlich weitere Teile bei weiteren Personen oder an sinnvollen Orten hinterlegt. Sobald Du drei unterschiedliche Teile hast, kannst Du auf dieser Seite das Passwort rekonstruieren - natürlich nur, wenn es mit dem auf dieser Seite beschriebenen Verfahren verschlüsselt und geteilt wurde.
Wenn Du ein Passwort hast, auf das im Notfall jemand zugreifen können soll auch wenn Du selbst nicht erreichbar bist, dann kannst Du auf dieser Seite das Passwort in mehrere Teile verschlüsselt aufteilen. Diese Teile kannst Du z. B. an Freunde weitergeben. Nur wenn mindestens drei Teile zusammengeführt werden, kann das ursprüngliche Passwort rekonstruiert werden.
Bei dem Verfahren wird nur einfache Mathematik verwendet, so dass man zur Not die Berechnungen sogar mit Stift und Papier durchführen kann. Details und weitere Informationen findest Du im Abschnitt zur Theorie.
Wenn Du von jemandem für Notfälle einen verschlüsselten Teil eines Passworts bekommen hast, dann hat derjenige hoffentlich weitere Teile bei weiteren Personen oder an sinnvollen Orten hinterlegt. Wenn Du drei unterschiedliche Teile hast, kannst Du hier das Passwort rekonstruieren - natürlich nur, wenn es mit dem auf dieser Seite beschriebenen Verfahren verschlüsselt und geteilt wurde.
- Status: Leer
- Status: Leer
- Status: Leer
Wenn sich Passwort-Daten und Validierungs-Daten unterscheiden, ist das angezeigte wiederhergestellte Passwort möglicherweise nicht korrekt. Mögliche Gründe für die Unterschiede sind, dass Teile kombiniert wurden, die nicht zueinander gehören, oder dass die Daten in den Teilen nicht komplett richtig vorliegen.
Wenn Du ein Passwort hast, auf das im Notfall jemand zugreifen können soll auch wenn Du nicht verfügbar bist, dann kannst Du hier das Passwort in mehrere Teile verschlüsselt aufteilen. Diese Teile kannst Du z. B. an Freunde weitergeben. Nur wenn mindestens drei Teile zusammengeführt werden, kann das ursprüngliche Passwort rekonstruiert werden.
Beispielbeschreibung: Es handelt sich um Marias Benutzerdaten von 2023 bei ihrer Hausbank, geteilt mit ihren Angehörigen für Notfälle.
und scrolle dann nach unten.
Wenn Du Teile an andere weitergibst, dann gib' am besten eine Kopie dieser Seite mit. Sie ist so gestaltet, dass man sie einfach als Datei abspeichern und wieder öffnen kann und sie komplett ohne Internetverbindung funktioniert.
Unten findest Du die verschlüsselten Teile Deines Passworts. Danach folgt ein Vorschlag, wie Du die Teile an andere Personen weitergeben kannst, damit diese auch in zehn Jahren noch wissen, was sie da haben.
DYNAMISCHER TEXT: Die verschlüsselten Teile ==> ==> Eventuell musst Du scrollen ==> ==>
Im Folgenden findest Du ein Beispiel dafür, wie Du die Teile weitergeben könntest – passe es nach Bedarf an.
In diesem Dokument bekommst Du einen verschlüsselten Teil eines Passworts.
DYNAMISCHER TEXT: Beschreibung
Zusammen mit diesem Dokument habe ich Dir eine Datei "passwort-teilen.html" geschickt. Bitte bewahre beides zusammen an einem sicheren Ort auf, z. B. in Deinem Passwort-Programm. Ich habe es Dir gegeben, damit Du im Notfall – zusammen mit zwei weiteren Personen, die ebenfalls Teile erhalten haben – das Passwort rekonstruieren und alles weitere Notwendige veranlassen kannst. Dies ist einer von
DYNAMISCHER TEXT: Anzahl Teilen, erstellt am
DYNAMISCHER TEXT: Datum. Für die Rekonstruktion des Passworts wird dieser Text übrigens nicht benötigt, nur die folgenden Daten:
[Ersetze diesen Absatz mit dem Teil, den Du weitergeben möchtest.]
Obiger Teil wurde mithilfe der Webseite https://gdiet.github.io/secret-sharing/passwort-teilen.html erstellt, von der die beigelegte Datei "passwort-teilen.html" eine Kopie ist. Diese Webseite kann ohne Internetverbindung genutzt werden und hat auch eine Funktion zur Wiederherstellung des Passworts aus drei Teilen.
Für den Fall, dass Du die Webseite nicht verwenden kannst oder die Funktion der Webseite manuell verifizieren möchtest, ist hier eine Beschreibung des Verfahrens zur Wiederherstellung des Passworts aus den drei Teilen:
* Gegeben sind drei Teile, jeweils mit den Feldern a, b, c und v.
* c und v sind dabei jeweils eine Liste von Zahlen.
* Alle c-Werte werden einzeln nacheinander verwendet.
Die drei a- und b-Werte sowie den jeweils ersten c-Wert nennen wir im folgenden a1, a2, a3, b1, b2, b3, c1, c2, c3. Für jede Position in der c-Liste ist das folgende Verfahren entsprechend auszuführen:
Im folgenden brauchen wir die Rechenoperationen Modulo, die den Rest einer ganzzahligen Division berechnet. Wenn eine Zahl x durch eine Zahl y geteilt wird, ergibt der Ausdruck x mod y den Rest dieser Division. Zum Beispiel ist 5 mod 3 = 2, da 5 geteilt durch 3 einen Rest von 2 lässt. Vorzeichen behandelst Du dabei so:
-17 mod -7 = +17 mod +7 = = 3
-17 mod +7 = +17 mod -7 = 7 - (17 mod 7) = 4
Der Modulo ist also nie negativ.
Außerdem brauchen wir "div257", die Division im Zahlenraum Modulo 257. x div257 y berechnest Du so: Du prüfst, ob x ohne Rest durch y teilbar ist. Ist es nicht ohne Rest teilbar, dann addiere 257 zu x und prüfe erneut. Wiederhole diesen Vorgang, bis Du eine Zahl erhältst, die ohne Rest durch y teilbar ist. Das Ergebnis dieser Division ist das Ergebnis von "div257". Beispiele:
12 div257 4 = 3 ... 12 / 4 = 3 ist ohne Rest teilbar
15 div257 4 ... 15 / 4 ist nicht ohne Rest teilbar
15 div257 4 ... 15 + 257 = 272
15 div257 4 = 68 ... 272 / 4 = 68 ist ohne Rest teilbar
Aus m und n berechnet sich die Zahl des Passworts an der aktuellen Position:
s = (m mod 257) div257 (n mod 257)
s ist eine Zahl im Bereich von 0 bis 256. Sämtliche Zahlen s = 256 werden ignoriert, die übrigen Zahlen werden als UTF-8 Zeichenkette interpretiert. Häufig verwendete UTF-8 Zeichen sind:
Wenn Du aus den c-Werten das Passwort rekonstruiert hast, dann kannst Du es mit den v-Werten validieren. Dazu berechnest Du für jeden v-Wert die Zahl s wie oben beschrieben und vergleichst sie mit dem entsprechenden c-Wert. Wenn sich Passwort-Daten und Validierungs-Daten unterscheiden, ist das wiederhergestellte Passwort möglicherweise nicht korrekt. Mögliche Gründe für die Unterschiede sind, dass Teile kombiniert wurden, die nicht zueinander gehören, oder dass die Daten in den Teilen nicht komplett richtig vorliegen.
(Ende des Beispiels für einen Text, wie Du die Teile an andere weitergeben kannst.)
Wenn dich die Mathematik der Berechnung interessiert...
... findest Du hier die (möglicherweise durch 256 Werte erweiterten) UTF-8 Zahlenwerte (s-Werte), die das Passwort darstellen:
DYNAMISCHER TEXT: Passwort als Zahlen (UTF-8) ==> ==> Eventuell musst Du scrollen ==> ==>
Folgendes sind die p- und q-Werte (siehe Die Theorie hinter dem Ganzen), die für die Berechnung der c-Werte verwendet wurden:
DYNAMISCHER TEXT: Werte von p und q ==> ==> Eventuell musst Du scrollen ==> ==>
Und folgendes sind die p- und q-Werte, die für die Berechnung der v-Werte für die Validierung verwendet wurden:
DYNAMISCHER TEXT: Werte von p und q (Validierung) ==> ==> Eventuell musst Du scrollen ==> ==>
Wichtig: Die s-, p- und q-Werte werden nicht benötigt, wenn Du das Passwort verschlüsselt teilst. Gib sie auf keinen Fall an andere Personen weiter. Es ist nicht nötig sie zu speichern.
Wenn Du ein Passwort hast, auf das im Notfall jemand zugreifen können soll auch wenn Du selbst nicht erreichbar bist, dann gibt es Möglichkeiten, das Passwort in mehrere Teile verschlüsselt aufzuteilen. Diese Teile kannst Du z. B. an Freunde weitergeben. Nur wenn mindestens eine bestimmte Anzahl von Teilen zusammengeführt werden, kann das ursprüngliche Passwort rekonstruiert werden.
Auf dieser Seite geht es um ein Verfahren und die Theorie dahinter, wenn zur Rekonstruktion drei Teile benötigt werden. Es gibt auch Verfahren, bei denen nur zwei Teile benötigt werden, und es gibt Verfahren, bei denen man die benötigte Anzahl der Teile frei wählen kann. Diese Verfahren sind aber nicht Thema dieser Seite. Ein bekannter Ansatz für "beliebige Anzahl" ist übrigens Shamir's Secret Sharing - weitere Informationen und eine Implementierung findest Du zum Beispiel hier: https://gdiet.github.io/secret-sharing/share-compact.html
Ein Gleichungsystem mit drei Unbekannten
Nehmen wir zunächst an, dass es nicht um ein Passwort geht, sondern um eine geheime Zahl s. Wenn ich ein Gleichungssystem mit drei Unbekannten habe, und davon ist eine s, dann kann ich ohne p und q zu kennen das Gleichungssystem nach s auflösen, wenn ich drei voneinander linear unabhängige Gleichungen habe.
Wenn p und q zwei Zufallszahlen sind, und die jeweils drei a, b und c Werte bekannt sind, dann kann man das folgende Gleichungssystem nach s auflösen:
Mit etwas Mühe oder einem Mathe-Programm erhältst Du folgende Lösung für s:
Jetzt kommt die Bedingung "drei voneinander linear unabhängige Gleichungen" ins Spiel: Wenn zum Beispiel a1 = a2 = a3 ist, dann ist der Nenner 0, und bei der Division haben wir ein Problem. Nur wenn der Nenner ungleich 0 ist, können wir s berechnen.
Folgende fünfzehn a/b-Paare haben die Eigenschaft, dass jede beliebige Kombination von drei a/b-Paaren voneinander linear unabhängig ist:
Diese Wertepaare habe ich mittels eines Programms ermittelt, das zufällige Kombinationen auf ihre Unabhängigkeit prüft:
val tuples = for {i <- 1 to 9; j <- 1 to 9} yield (i, j)
while (true)
val selection = scala.util.Random.shuffle(tuples).take(15)
if selection.combinations(3).forall {
case Seq((a1, b1), (a2, b2), (a3, b3)) =>
a1*b3 + a2*b1 + a3*b2 - a1*b2 - a2*b3 - a3*b1 != 0
} then println(selection)
Weitere Wertepaare lassen sich ermitteln, interessieren hier aber erst mal nicht.
Das sieht soweit doch schon mal gut aus. Wir können bis zu 15 Personen je einen Satz voneinander unabhängiger a / b / c Werte geben, so dass es stets drei Personen braucht, um s zu rekonstruieren. Oder nicht?
Zusätzliches Wissen
Braucht es wirklich drei Personen, um Informationen über die geheime Zahl s zu bekommen? In der echten Welt ist das leider nicht immer der Fall. Das liegt daran, dass die Personen möglicherweise zusätzliches Wissen über p, q und s verwenden können. Wenn beispielsweise bekannt ist, dass p, q und s Bytes sind, also Zahlen im Bereich [0..255], und wenn ein c-Wert 255 ist, dann müssen die zugehörigen p/q Werte 0 sein und s = c. Oder wenn bekannt ist, dass nur ganze Zahlen in der Berechnung verwendet werden, und wenn bei einer Person a, b und c gerade sind, dann weiß diese Person, dass auch s gerade ist. Diese und ähnliche Überlegungen können verwendet werden, um aus nur einer oder zwei Gleichungen zumindest einige Erkenntnisse über den geheimen Wert s zu gewinnen.
Der Zahlenraum mod 257
Deshalb wenden wir einen Trick an: Wir führen alle Berechnungen modulo 257 - oder kurz: mod 257 - durch, was uns den Zahlenbereich [0..256] zum Arbeiten gibt - ein praktischer Raum, wenn wir mit Bytes arbeiten wollen.
Anstelle von 257 könnte man auch eine beliebige andere Primzahl verwenden. Mit mod 101 hätten wir zum Beispiel den Zahlenbereich [0..100], was je nach Anwendung auch sehr praktisch sein kann...
Für negative Zahlen bei Modulo verwenden wir hier die Regeln, dass
-x mod -y = +x mod +y
-x mod +y = +x mod -y = y - (x mod y)
ist, so dass der Modulo nie negativ ist. Beispiel:
-17 mod -7 = +17 mod +7 = 3
-17 mod +7 = +17 mod -7 = 7 - (17 mod 7) = 4
Wenn jetzt jemand zum Beispiel die Werte a = 2, b = 2, c = 2 kennt, dann hat er über s trotzdem keine zusätzlichen Informationen, weil
s = (a*p + b*q + c) mod 257
je nach dem Wert von p und q jeden Zahl im Bereich [0..256] sein kann.
Rechnen im Zahlenraum mod 257
Addition : a + b im Zahlenraum mod 257 = (a + b) mod 257
Subtraktion : a - b im Zahlenraum mod 257 = (a - b) mod 257
Multiplikation: a * b im Zahlenraum mod 257 = (a * b) mod 257
Division : a / b im Zahlenraum mod 257 = ... ?
Die Division ist etwas aufwändiger: Es ist die Inverse der Multiplikation, also "finde die Zahl c, für die gilt: (b * c) mod 257 = a". Du berechnest c am einfachsten so: Prüfe, ob a ohne Rest durch b teilbar ist. Ist es nicht ohne Rest teilbar, dann addiere 257 zu a und prüfe erneut. Wiederhole diesen Vorgang, bis Du eine Zahl erhältst, die ohne Rest durch b teilbar ist. Das Ergebnis dieser Division ist die gesuchte Zahl c.
Für negative Zahlen gilt dabei:
-a / -b = +a / +b | im Zahlenraum mod 257
-a / +b = +a / -b = 257 - ( +a / +b ) | im Zahlenraum mod 257
Passwörter teilen
Richtig, das wollen wir ja eigentlich. Mit dem obigen Handwerkszeug geht das so:
Passwort in Zahlen umwandeln: Ermittle den UTF-8 Code des Passworts. Du erhältst eine Sequenz von Zahlen s im Bereich [0..255].
Passwort auf Mindestlänge erweitern: Falls Du die Länge des Passworts verheimlichen willst, füge an beliebiger Stelle der Sequenz, zum Beispiel am Schluss, so oft Du möchtest 256 in die Sequenz ein.
Wähle für jede Zahl s aus der Sequenz zwei neue Zufallszahlen p und q aus dem Bereich [0..256].
Berechne für jeden Teil, den Du erstellen willst, für jede Zahl s der Sequenz die Zahl c. Rechne dabei im mod 257 Raum und verwende die oben genannten a/b-Paare.
Wenn Du zum Beispiel folgende Werte hast
a = 4, b = 7, p = 23, q = 218, s = 65
dann berechne
a * p + b * q + c = s | mod 257
c = s - a * p - b * q | mod 257
c = (65 - 4 * 23 - 7 * 218) mod 257
c = (-1553) mod 257
c = 257 - (1553 mod 257)
c = 257 - 11
c = 246
Damit man später das rekonstruierte Passwort validieren kann, wiederhole das Verfahren mit neuen Zufallszahlen p und q und erstelle dabei die v-Werte.
Gib als Teil die Werte a und b sowie die Liste der c- und v-Werte weiter. Der Teil kann dann so aussehen:
Du hast drei Teile, jeweils mit a und b sowie die Liste der c- und v-Werte.
Berechne aus diesen Zahlen die zwei Listen der s-Werte - die erste Liste aus den c-Werten, die zweite aus den v-Werten. Verwende die Formel für s, die wir oben aus dem Gleichungssystem mit drei Gleichungen hergeleitet haben, und rechne dabei im mod 257 Zahlenraum.
Vergleiche die zwei Listen von s-Werten. Wenn sie sich unterscheiden, ist das wiederhergestellte Passwort möglicherweise nicht korrekt. Mögliche Gründe für die Unterschiede sind neben Rechenfehlern, dass Teile kombiniert wurden, die nicht zueinander gehören, oder dass die Daten in den Teilen nicht komplett richtig vorliegen.
Entferne alle Zahlen 256 aus der Liste.
Interpretiere die resultierende Liste von Bytes als UTF-8 Zeichenkette.