Analoge Verschlüsselung einer 24 Wörter SeedPhrase

Ich finde es wichtig, solche Sachen zu bereden, auch um ein Gefühl dafür zu bekommen, wie Menschen auf derartiges reagieren und sehen. Bitte versteht den Inhalt dieses Thema auch als Angebot, als eine Möglichkeit für jeden. Niemand muss. Darüber zu sprechen und seine Gedanken darüber hier zu teilen ist willkommen … ich danke jedem, der/die sich hier daran beteiligt :slightly_smiling_face:

Meinst du das ernst? Du glaubst eine sichere Chiffre entwickelt zu haben? Hast du irgendeine Vorstellung was für eine krasse mathematische Leistung und Anstrengung hinter so etwas steckt? :smiley:

Niemand in diesem Forum wäre ansatzweise dazu in der Lage sich in dieser Richtung etwas neues auszudenken! Dazu muss man komplett crazy sein (im positiven und mathematischen Sinne).

Ich schaue mir deine PDF später mal an und schreib was dazu. Wenn ich die Zeit finde schreib ich dir auch ein Python Skript was das Verfahren bricht, es sieht auf den ersten Blick nämlich mehr wie eine Codierung aus die Security through obscurity betreibt.

4 „Gefällt mir“

Du kannst ja Mal ein frisches Wallet erstellen und ein paar Sats daraufschicken. Dann den seed analog verschlüsseln und hier teilen. Wer es schafft deine Verschlüsselung zu knacken bekommt die Sats die auf der Wallet sind

7 „Gefällt mir“

Ich habe mir nichts neues erdacht, ich hatte eine Idee und vorhandenes genutzt.

Wenn es ein Angreifer tatsächlich schaffen sollte, alle lesbaren Blöcke zu finden, unter denen sich mind. auch ein fake Block befindet welcher 4 falsche Wörter der BIP39 enthält, hat jener Angreifer 7 Blöcke vor sich mit jeweils 4 Wörtern.

Wie soll der Angreifer herausfinden, welche Blöcke gültig sind, bzw welcher Block ungültig?
Denn das muss dieser.Davon abgesehen, in welcher Reihenfolge werden diese richtig gestellt, um den Seed korrekt abzubilden?
Das Problem von mind. einem ungültigen Block (man kann bis zu 3 ungültige Blöcke generieren, welche Wörter der BIP39 enthalten), wecher erst indentifiziert werden muss. Und wie sollte das gehen, wenn zusätzlich auch noch 2 Wörter aus der Seedphrase gültiger Blocke falsch sind? Deren Wörter unbekannt sind und auch deren Positionen in den gültigen Blöcken und in der Reihenfolge im Seed! Lasse es bitte in deinen Gedanken durchspielen. Ich sehe hier keinen Ansatzpunkt.

Aber ich gehe auf den Vorschlag von @Kilian ein und werde ein Wallet mit sats füllen. Es werden 500 Euro bis dato entsprechen, wo ich den Transfer tätige. Ich werde diesbezüglich hier Screenshots als Beweis liefern

1 „Gefällt mir“

Du hast dir ja wirklich viel Mühe gemacht, dir so etwas zu überlegen und aufzuschreiben.

Gerne, dafür würde ich den Spieß aber gerne mal umdrehen.

Wie von @Achim schon erwähnt gibt es einige bewährte, bis dato sichere Verfahren, mit denen man Gefahren einer einfachen Sicherung der 24 Wörter ausschließen kann:

  • Passphrase
  • Mnemonic Split
  • Multi Sig
  • Shamir’s Secret Sharing

Mit Problemen bzw. Gefahren meine ich beispielsweise solche Dinge:

  • Zu kompliziert für Vererbung (Komplexität des Verfahrens)
  • Verwendung nicht-bewährter kryptographischer Verfahren
  • Vertrauen ggü. einzelnen Parteien notwendig (andere Haushalte, Hersteller, Bank etc.)
  • Komplettverlust bei Diebstahl, Verlieren oder Vergessen einer einzelnen Sicherung
  • Komplettverlust wegen Einzelfehler bei der Sicherung (z.B. Codierung ohne Fehlerkorrektur)
  • Verlust durch Zerstörung, äußere Einflüsse, Alterung
  • Vergessen eines Schlüssel, Passworts
  • Beschreibung des Verfahrens nicht mehr verfügbar
  • Keine integrierte Plausible Deniability
  • etc.

