Descripción general
SHA-256 (Algoritmo de Hash Seguro de 256 bits) es la función hash criptográfica que sustenta la minería de prueba de trabajo de Bitcoin, la identificación de transacciones y muchas otras operaciones del protocolo. Diseñado por la NSA y publicado por NIST en 2001, SHA-256 toma una entrada de cualquier tamaño y produce una salida fija de 256 bits (32 bytes) llamada digest o hash. Es una función unidireccional: dado un hash, es computacionalmente inviable determinar la entrada original.
Propiedades de SHA-256
Propiedades de SHA-256:
Entrada: "Hello"
Salida: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
Entrada: "hello" (diferente mayúscula/minúscula)
Salida: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Propiedades clave:
┌─────────────────────────────────────────────────┐
│ 1. Determinista La misma entrada siempre = │
│ misma salida │
│ 2. Rápido Eficiente de calcular │
│ 3. Efecto avalancha Pequeño cambio de entrada = │
│ salida completamente distinta│
│ 4. Resistente No se puede invertir el hash │
│ a preimagen para encontrar la entrada │
│ 5. Resistente Es inviable encontrar dos │
│ a colisiones entradas con el mismo hash │
│ 6. Tamaño fijo Siempre 256 bits (32 bytes) │
└─────────────────────────────────────────────────┘
SHA-256 en Bitcoin
Bitcoin usa SHA-256 en múltiples operaciones críticas:
- Minería — Las cabeceras de bloque se hashean con doble SHA-256 (SHA-256 aplicado dos veces). Los mineros buscan un nonce que produzca un hash por debajo del objetivo de dificultad.
- IDs de transacción — Cada transacción se identifica por el hash doble SHA-256 de sus datos serializados.
- Árboles Merkle — Las transacciones dentro de un bloque se organizan en un árbol Merkle usando doble SHA-256, produciendo una única raíz Merkle almacenada en la cabecera del bloque.
- Generación de direcciones — SHA-256 se usa como parte de la operación HASH160 (SHA-256 seguido de RIPEMD-160) para derivar direcciones a partir de claves públicas.
Doble SHA-256
Bitcoin usa SHA-256 dos veces en sucesión (a menudo escrito como SHA-256d o HASH256) para la minería y los IDs de transacción. Este doble hash proporciona protección contra ciertos ataques teóricos, incluyendo los ataques de extensión de longitud, donde un atacante podría agregar datos a un mensaje y calcular un hash válido sin conocer el mensaje original.
Doble SHA-256:
Datos de Entrada
│
▼
┌────────┐ ┌────────┐
│SHA-256 │────>│SHA-256 │────> Hash Final
│ Paso 1 │ │ Paso 2 │ (usado para minería,
└────────┘ └────────┘ TXIDs, etc.)
Minería y SHA-256
La minería de Bitcoin es esencialmente un cómputo SHA-256 masivo y paralelo. Los mineros hashean cabeceras de bloque miles de millones de veces por segundo, incrementando el nonce y otros campos, buscando un hash que comience con suficientes ceros iniciales para satisfacer el objetivo de dificultad actual. La red global de Bitcoin realiza colectivamente en el orden de cientos de exahashes (10^18 hashes) por segundo.
Concepto erróneo común
SHA-256 a veces se confunde con el cifrado, pero el hashing y el cifrado son fundamentalmente diferentes. El cifrado es reversible con una clave (puedes descifrar el texto cifrado de vuelta al texto plano). SHA-256 es una función unidireccional — no hay clave ni manera de "deshashear" la salida de vuelta a la entrada. SHA-256 produce una huella digital de los datos, no un mensaje secreto.