- Las funciones hash criptográficas generan huellas digitales de longitud fija que permiten verificar integridad y autenticidad sin revelar los datos originales.
- La seguridad de un algoritmo hash se basa en la resistencia a colisiones, preimagen y segunda preimagen, así como en un fuerte efecto avalancha.
- Hashing es clave en contraseñas, malware, firma electrónica y, sobre todo, en blockchain y criptomonedas para enlazar bloques y asegurar transacciones.
- Algoritmos modernos como SHA-2 y SHA-3 siguen siendo seguros, mientras que MD5 y SHA-1 están rotos y deben evitarse en cualquier uso criptográfico.
Detrás de casi todo lo que haces en Internet -iniciar sesión en una web, enviar un mensaje cifrado, usar criptomonedas o firmar un documento de forma electrónica– hay un protagonista silencioso: las funciones hash criptográficas. Son tan omnipresentes como desconocidas, y sin embargo resultan clave para que la información viaje segura, sea íntegra y no pueda manipularse sin dejar rastro.
Entender qué es el hashing y cómo funcionan las funciones criptográficas no es solo cosa de frikis de la seguridad o de la gente que mina Bitcoin. Si trabajas con datos, desarrollas software, gestionas contraseñas o simplemente te preocupa la privacidad, te interesa saber qué hacen exactamente estos algoritmos, qué tipos hay, por qué algunos ya no son seguros y en qué mil y un usos reales se apoyan hoy empresas, blockchains y sistemas de autenticación.
Qué es un hash y qué es una función hash
Lo primero es separar bien dos conceptos que mucha gente confunde: “hash” y “función hash”. La función hash es el algoritmo matemático, mientras que el hash es el resultado, la huella o resumen que se obtiene al aplicar esa función sobre unos datos de entrada.
Una función hash criptográfica toma una entrada de tamaño arbitrario (un texto corto, un archivo enorme, una contraseña, una transacción…) y la transforma en una cadena de longitud fija, normalmente expresada en formato hexadecimal. Esa salida suele considerarse una especie de huella digital única del contenido original.
Que la longitud sea fija no significa que el contenido se parezca. Con SHA-1, por ejemplo, tanto la palabra “Brian” como una novela entera de Shakespeare se condensan siempre en un valor de 40 caracteres. Con SHA-256, cualquier entrada acaba siendo un hash de 256 bits (64 caracteres hexadecimales), da igual si era una frase corta o un archivo de varios gigas.
Una de las propiedades más llamativas es el llamado efecto avalancha: un cambio mínimo en la entrada, como pasar de “Brian” a “brain”, o simplemente cambiar una mayúscula por una minúscula, genera un hash totalmente distinto. No hay medias tintas: la salida cambia de forma drástica, aunque visualmente los textos se parezcan mucho.
Otra característica esencial es que las funciones hash criptográficas son unidireccionales. Calcular el hash de una entrada es fácil y rápido, pero partir del hash para recuperar el texto original es computacionalmente inviable. Por eso se utilizan para almacenar contraseñas o garantizar la integridad: puedes comprobar que algo no ha cambiado sin necesidad de revelar el contenido en claro.
Propiedades que debe cumplir una función hash criptográfica segura

