Sha256 im Hexadezimalsystem

Leute ich raffs nicht und vllt könnt ihr mir wertvolle Tipps geben.
Mich interessiert aktuell die Umwandlung der Darstellung von sha256.

So wie ich es verstehe habe ich in der binären Darstellung 256 Zustände von jeweils 0 und 1. Diese kann ich jetzt anscheinend im Hexadezimalen System mit nur 64 Zeichen darstellen wo jeder Wert 16 Zuständen entsprechen kann (0-9 + A-F).
Somit macht für mich auch Sinn, was Sunny in seinem Buch schreibt, dass jede weitere 0 in der Difficulty einer exponentiellen Steigerung der Schwierigkeit um den Faktor 16 bedeutet.

Wenn ich mir jetzt allerdings überlege das 64 Zeichen á 16 Zustände die Darstellung ist, dann komm ich doch auf 1024 und nicht auf 256, wie ursprünglich im sha Algorithmus.

Wo ist mein Denkfehler? Habt ihr da ne gute Quelle um das nachvollziehen zu können? Und wie zur Hölle stelle ich am Ende diese 64 Zeichen wiederum als 12 oder 24 Wörter dar? Fragen über Fragen…

bin hex wort
0000 0 abandon
0001 1 ability
0010 2 able
0011 3 about
0100 4 above
0101 5 absent
0110 6 absorb
0111 7 abstract
1000 8 absurd
1001 9 abuse
1010 A access
1011 B accident
1100 C account
1101 D accuse
1110 E achieve
1111 F acid

Und so weiter…

Eine Hex Zahl kann 16 Zustände darstellen. Für Binär brauchst du dafür 4 Bit.

Deshalb hast du 64 Hex * 4 => 256 bit

Bei den Wörtern ist es etwas anders, da entspricht jedes Wort einfach einer Bitfolge und wie lange die ist hängt von der grösse der Wortliste ab.

Bei einer Wortliste von 2048 Wörtern wie bei Bip39 enspricht dann ein Wort 11 bit. Weil 2028 = 2¹¹

Hoffe das war irgendwie verständlich

6 „Gefällt mir“

ahhhhhh ja doch Hex ist mir jetzt klar. Über die Wortliste muss noch etwas grübeln aber ich bin schon einen großen Schritt weiter. Danke :slight_smile: Die Tabelle ist echt hilfreich fürs Verständnis.

PS: grad hats klick gemacht :open_mouth:

2048 = 2¹¹

und

256 : 11 = 23,27

Einfach geil und doch garnicht so schwer. So bringt bitcoin mir am Ende noch Mathe bei so ganz am Rande :joy: und ich glaub ich hab auch grad verstanden warum 12 Wörter potenziell nicht unsicherer sind als 24 :exploding_head: es ist halt nur eine andere Darstellung aber bleibt sha256 im Kern.

2 „Gefällt mir“

Ja, das mit 12 Wörtern vs. 24 Wörtern habe ich auch so verstanden.

Also potentiell kann man mit 24 Wörtern auf das selbe Ergebnis kommen wie mit 12 Wörtern. Weil 24 Wörter erzeugen mehr Variationen als Bitcoin im Kern eigentlich zulässt.

24 Wörter sind aber dann sinnvoll, wenn man seinen Seed Splitten möchte in 3x8 Wörter. Wenn jemand dann beispielsweise 16 von den 24 Wörtern hat, ist es stand jetzt nicht möglich die restlichen 8 Wörter mit Bruteforce zu knacken. Wenn man solch einen Split mit 12 Wörtern machen würde,… also 3x4 Wörter und jemand hat dann 8 von denen, dann kann der Rest mit Bruteforce geknackt werden.

1 „Gefällt mir“

Du hast ganz einfach Mal-Rechnung mit Hoch-Rechnung vermixt. 16 \cdot 64 = 1024 ist die falsche Rechnung. Stattdessen …

16^{64} = (2^{4})^{64} = 2^{4 \cdot 64} = 2^{256}

64 Hexadezimal-Ziffern können also die gleichen Zahlen darstellen wie 256 Binär-Ziffern.

Es ist schon ein bisschen komplizierter als das. Allgemein bieten 12 Wörter nicht die gleiche Sicherheit wie 24 Wörter.

12 Wörter bieten aber ungefähr das gleiche Sicherheitsniveau ggü. Brute-Force-Angriffen, wie die resultierenden ungehashten Public Keys selbst; nämlich 128 Bit. Das ist unabhängig davon, ob man die Public Keys aus 12 oder 24 Wörtern abgeleitet hat.

Deshalb wird gerne argumentiert, dass man keine 24 Wörter braucht, wenn der resultierende Public Key sowieso nur 128 Bit Sicherheit bietet. Im Detail betrachtet ist es aber nicht ganz so einfach, siehe die Threads zum Thema hier im Forum.

Ein ungehashter Public Key bietet nur 128 Bit Sicherheit, obwohl es ca. 2^{256} davon gibt. Das liegt daran, dass es bessere Verfahren als simples Brute-Forcen gibt, mit denen man nur in der Größenordnung von 2^{128} Versuchen braucht, um zum Private Key zurückzurechnen. Mit SHA-256 hat das nichts zu tun.

Warum 12 Wörter für deine Wallet ausreichend sicher sind

Bei einem Mnemonic Split hat man 3x16 Wörter.

Deine Erklärungen dazu sind aber richtig. Wenn jemand eine Teilsicherung findet, muss er nur noch 8 Wörter bruteforcen. Bei 12 Wörtern, also 3x8 Wörter Teilsicherungen, wären es entsprechend nur 4 Wörter.

2 „Gefällt mir“

Okay, vielen Dank. Dann muss ich wohl doch nochmal etwas tiefer graben :upside_down_face: Es ist aber wirklich cool wie hier der Austausch funktioniert. Mega

1 „Gefällt mir“