Kural:
Bağlam gerektirmediği sürece eski hashleme algoritmalarını kullanmaktan
kaçının. Güvenlik açısından hassas hiçbir bağlamda (MD5,
SHA-1) eski hashleme algoritmalarını kullanmayın. Bu algoritmalar
kriptografik olarak kırılmıştır, kaba kuvvet (brute-force) saldırılarına karşısavunmasızdır
Desteklenen diller: 45+Giriş
MD5 ve SHA-1, onlarca yıldır kriptografik olarak kırılmış olmalarına rağmen üretim (production) kod tabanlarında yaygın olarak kullanılmaya devam etmektedir. MD5 2004 yılından, SHA-1 ise 2017 yılından bu yana güvensiz kabul edilmektedir. Buna rağmen geliştiriciler; çakışma (collision) ve ön imge (preimage) saldırılarının gerçek güvenlik riskleri oluşturduğu parola hashleme, dijital imza ve bütünlük doğrulama işlemlerinde bunları kullanmaya devam etmektedir. MD5 çakışmaları üretmek için gereken hesaplama maliyeti artık çok düşüktür ve bulut bilişim kaynaklarıyla SHA-1 çakışma saldırıları pratik hale gelmiştir.
Neden önemli?
Güvenlik etkileri: MD5 ve SHA-1, iki farklı girdinin aynı hash çıktısını ürettiği çakışma saldırılarına karşı savunmasızdır. Saldırganlar, bütünlük kontrollerini atlatmak amacıyla meşru dosyalarla aynı hashe sahip kötü amaçlı dosyalar oluşturmak için bundan yararlanır. Parola depolama söz konusu olduğunda, bu algoritmalar son derece zayıftır çünkü hızlı çalışırlar; bu da kaba kuvvet (brute-force) ve gökkuşağı tablosu (rainbow table) saldırılarını çok kolay hale getirir. Modern bir GPU saniyede milyarlarca MD5 hashi hesaplayabilir, yani 8 karakterli bir parola saatler içinde kırılabilir.
Uyumluluk ve yasal riskler: PCI DSS, HIPAA ve SOC 2 gibi güvenlik standartları, kriptografik amaçlar için MD5 ve SHA-1 kullanımını açıkça yasaklar. Bunları denetime tabi ortamlarda kullanmak, denetim başarısızlıklarına ve yasal sorumluluklara yol açar. Başlıca tarayıcılar artık SHA-1 sertifikalarıyla karşılaşıldığında kullanıcıları uyarmakta, bu da güvene zarar vererek hizmetlerinize erişimi potansiyel olarak engellemektedir.
Kodun sürdürülebilirliği: Kodda eskimiş hashleme algoritmaları keşfedildiğinde acil düzeltme gerektirir. Bu durum, daha fazla veri biriktikçe geçiş zorlaştığı için zamanla biriken teknik borç yaratır. Güvenli algoritmaların erken benimsenmesi, maliyetli gelecekteki geçişlerin ve acil güvenlik yamalarının önüne geçer.
Saldırı yüzeyinin genişlemesi: Zayıf hashleme algoritmaları birden fazla saldırı vektörü oluşturur. Parola veritabanları çevrimdışı kırmaya karşı savunmasız hale gelir. Dijital imzalar taklit edilebilir. Dosya bütünlük sistemleri atlatılabilir. MD5 veya SHA-1'in her kullanımı, gerçekleşmeyi bekleyen potansiyel bir güvenlik olayıdır.
Kod örnekleri
❌ Kural dışı:
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;
}
Neden güvenli değil: Parola hashleme için MD5, modern kırma araçlarına karşı hiçbir güvenlik sağlamaz. Dosya bütünlüğü için SHA-1, çakışma saldırılarıyla bertaraf edilebilir ve kötü amaçlı dosyaların doğrulamadan geçmesine izin verebilir. Her iki algoritmanın da kaba kuvvetle kırılması hesaplama maliyeti açısından düşüktür.
✅ Kurallara uygun:
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;
}Neden güvenli: SHA-256 ve yüksek yineleme sayısına (310.000) sahip PBKDF2, parola kırmayı üstel olarak yavaşlatır. Dosya bütünlüğü için SHA-256, bilinen pratik saldırıları olmayan çakışmaya dirençli bir yapıdır. Her iki algoritma da mevcut güvenlik standartlarını ve uyumluluk gereksinimlerini karşılar.
Sonuç
MD5 ve SHA-1'in güvenlik açısından hassas kodlarda yeri yoktur. Zafiyetleri iyi belgelenmiştir, istismarları kamuoyuna açıktır ve her büyük dilde güvenli alternatifler mevcuttur. Geçiş yolu açıktır: parolalar için bcrypt, scrypt veya Argon2 kullanın; bütünlük doğrulaması için ise SHA-256 veya SHA-3 tercih edin. Bu zayıf algoritmaların üretimde kaldığı her gün saldırı yüzeyinizi artırır.

