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 estando muy extendidos en las bases de código de producción a pesar de estar criptográficamente rotos desde hace décadas. MD5 se considera inseguro desde 2004 y SHA-1 desde 2017. Sin embargo, los desarrolladores siguen utilizándolos para hash 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 para la seguridad: MD5 y SHA-1 son vulnerables a ataques de colisión en los que dos entradas diferentes producen el mismo hash de salida. Los atacantes se aprovechan de ello para crear archivos maliciosos con el mismo hash que los legítimos, eludiendo así las comprobaciones de integridad. Para el almacenamiento de contraseñas, estos algoritmos son catastróficamente débiles porque son rápidos, lo que hace triviales los ataques de fuerza bruta y de tabla arco iris. Una GPU moderna puede calcular miles de millones de hashes MD5 por segundo, lo que significa que una contraseña de 8 caracteres puede descifrarse en horas.
Cumplimiento y riesgo legal: Las normas 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 de auditoría y responsabilidad legal. Los principales navegadores advierten ahora a los usuarios cuando encuentran certificados SHA-1, lo que daña la confianza y puede bloquear el acceso a sus servicios.
Mantenimiento del código: Cuando se descubren algoritmos hash obsoletos en el código, es necesario corregirlos inmediatamente. Esto crea una deuda técnica que se agrava con el tiempo porque la migración se hace más difícil a medida que se acumulan más datos. La adopción temprana de algoritmos seguros evita costosas migraciones futuras y parches de seguridad de emergencia.
Ampliación de la superficie de ataque: Los algoritmos hash 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 falsificarse. Se pueden eludir los sistemas de integridad de archivos. Cada uso de MD5 o SHA-1 es un incidente de seguridad potencial a punto de producirse.
Ejemplos de códigos
❌ 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 frente a las herramientas modernas de cracking. SHA-1 para la integridad de archivos puede ser derrotado con ataques de colisión, permitiendo que archivos maliciosos pasen la verificación. Ambos algoritmos son computacionalmente baratos de forzar.
✅ 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 elevado número de iteraciones (310.000) hace que el descifrado de contraseñas sea exponencialmente más lento. SHA-256 para la integridad de los archivos es resistente a las colisiones sin ataques prácticos conocidos. Ambos algoritmos cumplen las normas de seguridad y los requisitos de conformidad 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 son de dominio público y existen alternativas seguras en los principales lenguajes. La ruta de migración está clara: utilice bcrypt, scrypt o Argon2 para las contraseñas y SHA-256 o SHA-3 para la verificación de la integridad. Cada día que estos algoritmos débiles permanecen en producción aumenta su superficie de ataque.
.avif)
