>> Clave privada, pública y dirección

Generador de Billetera HD (BIP39/BIP84)

Genera una frase mnemotécnica de 24 palabras, su semilla (seed PBKDF2) con passphrase opcional, sus claves privada y pública extendidas, y direcciones SegWit nativas.

⏳ Derivando... ⏳ Procesando... ⏳ Generando...
PASO 1: ENTROPÍA

256 bits aleatorios (32 bytes)

Se genera la entropía criptográficamente segura. Se muestra en binario y en hexadecimal.

Entropía binaria y hexadecimal...
PASO 2: CHECKSUM

Verificación SHA-256

Se calcula el checksum de 8 bits tomando los primeros 8 bits del hash SHA-256 de la entropía.

Checksum...
PASO 3: FRASE SEMILLA

Mapeo a 24 palabras

Mapeo de 264 bits (256 bits + 8 bits checksum) a 24 palabras BIP39.

Frase semilla...

📝 Frase Semilla (24 palabras)

PASO 4: DERIVAR SEED

Seed maestra (PBKDF2)

El salt se compone de la palabra constante "mnemonic" seguida de la passphrase opcional (por ejemplo: "mnemonicejemplo").

Se aplica la función pseudorandom PBKDF2 utilizando HMAC-SHA512 sobre la frase semilla normalizada en Unicode (NFKD) y el salt durante exactamente 2048 iteraciones para derivar la Seed maestra de 64 bytes.

🧬 Seed (64 bytes):
-
PBKDF2(HMAC-SHA512, 2048 iteraciones)
PASO 5: CLAVE MAESTRA BIP84

Clave de Cuenta SegWit Nativo (zprv / zpub) en m / 84' / 0' / 0'

I = HMAC-SHA512("Bitcoin Seed", Seed) esto nos da 64 bytes de los cuales los 32 bytes primeros actúan como la clave privada maestra y los 32 bytes siguientes como el código de cadena maestro necesario para derivar claves hijas.

Deriva claves extendidas para direcciones nativas SegWit BIP84 (bc1q...).


m = clave maestra privada, 84 se refiere a BIP84, 0' es la moneda Bitcoin, 0' es el número de cuenta pues permite tener varias, 0 direcciones para recibir BTC externas o 1 direcciones internas de cambio, número de dirección concreta (0, 1, 2, 3...)

El apóstrofe (') indica derivación endurecida (hardened), la cual añade un offset de 2^31 (0x80000000) al índice. Esto evita que si se compromete una clave privada hija, se pueda deducir la clave privada madre a partir de una clave pública extendida.

Para derivar en modo endurecido (por ejemplo, pasar de m a m/84'), se calcula I = HMAC-SHA512("código de cadena padre", 0x00 || clave privada padre || índice endurecido (i + 0x80000000) en 4 bytes en formato Big-Endian). Los primeros 32 bytes de I se suman (módulo n) a la clave privada padre para obtener la clave privada hija, mientras que los últimos 32 bytes corresponden al nuevo código de cadena hijo. Este proceso se repite sucesivamente para derivar la ruta m/84'/0'/0'.

Para construir las claves extendidas de 78 bytes (zprv y zpub) en el nivel m/84'/0'/0', se concatenan: 4 bytes de prefijo de versión (0x04B2430C para zprv, 0x04B24746 para zpub), 1 byte de profundidad (0x03), 4 bytes del fingerprint (primeros 4 bytes del HASH160 de la clave pública comprimida del padre m/84'/0'), 4 bytes con el número de hijo endurecido (0x80000000), 32 bytes del código de cadena y 33 bytes para la clave (para zprv: 0x00 + Clave Privada de 32 bytes; para zpub: Clave Pública Comprimida de 33 bytes).

Para calcular zpriv y zpub (convertimos de privada a pública usando la geometría de la curva elíptica ver) se estructuran estos 78 bytes se hace un checksum y se codifica todo en base 58.

🔑 Clave de Cuenta BIP84 (SegWit Nativo)

PASO 1: Derivación BIP32 m / 84' / 0' / 0'
Ruta = m / 84' / 0' / 0'
Clave Privada (32 bytes): -
Código de Cadena (32 bytes): -
PASO 2: Claves extendidas BIP84
🔑 zprv (BIP84)
-
🔓 zpub (BIP84)
-
PASO 6: DIRECCIONES Y CLAVES (BIP84)

100 Direcciones de Recepción y 100 de Cambio

Deriva direcciones SegWit Nativa (bc1q...) desde la clave de cuenta.
Ruta Recepción: m / 84' / 0' / 0' / 0 / i | Ruta Cambio: m / 84' / 0' / 0' / 1 / i

Para los niveles no endurecidos (por ejemplo, pasar de m/84'/0'/0' a m/84'/0'/0'/0), se calcula I = HMAC-SHA512("código de cadena padre", clave pública comprimida padre || índice en 4 bytes). Esto es fundamental porque permite a las billeteras de solo lectura (watch-only) derivar infinitas direcciones públicas hijas usando únicamente la Clave Pública Extendida (zpub), sin llegar a exponer o tocar jamás las claves privadas.

Repetimos el proceso y pasamos de m/84'/0'/0'/0 a m/84'/0'/0'/0/0 y aquí tendríamos una clave privada hija con su clave pública asociada y dirección bc1q correspondiente (ver).

⏳ Generando 200 direcciones...