SHA-256 es un procedimiento definido con precisión que calcula una huella de los datos, llamada hash. La misma entrada siempre produce el mismo resultado de 256 bits: 32 bytes, normalmente escritos como 64 caracteres hexadecimales. Bitcoin lo utiliza para enlazar y verificar datos y en la minería. La huella no es una copia cifrada del contenido original.
Imagina que alguien te envía un archivo y su hash. Al calcularlo por tu cuenta, puedes comprobar si los datos descargados coinciden con esa huella. Incluso un pequeño cambio en la entrada modifica, con una probabilidad muy alta, el resultado en su conjunto. Pero la huella por sí sola no dice quién creó el archivo ni si es seguro. Si un atacante proporciona un archivo malicioso junto con su hash, ambos coincidirán. Por eso también importa la fiabilidad de la fuente del valor de referencia. [1] [5]
Para los tres bytes ASCII abc, sin comillas ni salto de línea, el resultado es ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. No es un número generado al azar: cualquier implementación correcta obtiene ese resultado a partir de esos mismos bytes. Añadir un espacio o un salto de línea cambia la entrada. Que el hash sea distinto no significa entonces que el algoritmo falle. La codificación del texto también importa. [3]
El cifrado permite recuperar un mensaje mediante una clave. SHA-256 no tiene esa clave ni un procedimiento inverso. Eso no impide probar entradas probables: quien sospeche que has calculado el hash de un PIN de cuatro cifras puede probar las 10 000 combinaciones y comparar los resultados. Un hash largo no aporta a un secreto débil la entropía (lo impredecible que es la entrada) que le falta. La seguridad también depende de cuántas posibilidades tenga que comprobar realmente el atacante. [5] [7]
Los identificadores de bloque, txid (identificadores de transacciones) y la combinación de parejas de hashes en un Merkle Tree (un árbol de hashes enlazados) usan SHA256(SHA256(data)). La segunda pasada procesa los 32 bytes sin codificar del primer resultado, no su representación textual de 64 caracteres. La salida sigue teniendo 256 bits. Aquí el doble hash es una regla del protocolo, no una prueba de que SHA-256 simple esté roto. Bitcoin también usa otras construcciones: por ejemplo, Taproot añade etiquetas predefinidas a la entrada para separar los distintos usos del hash. [2] [4] [6]
Un minero cambia repetidamente los campos permitidos de una cabecera de bloque candidata y calcula su doble SHA-256. Busca un resultado que, interpretado como número, no supere el target (límite numérico) establecido. No descifra un mensaje ni busca la clave privada de nadie. Encontrar una cabecera adecuada requiere muchos intentos; comprobarla es rápido. La cabecera también hace referencia al bloque anterior, de modo que cambiar un bloque antiguo rompe los enlaces posteriores. Un Full Node (un nodo que comprueba por sí mismo las reglas de Bitcoin) comprueba además las transacciones y las demás reglas: un hash adecuado no convierte por sí solo un bloque inválido en válido. [4]
Hay más mensajes posibles que huellas de 256 bits, por lo que algunas entradas distintas deben compartir el mismo hash. Eso es una colisión. Lo importante es si podemos encontrarla deliberadamente. Para un hash ideal de 256 bits, una búsqueda genérica de cualquier colisión requiere del orden de 2^128 intentos; hallar una entrada para una huella fijada de antemano, del orden de 2^256. Son problemas diferentes. Encontrar una colisión no revela por sí solo una clave privada de Bitcoin. Estas cifras tampoco garantizan la seguridad de una cartera o un protocolo completos. [5]
SHA-256 es un componente, no una solución completa para todos los problemas de seguridad. Es rápido a propósito, por lo que usarlo solo no es adecuado para almacenar contraseñas elegidas por personas: un atacante podría probar sus conjeturas rápidamente. Para eso existen procedimientos específicos de derivación de contraseñas, por ejemplo con un coste de cálculo ajustable. Del mismo modo, la receta casera «calculo un hash y obtengo una clave segura» no resuelve la falta de aleatoriedad inicial ni la filtración de la entrada. Normalmente no necesitas calcular SHA-256 a mano, pero sí entender qué demuestra una huella verificada y qué no. [8] [7]
SHA-256 pertenece a la familia SHA-2 y está descrito en NIST FIPS 180-4. Antes del cálculo, completa la entrada, incluida la información sobre su longitud, y la procesa en fragmentos de 512 bits, cada uno durante 64 rondas. Estos bloques internos tienen 64 bytes y no son bloques de Bitcoin. La cabecera de un bloque de Bitcoin tiene 80 bytes; el bloque completo contiene también transacciones. El 256 del nombre indica la longitud de la huella resultante, no el tamaño del bloque ni de una clave privada. [1] [4]
Para obtener la imagen más completa, lee esta entrada junto con Hash, Proof of Work, Block Header, Dirección de Bitcoin, Merkle Tree, Bitcoin. También enlazan con esta entrada Hash, ASIC Miner, Hashrate, Nonce.