HMAC „Bitcoin Seed“ für BIP32

Pybitcointools verwendet den folgenden Code zum Berechnen eines Master Private Key (BIP32) aus einem Seed:

def bip32_master_key(seed, vbytes=MAINNET_PRIVATE):
    I = hmac.new(from_string_to_bytes("Bitcoin seed"), seed, hashlib.sha512).digest()
    return bip32_serialize((vbytes, 0, b'\x00'*4, 0, I[32:], I[:32]+b'\x01'))

Warum – speziell – wird der Byte-String Bitcoin seedim HMAC-Algorithmus verwendet? Wenn man bedenkt, dass die Byte-Strings Mnemonicund Electrumin HMAC-Ableitungen verwendet werden (in BIP39 bzw. quasi BIP39), erscheinen die Label s zu unspezifisch. Ich frage mich, warum die Bytefolge keine Version verdeutlicht oder angibt, z. B. BIP32 V0.1 Seed .

Nichts davon ist Kritik, um es klar zu sagen! Ich versuche zu erklären, wie diese Entscheidungen getroffen und umgesetzt wurden, was oft sehr schwierig ist, ohne sich mit RFCs, Github usw.

Vielleicht könnte dies im Zusammenhang mit der Funktionsweise von HMAC erklärt werden?

Antworten (1)

Es ist in BIP32 ( https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki ) angegeben. Die SHA512-HMAC-Funktion wird wiederverwendet, da sie an anderer Stelle bereits Teil des Standards ist, aber zusätzlich zu den zu hashenden Daten einen Schlüssel benötigt. Da der Schlüssel beliebig sein kann, haben wir uns dafür entschieden, sicherzustellen, dass die Schlüsselableitung Bitcoin-spezifisch ist.

Ich habe die Frage geklärt.