İçeriğe geç
Toova
Tüm Araçlar

MD5 vs SHA-256 — MD5 Kullanımını Neden Durdurmalısınız

Toova

MD5 her yerdedir. Her programlama dilinde, her veritabanında, her bulut sağlayıcısının SDK'sında gemilenir. Geliştiriciler buna alışkanlıktan başvururlar — hızlıdır, düzgün bir 32 karakter onaltılık dizgi üretir ve API iki satır koddur. Sorun: MD5, 2004'ten beri kriptografik olarak kırılmıştır ve saldırılar o zamandan beri yalnızca daha hızlı ve daha ucuz hale gelmiştir.

Bu teorik değildir. 2012'de İran altyapısına yönelik bir siber saldırı — Flame kötü amaçlı yazılım — bir MD5 çakışmasını istismar ederek bir Microsoft kod imzalama sertifikasını sahteleştirdi. Akademik kriptografçıların bir makalede gösterdikleri aynı teknik, jeopolitik casuslukta kullanılan bir silah haline geldi. MD5 biraz zayıflamadı; bir saldırganın girdileri seçebildiği herhangi bir uygulama için temelden tehlikeye atılmıştır.

NIST tarafından standartlaştırılan SHA-2 ailesinin parçası olan SHA-256, bilinen çakışma saldırısı yoktur ve 2026'da kriptografik bütünlük için standart olmaya devam etmektedir. Bu makale farkın tam olarak ne anlama geldiğini, MD5'in ne zaman (nadiren) hâlâ kabul edilebilir olduğunu ve güvenli bir şekilde nasıl geçileceğini açıklar. Toova MD5 hash ve Toova SHA-256 hash araçlarıyla her iki karmayı da anında hesaplayabilirsiniz.

Karma Fonksiyonları Nasıl Çalışır

Bir kriptografik karma fonksiyonu, herhangi bir uzunluktaki bir girdiyi alır ve şu özelliklere sahip sabit uzunluklu bir çıktı (özet) üretir:

  • Deterministik: aynı girdi her zaman aynı çıktıyı üretir.
  • Çığ etkisi: girdideki tek bit değişikliği çıktıyı tamamen değiştirir.
  • Ön görüntü direnci: bir karma verildiğinde, girdiyi bulmak hesaplama açısından uygulanamaz.
  • Çakışma direnci: aynı karmayı üreten iki farklı girdi bulmak hesaplama açısından uygulanamaz.

Çığ etkisi, hem MD5 hem de SHA-256'nın bir bakışta benzer görünmesinin nedenidir:

MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6

MD5("The quick brown fox jumps over the lazy cog")
= 1055d3e698d289f2af8663725127bd4b
SHA-256("The quick brown fox jumps over the lazy dog")
= d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592

SHA-256("The quick brown fox jumps over the lazy cog")
= e4c4d8f3bf76b692de791a173e05321150f7a345b46484fe427f6acc7ecc81be

Girdide bir karakter değişti ("dog" → "cog"), yine de çıktı tamamen farklı. Bu özellik her iki algoritma için de geçerlidir. Fark, bir saldırganın kasıtlı olarak bir çakışma bulmaya çalıştığında ne olduğudur.

MD5 — Başarısızlık Zaman Çizelgesi (1996–2025)

MD5, 1991'de MD4'ün yerine geçmek üzere Ron Rivest tarafından tasarlandı. 1996'ya gelindiğinde, Hans Dobbertin MD5'in sıkıştırma fonksiyonunda çakışmalar bulmuştu — tam algoritmada değil, ancak tasarımın kırılgan olduğunun bir uyarı işareti. Güvenlik topluluğu SHA-1'e geçişi önermeye başladı. Çoğu sistem bunu görmezden geldi.

2004 — Tam çakışmalar gösterildi

Ağustos 2004'te, Xiaoyun Wang ve Hongbo Yu CRYPTO konferansında MD5'e karşı pratik bir çakışma saldırısı sundular. Aynı MD5 karmasına sahip iki farklı 1.024 bitlik mesajı bir kümede bir saatten kısa sürede üretebilirlerdi. MD5'in temel garantisi — çakışma direnci — kırıldı.

NIST hemen federal kullanım için MD5'i kullanımdan kaldırmaya başladı. Çoğu endüstri kılavuzu takip etti. Üretim sistemlerinde MD5'in fiili dağıtımı neredeyse değişmedi.

2008 — Sahte CA sertifikaları

Bir araştırmacı grubu (Sotirov, Stevens ve diğerleri), tüm büyük tarayıcılar tarafından güvenilecek sahte bir Sertifika Otoritesi sertifikası oluşturabileceklerini gösterdi. Saldırı, birkaç sertifika makamının hâlâ MD5 ile sertifikaları imzaladığı gerçeğini istismar etti. Araştırmacılar meşru görünen bir sertifika talebi ile kendi yaptıkları bir CA sertifikası arasında bir çakışma ürettiler — ardından gerçek bir CA'nın meşru olanı imzalamasını sağladılar, sahte CA sertifikası için de geçerli bir imza ürettiler.

Her büyük tarayıcı hemen MD5 imzalı sertifikaları engelledi. Çoğu sertifika makamı bunları vermeyi durdurdu. Bir önemli ders: kriptografik zayıflıklar, bir saldırgan karma fonksiyonuna girdiyi kontrol ettiği anda istismar edilebilir hale gelir.

2012 — Flame kötü amaçlı yazılım

2012'de keşfedilen ve devlet aktörlerine atfedilen Flame siber casusluk kötü amaçlı yazılımı, seçilmiş önekli bir MD5 çakışması kullanarak bir Microsoft Windows Update sertifikasını sahteleştirdi. Saldırı 2008 gösteriminden daha sofistikeydi: saldırganlar, Microsoft'un imzalama altyapısının farkında olmadan işbirliği yapacağı koşullar altında meşru bir Microsoft sertifikasıyla çakışan kötü niyetli bir yük oluşturabildiler.

Sonuç: Flame, geçerli bir Microsoft imzasıyla, kendisini meşru bir Microsoft güncellemesi gibi Windows Update aracılığıyla dağıtabilirdi. İran, Lübnan, Suriye ve Sudan'da yüz binlerce Windows makinesi enfekte oldu. Bu, ulus devlet ölçeğinde MD5 çakışma saldırılarının gerçek dünya istismarıydı. Tam tarih için Flame kötü amaçlı yazılım Wikipedia makalesine bakın.

2019–2025 — HashClash ve anlık çakışmalar

HashClash projesi (Marc Stevens, CWI Amsterdam) MD5 çakışma üretimini pratik sınırlara itmeye devam etti. 2019'a gelindiğinde, seçilmiş önekli MD5 çakışmaları — bir saldırganın her iki çakışan mesaj için rastgele önekleri seçebildiği — emtia donanımında günler içinde üretilebilirdi. 2022'ye gelindiğinde, optimize edilmiş uygulamalar bunu saatlere indirdi. 2024'te bir HashClash makalesi tek bir modern GPU'da bir dakikanın altında çakışmalar gösterdi.

Gidişat açıktır: MD5 çakışma saldırıları donanım iyileştikçe zorlaşmıyor — kolaylaşıyor. 2004'te bir küme alan 2026'da bir dizüstü bilgisayar alır.

SHA-256 — Neden Dayanıyor

SHA-256, NSA tarafından tasarlanan ve NIST tarafından 2001'de standartlaştırılan SHA-2 ailesinin parçasıdır. 256 bitlik (32 baytlık) bir özet üretir. 2026 itibarıyla SHA-256'ya karşı bilinen pratik çakışma saldırıları yoktur. Yayınlanan en iyi saldırılar, çakışmaları bulmak için teorik iş faktörünü yaklaşık 2^187 işleme indirir — hâlâ var olan veya öngörülebilir herhangi bir hesaplama kaynağının çok ötesinde.

SHA-256'nın güvenlik marjı kasıtlı olarak muhafazakârdır. Donanım milyar kat iyileşse bile (Moore yasası terimleriyle yaklaşık 30 katlama), SHA-256'yı kırmak hesaplama açısından uygulanamaz kalır. MD5'in çakışmalar için 2^18 ila 2^23 etkili iş faktörü 2004'te mütevazı donanımın erişimindeydi.

SHA-256 ayrıca beklediğinizden daha hızlıdır: modern CPU'lar, yazılımın çekirdek başına saniyede milyonlarca SHA-256 karması hesaplamasına olanak tanıyan özel SHA komutları (Intel SHA Extensions, ARM Cryptography Extensions) içerir. Tipik kullanım senaryoları için MD5'ten anlamlı ölçüde daha yavaş değildir.

MD5 Hâlâ Kabul Edilebilir Olduğunda (Nadiren)

"Kırık" "her amaç için işe yaramaz" anlamına gelmez. MD5 şu bağlamlarda kabul edilebilir olmaya devam eder:

  • Saldırgan yok: güvenilir bir dahili sistemde kazara dosya bozulmasını algılama — internetten indirmeleri doğrulamak değil, bir dosya kopyasının başarıyla tamamlanıp tamamlanmadığını kontrol etme.
  • Hız güvenlikten daha önemli: çakışmanın yalnızca bir önbellek kaçırması anlamına geldiği, bir güvenlik ihlali değil, önbellek anahtarlarını veya parça tanımlayıcılarını hesaplama. Saldırgan modeli yoktur.
  • Mevcut bir harici sistemle eşleşiyorsunuz: bazı eski API'ler hâlâ MD5 ETag'ler veya sağlama toplamları gönderir. Güvenlik kararları için kullanmadığınız sürece birlikte çalışabilirlik için MD5'i kabul edebilir ve hesaplayabilirsiniz.
  • Hash tablosu bölümleme: bir anahtarın MD5'i ile verileri kovalar arasında dağıtma. Buradaki çakışmalar güvenlik hataları değil, dengesizliğe neden olur.

Ortak konu: MD5, uygulamanın çakışma direncine bağlı olmadığı ve girdileri oluşturabilecek bir saldırgan olmadığı zaman kabul edilebilir. Her iki koşul da bozulduğu anda — saldırgan mevcut veya çakışma = güvenlik hatası — SHA-256'ya geçin.

MD5 Hakkında Yaygın Mitler

"MD5 bir tuz eklersek iyidir"

Tuzlama girdiyi değiştirir, böylece aynı parolaya sahip iki kullanıcı farklı karmalar alır — bu gökkuşağı tablo saldırılarını önler. Ancak çakışma sorununu çözmez. Tuzlanmış MD5 karmasına sahip bir saldırgan hâlâ verimli bir şekilde kaba kuvvet uygulayabilir çünkü MD5 hızlıdır: modern GPU'lar saniyede yaklaşık 10-30 milyar MD5 karması hesaplar. Bir tuz, algoritmanın zorluğuna değil, arama alanına orantılı iş ekler.

Parola karması için, tuzlama ne olursa olsun MD5 veya SHA-256 uygun değildir. Bcrypt, scrypt veya Argon2 kullanın.

"MD5 iyi çünkü yalnızca dahili olarak kullanıyoruz"

Dahili sistemler ihlal edilir. "Saldırgan girdilerimize erişemez" tehdit modeli, bir tedarik zinciri saldırısı, içeriden tehdit veya bir yanlış yapılandırma sistemi ifşa edene kadar dayanır. Flame saldırısı, muhtemelen dahili kontrollerinde benzer güvene sahip sistemlere karşı gerçekleşti.

"SHA-256 fazla — MD5 daha hızlı"

SHA hızlandırma komutları olan modern donanımda, SHA-256 MD5'ten yaklaşık 2-5 kat daha yavaştır. Çoğu uygulama için — dosya bütünlüğü kontrolleri, API imzaları, önbellek anahtarları — fark işlem başına mikrosaniyedir, pratikte fark edilmez. SHA-256 yerine MD5'in performans argümanı yalnızca mikrosaniyenin bile önemli olduğu son derece yüksek verimli senaryolarda geçerlidir ve hatta o zaman bile genellikle kırık bir algoritma kullanmaktan daha iyi çözümler vardır.

Geçiş Kılavuzu — MD5'ten SHA-256'ya

Parola karması

// YANLIŞ: Parola karması için MD5
const crypto = require('crypto');
const hash = crypto.createHash('md5').update(password).digest('hex');
// Modern GPU ile kırma süresi: saniyelerden dakikalara
// YANLIŞ: Parola karması için SHA-256 (hâlâ çok hızlı)
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update(password).digest('hex');

// DOĞRU: parolalar için bcrypt, scrypt veya Argon2 kullanın
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 12);

Depolanan parola karmalarını taşımak kademeli bir yaklaşım gerektirir. Her başarılı oturum açışta: parolayı mevcut MD5 karmasına karşı doğrulayın, ardından hemen bcrypt ile yeniden karma yapın ve depolanan değeri değiştirin. Her hesabı taşınmış olarak işaretleyin. Makul bir süre sonra (tipik olarak 90 gün), hâlâ MD5 karmaları kullanan kalan hesaplar için parola sıfırlamayı zorunlu kılın.

