generar clave privada a partir de semilla bip39

de acuerdo con bip39 , hice 12 mnemonic wordsy luego obtuve una 512 bit seedde ellos.

ahora quiero saber cómo debo convertir esta semilla en clave privada ?

¿Qué funciones debo usar?

por favor, preséntenme bibliotecas para browser javascript.

aunque sé que debo usar ECDSAy secp256k1.

pero no se exactamente cuales son los pasos?

¿Qué problemas tiene al seguir la implementación de referencia o las implementaciones de Javascript enumeradas en el enlace que puso en su pregunta?
@RedGrittyBrick Mi problema actual es que no sé en función de qué algoritmo necesito para convertir una semilla de 512 bits en una clave privada de 256 bits.

Respuestas (1)

No sé según qué algoritmo necesito para convertir una semilla de 512 bits en una clave privada de 256 bits.

En cuanto a los algoritmos :

BIP-0039 dice:

De mnemotécnico a semilla

Un usuario puede decidir proteger su mnemónico con una frase de contraseña. Si no hay una frase de contraseña, se usa una cadena vacía "" en su lugar.

Para crear una semilla binaria a partir del mnemotécnico, usamos la función PBKDF2 con una oración mnemotécnica (en UTF-8 NFKD) utilizada como contraseña y la cadena "mnemónico" + frase de contraseña (nuevamente en UTF-8 NFKD) utilizada como sal. El recuento de iteraciones se establece en 2048 y se utiliza HMAC-SHA512 como función pseudoaleatoria. La longitud de la clave derivada es de 512 bits (= 64 bytes).

Así que los algoritmos hasta ahora están descritos por

De acuerdo con la entrada Wiki de Bkitcoin para la clave privada :

El software de billetera puede usar una semilla BIP 32 para generar muchas claves privadas y las claves públicas correspondientes a partir de un solo valor secreto. Esto se llama billetera determinista jerárquica o billetera HD para abreviar. El valor semilla, o clave extendida maestra, consta de una clave privada de 256 bits y un código de cadena de 256 bits, para un total de 512 bits. El valor inicial no debe confundirse con las claves privadas utilizadas directamente para firmar transacciones de Bitcoin.

BIP-0032 dice:

Teclas extendidas

En lo que sigue, definiremos una función que deriva un número de claves secundarias a partir de una clave principal. Para evitar que estos dependan únicamente de la clave en sí, primero extendemos las claves públicas y privadas con 256 bits adicionales de entropía. Esta extensión, denominada código de cadena, es idéntica para las claves privadas y públicas correspondientes y consta de 32 bytes.

Representamos una clave privada extendida como (k, c), con k la clave privada normal y c el código de cadena. Una clave pública extendida se representa como (K, c), con K = punto (k) y c el código de cadena.

Luego pasa a describir el algoritmo utilizado.


Con respecto a las bibliotecas de Javascript


Me parece que esto requiere mucha investigación en la documentación y el código fuente.

Inicialmente, no parece ser algo que pueda abarcarse por completo en el espacio asignado a las respuestas en este foro de preguntas y respuestas.


Entonces, según lo que dice: debería dividir el producido 512 bits seeden dos 256 bitspartes, usar la primera parte como master private key, y usar la segunda parte como chain code (entropy). ¿bien?
@saeidezzati: así me parece.