PASO 1: ENTROPÍA Y ORIGEN

Clave Privada (Binario y Hexadecimal)

La clave privada es un número aleatorio de 256 bits (32 bytes) generada 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 número total de puntos válidos en la curva secp256k1.

Genera la clave binaria...

Para convertirla a hexadecimal agrupamos este 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)

Genera la 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 tenemos 68 caracteres (34 bytes) en nuestra cadena hexadecimal extendida.

Genera la 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:
Genera primer SHA-256...
Segundo SHA-256 (Doble Hashing):
Genera segundo SHA-256...
Checksum Extraído (4 bytes truncados):
Extrae el 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. Formato de importación de billetera.

Estructura Hexadecimal Unificada:
Genera la clave hexadecimal unificada...
Cadena Base58 WIF Final (Comienza por 'K' o 'L'):
Genera la 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 en la curva elíptica. Obtenemos un nuevo punto en la curva elíptica cuya coordenada Y es la clave pública a la cual añadimos el prefijo 02 o 03 según sea la coordenada Y par o impar, respectivamente. (66 caracteres hexadecimales - 33 bytes-)

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

Reducción Criptográfica del Identificador

Para economizar espacio y añadir seguridad, la clave pública se pasa por SHA-256 y el resultado por RIPEMD-160. Esto genera el Witness Program.

1. SHA-256 de Clave Pública (32 bytes):
Genera SHA-256...
2. RIPEMD-160 Final (Hash160 de 20 Bytes):
Genera RIPEMD-160...
3. Witness Program Estructurado (ScriptPubKey: Versión SegWit 0 (00) + tamaño del hash en hexadecimal (14)). Hemos añadido dos bytes y en total tenemos 22 bytes:
Genera 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 dando como 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:
Genera Dirección Native SegWit...