Es gibt für mich nun zwei Möglichkeiten:

  1. Dein Verfahren löst auch nicht mehr Probleme als die schon existierenden Verfahren.
  2. Dein Verfahren löst mehr Probleme als die schon existierenden Verfahren.

Fall 1)
In diesem Fall sind wir uns sicher einig, dass es schlauer ist auf bewährte Verfahren zu setzen. Diese sind hundertfach beschrieben, erklärt und beispielhaft demonstriert worden. Es gibt also keinen Grund ein neues Verfahren einzusetzen.

Fall 2)
In diesem Fall wäre es wert, dein Verfahren näher zu beleuchten und weiter zu vergleichen. Probleme wären dann mehr als bisher gelöst, aber evtl. bringt dein Verfahren weniger Features mit.
Es kann auch sein, dass du mehr Probleme löst, aber auf eine wesentlich komplexere und fehleranfälligere Art.
Oder dass einfach andere Probleme gelöst werden; man müsste also entscheiden welche Probleme wichtiger sind.

Könntest du uns also vielleicht zuerst mal zusammenfassen, welche Probleme von deinem Verfahren, aber nicht von etablierten Verfahren gelöst werden?

An sich eine schöne Idee. Vor allem für den, der die 500 € erbeutet.

Aber mal angenommen, niemand kommt an das Geld. Glaubst du wirklich das ersetzt die Jahrzehnte lange Bewährung der wissenschaftlich begründeten und erforschten Verfahren?

3 „Gefällt mir“

Ich schon.

@bit01 Dein Verfahren ist extrem unsicher. Warum?

Weil ich es gerade mit Python gebrochen habe. Alles was ich dafür brauche ist der verschlüsselte Block. Die Permutation innerhalb der Blöcke, die Information welche Blöcke die richtigen sind oder die absichtlich falschen Wörter die versteckt sind bieten keine Sicherheit.

Mir hat diese „Kryptanalyse Lite“ gerade sehr viel Spaß gemacht und hoffe dass man hier was mitnehmen kann. :smiley:

Für alle interessierten die damit rumspielen wollen (und meinen Anfängercode verfeinern möchten), hier könnt ihr das Jupyter Notebook dazu runterladen: https://sutterseba.s-ul.eu/oG2DsjhD

Als Beispiel habe ich einfach das aus dem PDF genommen, unsere Ausgangslage ist also:

Was wir kennen:

  • Das Verfahren

    Das ist auch üblich so, ansonsten wäre das ein Verstoß gegen das Kerckhoffs’sche Prinzip. Die Sicherheit einer Chiffre darf auf keinen Fall auf ihrer Geheimhaltung beruhen. Du meintest aber dass das Verfahren trotzdem noch sicher ist, sonst hättest du es ja auch nicht veröffentlicht.

Was wir nicht kennen:

  • Den Schlüssel, also
    • Die gültigen Blöcke
    • Die richtige Reihenfolge der Blöcke
    • Absichtlich versteckte Wörter die falsch sind
    • Welche Blöcke permutiert wurden und in welche „Richtung“

Los geht’s.

Wir schreiben uns erstmal diesen Zahlensalat in einen halbwegs sinnvollen Datentyp. (Ja, ich weiß, hier hätte ich eigentlich Numpy nutzen sollen…)

Wir sehen hier eine Liste in der jeweils die Blöcke (auch Listen) mit ihren Viererpärchen an Zahlen stehen. Diese Zahlen übersetzen wir jetzt erstmal ins Alphabet:

Einige Wörter machen jetzt bereits Sinn, andere nicht.

Jetzt permutieren wir alle Wörter die noch keinen Sinn ergeben in alle Richtungen (also von Rechts nach Links, von Oben nach Unten, und so weiter…). Sobald ein Wort einen Sinn ergibt, merken wir es uns, falls alle Richtungen keinen Sinn ergeben, landet das Wort nicht auf der Merkliste. → Brute Force.

