Esta maravilla creada por Domingo Martín llamada simplemente El Algoritmo SHA256 Explicado muestra cómo funciona exactamente el SHA-256, un algoritmo que se corresponde con la función hash criptográfica de 256 bits del Secure Hash Algorithm 2, creada por la NSA (Agencia de Seguridad Nacional estadounidense) en 2001. Es minucioso, delicado y casi como ver las tripas del ordenador por dentro, bit a bit.
Si la definición del SHA-256 suena un poco rara y marciana es porque si no estás muy puesto en criptografía y las matemáticas relacionadas lo es. En lenguaje llano se podría decir que es una función que transforma un fichero cualquiera en un valor de longitud fija único, llamado hash. Y ese valor, que es una especie de suma de control, valor de verificación o firma única tiene ciertas propiedades interesantes en múltiples aplicaciones en criptografía y seguridad. La utilidad es que a partir de ese valor, que en el caso del SHA-256 son 256 bits, es imposible generar el documento original, pero sobre todo es prácticamente imposible encontrar otro documento que produzca el mismo hash si no es buscando «por fuerza bruta», debido a que es una especie de función en un sólo sentido. Y eso no siempre es posible, lo cual garantiza su seguridad.
En esta página de demostración basta teclear cualquier texto o número binario en la parte de arriba y pulsar el botón de ejecución paso a paso [|→] para ir viendo lo que sucede con todas las variables definidas en la función:
El mensaje primero se convierte a binario y luego se trocea en bloques; en cada uno de ellos hay 64 palabras de 32 bits. Empezando por el primero, se ejecutan ciertas operaciones lógicas (como XOR, el OR exclusivo) sobre sus bits: sumarlos, cambiarlos, rotarlos y mezclarlos, incluyendo a veces ciertos valores predeterminados cuidadosamente elegidos. Todo esto varias veces. Según los resultados en los diversos grupos de bits también pueden surgir elecciones condicionales o por mayorías. El resultado de todo esto pasa a unas variables, que se mezclan con el siguiente bloque, repitiéndose el proceso hasta completar el mensaje original.
En el fondo, es como meter todos los bits del mensaje original en fila en una batidora, que tiene la curiosa propiedad de mantener la mezcla consistente si se repite la operación, porque el azar no interviene. Pero el lío es tan mayúsculo que el resultado parece azaroso. Lo mejor es que la operación es irreversible y muy resistente a los ataques y análisis matemáticos, de modo que viendo el resultado de la mezcla es imposible saber de dónde proviene; al mismo tiempo basta que cambie un solo bit en el original para generar un nuevo desorden mayúsculo que hace que el resultado sea completamente distinto y para nada parecido.
Aunque podría suceder que dos documentos produjeran el mismo hash (al fin y al cabo sólo hay 2256 hashes distintos, y muchos más posibles documentos o mensajes iniciales), la probabilidad de que esto suceda es tan remota que puede considerarse casi nula. Y si acaso se necesita más seguridad hay funciones parecidas que operan con más bits: SHA-384, SHA-512 e incluso SHA3-256, SHA3-384 y SHA3-512, además de otras llamadas SHAKE donde la longitud del hash es arbitrario.
Relacionado: