HMAC "Semilla de Bitcoin" para BIP32

Pybitcointools usa el siguiente código para calcular una clave privada maestra (BIP32) a partir de una semilla:

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'))

¿Por qué, específicamente, se usa la cadena de bytes Bitcoin seeden el algoritmo HMAC? Cuando uno considera que las cadenas de bytes Mnemonicy Electrumse usan en derivaciones HMAC (en BIP39/cuasi BIP39, respectivamente), las etiquetas parecen demasiado inespecíficas. Me pregunto por qué la cadena de bytes no aclara ni especifica una versión, por ejemplo, BIP32 V0.1 seed .

¡Nada de esto es una crítica, para ser claros! Estoy tratando de dilucidar cómo se eligieron e implementaron estas decisiones, lo que a menudo es muy difícil sin tener un conocimiento profundo de RFC, Github, etc.

¿Quizás esto podría explicarse en el contexto de cómo funciona HMAC también?

Respuestas (1)

Se especifica en BIP32 ( https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki ). La función SHA512-HMAC se reutiliza porque ya forma parte del estándar en otro lugar, pero requiere una clave además de los datos que se codifican. Como la clave puede ser arbitraria, optamos por utilizarla para asegurarnos de que la derivación de la clave fuera específica de Bitcoin.

He aclarado la pregunta.