Nivel 5

Funciones hash

La base criptográfica que hace posible la minería, las direcciones y la integridad de la blockchain.

Qué es una función hash

Una función hash es un algoritmo matemático que toma una entrada de cualquier tamaño (un byte, un archivo de gigabytes, lo que sea) y produce una salida de tamaño fijo llamada digest o hash.

En Bitcoin, la función principal es SHA-256, que produce un hash de 256 bits (64 caracteres hexadecimales).

Ejemplo: Entrada: "Bitcoin" SHA-256: b4056df6691f8dc72e56302ddad345d65fead3ead9299609a826e2344eb63aa4 Entrada: "bitcoin" (solo cambia la mayúscula) SHA-256: 6b88c087247aa2f07ee1c5956b8e1a9f4c7f892a70e324f1bb3d161e05ca107b

Un cambio mínimo en la entrada produce un hash completamente diferente. Esta propiedad se llama efecto avalancha.

Propiedades criptográficas

Para que una función hash sea útil en criptografía, debe cumplir varias propiedades:

Determinista

La misma entrada siempre produce exactamente el mismo hash. Sin excepciones. Esto permite verificar datos: si el hash coincide, los datos no han sido modificados.

Efecto avalancha

Un cambio de un solo bit en la entrada cambia aproximadamente el 50% de los bits del hash. No hay correlación predecible entre cambios en la entrada y cambios en la salida.

Resistencia a preimagen

Dado un hash, es computacionalmente imposible encontrar una entrada que lo produzca. "Imposible" aquí significa que el único método es probar entradas aleatorias hasta dar con una que funcione, lo que tomaría más tiempo que la edad del universo para hashes de 256 bits.

Resistencia a colisiones

Es prácticamente imposible encontrar dos entradas diferentes que produzcan el mismo hash. Matemáticamente, las colisiones existen (infinitas entradas, finitos hashes), pero encontrar una a propósito es computacionalmente inviable.

Resistencia a segunda preimagen

Dada una entrada y su hash, es imposible encontrar otra entrada diferente que produzca el mismo hash.

SHA-256 en Bitcoin

SHA-256 (Secure Hash Algorithm, 256 bits) es la función hash principal de Bitcoin. Se usa en:

Minería: Los mineros calculan SHA-256(SHA-256(block_header)) hasta encontrar un hash menor que el target. El doble hashing añade seguridad adicional.

Identificación de transacciones: El txid de una transacción es el doble SHA-256 de la transacción serializada.

Árbol de Merkle: Los hashes de las transacciones se combinan en un árbol usando SHA-256 hasta obtener la Merkle root.

Derivación de direcciones: Las claves públicas se hashean con SHA-256 antes de aplicar RIPEMD-160.

RIPEMD-160

RIPEMD-160 es otra función hash que produce salidas de 160 bits (40 caracteres hexadecimales). En Bitcoin se usa en combinación con SHA-256.

La combinación se llama HASH160: HASH160(x) = RIPEMD160(SHA256(x))

Esta operación se aplica a las claves públicas para derivar el hash que aparece en las direcciones. Usar HASH160 en vez de solo SHA-256 produce hashes más cortos (160 bits vs 256 bits), lo que resulta en direcciones más cortas.

Por qué dos funciones hash diferentes

La combinación de SHA-256 y RIPEMD-160 proporciona defensa en profundidad: si una de las dos funciones resultara tener vulnerabilidades en el futuro, la otra añade una capa de protección.

RIPEMD-160 fue desarrollado en Europa, mientras que SHA-256 viene del NIST estadounidense. Usar algoritmos de diferentes orígenes reduce el riesgo de que ambos tengan la misma vulnerabilidad oculta.

Ejemplo práctico: verificar integridad

Cuando descargas una wallet, el sitio oficial suele publicar el hash SHA-256 del archivo. Después de descargar:

  1. Calculas el hash del archivo descargado
  2. Comparas con el hash publicado
  3. Si coinciden, el archivo no ha sido modificado

Este mismo principio es lo que hace que la blockchain sea inmutable: cada bloque contiene el hash del anterior. Modificar un bloque cambiaría su hash, invalidando todos los bloques posteriores.

Pruébalo tú mismo

Puedes experimentar con funciones hash en /herramientas/hash. Introduce cualquier texto y observa cómo cambia el hash con cada modificación.