Para que una función hash pueda usarse en criptografía “seria” (firmas digitales, blockchains, protección de contraseñas…), no basta con que sea determinista y genere salidas bonitas. Debe reunir una serie de propiedades de seguridad muy concretas.
- Resistencia a la colisión: se considera segura si es prácticamente imposible encontrar dos entradas diferentes que produzcan el mismo hash. Colisiones siempre existirán en teoría (hay infinitas entradas y un espacio de salidas finito), pero deben ser tan difíciles de encontrar que ni con hardware masivo y millones de años de cálculo resulte factible.
- Resistencia a la preimagen: dado un hash concreto, no debe ser viable calcular una entrada que produzca esa salida. Es decir, no se puede “revertir” el hash. La única forma práctica de intentarlo es probar entradas a lo bruto hasta acertar, y eso tiene que ser prohibitivo.
- Resistencia a la segunda preimagen: si ya conoces una entrada y su hash, no debería ser factible encontrar otra entrada distinta con el mismo hash. Es un caso intermedio entre colisión y preimagen, pero igualmente crítico en muchos protocolos.
A estas tres propiedades clásicas se suma el efecto avalancha, que asegura que pequeñas variaciones en la entrada se traduzcan en salidas totalmente distintas, de forma impredecible. Así es imposible deducir similitudes entre dos mensajes solo mirando sus hashes.
Cuando una función deja de cumplir bien alguna de estas propiedades, como ha ocurrido con MD5 y SHA-1, se considera criptográficamente rota y se retira de los usos de seguridad, aunque aún pueda seguir empleándose en contextos no críticos.
Cómo funciona el proceso de hashing por dentro
El término hashing describe el proceso de aplicar una función hash. A nivel interno, los algoritmos modernos siguen un patrón similar, aunque los detalles varíen según la familia (SHA-2, SHA-3, BLAKE2, etc.).
Primero, los datos de entrada se dividen en bloques de tamaño fijo. Si el mensaje es más corto que un bloque, se rellena con bits de padding siguiendo unas reglas concretas; si es más largo, se trocea en varios bloques que luego se procesan secuencialmente.
Cada bloque se somete a una batería de transformaciones matemáticas: rotaciones y desplazamientos de bits, sumas modulares, operaciones lógicas como AND, OR, XOR, permutaciones… El objetivo es mezclar la información de tal forma que el resultado sea caótico y no reversible.
En algoritmos como SHA-2 se utiliza una función de compresión iterativa. Hay un “estado interno” que se va actualizando bloque a bloque. Después de procesar el último bloque, el estado final se recorta o adapta para convertirse en el hash definitivo.
En SHA-3 (Keccak) se usa una llamada construcción de esponja: primero se “absorbe” la entrada en un gran estado interno mediante permutaciones, y luego se “exprime” ese estado para ir obteniendo los bits del hash de salida. La idea es distinta, pero la filosofía sigue siendo la de mezclar mucha información en un espacio fijo de forma irreversible.
El resultado final es siempre un resumen de longitud fija. Por ejemplo, con SHA-256:
- “Hola” produce un hash concreto de 64 caracteres hexadecimales.
- “¡Hola!” (añadiendo un signo de exclamación) da un hash completamente diferente, pese a que la entrada casi no cambia.
Principales funciones hash: de MD5 a SHA-3 y más allá
A lo largo de las últimas décadas se han diseñado numerosas funciones hash, algunas ya obsoletas y otras todavía muy vigentes en la seguridad actual. Conviene saber en qué punto está cada una, porque muchas siguen apareciendo en sistemas heredados.
- MD5 fue uno de los primeros estándares ampliamente adoptados. Genera hashes de 128 bits y se utilizó durante años para verificar la integridad de archivos y en ciertas firmas digitales. Sin embargo, hace tiempo que se han demostrado colisiones prácticas, lo que permite crear dos archivos distintos con el mismo hash. Por ello, MD5 está descartado para cualquier uso criptográfico serio.
- SHA-1, diseñado por la NSA en los 90, produce hashes de 160 bits y fue el pilar de muchos certificados SSL/TLS y firmas. Con el tiempo, la investigación criptográfica también encontró ataques de colisión viables, y en 2017 se mostró públicamente cómo generar dos PDFs diferentes con el mismo SHA-1. Desde entonces, SHA-1 está considerado roto y se ha dejado de utilizar en navegadores y autoridades de certificación.
- SHA-2 es la familia que tomó el relevo: incluye variantes como SHA-224, SHA-256, SHA-384 y SHA-512. Todas comparten diseño básico pero cambian tamaños internos y de salida. Hoy SHA-256 es uno de los estándares de facto: se usa en Bitcoin, en muchas blockchains, en TLS, en firmas digitales… Hasta la fecha no se conocen ataques prácticos contra SHA-2, por lo que sigue siendo una opción robusta.
- SHA-3 (basado en Keccak) se estandarizó más tarde como alternativa por si algún día se descubre una debilidad grave en SHA-2. Emplea la mencionada construcción de esponja y está diseñado para evitar ataques como la extensión de longitud. Aunque aún está menos desplegado en la práctica, muchos sistemas nuevos lo adoptan por su diseño moderno y su solidez, y variantes como keccak-256 se usan en blockchains como Ethereum.
Existen además otros algoritmos modernos como SHA-3, BLAKE2 o mecanismos especializados para contraseñas (Argon2, bcrypt, scrypt) que añaden costes de tiempo y memoria para frenar ataques de fuerza bruta masivos. Elegir bien la función hash es parte fundamental del diseño de cualquier sistema seguro.
Hashing y seguridad de contraseñas

