Colisiones en Funciones Hash
¿Qué es?
Una colisión ocurre cuando dos entradas diferentes (A y B, con A ≠ B) producen exactamente el mismo hash de salida:
H(A) = H(B)
¿Por qué ocurren? — el Principio del Palomar
Matemáticamente, las colisiones son inevitables, por una razón muy simple:
- Entradas infinitas: los datos de entrada pueden tener cualquier tamaño (un número, un PDF, un video de varios gigabytes).
- Salidas finitas: la función hash produce una cadena de longitud fija — SHA-256, por ejemplo, siempre genera una salida de 256 bits.
Dado que existen infinitos datos posibles de entrada pero un número limitado de combinaciones de salida, obligatoriamente más de una entrada terminará compartiendo el mismo hash. En criptografía, lo vital no es que las colisiones no existan, sino que sea extremadamente difícil encontrar una en la práctica.
Por qué son peligrosas para la seguridad
La seguridad digital se apoya en que el hash actúa como la "huella dactilar" única de un conjunto de datos. Si un atacante puede generar una colisión a voluntad, esa confianza se colapsa.
1. Suplantación en firmas digitales y contratos
Un atacante crea dos documentos — A ("Acepto vender mi coche por $1,000") y B ("Acepto vender mi coche por $1") — diseñados para que ambos produzcan el mismo hash. Te pide firmar el Documento A; una vez firmado, lo reemplaza por el Documento B. Ante cualquier verificación, la firma dirá que el Documento B es "válido" porque su hash coincide con el que fue firmado.
2. Bypass de antivirus y distribución de malware
Los antivirus mantienen listas negras con los hashes de archivos maliciosos conocidos. Si un atacante logra que su virus tenga el mismo hash que un programa legítimo, el antivirus lo dejará pasar sin alertar.
3. Vulneración de certificados SSL/TLS — un caso histórico real
En 2008, un grupo de investigadores logró generar una colisión real en el algoritmo MD5. Esto les permitió crear un certificado de Autoridad de Certificación falso pero técnicamente válido, capaz de suplantar sitios web seguros en HTTPS sin levantar sospechas en los navegadores.
Ejemplo: niveles de resistencia a colisiones
Para considerarse seguro hoy, un algoritmo hash debe cumplir 2 niveles:
- Resistencia débil (segunda preimagen): dado un dato x, debe ser imposible encontrar otro dato y tal que H(x) = H(y).
- Resistencia fuerte: debe ser imposible encontrar cualquier par arbitrario (x, y) donde x ≠ y pero H(x) = H(y).
MD5 y SHA-1 fueron retirados del uso criptográfico estándar porque se encontraron formas eficientes de provocar colisiones. Hoy, SHA-256 y SHA-3 son los estándares usados para garantizar integridad y seguridad digital.
Profundiza en la propiedad "resistencia a colisiones" ya mencionada en Hash (Programa 12) — es para quien quiere entender por qué esa propiedad es tan crítica y qué pasa cuando falla.
Cuando se combinan miles de hashes de transacciones en una sola estructura verificable, se obtiene un Árbol de Merkle — la siguiente lección extra.
¿Quieres ir más a fondo?
En el curso completo profundizamos en cada bloque de la Serie Conceptos Clave, con más ejemplos y ejercicios.
Ver el curso — próximamente