Was ist unter der Haube von Jaxx. Entropie sofort 128 Bit

Ein wenig zerknittert, aufgeschrieben, um nicht zu vergessen. Kommentare der Habracrypto-Community sollten interessant sein.

Ich habe mich entschlossen zu überprüfen, wie kryptografisch Brainwallet das Backup-System der Jaxx-Brieftasche mit mehreren Währungen ist und was die geheimen Wörter auf Codeebene bedeuten.

Zu Beginn habe ich eine Kopie der frisch installierten Google-Erweiterungsmappe in meinen Arbeitsordner erstellt. Die Dateien für die Bearbeitung wurden korrigiert.

Notepad ++ bietet großartige Funktionen zum Durchsuchen von Dateien und Plugins zum Formatieren von Code. Durch das Suchen und Hinzufügen von Zeilen wie console.warn („bits =“ + bits) konnten Sie schnell herausfinden, was beim Generieren und Wiederherstellen einer Brieftasche passiert. Es wurde auch eine dem Benutzer verborgene Funktion entdeckt, die es wahrscheinlich ermöglicht, den Grad der kryptografischen Resistenz gegen Paranoid zu erhöhen.

Also, wenn Sie eine Brieftasche erstellen:

1. 128 Pseudozufallsbits werden mit rng erzeugt:

function generateMnemonic(strength, rng, wordlist) { strength = strength || 128 rng = rng || randomBytes var hex = rng(strength / 8).toString('hex') console.warn('hex=' + hex) return entropyToMnemonic(hex, wordlist) } 

2. Die 4-Bit-Prüfsumme wird berechnet

3. Die gesamte Bitmap wird in 12-Bit-Teile unterteilt und in eine Ganzzahl konvertiert. Wir erhalten 12 Indizes für die Codetabelle.

4. Eine Wortfolge für eine Brieftaschen-Sicherung wird aus einer Codetabelle mit einer Größe von 2225 Wörtern gesammelt.

5. Basierend auf der Auswahl werden verschiedene Brieftaschen erstellt, indem verschiedene Hashing-Algorithmen auf den 128-Bit-Startwert angewendet werden.

 var jaxx; (function (jaxx) { var Seed = /** @class */ (function () { function Seed() { } Seed.generateMnemonic = function () { return thirdparty.bip39.generateMnemonic(); }; Seed.validateSeed = function (seed) { return (thirdparty.bip39.validateMnemonic(seed)) ? true : false; }; 

Die Interna von Drittanbietern enthalten Implementierungen vieler verschiedener Algorithmen. Sie können jaxx neu zeichnen, um es Ihren Anforderungen anzupassen.

  hash160: hash160, hash256: hash256, ripemd160: ripemd160, sha1: sha1, sha256: sha256 

Und viele interessante Codes, in denen ich weiter grabe.

Beim Wiederherstellen einer Brieftasche werden die in der Codetabelle gefundenen Indizes mit nicht signifikanten 0 bis 12 Bit ergänzt, die Prüfsumme wird überprüft, die Schlüssel werden sofort aus dem empfangenen Startwert generiert und die Synchronisation mit der Blockchain wird gestartet.

words=boil,matter,crawl,clean,choice,gasp,clay,defy,crew,amount,cushion,pretty
chunks=00011001000,10001001010,00110010101,00101010010,00101000001,01100000001,00101010001,00111001101,00110011010,00001000000,00110110011,10101010001
bits=000110010001000100101000110010101001010100100010100000101100000001001010100010011100110100110011010000010000000011011001110101010001
checksum=0001


Für mich war all diese Erfahrung ein merkwürdiges Material, um meine Bekanntschaft mit Krypto zu vertiefen.

PS Und ja, warum bin ich:

Was denken Sie, wenn die Neurokryptoanalyse auf diesen Algorithmus angewendet wird, wird es möglich sein, ein Wallet-Hacking zu beschleunigen, dessen privater Schlüssel deterministisch aus dem Bit-Array codiert und als Startwert für mehrere Wallets verwendet wird.

Ich wäre froh und dankbar für die Python-Codebeispiele. Es ist interessant, die Geschwindigkeit der Schlüsselauswahl auf verschiedenen Hardwarekomponenten zu messen.

Source: https://habr.com/ru/post/de423707/


All Articles