BIP 32 Seed, was zu einem ungültigen privaten Schlüssel führt

alle.

Für mein Abschlussprojekt entwickle ich einige Bitcoin/Bitcoin-bezogene Technologien (BIP32, BIP 38, BIP39, Bas58Check-Codierung/Decodierung usw.) in reinem Node.js (unter Verwendung nur nativer Bibliotheken wie „Crypto“).

Nachdem ich das Modul geschrieben hatte, das sich mit der BIP32-Wallet-Generierung befasste, schrieb ich eine Reihe von Tests, die versuchten, 100 % der Anweisungen/Zweige/Funktionen/Zeilen abzudecken, aber es gibt ein Szenario, das ich anscheinend nicht reproduzieren kann, da es sehr unwahrscheinlich ist, dass es stolpert auf.

Bei einem zufälligen Startwert wenden Sie HMAC-SHA512 an, um den erweiterten privaten Masterschlüssel zu erhalten. Darin befindet sich ein privater Schlüssel, der ungültig sein kann, wenn er gleich 0x000000000000000000000000000000000000000000000000000000000000 oder größer als 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD03641114CD0.

Habt ihr irgendeinen Seed gesehen, der einen ungültigen privaten Schlüssel generiert? Ich suchte im Internet nach einem solchen bekannten Wert und konnte ihn nicht finden.

Dasselbe kann passieren, wenn private Schlüssel für Kinder generiert werden. Gibt es einen bekannten übergeordneten privaten Schlüssel + übergeordneten Kettencode + Index, der zu einem ungültigen privaten Schlüssel führt?

Danke vielmals!

Antworten (1)

Klingt nach einem coolen Projekt!

Bei einem zufälligen Startwert wenden Sie HMAC-SHA512 an, um den erweiterten privaten Masterschlüssel zu erhalten. Darin befindet sich ein privater Schlüssel, der ungültig sein kann, wenn er gleich 0x000000000000000000000000000000000000000000000000000000000000 oder größer als 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD03641114CD0.

Das stimmt meistens. Es sollte ein Fehler auftreten, wenn I_L größer als die Kurvenreihenfolge ist (das ist die Zahl, die Sie dort haben) oder wenn der untergeordnete Schlüssel (k_i) 0 ist. ( https://github.com/bitcoin/bips/blob/master/bip- 0032.mediawiki#private-parent-key--private-child-key )

Habt ihr irgendeinen Seed gesehen, der einen ungültigen privaten Schlüssel generiert? Ich suchte im Internet nach einem solchen bekannten Wert und konnte ihn nicht finden.

Es wäre wirklich überraschend, wenn jemand einen Samen kennen würde, der das tun würde. Die beiden Bedingungen treten etwa 1 von 2^127 Mal bzw. etwa 1 von 2^256 Mal auf. Wenn SHA512 eine sichere Hash-Funktion ist, sollte es ungefähr 2 ^ 127-Durchläufe dauern, um einen Seed zu finden, der fehlschlägt.

Um es klar zu sagen, ein solcher Samen existiert, aber wir wissen nicht, was es ist.

Bei der Recherche habe ich diese Fehlermeldung in der Pycoin-Bibliothek gefunden. Es wird angezeigt, wenn eine der von Ihnen genannten Bedingungen eintritt.

_SUBKEY_VALIDATION_LOG_ERR_FMT = """
BUY A LOTTO TICKET RIGHT NOW! (And consider giving up your wallet to
science!)

You have stumbled across an astronomically unlikely scenario. Your HD
wallet contains an invalid subkey. Having access to this information would
be incredibly valuable to the Bitcoin development community.

If you are inclined to help, please make sure to back up this wallet (or
any outputted information) onto a USB drive and e-mail "Richard Kiss"
<him@richardkiss.com> or "Matt Bogosian" <mtb19@columbia.edu> for
instructions on how best to donate it without losing your bitcoins.

WARNING: DO NOT SEND ANY WALLET INFORMATION UNLESS YOU WANT TO LOSE ALL
THE BITCOINS IT CONTAINS.
""".strip()

Fundierte Beratung. Im Lotto zu gewinnen ist nur eine Chance von 1 zu 2^28.