Uno de los usos más conocidos de las funciones hash es el almacenamiento de contraseñas. Ningún servicio serio debería guardar la contraseña en texto claro; lo correcto es almacenar solo el hash.
El proceso típico funciona así: cuando te registras, el sistema calcula el hash de tu contraseña y guarda ese valor. Cuando vuelves a iniciar sesión, la aplicación vuelve a hashear la contraseña que introduces y compara el resultado con el valor guardado. Si los hashes coinciden, asume que la contraseña es la misma, aun sin conocerla en claro.
Como el hash es unidireccional, en teoría no se puede obtener la contraseña original solo con la base de datos de hashes. Sin embargo, si la función utilizada es rápida y sin protecciones extra, los atacantes pueden usar diccionarios, fuerza bruta o tablas arcoíris para adivinar muchas contraseñas débiles.
Para complicar ese ataque se usa el famoso “salting”. Antes de aplicar la función hash, se concatena a la contraseña un valor aleatorio único (la “sal”), y luego se guarda tanto el hash como esa sal. De esta forma, dos usuarios con la misma contraseña acabarán teniendo hashes distintos y las tablas precalculadas dejan prácticamente de servir.
Además de la sal, se recomiendan funciones hash específicas para contraseñas, que sean deliberadamente lentas y/o intensivas en memoria: bcrypt, scrypt, Argon2… Eso hace que probar millones de combinaciones por segundo resulte mucho más caro, sobre todo con hardware especializado como GPUs o ASICs.
Verificación de integridad de datos y detección de cambios
Otro uso fundamental del hashing es la verificación de integridad. Cuando descargas un programa, una actualización de firmware o una ISO de un sistema operativo, es muy habitual que el proveedor publique también el hash oficial del archivo.
La idea es simple: tú descargas el fichero, calculas localmente su hash con el mismo algoritmo (por ejemplo, SHA-256) y lo comparas con el valor que aparece en la web oficial. Si coinciden, puedes tener una alta confianza de que el archivo no se ha corrompido ni ha sido modificado maliciosamente en el camino.
Este mismo principio se aplica dentro de sistemas y aplicaciones: muchos sistemas operativos y software crítico almacenan hashes de ficheros importantes y los comparan periódicamente para detectar cambios inesperados. Cualquier modificación no autorizada, típica de ciertos tipos de malware, queda al descubierto porque el hash deja de coincidir.
En comunicaciones y protocolos de red, los hashes también se usan como parte de códigos de autenticación de mensajes (MAC) y firmas digitales. En lugar de firmar un mensaje grande entero, se firma únicamente su hash, ahorrando tiempo y ancho de banda, sin perder la capacidad de detectar cualquier alteración en un solo bit.
Hashing, malware y ciberseguridad
La industria del antivirus y de la ciberseguridad lleva años apoyándose en las funciones hash para identificar y bloquear amenazas. Un archivo malicioso concreto se puede representar mediante su hash; si otro archivo tiene el mismo valor, es extremadamente probable que sea el mismo malware.
Las empresas de seguridad construyen grandes bases de datos de “firmas”, que en muchos casos no son más que hashes de muestras de malware o de partes especialmente características de su código. Cuando tu antivirus escanea el disco, calcula el hash de los archivos sospechosos y los compara con esa colección de firmas.
Si encuentra un hash que coincide con una firma de malware conocida, puede marcar el archivo como malicioso y bloquearlo o eliminarlo. También hay repositorios públicos de hashes de malware que cualquiera puede consultar para analizar ficheros sospechosos.
El mismo enfoque se aplica para proteger contenidos con derechos de autor, como ocurrió con el famoso caso de un usuario de Dropbox bloqueado por compartir material protegido. Los titulares de derechos generan el hash de los archivos a vigilar y los añaden a una “lista negra” interna. Si alguien intenta compartir un fichero cuyo hash coincide, el sistema puede bloquear automáticamente la acción sin necesidad de analizar el contenido en claro.
Funciones hash en blockchain y criptomonedas
La tecnología blockchain, y especialmente Bitcoin y otras criptomonedas, no se entenderían sin las funciones hash. El hashing está literalmente en el corazón de cómo se aseguran las transacciones, cómo se enlazan los bloques y cómo funciona la minería.
- Integridad de la cadena de bloques: cada bloque de una blockchain contiene, entre otros datos, el hash del bloque anterior. Esto crea una cadena donde cada bloque apunta criptográficamente al anterior. Si alguien intentara modificar una transacción antigua, el hash de su bloque cambiaría, y con él el de todos los bloques posteriores, rompiendo la cadena.
- Prueba de trabajo (Proof of Work): en redes como Bitcoin, los mineros compiten por encontrar un valor de hash que cumpla ciertas condiciones (por ejemplo, empezar con un número determinado de ceros). Para ello van cambiando un número de control llamado nonce y hashan una y otra vez el encabezado del bloque hasta dar con una salida válida.
- Este rompecabezas hash es costoso de resolver pero fácil de verificar. Cualquiera puede comprobar en milésimas de segundo que el hash cumple el objetivo, pero encontrarlo exige una enorme cantidad de intentos, y por tanto de energía y hardware. Esto hace que modificar la historia de la blockchain sea económicamente inviable, porque habría que rehacer el trabajo de todos los bloques posteriores.
- Generación de direcciones y claves: en muchas criptomonedas, las direcciones públicas de las billeteras se derivan aplicando funciones hash a claves públicas. De este modo, se añade una capa extra de seguridad y compacidad, y se facilita el uso de direcciones más cortas y manejables que las claves originales.
En redes como Bitcoin o Ethereum también se usan estructuras hash avanzadas como los árboles de Merkle, que permiten resumir miles de transacciones de un bloque en un único hash raíz. Esto agiliza enormemente la verificación y la sincronización de nodos ligeros.
Árboles de Merkle y verificación eficiente de grandes conjuntos de datos
Un árbol de Merkle (o árbol hash) es una estructura de datos basada en funciones hash que se utiliza para verificar de forma eficiente la integridad de grandes colecciones de información, como las transacciones de un bloque en una blockchain.
Su funcionamiento básico es el siguiente: cada transacción o bloque de datos se hashea individualmente, generando los llamados nodos hoja. Luego, los hashes de pares de hojas se concatenan y se vuelven a hashear, obteniendo nodos de nivel superior. El proceso se repite hasta llegar a un único hash en la cima del árbol: la raíz de Merkle.
Esta raíz de Merkle resume todo el conjunto de datos inferior. Si cambias una sola transacción en la base, su hash cambia, y a su vez cambian todos los hashes hacia arriba en el árbol, incluida la raíz. Por eso, comparar raíces de Merkle es una forma muy rápida de saber si dos conjuntos de datos completos son idénticos sin tener que revisar elemento a elemento.
En blockchains como Bitcoin, cada bloque incluye la raíz de Merkle de sus transacciones. Esto permite que los nodos ligeros, que no descargan toda la cadena, puedan verificar que una transacción concreta está incluida en un bloque mediante una prueba muy corta, en lugar de tener que almacenar todas las operaciones.
Firmas digitales basadas en hash
Además de las firmas digitales clásicas (RSA, ECDSA, etc.), existen esquemas basados en hash que se consideran especialmente interesantes en el contexto de la criptografía post-cuántica, ya que su seguridad se apoya en funciones hash bien analizadas.
Un esquema típico parte de firmas de un solo uso (OTS, One-Time Signatures). La idea es que un par de claves se utilice para firmar solo un mensaje; si se reutiliza, un atacante podría deducir información y llegar a falsificar firmas. Para poder firmar muchos mensajes, Merkle propuso combinar muchas claves OTS en un árbol de Merkle.
El procedimiento, simplificado, es el siguiente: se generan N pares de claves OTS (por ejemplo, de tipo Lamport), se colocan las claves públicas en las hojas de un árbol de Merkle y se calcula la raíz. Esta raíz actúa como clave pública “maestra” del esquema de firma. Cada vez que se firma un mensaje, se usa una clave OTS concreta y se proporciona además un camino de autenticación en el árbol para que cualquiera pueda verificar que esa clave está incluida bajo la raíz pública.
A partir de esta idea se han desarrollado esquemas más avanzados, como XMSS, Leighton-Micali (LMS), SPHINCS o BPQS. Muchos de ellos son de estado, es decir, requieren llevar la cuenta de qué claves de un solo uso ya se han empleado para no reutilizarlas nunca. SPHINCS, en cambio, es “stateless”, a costa de producir firmas más grandes.
Estas firmas basadas en hash están en el radar de organismos como NIST dentro del proceso de estandarización de criptografía resistente a ordenadores cuánticos. Junto con otros esquemas basados en redes de retículos (como CRYSTALS-Dilithium o FALCON), las firmas hash se consideran una opción muy sólida porque dependen de propiedades de funciones hash que conocemos y analizamos desde hace años.
Hashing en aplicaciones empresariales y firma electrónica
En el mundo corporativo, el hashing se ha integrado en multitud de soluciones, desde plataformas de firma electrónica hasta sistemas de gestión documental y herramientas de auditoría.
Cuando se firma electrónicamente un documento, el sistema no suele cifrar el archivo entero con la clave privada, porque sería ineficiente. Lo habitual es calcular el hash del documento y firmar únicamente ese valor hash con la clave privada del firmante. El receptor, con la clave pública, puede verificar la firma y recalcular el hash del documento recibido para comprobar que coincide.
Si alguien modificara una sola coma del documento, el hash cambiaría y la verificación de la firma fallaría al instante. Esto proporciona una prueba muy fuerte de autenticidad (quién ha firmado) e integridad (que el contenido no se ha alterado), algo esencial en contratos, facturas, informes de auditoría y cualquier otro documento sensible.
Muchas soluciones de gestión documental también usan hashes para trazabilidad. Cada versión de un archivo puede asociarse a un hash distinto, y conservar esa huella en logs inmutables permite demostrar qué versión existía en un momento dado, algo muy útil en entornos regulados o en disputas legales.
Vulnerabilidades y ataques relacionados con funciones hash
Aunque las funciones hash modernas son muy robustas, no son mágicas. A lo largo de los años se han ido describiendo distintos tipos de ataques que han obligado a jubilar algoritmos antiguos y a diseñar contramedidas.
- Ataques de colisión: el objetivo es encontrar dos entradas distintas que generen el mismo hash. Cuando esto se consigue en la práctica, como ocurrió con MD5 y SHA-1, puede explotarse para falsificar certificados digitales o hacer pasar un archivo malicioso por uno legítimo con el mismo hash.
- Ataques de preimagen: el atacante intenta, dado un hash concreto, encontrar alguna entrada que lo produzca. Aunque las funciones modernas están diseñadas para resistir este tipo de ataques, cualquier debilidad en el algoritmo o implementación podría abrir la puerta a reconstruir mensajes a partir de sus hashes.
- Ataques de extensión de longitud: algunos algoritmos de la familia Merkle-Damgård permiten, conociendo el hash de un mensaje, calcular el hash de ese mensaje con datos extra añadidos al final, sin conocer la entrada original. Esto se mitiga usando construcciones como HMAC o eligiendo funciones como SHA-3, que no sufren este problema.
- Ataques de cumpleaños: explotan la conocida paradoja del cumpleaños para encontrar colisiones más rápido de lo que se esperaría con una búsqueda ingenua. Cuanto menor sea el tamaño del hash, más viable es este ataque, por lo que algoritmos con salidas cortas (como MD5) están especialmente expuestos.
- Ataques de canal lateral: no se centran tanto en las matemáticas del algoritmo como en su implementación. Midiendo tiempos de ejecución, consumo de potencia o emisiones electromagnéticas, un atacante puede llegar a extraer información sensible sobre las entradas o las claves usadas junto con los hashes.
Las funciones hash criptográficas se han convertido en un cimiento imprescindible para casi todo lo que consideramos “seguro” en el mundo digital: permiten almacenar contraseñas de forma razonablemente protegida, verificar la integridad de archivos y mensajes, identificar malware y contenidos protegidos, enlazar bloques en una blockchain, habilitar sistemas de prueba de trabajo, construir firmas digitales resistentes al futuro cuántico y garantizar la autenticidad de documentos y transacciones en empresas de todos los tamaños. Entender cómo funcionan, qué propiedades deben cumplir y qué algoritmos están realmente recomendados hoy no es ya un lujo técnico, sino un conocimiento básico para moverse con criterio en la seguridad y la criptografía modernas.