Descripción General
Una función hash es uno de los bloques de construcción más fundamentales del modelo de seguridad de Bitcoin. Transforma cualquier dato de entrada en una salida de tamaño fijo (llamada hash o resumen) de una manera que es rápida de calcular, determinista y prácticamente imposible de revertir. Bitcoin se basa en funciones hash criptográficas en todo su diseño, desde la minería y la vinculación de bloques hasta la generación de direcciones y los árboles de Merkle.
Propiedades Requeridas
Una función hash criptográfica debe satisfacer varias propiedades para ser adecuada para su uso en Bitcoin:
┌────────────────────────────────────────────────────────────┐
│ │
│ 1. DETERMINISTA │
│ Misma entrada → siempre misma salida │
│ │
│ 2. CÓMPUTO RÁPIDO │
│ El hash puede calcularse rápidamente para cualquier │
│ entrada │
│ │
│ 3. RESISTENCIA A PRE-IMAGEN (unidireccional) │
│ Dado hash H, no se puede encontrar entrada M tal que │
│ hash(M)=H │
│ │
│ 4. RESISTENCIA A SEGUNDA PRE-IMAGEN │
│ Dada la entrada M1, no se puede encontrar M2≠M1 con │
│ el mismo hash │
│ │
│ 5. RESISTENCIA A COLISIONES │
│ No se puede encontrar ningún M1≠M2 donde │
│ hash(M1) = hash(M2) │
│ │
│ 6. EFECTO AVALANCHA │
│ Pequeño cambio en la entrada → salida drásticamente │
│ diferente │
│ │
└────────────────────────────────────────────────────────────┘
Funciones Hash en Bitcoin
SHA-256 (Algoritmo Hash Seguro de 256 bits):
- Salida: 256 bits (32 bytes)
- Usado para: Minería (doble SHA-256), IDs de transacción, árboles de Merkle, hashes de bloque
- Bitcoin usa doble SHA-256 (aplicando SHA-256 dos veces) en muchos contextos para mayor seguridad
RIPEMD-160:
- Salida: 160 bits (20 bytes)
- Usado para: Generación de direcciones mediante HASH160 = RIPEMD-160(SHA-256(datos))
- La salida más corta produce direcciones más compactas
HMAC-SHA512:
- Usado para: Derivación de claves de billetera HD (BIP32)
- Proporciona tanto hashing como autenticación de mensajes
Ejemplo: Doble SHA-256
Entrada: "bitcoin"
Paso 1: SHA-256("bitcoin")
→ 6b88c087247aa2f07ee1c5956b8e1a9f4c7f892a70e324f1bb3d161e05ca107b
Paso 2: SHA-256(resultado del paso 1)
→ 5765a933a24a2c2c3ba710586e0cff3d0dfeb53c42e58b7e8e5f9a073e42a327
Este patrón de doble hash se usa para TXIDs y hashes de bloque.
Por Qué Se Eligió SHA-256
Satoshi Nakamoto eligió SHA-256 por varias razones:
- Bien analizado por la comunidad criptográfica en el momento de la creación de Bitcoin
- Parte de la familia SHA-2 diseñada por la NSA, sin debilidades prácticas conocidas
- La salida de 256 bits proporciona un nivel de seguridad de 128 bits contra ataques de colisión
- Eficiente de implementar tanto en software como en hardware
Conceptos Erróneos Comunes
- Las funciones hash no son algoritmos de cifrado. No utilizan claves, y no hay manera de "descifrar" un hash para recuperar la entrada original.
- "SHA-256 fue diseñado por la NSA" no significa que tenga una puerta trasera. Ha sido analizado exhaustivamente por criptógrafos independientes en todo el mundo y sigue siendo considerado seguro.
- Si bien SHA-256 es computacionalmente rápido, esto es una característica para la minería. La dificultad de la minería proviene de encontrar una salida de hash específica, no del costo de calcular un solo hash.