Regla
No utilice anticuado algoritmos hash algoritmos a menos que contextualmente
Evite utilizar obsoletos hash algoritmos (MD5, SHA-1)
en cualquier sitio contexto de seguridad de seguridad. Estos son criptográficamente
rotos, fácil a fuerza bruta, y dañar sistema la mantenibilidad del sistema.
Idiomas soportados: 45+Introducción
MD5 y SHA-1 siguen siendo muy utilizados en bases de código en producción a pesar de estar criptográficamente comprometidos desde hace décadas. MD5 se considera inseguro desde 2004, SHA-1 desde 2017. Sin embargo, los desarrolladores continúan utilizándolos para el hashing de contraseñas, firmas digitales y verificación de integridad, donde los ataques de colisión y los ataques de preimagen plantean riesgos de seguridad reales. El coste computacional para generar colisiones MD5 es ahora trivial, y los ataques de colisión SHA-1 son prácticos con recursos de computación en la nube.
Por qué es importante
Implicaciones de seguridad: MD5 y SHA-1 son vulnerables a ataques de colisión, donde dos entradas diferentes producen la misma salida hash. Los atacantes explotan esto para crear archivos maliciosos con el mismo hash que los legítimos, eludiendo las comprobaciones de integridad. Para el almacenamiento de contraseñas, estos algoritmos son catastróficamente débiles porque son rápidos, lo que hace que los ataques de fuerza bruta y de tablas arcoíris sean triviales. Una GPU moderna puede calcular miles de millones de hashes MD5 por segundo, lo que significa que una contraseña de 8 caracteres puede ser descifrada en horas.
Riesgo legal y de cumplimiento: Estándares de seguridad como PCI DSS, HIPAA y SOC 2 prohíben explícitamente MD5 y SHA-1 para fines criptográficos. Su uso en entornos regulados genera fallos en las auditorías y responsabilidad legal. Los principales navegadores ahora advierten a los usuarios al encontrar certificados SHA-1, lo que daña la confianza y puede bloquear el acceso a sus servicios.
Mantenibilidad del código: Cuando se descubren algoritmos de hashing obsoletos en el código, requieren una remediación inmediata. Esto crea una deuda técnica que se agrava con el tiempo porque la migración se vuelve más difícil a medida que se acumulan más datos. La adopción temprana de algoritmos seguros previene futuras migraciones costosas y parches de seguridad de emergencia.
Expansión de la superficie de ataque: Los algoritmos de hashing débiles crean múltiples vectores de ataque. Las bases de datos de contraseñas se vuelven vulnerables al cracking offline. Las firmas digitales pueden ser falsificadas. Los sistemas de integridad de archivos pueden ser eludidos. Cada uso de MD5 o SHA-1 es un incidente de seguridad potencial a la espera de ocurrir.
Ejemplos de código
❌ No conforme:
const crypto = require('crypto');
function hashPassword(password) {
return crypto.createHash('md5')
.update(password)
.digest('hex');
}
function verifyFileIntegrity(fileContent, expectedHash) {
const hash = crypto.createHash('sha1')
.update(fileContent)
.digest('hex');
return hash === expectedHash;
}
Por qué es inseguro: MD5 para el hash de contraseñas no ofrece seguridad contra las herramientas de cracking modernas. SHA-1 para la integridad de archivos puede ser superado con ataques de colisión, permitiendo que archivos maliciosos pasen la verificación. Ambos algoritmos son computacionalmente baratos de forzar por fuerza bruta.
✅ Conforme:
const crypto = require('crypto');
async function hashPassword(password) {
const salt = crypto.randomBytes(16);
return new Promise((resolve, reject) => {
crypto.pbkdf2(password, salt, 310000, 32, 'sha256', (err, key) => {
if (err) reject(err);
resolve({ salt: salt.toString('hex'), hash: key.toString('hex') });
});
});
}
function verifyFileIntegrity(fileContent, expectedHash) {
const hash = crypto.createHash('sha256')
.update(fileContent)
.digest('hex');
return hash === expectedHash;
}Por qué es seguro: PBKDF2 con SHA-256 y un alto número de iteraciones (310.000) ralentiza exponencialmente el descifrado de contraseñas. SHA-256 para la integridad de archivos es resistente a colisiones sin ataques prácticos conocidos. Ambos algoritmos cumplen con los estándares de seguridad y requisitos de cumplimiento actuales.
Conclusión
MD5 y SHA-1 no tienen cabida en código sensible a la seguridad. Sus vulnerabilidades están bien documentadas, los exploits están disponibles públicamente y existen alternativas seguras en todos los lenguajes principales. La ruta de migración es clara: utilice bcrypt, scrypt o Argon2 para contraseñas, y SHA-256 o SHA-3 para la verificación de integridad. Cada día que estos algoritmos débiles permanecen en producción aumenta su superficie de ataque.
.avif)
