Guide
Kriptografik Hash Açıklaması: MD5, SHA-1, SHA-256, SHA-512
Üç özellik, bilmesi gereken dört algoritma ve bir hata — SHA-256'yı parolalara uygulamak — ihlal raporlarının yarısını açıklıyor.
By Buğra SözeriPublished
Kriptografik hash, keyfi girdiyi sabit boyutlu bir parmak izine dönüştüren bir fonksiyondur. "Kriptografik" sözcüğü bu cümlede gerçek bir anlam taşıyor: her hash fonksiyonu bu niteliğe sahip değildir ve kriptografik olmayan ya da yanlış kriptografik bir fonksiyon kullanmak sistemlerin sessizce güvensizleşmesine yol açar.
Kriptografik hash nedir?
Biçimsel olarak hash fonksiyonu H, keyfi bir bayt dizisi alır ve özet adı verilen sabit uzunluklu bir çıktı döndürür. SHA-256 256 bit, SHA-512 512 bit, MD5 128 bit özet üretir. Aynı girdi her zaman aynı çıktıyı verir; aynı çıktı girdi hakkında hiçbir şey açıklamaz.
Herkes bir hash'i doğrulayabilir; yalnızca orijinal girdinin bir kopyası üretebilir. Bu asimetri, hash'lerin bütünlük doğrulaması, tekilleştirme, içerik adresleme, dijital imzalar ve (ileride ele alacağımız çekincelerle) parola depolama için neden yararlı olduğunu açıklar.
Önem taşıyan üç özellik
Bir fonksiyon, pratikte aşağıdakilerin tamamını sağladığında kriptografik açıdan güvenli sayılır:
1. Ön görüntü direnci
Bir d özeti verildiğinde, H(m) = d sağlayan herhangi bir m girdisi bulmak hesaplama açısından pratik olmamalıdır. Hash'leri tek yönlü fonksiyon yapan budur — özeti mesaja geri çeviremezsiniz. 256 bitlik bir hash için kaba kuvvet maliyeti yaklaşık 2^256 işlemdir; astronomik bir sayı.
2. İkinci ön görüntü direnci
Belirli bir m1 girdisi verildiğinde, H(m1) = H(m2)sağlayan farklı bir m2 girdisi bulmak pratik olmamalıdır. Bütünlüğü koruyan özellik budur: dosyanızı değiştirebilen ancak yayımlanan hash'i değiştiremeyen bir saldırganın, tam girdinizin ikinci ön görüntüsünü oluşturması gerekir; bu, genel bir çarpışmadan çok daha zordur.
3. Çarpışma direnci
H(m1) = H(m2) sağlayan herhangi iki farklı m1 != m2girdisi bulmak pratik olmamalıdır. Doğum günü paradoksu gereği N-bitlik bir hash'te genel çarpışma bulmak 2^N değil, yaklaşık 2^(N/2) işlem gerektirir. Bu nedenle SHA-1'in 160 bitlik çıktısı artık yeterli değil — 2^80, 2026'da kararlı bir saldırgan için erişilebilir.
Çığ etkisi
Biçimsel olmayan ama pratik bir özellik: girdideki tek bitlik bir değişiklik tamamen farklı bir özet üretmeli ve çıktı bitlerinin yaklaşık yarısı değişmelidir. Bu, hash'leri farklılık tespitinde kullanışlı kılar — iki girdinin özetlerinden "neredeyse aynı" olup olmadıklarını anlayamazsınız; zaten amaç da budur.
Artık kullanılmayanlar ve nedenleri
MD5 (1992)
128 bitlik çıktı. Çarpışmalar 2004'te Xiaoyun Wang tarafından yayımlandı; 2008'e gelindiğinde araştırmacılar sahte bir Sertifika Otoritesi oluşturmak için MD5 çarpışmalarını kullandı. Bugün bir laptop'ta dakikalar içinde MD5 çarpışması bulunabiliyor. MD5, güvenlik gerektiren her kullanım için geçersizdir — imzalar, sertifikalar, düşmanca girdi içerebilen tekilleştirme işlemleri, çarpışma direncine ihtiyaç duyulan her şey.
MD5, yalnızca yazılım hatası tespitine yönelik kriptografik olmayan sağlama toplamları için kabul edilebilir — CD-ROM ISO indirme veya dahili önbellek anahtarı gibi — ancak teknik belgelerde "güvenli" olarak etiketlemeyin.
SHA-1 (1995)
160 bitlik çıktı. Google ve CWI'nin 2017 SHAttered saldırısı, yaklaşık 2^63 işlem maliyetiyle aynı SHA-1 hash'ine sahip iki farklı PDF dosyası üretti — pahalı ama gerçekleştirilebilir bir maliyet. NIST, SHA-1'i dijital imzalar için 2011'de kullanım dışı bıraktı ve federal kullanımda 2030'a kadar yasakladı. Tüm büyük tarayıcılar SHA-1 TLS sertifikalarına 2017'ye kadar güvenmeyi bıraktı.
Git, temel zayıflığı telafi eden SHAttered algılamasıyla önemli bir istisna olmaya devam ediyor. Yeni protokoller SHA-1 kullanmamalıdır.
SHA-2 ailesi
SHA-2, NSA tarafından tasarlanan ve NIST tarafından 2001'de yayımlanan bir hash ailesidir: SHA-224, SHA-256, SHA-384, SHA-512 ile SHA-512/224 ve SHA-512/256 kısaltılmış türevleri. Sayı, bit cinsinden çıktı uzunluğunu gösteriyor.
Ortak ada sahip olmalarına karşın SHA-2, SHA-1 ile yapısal olarak ilgisizdir; SHA-1'i kıran saldırılar SHA-2'ye aktarılamaz. Yirmi beş yıllık kriptanalizin ardından SHA-256 hâlâ kırılmış değil.
- SHA-256, 2026'da pratik varsayılandır. 256 bitlik özetler, 128 bitlik çarpışma güvenliği, her modern CPU'da donanım hızlandırma.
- SHA-512, 64 bit makinelerde daha hızlı çalışır ve daha uzun özet üretir. 128 bitten daha geniş çarpışma güvenliği istediğinizde kullanın.
- SHA-224 ve SHA-384, SHA-256 ve SHA-512'nin kısaltılmış çıktı sürümleridir. Eski uyumluluk için mevcutlar; yeni tasarımlar kısaltılmamış sürümleri tercih etmelidir.
Bunların herhangi birini saniyeler içinde tarayıcı tabanlı hash üreticimize karşı doğrulayabilirsiniz — Web Crypto API ile yerel olarak çalışır, hiçbir şey cihazı terk etmez.
SHA-3 ve ne zaman önem taşıdığı
NIST, SHA-2 için yapısal bir yedek seçmek amacıyla 2007'den 2012'ye kadar açık bir yarışma düzenledi. Kazanan Keccak, 2015'te SHA-3 olarak standartlaştırıldı. SHA-3, temelden farklı bir yapı kullanır (sünger fonksiyonu), dolayısıyla SHA-2'nin Merkle-Damgård yapısının varsayımsal kırılması SHA-3'ü etkilemez.
SHA-3, yazılımda SHA-2'den genellikle daha yavaş ama donanımda benzer ya da daha hızlıdır. Algoritmik çeşitlilik istediğinizde (aynı veriyi hem SHA-2 hem SHA-3 ile imzalamak gibi) ya da SHA-3 donanım hızlandırıcısı içeren bir platformda olduğunuzda doğru seçimdir. Diğer durumlarda SHA-256 pratik varsayılan olmaya devam ediyor.
Parola hash'lemede neden SHA-256 kullanmamalı?
Bu konudaki en yaygın hata budur. SHA-256 hızlıdır — modern bir GPU saniyede milyarlarca hash hesaplayabilir. Parola veritabanını çalan bir saldırgan için bu hız tam da istemediğiniz özelliktir: her tahmin denemesi nanosaniyeler alır.
Parola hash fonksiyonları kasıtlı olarak yavaş ve bellek yoğun olmak üzere tasarlanır; böylece saldırıyı özel donanımla ölçeklendirmek (ASIC'ler, FPGA'lar) pahalı bir girişime dönüşür. 2026'da bilinmesi gereken üç isim:
- bcrypt (1999). Ayarlanabilir iş faktörü (maliyet parametresi). Hâlâ güvenli; sınırlılığı 72 baytlık girdi üst sınırı. Mevcut kütüphanelerle entegrasyon için varsayılan seçim.
- scrypt (2009). Bellek yoğun, ASIC ile hızlandırması bcrypt'ten daha zor. Litecoin ve birkaç parola veritabanı tarafından kullanılır.
- Argon2 (2015 PHC kazananı). Güncel tavsiye. Kullanılacak türev Argon2id — hem yan kanal hem de GPU saldırılarına dayanıklı.
RFC 9106'da belirtilmiştir.
Her üçü de parola hash'lemeden önce parolaya eklenen tuz (kullanıcıya özgü rastgele bir değer) kabul eder. Tuz, gökkuşağı tablosu saldırılarını ortadan kaldırır ve aynı parolayı kullanan iki kullanıcının farklı depolama özetlerine sahip olmasını sağlar. Modern kütüphaneler tuz üretimini otomatik olarak yönetir; atlamayın.
HMAC: anahtarlı hash'leme
Hash, "bu veri değişmedi mi?" sorusunu yanıtlar. HMAC, "bu veri değişmedi mi ve paylaşılan gizliyi bilen biri bu MAC'ı üretiyor mu?" sorusunu yanıtlar.
HMAC, herhangi bir kriptografik hash'in üzerine inşa edilir — yaygın olanı HMAC-SHA-256 — ve RFC 2104'te tanımlanan özel bir yapı aracılığıyla çalışır. Naif alternatif olan H(anahtar || mesaj), Merkle-Damgård hash'lerinde (SHA-256 dahil) uzunluk uzatma saldırılarına karşı savunmasızdır. HMAC'ın iç içe yapısı bunu önler. Her zaman HMAC kullanın, naif biçimi değil.
HMAC; API imzalamanın (AWS SigV4, webhook imzaları, JWT'nin HS256'sı), TLS kayıt katmanı kimlik doğrulamasının ve "anahtarı olan birinden geldi" güvencesi gerektiren her protokolün temel bileşenidir.
Gerçek kullanım senaryoları
Bütünlük doğrulama
Dosyanın SHA-256'sını dosyayla birlikte yayımlayın. Herkes kendi kopyasını hash'leyip karşılaştırabilir. Her Linux dağıtımının ISO dosyalarını dağıtma biçimi ve paket yöneticilerinin bağımlılıkları doğrulaması böyle çalışır.
İçerik adresleme
Git, IPFS, Docker katmanları ve pek çok başka sistem nesneleri hash'leriyle adresler. Hash, ismin kendisidir. Bu, ücretsiz tekilleştirme (özdeş içerik özdeş hash'e sahip) ve ücretsiz bütünlük doğrulaması (hash eşleşiyorsa baytlar eşleşiyor) sağlar.
Dijital imzalar
Çok megabaytlık bir dosyayı doğrudan RSA veya ECDSA anahtarıyla imzalamak yavaş olur. Standart yöntem dosyayı hash'leyip hash'i imzalamaktır. İmzanın güvenliği hash'in çarpışma direncini miras alır — bu nedenle SHA-1 imzalara tarayıcılar artık güvenmiyor.
Blokzincir iş kanıtı
Bitcoin'in iş kanıtı, madencilerden belirli sayıda sıfır bitle başlayan SHA-256 (aslında iki kez) çıktısı üreten bir girdi bulmalarını ister. Kısayol yoktur; bu nedenle geçerli bir girdi bulmanın tek yolu pek çok aday denemektir. Ethereum 2022'de iş kanıtından hisse kanıtına geçti ancak hash tabanlı ilkel kripto para biriminde hâlâ yaygın biçimde kullanılıyor.
Tekilleştirme
Dropbox, Backblaze ve her modern nesne deposu, her bloğu hash'leyerek ve her özdeş hash için tek kopya saklayarak blok düzeyinde tekilleştirme yapar. SHA-256, düşmanca olmayan tekilleştirme için fazla kapasiteli; birçok sistem daha hızlı kriptografik olmayan bir hash (BLAKE3, xxHash) kullanır ve astronomik ölçekte küçük çarpışma olasılığını kabul eder.
Hızlı başvuru
| Algoritma | Çıktı (bit) | 2026 durumu | Kullanım alanı |
|---|---|---|---|
| MD5 | 128 | Kırık | Yalnızca düşmanca olmayan sağlama toplamları |
| SHA-1 | 160 | Kullanım dışı | Yalnızca eski uyumluluk |
| SHA-256 | 256 | Güvenli | Genel amaçlı varsayılan |
| SHA-512 | 512 | Güvenli | Ekstra güvenlik marjı veya 64 bit hız gerektiğinde |
| SHA-3-256 | 256 | Güvenli | Yapısal çeşitlilik, donanım hızlandırma |
| bcrypt / Argon2 | değişken | Güvenli | Parola depolama |
| HMAC-SHA-256 | 256 | Güvenli | Kimlik doğrulamalı mesaj bütünlüğü |
Dürüst özet
2026'da genel amaçlı hash'leme için SHA-256 kullanın. Parolalar için Argon2id. Kimlik doğrulama belirteçleri için HMAC-SHA-256 (ya da arka planda bunu kullanan uygun bir JWT kütüphanesi). İndirme bütünlüğü için SHA-256 özetlerini HTTPS üzerinden yayımlayın.
Yanlış yanıtlar — güvenlik gerektiren yerde MD5, yeni imzalar için SHA-1, parolalar için SHA-256 — ihlal raporlarındaki en yaygın hatalardır. Doğru seçim, her algoritmanın hangi soruyu yanıtlamak üzere tasarlandığını bilmekle ilgilidir.
Frequently asked questions
- SHA-256 kırıldı mı?
- Hayır. 2026 itibarıyla kaba kuvvetin ötesinde SHA-256'ya yönelik yayımlanmış bir çarpışma ya da ön görüntü saldırısı bulunmuyor. Bilinen en iyi kriptanalitik sonuçlar yalnızca tur sayısı azaltılmış türevleri etkiliyor. NIST, genel amaçlı hash'leme ve dijital imzalar için SHA-256'yı tavsiye etmeye devam ediyor.
- Parolaları hash'lemek için neden SHA-256 kullanmamalı?
- Çünkü SHA-256 hızlı olmak üzere tasarlanmıştır — modern bir GPU saniyede milyarlarca hash hesaplayabilir. Bu, parola depolama için tam da istemediğiniz özelliktir; saldırganın her tahmin denemesinin nanosaniyeler değil, saniyeler sürmesini istersiniz. bcrypt, scrypt veya Argon2 kullanın; bunlar kasıtlı olarak yavaş, bellek-yoğun ve donanım hızlandıkça artırılabilen bir iş faktörüne sahiptir.
- SHA-3, SHA-2'den daha hızlı mı?
- CPU'larda genellikle daha yavaş, donanımda daha hızlı. SHA-3 (Keccak), SHA-2'nin yerini almak için değil, yapısal bir yedek olarak seçildi; sünger yapısı matematiksel açıdan farklı olduğundan SHA-2'nin varsayımsal kırılması SHA-3'ü etkilemez. 2026'da yazılım geliştirme için SHA-256 pratik varsayılan olmaya devam ediyor; yapısal çeşitlilik veya SHA-3 donanım hızlandırıcısı hedeflediğinizde SHA-3'e geçin.
- Hash ile HMAC arasındaki fark nedir?
- Düz bir hash girdi alır ve özet döndürür. HMAC, girdiyi ve gizli anahtarı birlikte işleyerek yalnızca anahtarı bilenin üretebileceği bir özet döndürür. Düz hash'leri bütünlük doğrulama için (bu dosya yayımlanan sağlama toplamıyla eşleşiyor mu?), HMAC'leri özgünlük için (gönderici paylaşılan gizliyi biliyor mu?) kullanırsınız. Anahtarı veriye önek olarak ekleyip hash'lemek HMAC ile eşdeğer değildir ve bilinen güvenlik açıkları içerir — her zaman gerçek HMAC yapısını kullanın.
- SHA-256 çarpışması bulmak ne kadar sürer?
- Doğum günü paradoksu gereği 256 bitlik çıktıda çarpışma bulmak yaklaşık 2^128 hash işlemi gerektirir. Bir milyon makineye yayılmış saniyede bir trilyon (10^12) hash hızıyla bu yaklaşık 10^19 yıl demektir — evrenin yaşından çok daha uzun. Buna karşılık SHA-1'in 160 bitlik çıktısı vardır (doğum günü sınırı 2^80) ve Google'ın 2017 SHAttered saldırısı yaklaşık 2^63 işlemde çarpışma gösterdi — kararlı bir saldırgan için erişilebilir bir değer.
- Git neden hâlâ SHA-1 kullanıyor?
- Büyük ölçüde atalet ve hafifletici önlemler. Git'in içeriğe göre adresleme sistemi, her iki girdiyi de kontrol eden bir saldırgana karşı çarpışma direncine değil, ikinci ön görüntü direncine dayanır; bu direnç SHA-1 için hâlâ güçlü. Modern Git ayrıca bilinen kötü girdileri reddetmek için SHAttered algılaması uygular. SHA-256 geçişi sürüyor ancak yavaş ilerliyor; yeni depolar git init --object-format=sha256 ile bu seçeneği etkinleştirebilir.
Sources & references
Authoritative references cited by this piece. Verified by Buğra Sözeri on the dates shown and re-checked at every deploy.
- NIST FIPS 180-4 — Güvenli Hash Standardı (SHS) — SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 için kurumsal belirtim(as of )
- NIST FIPS 202 — SHA-3 Standardı — Keccak tabanlı SHA-3 ailesi için belirtim(as of )
- RFC 2104 — HMAC: Mesaj Kimlik Doğrulama için Anahtarlı Hash'leme — Makalede sözü edilen HMAC yapısı(as of )
- Stevens vd. — SHA-1 için ilk çarpışma (SHAttered) — 2017 SHA-1 çarpışma saldırısına ilişkin referans makale(as of )
- RFC 9106 — Parola Hash'leme için Argon2 Bellek-Yoğun Fonksiyon — SSS'te referans gösterilen güncel parola depolama tavsiyesi(as of )
Related
Published May 31, 2026