Es gibt einen JSON für Komponententests japanischer Zeichen , den ich mit Python validieren möchte, insbesondere mit diesem Fork von pybitcointools , der über bip39-Funktionalität verfügt.
Unit-Tests von Trezors Python-Mnemonik-Testvektoren funktionieren gut (in Python 2.7 IME), dies ist jedoch unkompliziert, da es keine Normalisierung der Unicode-Dialektik und dergleichen gibt, da alle Mnemoniken in Kleinbuchstaben Englisch sind.
Die japanischen Felder sind:
xprv
Also entropy
Samen mnemonic (bip39?)
, dann mnemonic
| password
hasht zu Seed
; Seed
fungiert dann als Hauptschlüssel für das bip32 xprv? (korrigiert mich, wenn ich falsch liege!?)
Also vorausgesetzt, es ist so einfach...
Also Entropiesamen mnemonisch (bip39?), dann mnemonisch | Passwort-Hashes zu Seed; Seed fungiert dann als Hauptschlüssel für das bip32 xprv? (korrigiert mich, wenn ich falsch liege!?)
Das klingt ungefähr richtig. Der größte Teil des Prozesses ist in BIP-39 ausführlich beschrieben .
entropy_len_in_bits / 32
Bits dieses Hashs werden an das Ende der Entropie angehängt. Die resultierende Entropiebitfolge ist in 11-Bit-lange Stücke teilbar (es ist keine ganze Zahl von Bytes mehr).'\u3000'
. Wenn die Mnemonik dem Benutzer nicht angezeigt werden muss, können sie "normale" LEERZEICHEN ( '\u0020'
) sein.Ist es nur die NKFD-Unicode-Normalisierung, die Electrum 2.0 durchführt?
Electrum 2.x verwendet zwar die NFKD-Normalisierung, führt aber auch zusätzliche Schritte aus, z. B. das Entfernen von Leerzeichen zwischen japanischen Wörtern nach Schritt 4. Es verwendet auch eine andere Schlüsselzeichenfolge in Schritt 6 und einen völlig anderen Prozess vor Schritt 4. Siehe dies Antwort für eine Implementierung der Mnemonik-Wörter-zu-Seed-Prozedur von Electrum 2.x in Python.
Zauberer von Ozzie
Zauberer von Ozzie
Christopher Gurnee
Christopher Gurnee
Zauberer von Ozzie
norm = lambda d: (' '.join(unicodedata.('NFKD', unicode(d)).split('\u3000'))).encode('utf-8')
Christopher Gurnee
d
, es handelt sich um einen mnemonischen Satz vom Typ Python2 oder um einen Unicode? Ich würde für die meisten Sprachen so etwas denken (anders für Chinesisch, das möglicherweise keine Leerzeichen enthältd
):norm = lambda d: (u' '.join(unicodedata.normalize('NFKD', unicode(d)).split())).encode('utf-8')
(Ich habe das fehlende "Normalisieren" hinzugefügt und die Aufteilung geändert, um alle Leerzeichen aufzuteilen). Beachten Sie, dass BIP-39 erfordert, dass Sie die Prüfsumme überprüfen, wenn Sie Eingaben von einem Benutzer akzeptieren.Zauberer von Ozzie
Zauberer von Ozzie
bip39_hex_to_mn
mitVECTOR['mnemonic']
, da die Funktion ein Standard-Leerzeichen (dh\u0020
) zurückgibt, während die Testvektoren verwenden\u3000
.\u3000
Electrum (2.x) löst das Problem des ideografischen Leerzeichens ( ), indem alle CJK-Wörter ohne Leerzeichen verkettet werden. Siehe github.com/simcity4242/pybitcointools/blob/master/… (Ich habe es nur zum Arbeiten mitu' '.join(v['mnemonic'].split())
, obwohl es nur sein solltev['mnemonic']
Zauberer von Ozzie
'\xe7\x9a\x84'
?Christopher Gurnee
Christopher Gurnee
with io.open(language+'.txt', encoding='utf_8_sig') as words_file: words[language] = tuple(word.strip() for word in words_file)
.Zauberer von Ozzie
%store var >> file.py
. Ich werde beide Empfehlungen aktualisieren, danke!