Regola
Non utilizzare un algoritmi algoritmi a meno che sia
giustificato. Evitare l'uso metodi di algoritmi algoritmi (MD5, SHA-1)
in qualsiasi contesto . Questi sono crittograficamente
violabili, facili da sottoporre a attacchi di forza bruta, e dannosi sistema manutenibilità.
Linguaggi supportati: 45+Introduzione
MD5 e SHA-1 continuano a essere ampiamente utilizzati nei codici di produzione, nonostante siano stati dimostrati crittograficamente vulnerabili già da decenni. L’MD5 è considerato insicuro dal 2004, mentre lo SHA-1 lo è dal 2017. Tuttavia, gli sviluppatori continuano a utilizzarli per l’hashing delle password, le firme digitali e la verifica dell’integrità, ambiti in cui gli attacchi di collisione e gli attacchi di preimmagine rappresentano rischi reali per la sicurezza. Il costo computazionale per generare collisioni MD5 è ormai irrisorio, mentre gli attacchi di collisione SHA-1 sono fattibili grazie alle risorse del cloud computing.
Perché è importante
Implicazioni per la sicurezza: MD5 e SHA-1 sono vulnerabili agli attacchi di collisione, in cui due input diversi producono lo stesso hash in uscita. Gli aggressori sfruttano questa vulnerabilità per creare file dannosi con lo stesso hash di quelli legittimi, aggirando i controlli di integrità. Per l’archiviazione delle password, questi algoritmi sono estremamente deboli proprio perché sono veloci, rendendo banali gli attacchi di forza bruta e con le tabelle arcobaleno. Una GPU moderna è in grado di calcolare miliardi di hash MD5 al secondo, il che significa che una password di 8 caratteri può essere violata in poche ore.
Conformità e rischio legale: gli standard di sicurezza quali PCI DSS, HIPAA e SOC 2 vietano espressamente l’uso di MD5 e SHA-1 a fini crittografici. Il loro utilizzo in ambienti regolamentati comporta il mancato superamento degli audit e responsabilità legali. I principali browser ora avvisano gli utenti quando rilevano certificati SHA-1, minando la fiducia e potenzialmente bloccando l’accesso ai vostri servizi.
Manutenibilità del codice: quando nel codice vengono individuati algoritmi di hashing obsoleti, è necessario intervenire immediatamente per porvi rimedio. Ciò genera un debito tecnico che si aggrava nel tempo, poiché la migrazione diventa più complessa con l’aumentare della quantità di dati accumulati. L’adozione tempestiva di algoritmi sicuri consente di evitare costose migrazioni future e patch di sicurezza d’emergenza.
Ampliamento della superficie di attacco: gli algoritmi di hashing deboli creano molteplici vettori di attacco. I database delle password diventano vulnerabili al cracking offline. Le firme digitali possono essere falsificate. I sistemi di integrità dei file possono essere aggirati. Ogni utilizzo di MD5 o SHA-1 rappresenta un potenziale incidente di sicurezza in agguato.
Esempi di codice
❌ Non 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;
}
Perché non è sicuro: L'algoritmo MD5 per l'hashing delle password non offre alcuna protezione contro i moderni strumenti di cracking. L'algoritmo SHA-1 per l'integrità dei file può essere aggirato con attacchi di collisione, consentendo a file dannosi di superare la verifica. Entrambi gli algoritmi sono computazionalmente poco onerosi da attaccare con la forza 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;
}Perché è sicuro: PBKDF2 con SHA-256 e un numero elevato di iterazioni (310.000) rende la violazione delle password esponenzialmente più lenta. SHA-256 per l'integrità dei file è resistente alle collisioni e non sono noti attacchi pratici. Entrambi gli algoritmi soddisfano gli attuali standard di sicurezza e i requisiti di conformità.
Conclusione
MD5 e SHA-1 non hanno alcun posto in un codice in cui la sicurezza è fondamentale. Le loro vulnerabilità sono ben documentate, gli exploit sono disponibili pubblicamente ed esistono alternative sicure in tutti i principali linguaggi di programmazione. Il percorso di migrazione è chiaro: utilizzare bcrypt, scrypt o Argon2 per le password e SHA-256 o SHA-3 per la verifica dell’integrità. Ogni giorno in cui questi algoritmi deboli rimangono in produzione, la superficie di attacco aumenta.