Wir bekommen 6 Blöcke mit BIP39 Wörtern, und drei leere Blöcke. Genau was wir haben wollten:

Screenshot 2022-05-25 at 12.48.00

Jetzt schmeißen wir die leeren Blöcke raus und erweitern die Wörter (mit Hilfe der Wordlist) auf ihre eigentliche Länge.

Wir haben jetzt 6 Blöcke die wir nur noch unterschiedlich Permutieren müssen, also in alle möglichen Anordnungen schieben, bis die daraus resultierende Mnemonic gültig ist. Der Suchraum ist hier jediglich 6! = 720, was ein Kinderspiel ist.

Darauf habe ich @bit01 auch schon hingewiesen:

Wir laufen jetzt mit Hilfe von itertools über alle möglichen Anordnungen und überprüfen in jedem Schritt ob die Checksumme und damit die Mnemonic gültig ist. Das hast du, @bit01, wahrscheinlich nicht bedacht.

Und heraus bekommen wir eine wunderschöne Mnemonic:

Geld wäre an dieser Stelle (also nach wenigen Mikrosekunden) weg:

\text{q.e.d.}

13 „Gefällt mir“

Und das, bevor die 500 € drauf waren. Ehrenmann! :grin:

P.S.:

@bit01, damit wäre dein Verfahren an diesem Punkt gescheitert:

Man sollte nicht den Aufwand, die mathematisch saubere Basis und die jahrelange Bewährung der etablierten Verfahren unterschätzen.

2 „Gefällt mir“

Wie jetzt, die bekomme ich nicht? :see_no_evil:

1 „Gefällt mir“

Ich hätte @sutterseba die 500 Öcken gegönnt :stuck_out_tongue_winking_eye:
Ich hätte die Zeit und den Nerv nicht, da etliche Stunden zu investieren, um das Konzept überhaupt durchzulesen und dann zu coden…


Deshalb heißt es doch immer: Don't run your own crypto

2 „Gefällt mir“

Danke für das Testen! :slight_smile:
Respekt. Allerdings musst du eingestehen, dass du nicht den richtigen Seed gefunden hast und somit das Experiment gescheitet ist. In dem gefundenen Seed sind nicht die echten fehlenden Wörter „cool“, sondern die falschen, quasi die letzte Hürde als Schutz. Wenn du dir nun vorstellst, dass du in dem von mir erdachten Verfahren auch 3 ungültige Blöcke mit BIP39 Wörter nutzen kannst, nicht nur einen Block wie in dem PDF beschrieben, sieht die Sache noch schwieriger aus. Ich meine, man sollte 3 Blöcke verwenden.
Ich werde mein Angebot, einen verschlüsselten komprimierten Seedphrase „Master“ Block hier zum Entschlüsseln anbieten. Die Wallet ist erstellt und der Seed wird verschlüsselt.

Du willst es nicht verstehen.

Zwei der Wörter auszutauschen und nach dem „richtigen“ Wort zu suchen rettet hier überhaupt nichts mehr! Die Checksumme macht dir hier jedes mal einen Strich durch die Rechnung. Vor allem weil es zunächst schwierig ist diesen Austausch überhaupt durchzuführen und zwei gültige Phrasen zu finden.

Ich möchte nämlich darauf hinweisen dass deine Beispielmnemonic, also das „richtige Ergebnis“, nicht mal existiert weil die Checksumme ungültig ist:

Auch wenn man „meine“ Mnemonic nimmt und ski, echo austauscht:

Nein, das machst du bitte nicht.

Solltest du hier wirklich eine „verschlüsselte“ Mnemonic teilen die mit 500€ scharf ist, dann entfernen wir das. Solche Spielchen kann man mit echten Verfahren machen, aber nicht mit einem Verfahren zu dem bereits ein Skript vorgefertigt zum Download bereit steht.

Du würdest deine 500€ einfach nur in den Sand setzen, sofern derjenige nicht ein Auge zudrückt und das Geld zurück gibt.

@bit01: Irgendeine Reaktion darauf?

Ist das das einzige Problem, das gelöst wird? Das entspricht in meiner Liste diesem hier:

Dieses Problem wird auch durch jedes von mir aufgelistete (etablierte) Verfahren gelöst.

