Electrum Version 2 erstellt aus einer Zufallszahl einen Seed, der dann als Mnemonik kodiert wird. Der Seed wird validiert, indem überprüft wird, ob der hmac mit den Bytes 01
oder 101
für Standard- bzw. 2fa-Typen beginnt.
Ich habe mir den Python-Code auf Github angesehen und er gibt tatsächlich das 01-Byte zurück, aber ich bin immer noch verwirrt darüber, wie man sicherstellen kann, dass ein Hash mit einem vorhergesagten Wert ( 01\101
) beginnt.
Wie kann das sein? Fehlt mir die Nuance dessen, was der Code tut, oder das Konzept, wie hmac funktioniert?
Beim Erstellen eines neuen Seeds macht Electrum 2.x so ziemlich dasselbe wie Vanity-Adressgeneratoren oder Bitcoin-Miner, was das angeht … es „mahlt“.
Es generiert einen Seed basierend auf etwas Entropie und einer Nonce und prüft, ob der HMAC des Seeds mit der erforderlichen Bytesequenz (der "Prüfsumme") beginnt. Wenn dies nicht der Fall ist, erhöht es die Nonce und überprüft seinen HMAC erneut.
Wenn Sie interessiert sind, finden Sie den Code, der dies tut, hier auf GitHub .
Es sollte beachtet werden, dass Electrum-Seeds (standardmäßig) 128 Bit Entropie haben. Als Ergebnis dieses Schleifens verwirft Electrum (für Standard-Wallets mit einer Prüfsumme von 0x01) 255 von jeweils 256 potenziellen Seeds. Dadurch wird die Entropie in einem Seed effektiv um 8 Bit (die Länge der Prüfsumme) verringert. Um dies zu kompensieren, fügt Electrum 2.x der gesamten Seed-Länge weitere 8 Bit hinzu, was die Seed-Länge auf 136 Bit und die Entropie wieder auf 128 Bit bringt.
Nick Odell
Zauberer von Ozzie
while old_seed
es mir intuitiver erscheint. Ich kann die Begründung jetzt verstehen, insbesondere nachdem ich erfolgreich zahlreiche Fälle von Electrum 1-Seeds gefunden habe, die einen 01-Hmac zurückgaben. Ich bin neugierig ... ist es möglich, ein besseres System zu implementieren, bei dem ein alter Seed niemals als neuer Seed interpretiert werden kann, oder ist dies nur das geeignetste, da es sich um einen Hash-basierten Seed handelt?Christopher Gurnee
Zauberer von Ozzie
Zauberer von Ozzie
ecdsa.utils.randrange
bringt es, die Nonce auszuführen und zu erhöhen, wenn es genauso wahrscheinlich ist, dass das Ausführen der Schleife für eine Zufallszahl einen gültigen Startwert zurückgibt?Nick Odell
Zauberer von Ozzie