Cita de BIP 32 :
Una debilidad que puede no ser obvia de inmediato es que el conocimiento de una clave pública extendida principal más cualquier clave privada no reforzada que descienda de ella es equivalente a conocer la clave privada extendida principal (y, por lo tanto, todas las claves públicas y privadas que descienden de ella).
¿Cómo se hace esto?
Primero debemos entender cómo BIP 32 deriva claves públicas y privadas no protegidas.
Del BIP 32, derivación de una clave privada secundaria a partir de una clave privada principal ampliada:
sea I = HMAC-SHA512(Clave = c par , Datos = ser P (punto(k par ))) || ser32(i)).
Dividir I en dos secuencias de 32 bytes, I L e I R .
La clave secundaria devuelta Ki es parse 256 (I L ) + k par (mod n).
La clave privada es, por tanto, la clave privada principal más los primeros 256 bits de la función HMAC-SHA512, donde la clave es el código de cadena de la clave privada principal y los datos hash son la concatenación de la serialización de la clave pública que corresponde a la clave extendida. clave privada y el índice de clave secundaria. Lo importante a tener en cuenta aquí es que el hash HMAC-SHA512 es un hash de la clave pública, no de la clave privada.
Del BIP 32, derivación de una clave pública secundaria a partir de una clave pública principal extendida:
sea I = HMAC-SHA512(Clave = c par , Datos = ser P (K par ) || ser32(i)).
Dividir I en dos secuencias de 32 bytes, I L e I R .
La clave secundaria devuelta K i es point(parse 256 (I L )) + K par .
La clave pública secundaria es la clave pública principal añadida con la clave pública generada a partir de los primeros 256 bits de la función HMAC-SHA512, donde la clave es el código de cadena de la clave principal y los datos son la concatenación de la clave pública principal con el índice de la clave pública infantil.
¿Observa cómo al derivar la clave privada secundaria y la clave pública secundaria, en realidad está codificando lo mismo? Está realizando la función HMAC-SHA512 con la misma clave (el código de cadena de las claves principales) y los mismos datos (la concatenación de la clave pública principal y el índice de la clave secundaria). Los primeros 256 bits de ese hash se convierten en una especie de clave privada, y esa clave privada se agrega a la clave privada maestra para convertirse en la clave privada secundaria real. Su clave pública se calcula y se agrega con la clave pública principal para convertirse en la clave pública secundaria.
Entonces, para obtener la clave privada maestra, todo lo que tenemos que hacer es tomar la clave privada secundaria que ahora tenemos y restarle la clave privada producida por la función HMAC-SHA512. Para hacer eso, necesitamos tres cosas, el código de cadena, la clave pública principal y el índice de clave secundaria.
El código de cadena y la clave pública principal provienen de la clave pública principal extendida ( xpub
), ya que codifica tanto el código de cadena como la clave pública.
El índice de la clave secundaria se puede encontrar de forma trivial derivando las claves públicas secundarias de la clave pública principal hasta que obtengamos la clave pública que corresponde a la clave privada secundaria que tenemos y guardemos el índice de la clave.
Con estas tres cosas, podemos realizar la función HMAC-SHA512 y obtener el hash de 512 bits. Ahora podemos tomar la clave privada secundaria y restarle el número entero que son los primeros 256 bits del hash que acabamos de generar. Nuestro resultado es la clave privada principal. Combine eso con el código de cadena que recuperamos de la clave pública principal extendida y tenemos la clave privada principal extendida.
Esta técnica solo se aplica a la derivación no endurecida. La derivación reforzada protege contra esto porque genera la clave privada secundaria mediante el hash de la clave privada principal. Sin embargo, esto también significa que no puede generar la clave pública secundaria a partir de la clave pública principal.
Erwin Mayer
andres chow
Erwin Mayer
andres chow