Und was ist mit den ganzen anderen von mir aufgelisteten Gefahren, die teilweise oder vollständig von den etablierten Verfahren gelöst werden?

1 „Gefällt mir“

Mein Bauchgefühl sagt mit das dein Konzept „ sicher“ genug ist für
500
5000
50000
500000
5000000
Aber eben nicht für 5Mrd. damit stelle ich ein Kryptoteam zusammen dass dein Konstrukt vermutlich knackt. Schau mal in die Vergangeheit. Es sind schon etliche Verfahren gebrochen worden.

Wie kommst du denn jetzt darauf nachdem die Unsicherheit gerade ausführlich bewiesen wurde? Scroll mal hoch…

Nenn mir einen einzigen Grund warum man dieses Verfahren (oder irgendein DIY Verfahren) einem bewährten Verfahren wie von @skyrmion aufgelistet vorziehen sollte.

Hab die Kryptoanalyse grad erst gelesen, realy great. Also der Treat hat mich gut unterhalten, danke euch allen für die rege Diskussion und euren Einsatz :grinning:

Sehr nice! Ich habe das gerade mal mit meinem Seed gemacht. Versucht es doch zu knacken :sunglasses:
Kleine Hilfe: die falschen Blöcke habe ich durch „X“ ersetzt, um den Angreifer zu verwirren, aber ihr wisst nun Bescheid. Die Leserichtung ist immer von links nach rechts. Blockreihenfolge im 3x3 Muster: 125678

0315151203151512XXXXXXXX
0315151203151512XXXXXXXX
0315151203151512XXXXXXXX
0315151203151512XXXXXXXX
XXXXXXXX0315151203151512
XXXXXXXX0315151203151512
XXXXXXXX0315151203151512
XXXXXXXX0315151203151512
0315151203151512XXXXXXXX
0315151203151512XXXXXXXX
0315151203151512XXXXXXXX
0315151203151512XXXXXXXX

Achja, ich habe sogar 24 Wörter durch „cool“ ersetzt, um es noch sicherer zu machen. Ich sag euch aber nicht, wie viel da drauf ist.

1 „Gefällt mir“

Kogry, nicht so lustig dein post. :roll_eyes:

Das was mit dem Script erhalten wird sind Worte aus der Mnemonic Wortliste. Diese Worte sind, wenn 3 der fake Blöcke selbst gültige Mnemonic Wörter enthalten, insgesamt 36 Wörter, von denen mind. 2 oder mehr Wörter auch noch falsch sein können, welche nicht zur Seedphrase gehören. Von diesen sind nur 6 Wortblöcke gültig. Nur 6 von 9.
Welche sind es?
Zwei oder mehr Wörter die nötig sind, um die Wallet zu öffnen fehlen gänzlich. Mit was willst du diese ergründen? Es sind viele Worte in der BIP39, abzüglich der 36 Wörter die du sichtbar machen kannst.
Das was als Beispiel in dem PDF gemacht wurde, diente der Erklärung, wie das funktioniert. Einfach gehalten.

Was du bisher gelöst hattest, sind die Worte sichtbar zu machen. Nicht aber die korrekte Reihenfolge und auch nicht die fehlenden Worte. Ich glaube dir nicht, wenn du behauptest, dass du bei einem echten Seedphrase ergründen kannst, welche die richtigen Worte aus den 36 sind wie die Reihenfolge dieser Worte ist und wieviele Worte fehlen und…
… an welcher Stelle diese stehen, um eine Wallet zu öffnen.

Ich schrieb in meinem PDF "…Man merkt sich
zwei Wörter, welche diesem Backup nicht hinzugefügt werden, statdessen werden zwei andere Fake-Wörter benutzt. " Besser wäre gewesen, ich hätte geschrieben, „mindestens“ zwei Wörter, denn so war es eigentlich gedacht. Damit meine ich, es können auch mehr als 2 Wörter sein die falsch sind. In meinem 1. Entwurf hatte ich dies so geschrieben. Diesen hatte ich aber gelöscht.

Um heraus zu finden ob ich Recht habe, geht nur ein Weg. Ich bin mir sicher, sonst würde ich das hier nicht verteidigen. Liege ich falsch, muss ich damit leben.

