Tema 14
No todas las funciones hash criptográficas tienen hoy el mismo valor. Algunas, como MD5 y SHA-1, fueron muy importantes históricamente, pero ya no se consideran adecuadas para muchos usos críticos. Otras, como SHA-2 y SHA-3, siguen siendo referencias actuales. Entender esta evolución es clave para no mezclar tradición con seguridad real.
Después de estudiar qué propiedades debe cumplir una función hash criptográfica, el siguiente paso es bajar esa teoría a algoritmos concretos. En la práctica, no alcanza con decir "uso un hash": importa muchísimo cuál se usa, para qué se usa y si sigue siendo confiable frente al estado actual del criptoanálisis.
Algunos algoritmos fueron estándares durante años, pero hoy ya no ofrecen garantías suficientes. Otros continúan vigentes y se utilizan ampliamente en sistemas modernos. Entender esa distinción evita decisiones peligrosas basadas en costumbre o compatibilidad heredada.
Un algoritmo hash puede quedar obsoleto por varias razones: aparición de ataques más eficientes, colisiones prácticas, debilidades estructurales o simplemente porque el avance del cómputo vuelve insuficiente su margen de seguridad. La criptografía no es estática. Un diseño que parecía robusto en una época puede dejar de serlo más adelante.
Esto no significa que todo algoritmo viejo sea automáticamente inútil, pero sí que debe evaluarse según el propósito y el estado real de la investigación criptográfica.
MD5 fue diseñado por Ronald Rivest en 1991 como una mejora sobre funciones hash anteriores. Durante mucho tiempo fue enormemente popular por su velocidad y simplicidad. Se utilizó para verificación de archivos, firmas, certificados, almacenamiento de contraseñas y muchas otras tareas.
Su salida tiene 128 bits, lo cual en su momento se consideró aceptable para muchos usos. Sin embargo, con el paso del tiempo comenzaron a aparecer debilidades serias.
El problema más grave de MD5 fue la resistencia a colisiones. Se desarrollaron ataques que permitieron construir colisiones de manera práctica, lo que lo volvió inadecuado para firmas digitales, certificados y cualquier contexto donde la colisión tenga impacto de seguridad.
En otras palabras, aunque MD5 siga produciendo un resumen y pueda servir para detectar cambios accidentales simples, ya no debe considerarse un hash criptográficamente seguro para contextos adversariales.
Hoy MD5 se considera obsoleto para seguridad criptográfica. Puede seguir apareciendo en herramientas antiguas, compatibilidad heredada o usos no críticos, pero no debería elegirse para nuevas aplicaciones donde haya riesgo real de manipulación, colisiones o adversarios activos.
SHA-1 fue durante años uno de los algoritmos hash más usados del mundo. Diseñado por la NSA y estandarizado por NIST, produce una salida de 160 bits y fue adoptado en firmas digitales, certificados, control de integridad, sistemas operativos y repositorios de código.
Durante bastante tiempo se lo consideró una mejora sobre alternativas anteriores, pero con el tiempo también comenzaron a aparecer debilidades.
El punto crítico de SHA-1 fue nuevamente la resistencia a colisiones. Durante años hubo ataques teóricos cada vez mejores hasta que finalmente se demostraron colisiones prácticas bajo condiciones controladas. Eso cambió por completo su estatus de seguridad.
Desde entonces, SHA-1 dejó de ser recomendable para firmas, certificados y otros usos donde una colisión pueda ser explotada por un atacante.
Al igual que MD5, SHA-1 debe considerarse obsoleto para usos criptográficos serios. Puede seguir apareciendo en sistemas heredados o identificadores históricos, pero no debería adoptarse en diseños nuevos si existe riesgo real de manipulación deliberada.
SHA-2 es una familia más moderna y robusta que incluye variantes como SHA-224, SHA-256, SHA-384 y SHA-512. Estas funciones fueron diseñadas para reemplazar progresivamente a SHA-1 y hoy siguen siendo ampliamente recomendadas y utilizadas.
Entre ellas, SHA-256 es probablemente la variante más conocida y usada en práctica general.
Hasta el momento, SHA-2 no ha sufrido ataques prácticos comparables a los que volvieron obsoletos a MD5 o SHA-1 en contextos generales. Sigue ofreciendo un equilibrio sólido entre seguridad, eficiencia, adopción masiva y compatibilidad.
Por eso es común verla en certificados, firmas, HMAC, derivaciones, integridad de software y numerosos protocolos de seguridad actuales.
Estas variantes pertenecen a la familia SHA-2, pero difieren en tamaño de salida y ciertos detalles internos. En términos prácticos:
La elección depende del contexto, del estándar utilizado y del nivel de seguridad requerido.
SHA-3 representa otra familia moderna de funciones hash, seleccionada tras un concurso público organizado por NIST. A diferencia de SHA-2, que sigue una línea de diseño basada en estructuras tipo Merkle-Damgård y compresión iterativa, SHA-3 se basa en una construcción diferente llamada sponge.
Esto no significa que SHA-2 esté rota ni que SHA-3 la reemplace automáticamente. Significa que existe una familia alternativa, bien analizada y útil como diversidad criptográfica y opción robusta.
SHA-3 aporta una arquitectura distinta y flexibilidad interesante. Su existencia es valiosa porque evita depender por completo de una sola línea de diseño hash. También ofrece variantes como SHAKE, funciones extensibles que permiten obtener salidas de longitud variable.
En muchos sistemas actuales sigue predominando SHA-2, pero SHA-3 ocupa un lugar relevante como alternativa moderna y estandarizada.
No es correcto plantear la discusión como si una de las dos familias fuera "la única buena" y la otra estuviera descartada. Ambas siguen siendo consideradas adecuadas en contextos modernos, pero con perfiles de adopción diferentes.
| Familia | Estado actual | Ventaja práctica | Comentario |
|---|---|---|---|
| SHA-2 | Vigente | Amplísima adopción y compatibilidad | Muy usada en práctica real |
| SHA-3 | Vigente | Diseño alternativo moderno | Útil como diversidad y robustez complementaria |
No siempre se necesita la misma longitud de salida para todos los problemas. Una firma digital, un HMAC, un sistema de integridad o una estructura distribuida pueden tener requerimientos distintos. Sin embargo, elegir una salida más corta solo por ahorrar espacio puede reducir el margen frente a colisiones o ataques genéricos.
Por eso la longitud del hash debe alinearse con el nivel de seguridad buscado y con el sistema en el que se integra.
A veces un sistema solo quiere detectar corrupción accidental de datos. En otros casos quiere defenderse frente a un atacante que intenta construir un archivo falso con el mismo hash. La diferencia es enorme.
En el primer caso, incluso algoritmos antiguos pueden todavía detectar cambios casuales. En el segundo, usar MD5 o SHA-1 es una mala práctica porque ya no resisten ataques de colisión adecuados.
Decir que MD5 o SHA-1 están obsoletos no implica que cualquier uso residual de ellos sea igualmente catastrófico. El riesgo depende del contexto. Pero desde el punto de vista de diseño seguro, lo correcto es no introducirlos en sistemas nuevos con fines criptográficos.
La razón es simple: hoy existen alternativas mejores, estandarizadas y ampliamente disponibles. No hay justificación seria para seguir eligiendo algoritmos conocidos por sus debilidades cuando se diseña algo nuevo.
Otro error muy común es pensar que si SHA-256 o SHA-512 son hashes vigentes, entonces bastan para almacenar contraseñas directamente. No es así. Un hash rápido puede ser excelente para integridad o firmas y, al mismo tiempo, inadecuado para contraseñas porque permite demasiadas pruebas por segundo en ataques de fuerza bruta.
Por eso el almacenamiento de contraseñas requiere algoritmos específicos como Argon2, bcrypt, scrypt o PBKDF2, tema que veremos aparte.
| Algoritmo o familia | Salida típica | Estado general | Comentario práctico |
|---|---|---|---|
| MD5 | 128 bits | Obsoleto | No recomendable para seguridad criptográfica |
| SHA-1 | 160 bits | Obsoleto | No recomendable para firmas ni integridad adversarial |
| SHA-2 | 224 a 512 bits | Vigente | Familia más usada actualmente |
| SHA-3 | 224 a 512 bits y extensibles | Vigente | Alternativa moderna con diseño diferente |
La evolución de MD5, SHA-1, SHA-2 y SHA-3 muestra con claridad cómo progresa la criptografía: los algoritmos no son eternos y deben reevaluarse a medida que aparecen nuevos ataques y nuevas necesidades. Entender qué quedó atrás y qué sigue vigente es una parte esencial del criterio técnico.
En el próximo tema estudiaremos el almacenamiento seguro de contraseñas y veremos por qué ese problema requiere técnicas específicas como sal, pepper, stretching y algoritmos como Argon2, bcrypt, scrypt y PBKDF2.