Dosya bütünlüğü / sağlama toplamları

# Linux: bir dosya indirmesini doğrula
sha256sum -c ubuntu-24.04-desktop-amd64.iso.sha256

# macOS
shasum -a 256 ubuntu-24.04-desktop-amd64.iso

# Windows PowerShell
Get-FileHash ubuntu-24.04-desktop-amd64.iso -Algorithm SHA256

Dosya bütünlük kontrollerini MD5'ten SHA-256'ya değiştirmek genellikle kodda basit bir bul-değiştir işlemidir. İki tuzak: (1) veritabanlarında veya dosyalarda depolanan mevcut sağlama toplamlarının yeniden hesaplanması ve güncellenmesi gerekir — kısayol yok; (2) MD5 ETag'ler sağlayan harici API'ler veya depolama sistemleri (bazı S3 yapılandırmaları gibi) geçişi koordine etmek gerektirir.

API kimlik doğrulaması için HMAC

// Mesaj kimlik doğrulaması için HMAC-SHA-256
const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', process.env.SECRET_KEY)
  .update(message)
  .digest('hex');

API istek imzalama için HMAC-MD5 kullanıyorsanız, HMAC-SHA-256'ya geçin. HMAC yapısı gizli bir anahtar ekler, bu da bazı MD5 saldırılarını sınırlar, ancak HMAC-MD5'in uzunluk uzatma güvenlik açıkları vardır ve temel ilkel hâlâ tehlikeye atılmıştır. Modern standartlar (JWT, AWS SigV4, OAuth 2.0) hepsi HMAC-SHA-256'yı belirtir. Toova'nın HMAC generator'ı test için hem HMAC-SHA-256'yı hem de HMAC-SHA-512'yi destekler.

Dijital imzalar ve sertifikalar

MD5 ile imzalanan herhangi bir sertifika hemen yeniden verilmelidir — çoğu sertifika makamı 2008'den sonra MD5 imzalı sertifika vermeyi durdurdu ve tüm büyük tarayıcılar ve işletim sistemleri bunları reddeder. Dahili PKI için CA yapılandırmanızı denetleyin ve SHA-256'nın izin verilen minimum imza algoritması olduğundan emin olun. RSA-SHA256 veya ECDSA-SHA256 mevcut standartlardır.

MD5 vs SHA-256 — Hızlı Referans

Özellik MD5 SHA-256
Çıktı uzunluğu 128 bit (32 onaltılık karakter) 256 bit (64 onaltılık karakter)
Çakışma direnci Kırık (pratik saldırılar) Güvenli (bilinen saldırı yok)
Parola karması Asla Hayır (bcrypt/Argon2 kullanın)
Dijital imzalar Asla Evet
Dosya bütünlüğü (güvenlik) Asla Evet
Güvenlik dışı sağlama toplamları Kabul edilebilir (saldırgan yok) Her zaman iyi
Önbellek anahtarları Kabul edilebilir Her zaman iyi
TLS sertifika imzalama Tarayıcılar tarafından reddedildi Standart
FIPS 140-3 uyumlu Hayır (kullanımdan kaldırıldı) Evet

Sonuç

MD5 2004'ten beri kriptografik olarak kırılmıştır. Seçilmiş önekli çakışmalar — Flame kötü amaçlı yazılımı destekleyen teknik — artık hesaplama açısından ucuzdur. Güvenlik için MD5'e güvenen herhangi bir uygulama (imzalar, bütünlük doğrulaması, kimlik doğrulama) yürütmek için dakikalar süren işlem zamanı alan saldırılara karşı savunmasızdır.

SHA-256'nın bilinen pratik saldırısı yoktur, modern CPU'larda donanım hızlandırmalıdır ve TLS, kod imzalama ve API kimlik doğrulamasında kriptografik bütünlük için standarttır. MD5 ile karşılaştırıldığında performans maliyeti neredeyse her kullanım senaryosu için ihmal edilebilirdir.

Geçiş yolu basittir: dosya bütünlüğü kontrolleri bir bul-değiştir işlemidir. API imzaları bir sürüm artışını koordine etmeyi gerektirir. Parola karmaları, oturum açmada kademeli bir yeniden karma stratejisi gerektirir. Yeni kod için SHA-256 varsayılan seçim olmalıdır. Karmaları doğrudan Toova MD5 ve Toova SHA-256 ile hesaplayın ve karşılaştırın — veya HMAC generator ile HMAC-SHA-256 kimlik doğrulama kodları üretin.