„Solltest du hier wirklich eine „verschlüsselte“ Mnemonic teilen die mit 500€ scharf ist, dann entfernen wir das.“
Aber so nimmst du mir meine Entscheidung ab und vereitelst einen Gegenbeweis. Wer es wirklich entschlüsselt kann die Wallet behalten und den Inhalt. Das ist es mir wert. Ich mache mir dann über anderes Sorgen.
500Euro sollten auch im steuerlichen Freibetrag liegen.

„Könntest du uns also vielleicht zuerst mal zusammenfassen, welche Probleme von deinem Verfahren, aber nicht von etablierten Verfahren gelöst werden?“
Ich kenne etablierten Verfahren welche eine analoge Verschlüsselung bieten, die auf einer Seedphrase anwendbar ist nicht. Der Grund, warum ich dieses PDF verfasst hatte.

Viel Glück.

031513021701071916082519
192001142104011619081521
150114190922160518162405
060119082001000521140405
022114112114080112070913
111601141305121515210801
231513012015070525092419
100501120621140001200519
122320220522091203011800
150915091903180513211803
070604221209131904180922
090504090618010722010508

1 „Gefällt mir“

Ich verstehe es auch nicht ganz.

Aber es ist doch überhaupt nicht notwendig, dass er 2 gültige Phrasen findet…
Er erstellt eine gültige Mnemonic. Verändert 2 oder mehr Wörter davon und merkt sich natürlich die korrekten Wörter und deren Stelle. Ja, diese veränderte Mnemonic ist jetzt keine gültige mehr, aber das kann ihm ja egal sein. Jetzt encoded er die veränderte Mnemonic in diese 6 Blöcke mit Zahlen und fügt noch 3 weitere Blöcke hinzu (die aber alle korrekte Wörter aus BIP39 enthalten).

Der Angreifer decodiert die Zahlen wieder zurück in die Buchstaben und ermittelt die Leserichtung. (Dieses ganze Encoden mit Buchstaben → Zahlen und verschiedene Leserichtungen würde ich definitiv weglassen… Es macht das ganze einfach nur komplizierter, ohne irgendwelche Sicherheitsvorteile zu bieten, wie @sutterseba ja schon mit seinem Python Skript gezeigt hat.)

image

Das währen dann die 9 Blöcke.
Ich denke es gibt hier:

\frac{9!}{3!}= 60480

verschiedene Anordnungen der Blöcke. Kein Problem. Die kann man alle einmal durchprobieren und schauen ob die Checksumme passt. Es gibt aber keine, bzw. auf keiner dieser Kombinationen liegen die Coins. Das Problem sind die zu Begin veränderten Wörter der original Mnemonic.

Ohne wissen darüber wie viele veränderte Worte es gibt und an welchen Stellen diese sind kann man jetzt hier nur brute forcen bis man eine gültige Checksumme findet und bei dieser Kombination dann schauen ob Coins draufliegen.

Zusammengefasst würde ich deine Analoge Verschlüsselung also wie folgt beschreiben:
Gültige Mnemonic generieren → Reihenfolge der Wörter verändern und merken → 2 oder mehr Wörter an beliebiger Stelle dieser Mnemonic verändern und merken.

Problem ist halt dass du dir jetzt auch schon ziemlich viele Sachen merken musst. Reihenfolge der Umsortierung + Veränderte Wörter an welchen Stellen?
Alles andere bringt keine wirkliche Sicherheit und verkompliziert die Verschlüsselung nur.

Da würde ich lieber eine Passphrase nutzen und mir dort eine entsprechend sichere aussuchen.

2 „Gefällt mir“

Exakt. Diese Spielereien rund herum werden durch Brute Force direkt wieder zerstört. Das einzige, was einen Angreifer vom echten Seed fern hält, ist es, möglichst viele Wörter auszutauschen (daher habe ich 24 Wörter ausgetauscht). Aber guess what: Das haben schon mehrere Leute versucht, und viele von denen kommen nun nicht mehr an ihre Coins.

Aber hey, macht weiter so, mein halber Satoshi wird dadurch nur wertvoller :person_shrugging: