Aikido

MD5 ve SHA-1’i Kullanmayı Bırakın: Güvenlik için Modern Karma İşlemleri

Güvenlik

Kural
Şunu kullanma eski karıştırma algoritmalarını kullanmayın bağlamsal olarak 
gerekçelendirilmedikçe. kullanmaktan eski karıştırma algoritmalar (MD5, SHA-1)
kullanılması herhangi bir güvenlik açısından hassas bağlamda. Bunlar şunlardır kriptografik olarak
kırılmış, kolay bir kırılabilir, ve zarar sistem bakım kolaylığı.

Desteklenen diller: 45+

Giriş

MD5 ve SHA-1, on yıllardır kriptografik olarak kırılmış olmalarına rağmen üretim kod tabanlarında hâlâ yaygın olarak kullanılmaktadır. MD5, 2004 yılından beri; SHA-1 ise 2017 yılından beri güvenli olmadığı kabul edilmektedir. Yine de geliştiriciler, çarpışma saldırıları ve ön görüntü saldırılarının gerçek güvenlik riskleri oluşturduğu şifre karma işlemleri, dijital imzalar ve bütünlük doğrulaması için bu algoritmaları kullanmaya devam etmektedir. MD5 çarpışmaları oluşturmanın hesaplama maliyeti artık önemsiz düzeydedir ve SHA-1 çarpışma saldırıları, bulut bilişim kaynakları kullanılarak pratik olarak gerçekleştirilebilmektedir.

Neden önemli?

Güvenlik etkileri: MD5 ve SHA-1, iki farklı girdinin aynı hash çıktısını ürettiği çarpışma saldırılarına karşı savunmasızdır. Saldırganlar bunu, meşru dosyalarla aynı hash değerine sahip kötü amaçlı dosyalar oluşturarak bütünlük kontrollerini atlatmak için kullanır. Şifre depolama açısından bu algoritmalar, hızlı olmaları nedeniyle son derece zayıftır; bu da kaba kuvvet ve gökkuşağı tablosu saldırılarını çocuk oyuncağı haline getirir. Modern bir GPU, saniyede milyarlarca MD5 hash değeri hesaplayabilir; bu da 8 karakterlik bir şifrenin birkaç saat içinde kırılabileceği anlamına gelir.

Uyum ve yasal risk: PCI DSS, HIPAA ve SOC 2 gibi güvenlik standartları, şifreleme amaçlı olarak MD5 ve SHA-1 kullanımını açıkça yasaklamaktadır. Düzenlemelere tabi ortamlarda bu algoritmaların kullanılması, denetim başarısızlıklarına ve yasal sorumluluğa yol açar. Önemli tarayıcılar artık SHA-1 sertifikalarıyla karşılaştıklarında kullanıcıları uyarıyor; bu durum güveni zedeliyor ve hizmetlerinize erişimin engellenmesine yol açabilir.

Kodun bakım kolaylığı: Kodda güncel olmayan karma algoritmaları tespit edildiğinde, bunların derhal düzeltilmesi gerekir. Bu durum, zamanla artan bir teknik borç yaratır; zira veri birikimi arttıkça geçiş süreci daha da zorlaşır. Güvenli algoritmaların erken aşamada benimsenmesi, gelecekte maliyetli geçiş süreçlerini ve acil güvenlik yamalarını önler.

Saldırı yüzeyinin genişlemesi: Zayıf karma algoritmaları, çok sayıda saldırı vektörü yaratır. Şifre veritabanları, çevrimdışı kırılma saldırılarına karşı savunmasız hale gelir. Dijital imzalar taklit edilebilir. Dosya bütünlüğü sistemleri atlatılabilir. MD5 veya SHA-1’in her kullanımı, gerçekleşmesi an meselesi olan potansiyel bir güvenlik olayıdır.

Kod örnekleri

❌ Uygun değil:

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: Şifre karma işlemi için kullanılan MD5, modern kırma araçlarına karşı hiçbir güvenlik sağlamaz. Dosya bütünlüğü için kullanılan SHA-1, çarpışma saldırılarıyla aşılabilir ve bu da kötü amaçlı dosyaların doğrulama sürecinden geçmesine olanak tanır. Her iki algoritma da brute-force saldırıları açısından hesaplama açısından ucuzdur.

✅ Uygunluk:

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üvenlidir: SHA-256 ve yüksek yineleme sayısı (310.000) ile PBKDF2, şifre kırma işlemini katlanarak yavaşlatır. Dosya bütünlüğü için kullanılan SHA-256, çarpışma direncine sahiptir ve bilinen hiçbir pratik saldırıya maruz kalmaz. Her iki algoritma da güncel güvenlik standartlarını ve uyumluluk gereksinimlerini karşılar.

Sonuç

MD5 ve SHA-1’in güvenlik açısından hassas kodlarda yeri yoktur. Bu algoritmaların güvenlik açıkları ayrıntılı bir şekilde belgelenmiştir, bu açıkları istismar eden kodlar herkese açıktır ve tüm başlıca programlama dillerinde güvenli alternatifler mevcuttur. Geçiş süreci açıktır: Şifreler için bcrypt, scrypt veya Argon2’yi, bütünlük doğrulaması için ise SHA-256 veya SHA-3’ü kullanın. Bu zayıf algoritmaların üretim ortamında kalmaya devam ettiği her gün, saldırı yüzeyiniz artar.

Sık Sorulan Sorular

Sorularınız mı var?

MD5 veya SHA-1’i ne zaman kullanmak kabul edilebilir?

Yalnızca çakışma direncinin gerekli olmadığı, güvenlikle ilgili olmayan bağlamlarda: önbellek anahtarları, hassas olmayan içerik dağıtımı için ETag’ler veya kazara meydana gelen veri bozulmalarını (kötü niyetli tahrifatları değil) tespit etmeye yönelik sağlama toplamları. Bu durumlarda bile, daha zayıf algoritmanın neden kabul edilebilir olduğunu gerekçelendirin. Her türlü kimlik doğrulama, yetki verme, bütünlük doğrulama veya kriptografik imzalama işlemleri için bu algoritmalar hiçbir şekilde kabul edilemez.

Şifre karma işlemi için MD5 ve SHA-1 yerine ne kullanmalıyım?

bcrypt, scrypt veya Argon2 kullanın. Bunlar, tuzlama özelliğine sahip ve kaba kuvvet saldırılarına karşı koymak için kasıtlı olarak yavaş tasarlanmış, amaca yönelik şifre karma işlevleridir. Argon2, günümüzün standardıdır ve 2015 yılında Şifre Karma Yarışması’nı kazanmıştır. SHA-256 gibi genel amaçlı karma fonksiyonlarını şifreler için doğrudan kullanmaktan kaçının, çünkü bunlar çok hızlıdır. SHA-256 kullanmak zorunda kalırsanız, bunu en az 310.000 yineleme ile PBKDF2 içine alın.

Peki ya dosya bütünlüğü için SHA-256 veya SHA-3?

SHA-256 şu anda güvenli ve yaygın olarak desteklenmektedir. SHA-3 (Keccak), farklı bir iç yapıya sahip olarak daha da güçlü güvenlik garantileri sunar ve SHA-2’nin güvenliği aşı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’yi kullanın. Her ikisi de bilinen çarpışma ve ön görüntü saldırılarına karşı dayanıklıdır.

Mevcut MD5/SHA-1 hash değerlerini, hiçbir şeyi bozmadan nasıl taşıyabilirim?

Şifreler için, geçiş sürecinde çift hash işlemi uygulayın: eski hash değerlerini geçici olarak saklayın; ancak kullanıcılar başarılı bir şekilde oturum açtıklarında, şifrelerini yeni algoritma ile yeniden hashleyin ve veritabanını güncelleyin. API jetonları veya bütünlük hash’leri için, hash formatınızı sürümlendirin (örn., md5:abc123 ile sha256:def456 gibi), böylece sistemler geçiş sürecinde her ikisini de işleyebilsin. Bir geçiş son tarihi belirleyin ve bu tarihten sonra kalan kullanıcıların şifrelerini sıfırlamalarını zorunlu kılın.

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

Evet, ancak güvenlik açısından önemli olan yönlerden değil. MD5, SHA-256’dan daha hızlıdır; bu da, yavaşlığın bir özellik olduğu şifre karma işlemlerinde tam da sorun teşkil eden noktadır. Dosya bütünlüğü açısından ise, modern donanımlarda performans farkı ihmal edilebilir düzeydedir. SHA-256, genellikle milisaniye cinsinden ölçülen disk I/O işlemlerine mikrosaniye düzeyinde bir ek süre katmaktadır. Güvenlik açısından sağlanan fayda, performans açısından ortaya çıkan herhangi bir maliyeti büyük ölçüde telafi etmektedir.

Peki ya MD5 veya SHA-1 ile HMAC?

HMAC-MD5 ve HMAC-SHA-1, HMAC’ın sağladığı ek güvenlik özellikleri sayesinde temel karma fonksiyonlara kıyasla saldırılara karşı daha dayanıklıdır. Ancak, bu yöntemler çoğu güvenlik standardında artık kullanılmamaktadır. Bunun yerine HMAC-SHA-256’yı kullanın. Performans farkı çok azdır ve bu sayede uyumluluk sorunlarından kaçınmış olursunuz. HMAC-SHA-256, federal kullanım için onaylanmıştır (FIPS 198-1) ve tüm önemli güvenlik standartlarını karşılamaktadır.

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ı kullanılan SSL/TLS ayarları için bağımlılık yapılandırmalarını kontrol edin. Bu algoritmaları gerektirebilecek üçüncü taraflarla yapılan API entegrasyonlarını gözden geçirin. Otomatik kod tarama araçları, bu kalıpları birçok programlama dilinde 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.