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?
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.
Leeren
colisionador de mallas
Leeren
colisionador de mallas