Clave privada y dirección pública para Bitcoin

Generar una billetera de papel gratuita de Bitcoin con la clave privada para gastar y la dirección pública para recibir. Instrucciones de uso y seguridad

PASO 1: ENTROPÍA Y ORIGEN

Clave Privada (Binario y Hexadecimal)

La clave privada es un número aleatorio de 256 bits (32 bytes) generado aleatoriamente. Lanzamos una moneda 256 veces: si sale cara apuntamos 1 y si sale cruz anotamos 0. Además tiene que ser mayor que cero y menor que el orden del punto generador de secp256k1.

Clave binaria...

Para convertirla a hexadecimal agrupamos este código binario (ceros y unos) en bloques de 4 bits y obtenemos 64 caracteres en base 16 (números del 0-9 y letras de la A-F)

Clave hexadecimal...
PASO 2: CONTEXTUALIZACIÓN

Red principal de Bitcoin y clave pública comprimida

Añadimos un byte como prefijo 80 (red principal de Bitcoin) y añadimos otro byte como sufijo 01 (clave pública derivada será comprimida). Ahora tendremos 32 bytes de clave privada + 1 byte (80) + 1 byte (01) = 34 bytes o 68 caracteres.

Clave hexadecimal extendida...
PASO 3: SEGURIDAD CONTRA ERRORES

Cálculo del Checksum (Doble SHA-256)

Se procesa la cadena hexadecimal extendida a través de dos rondas consecutivas del algoritmo SHA-256. Obtenemos un resumen de 32 bytes de los cuales los primeros 8 caracteres (4 bytes) del segundo resultado actúan como código de verificación.

Primer SHA-256:
Primer SHA-256...
Segundo SHA-256 (Doble Hashing):
Segundo SHA-256...
Checksum Extraído (4 bytes / 8 caracteres):
Checksum...
PASO 4: EMPAQUETADO HUMANO

Formato de Importación de Cartera (WIF)

Se añade el checksum al final de la clave hexadecimal extendida. Esto dará como resultado una cadena hexadecimal de 76 caracteres (38 bytes). Todo el bloque hexadecimal resultante se codifica a Base58 (alfabeto sin caracteres ambiguos como O, 0, l, I) para hacerla más corta y fácil de leer.

Estructura Hexadecimal Unificada:
Clave hexadecimal unificada...
Cadena Base58 WIF Final (Comienza por 'K' o 'L' cuando la clave pública es comprimida. 52 caracteres):
Clave privada WIF...
PASO 5: IDENTIDAD EN LA BLOCKCHAIN

Cálculo de Clave Pública (secp256k1)

La clave privada hexadecimal se usa como un escalar matemático que multiplica a un punto base fijo (punto generador) en la curva elíptica. Obtenemos un punto (X,Y) -clave pública- en la curva elíptica. La forma comprimida almacena la coordenada X junto con el prefijo 02 o 03 que indica si la coordenada Y es par o impar(66 caracteres hexadecimales - 33 bytes-)

Clave pública...
PASO 6: HASHEADO DE CLAVE PÚBLICA (HASH160)

Reducción Criptográfica del Identificador

Para reducir el tamaño del identificador y evitar exponer directamente la clave pública, la clave pública se pasa por un SHA-256 binario y el resultado inmediatamente por RIPEMD-160. Obtenemos el HASH160, que servirá como base para construir la dirección Bitcoin.

SHA-256 de la clave pública:
SHA-256...
RIPEMD-160 (Hash160 final de 20 bytes):
RIPEMD-160...
Witness Program Estructurado (Prefijo SegWit 0014 + Hash160) 22 bytes 44 caracteres:
Witness Program Estructurado...
PASO 7: IDENTIFICADOR DE DESTINO

Dirección Native SegWit (Bech32 - P2WPKH - BIP 173)

Calculamos el Checksum: agrupamos el hash160 (20 bytes = 160 bits) en grupos de 5 bits (base 32) y obtenemos 32 valores con rangos de 0 a 31. Añadimos el prefijo 0 para indicar Native SegWit P2WPKH (versión 0) y ahora tenemos 33 valores. El prefijo bc entra en juego: se divide el valor ASCII de cada letra (b=98, c=99) en sus 3 bits superiores y 5 bits inferiores resultando con el separador intermedio 0 el vector [3, 3, 0, 2, 3]. Añadimos como prefijo estos 5 valores a los 33 que teníamos y resultan 38 valores. Además añadimos seis ceros al final (espacio reservado para el checksum) resultando 44 valores en base 32. La función matemática Polymod BCH procesa esta lista mediante una división polinómica usando un polinomio generador específico y obtenemos un número entero de 30 bits al que le aplicamos un XOR con la constante 0x3fffffff dándonos el residuo polinomial final de 30 bits, lo agrupamos en 6 bloques independientes de 5 bits cada uno y convertimos a base 32 dándonos el resultado el Checksum (6 valores en base 32).

Transformamos los 39 valores en base 32 (33 iniciales + checksum) a texto utilizando la tabla de sustitución oficial de caracteres de Bitcoin [BIP 173] Alfabeto Bech32 siendo el primer valor 0 => q (versión de testigo) y ponemos como prefijo bc1 (42 caracteres).

Dirección Bech32 Definitiva:
Dirección bc1q...

📋 Anota tu Cartera

Clave Privada en formato WIF (guardar en secreto):
Clave privada WIF...
Dirección Pública bc1q (compartir para recibir fondos):
Dirección pública bc1q...