Aikido

MD5 ve SHA-1 Kullanımına Son Verin: Güvenlik İçin Modern Hashleme Yöntemleri

Güvenlik

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.

Sık Sorulan Sorular

Sorularınız mı var?

MD5 veya SHA-1 kullanmanın kabul edilebilir olduğu durumlar var mıdır?

Yalnızca çakışma direncine gerek duyulmayan güvenlik dışı bağlamlarda: önbellek (cache) anahtarları, hassas olmayan içerik dağıtımı için ETag'ler veya kazara veri bozulmasını tespit etmeye yönelik sağlama toplamları (kötü amaçlı kurcalamalar için değil). Bu durumlarda bile daha zayıf algoritmanın neden kabul edilebilir olduğunu belgeleyin. Kimlik doğrulama, yetkilendirme, bütünlük doğrulama veya kriptografik imzalama için bu algoritmalar asla kabul edilemez.

Parola hashleme için MD5 ve SHA-1 yerine ne kullanmalıyım?

Bcrypt, scrypt veya Argon2 kullanın. Bunlar, tuzlama (salting) içeren ve kaba kuvvet saldırılarına karşı dirençli olması amacıyla kasıtlı olarak yavaş çalıştırılan, amaca yönelik parola hashleme fonksiyonlarıdır. Argon2 modern standarttır ve 2015 yılında Parola Hashleme Yarışması'nı kazanmıştır. Çok hızlı çalıştıkları için parolalarda SHA-256 gibi genel amaçlı hash fonksiyonlarını doğrudan kullanmaktan kaçının. Mutlaka SHA-256 kullanmanız gerekiyorsa, en az 310.000 yineleme ile PBKDF2 içinde sarmalayın.

Dosya bütünlüğü için SHA-256 veya SHA-3 hakkında ne düşünmeliyiz?

SHA-256 şu anda güvenlidir ve yaygın olarak desteklenmektedir. SHA-3 (Keccak), farklı bir iç yapı ile daha güçlü güvenlik garantileri sunarak SHA-2'nin kırılması durumunda derinlemesine savunma sağlar. Çoğu uygulama için SHA-256 yeterlidir. Ekstra güvenlik marjı için veya çok büyük veri kümeleriyle çalışırken SHA-512 kullanın. Her ikisi de bilinen çakışma ve ön imge saldırılarına karşı dirençlidir.

Her şeyi bozmadan mevcut MD5/SHA-1 hashlerini nasıl geçirebilirim?

Şifreler için geçiş sürecinde ikili özetleme (dual-hashing) uygulayın: eski özetleri geçici olarak saklayın, ancak kullanıcılar başarıyla giriş yaptığında şifrelerini yeni algoritmayla yeniden özetleyin ve veritabanını güncelleyin. API token'ları veya bütünlük özetleri için özet formatınızı sürümleyin (örn. md5:abc123 - sha256:def456), böylece sistemler geçiş sırasında her ikisini de işleyebilir. Bir geçiş son tarihi belirleyin ve kalan kullanıcıların bu tarihten sonra şifrelerini sıfırlamasını zorunlu kılın.

Bu algoritmalar arasında performans farkları var mı?

Evet, ancak güvenlik açısından önem taşıyan şekillerde değil. MD5, SHA-256'dan daha hızlıdır; bu da tam olarak yavaşlığın bir özellik olduğu şifre özetleme konusundaki sorundur. Dosya bütünlüğü için performans farkı modern donanımda ihmal edilebilir düzeydedir. SHA-256, tipik olarak milisaniyelerle ölçülen disk I/O işlemlerine mikrosaniyeler ekler. Güvenlik faydası, her türlü performans maliyetinden katbekat fazladır.

MD5 veya SHA-1 içeren HMAC'ler hakkında ne düşünüyorsunuz?

HMAC-MD5 ve HMAC-SHA-1, taban özet fonksiyonlarına kıyasla saldırılara karşı daha dirençlidir çünkü HMAC ek güvenlik özellikleri sağlar. Yine de çoğu güvenlik standardında kullanım dışı bırakılmıştır. Bunun yerine HMAC-SHA-256 kullanın. Performans farkı çok azdır ve uyumluluk sorunlarından kaçınmış olursunuz. HMAC-SHA-256, federal kullanım için onaylanmıştır (FIPS 198-1) ve tüm büyük güvenlik standartlarını karşılar.

Kod tabanımdaki tüm MD5/SHA-1 örneklerini nasıl bulabilirim?

Yaygın kalıpları arayın: md5, sha1, MessageDigest.getInstance("MD5"), hashlib.md5(), crypto.createHash('md5'). SHA-1 sertifikaları kullanan SSL/TLS ayarları için bağımlılık yapılandırmalarını kontrol edin. Bu algoritmaları gerektirebilecek üçüncü taraflarla olan API entegrasyonlarını gözden geçirin. Otomatik kod tarama araçları, bu kalıpları birden çok dilde tespit edebilir ve inceleme için işaretleyebilir.

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.