SHA-256 en Bitcoin
La función SHA-256 (Secure Hash Algorithm 256 bits) es un componente esencial en el protocolo de Bitcoin. Actúa como mecanismo de integridad, autenticación y prueba de trabajo, garantizando que cada bloque minado sea único y resistente a manipulaciones.
¿Qué es la función hash SHA-256
SHA-256 forma parte de la familia SHA-2 definida por el NIST. Toma como entrada un mensaje de longitud arbitraria y devuelve un valor hash de 256 bits (32 bytes). Sus propiedades criptográficas clave son:
Determinismo: un mismo mensaje produce siempre el mismo hash.
Efecto avalancha: un solo bit cambiado en la entrada altera drásticamente el resultado.
Resistencia a preimagen: resulta computacionalmente inviable recuperar la entrada original a partir del hash.
Resistencia a colisiones: es extremadamente difícil encontrar dos mensajes distintos con el mismo hash.
Uso específico de SHA-256 en Bitcoin
Bitcoin emplea SHA-256 en dos procesos fundamentales:
Prueba de trabajo (Proof-of-Work): los mineros calculan el double SHA-256 del encabezado de bloque buscando un valor que sea menor que el target definido por la dificultad.
Integridad de transacciones: el árbol de Merkle utiliza SHA-256 para concatenar progresivamente los hashes de las transacciones, obteniendo la raíz de Merkle que se incluye en el encabezado de bloque.
Estructura del encabezado de bloque
Cada bloque contiene un encabezado de 80 bytes dividido en seis campos:
Versión (4 bytes)
Hash del bloque anterior (32 bytes)
Raíz de Merkle (32 bytes)
Marca de tiempo (4 bytes)
Bits de dificultad (4 bytes)
Nonce (4 bytes)
El minero modifica el nonce y aplica double SHA-256 (es decir, SHA-256 al resultado de SHA-256) hasta que obtiene un valor inferior al objetivo.
Proceso interno de SHA-256
El algoritmo opera en bloques de 512 bits y realiza las siguientes etapas:
1. Preprocesamiento: el mensaje se rellena con un 1 seguido de ceros y la longitud original en 64 bits.
2. Inicialización: se definen ocho palabras de estado H0…H7 con constantes fijas.
3. Preparación del mensaje: se expanden 16 palabras de 32 bits a 64 palabras mediante funciones σ0 y σ1.
4. Rondas de compresión: en cada una de las 64 rondas se actualiza el estado usando las funciones Σ0, Σ1, Ch, Maj y constantes Kt.
5. Salida: tras procesar todos los bloques de 512 bits, se concatenan los ocho valores de estado finales para formar el hash de 256 bits.
Integración en la cadena de bloques
Al aplicar double SHA-256 al encabezado de bloque, Bitcoin garantiza:
Seguridad criptográfica, pues la dificultad de revertir la función impide falsificar bloques históricos.
Inmutabilidad, porque cualquier cambio en un bloque alteraría todos los hashes posteriores, invalidando la cadena.
Control de emisión, dado que la dificultad ajusta el target para que, en promedio, se mine un bloque cada 10 minutos.
Recursos adicionales
Para profundizar en los detalles matemáticos y de implementación, puede consultarse la especificación oficial de SHA-2 en Wikipedia en español o el repositorio de código abierto del cliente Bitcoin Core.
