¿Por qué la semilla raíz de una billetera HD se somete a un hash HMAC-SHA512 adicional para generar la clave privada maestra y el código de cadena maestra?

Por lo que entiendo, la semilla de la billetera se crea ingresando en PBKDF2 (usando HMAC-SHA512 de los cuales se aplican 2048 rondas) un montón de palabras de código mnemónico y una sal opcional (predeterminada en "mnemónico"). Esto genera una semilla de 512 bits que es completamente impráctica para la fuerza bruta. Esta es una imagen del proceso al que me refiero tomada de Mastering Bitcoin. ¿Por qué, entonces, se vuelve a codificar usando HMAC-SHA512, además de crear 512 bits de salida (en el caso en que originalmente podría haber sido 128 o 256)? ¿Por qué no usar solo un hash SHA512 (asumiendo que el motivo es solo para crear 512 bits)? ¿Cuál es el punto del HMAC aquí? Los ataques de extensión de longitud deberían haberse evitado en las iteraciones anteriores durante PBKDF2, ¿no?

Respuestas (1)

Es porque la semilla raíz puede no ser de 512 bits, podría ser de 128 bits o 256 bits, por ejemplo, como se ve en la imagen que vinculó. Por lo tanto, el SHA-512 final se aplica a la semilla de modo que no importa cuál sea la semilla, siempre se generarán 512 bits.

La generación de semillas descrita en BIP 39 es independiente de la semilla -> paso de clave privada extendida en BIP 32. Espero que BIP 32 use HMAC-SHA-512 en lugar de solo SHA-512 porque no hace suposiciones sobre cómo se generó la semilla, y quiere asegurarse de que la clave privada extendida se genere únicamente para el uso de BIP 32 en lugar de usar cualquier hash SHA-512 antiguo que podría haber venido de otro lugar.

Pero, ¿por qué HMAC-SHA-512 en lugar de un hash SHA-512 normal? ¿Fue esto simplemente arbitrario ya que se usó antes?
Ah, lo siento, leí mal tu pregunta. He actualizado mi respuesta :)
¿Puede explicar por qué HMAC-SHA-512 no hace suposiciones sobre cómo se generó la semilla, pero SHA sí?
Simplemente significa que queremos una clave generada a partir de la semilla específicamente para este propósito, en lugar de cualquier hash SHA-512 antiguo