Herhangi bir veri parçasını — tek bir kelime, bir roman, 4 GB'lık bir video — onu benzersiz şekilde tanımlayan kısa, sabit uzunlukta bir karakter dizisine dönüştürebildiğinizi hayal edin. Orijinaldeki tek bir virgülü değiştirdiğinizde dizi tamamen farklı hale geliyor. Ve orijinal veriyi kurtarmak için işlemi tersine çevirmenin hiçbir yolu yok.
İşte bir kriptografik hash fonksiyonu tam olarak bunu yapar. Modern güvenliğin en temel yapı taşlarından biridir ve çevrimiçi yaptığınız neredeyse her şeyi sessizce korur.
Parmak izi metaforu
Hash, dijital bir parmak izi gibi çalışır. Parmak iziniz sizi benzersiz şekilde tanımlar, ancak kimse parmak izinizden yüzünüzü yeniden oluşturamaz. Benzer şekilde, kriptografik hash bir veri parçasını, o verinin ne olduğunu açığa çıkarmadan benzersiz şekilde tanımlar.
Herhangi bir girdiyi bir hash fonksiyonuna verin ve bir özet (hash değeri veya sağlama toplamı olarak da adlandırılır) elde edersiniz — sabit uzunlukta onaltılık karakterlerden oluşan bir dizi. En yaygın algoritmalardan biri olan SHA-256, girdi boyutundan bağımsız olarak her zaman 64 karakterlik bir çıktı üretir.
| Girdi | SHA-256 özeti (ilk 16 karakter) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Tüm Wikipedia dökümü | (hâlâ 64 karakter) |
Dört temel özellik
Bir fonksiyon ancak şu özellikleri karşılıyorsa kriptografik hash olarak nitelendirilebilir:
- Deterministik. Aynı girdi her zaman aynı çıktıyı üretir; herhangi bir makinede, herhangi bir zamanda.
- Tek yönlü (ön görüntü direnci). Bir hash verildiğinde, orijinal girdiyi bulmak hesaplama açısından olanaksızdır. Veriyi "hash'ten geri çeviremezsiniz".
- Çarpışma direnci. Aynı özeti üreten iki farklı girdi bulmak pratik olarak imkânsızdır. SHA-256 için tesadüfi bir çarpışma olasılığı yaklaşık 2^128'de 1'dir — gözlemlenebilir evrendeki atom sayısından büyük bir rakam.
- Çığ etkisi. Girdideki tek bir bitin değiştirilmesi, çıktıdaki bitlerin yaklaşık yarısını değiştirir. Benzer girdiler arasında algılanabilir bir kalıp veya ilişki yoktur.
Önemli ayrım: Hashing şifreleme değildir. Şifreleme bir anahtarla geri çevrilebilir; hashing kasıtlı olarak geri çevrilemez. Veriyi aktarım sırasında korumak için şifrelersiniz. Bütünlüğünü doğrulamak veya orijinali saklamadan bir kanıt depolamak için hash'lersiniz.
Yaygın hash algoritmaları
MD5 (1991)
- Çıktı: 128 bit (32 onaltılık karakter)
- Durum: Kriptografik olarak kırılmış. Araştırmacılar dizüstü bilgisayarda saniyeler içinde çarpışma üretebilir.
- Hâlâ görüldüğü yerler: Dosya indirmeleri için güvenlik dışı sağlama toplamları ve eski sistemler.
SHA-1 (1995)
- Çıktı: 160 bit (40 onaltılık karakter)
- Durum: Güvenlik için kullanımdan kaldırıldı. Google, 2017'de pratik bir çarpışma gösterdi ("SHAttered" saldırısı).
- Hâlâ görüldüğü yerler: Eski Git depoları, bazı eski sertifikalar.
SHA-256 (2001)
- Çıktı: 256 bit (64 onaltılık karakter)
- Durum: Mevcut standart. Bilinen pratik saldırı yok.
- Kullanım alanları: TLS sertifikaları, Bitcoin, parola hashing, dijital imzalar, dosya bütünlüğü doğrulama.
SHA-3 (2015)
- Çıktı: Değişken (genellikle 256 bit)
- Durum: En son standart; SHA-2 ailesinden tamamen farklı bir iç tasarıma (Keccak sünger yapısı) dayanır.
- Kullanım alanları: Geleceğe yönelik sistemler, Ethereum, algoritma çeşitliliği gerektiren durumlar.
| Algoritma | Çıktı boyutu | Güvenli mi? | Hız |
|---|---|---|---|
| MD5 | 128 bit | Hayır | Çok hızlı |
| SHA-1 | 160 bit | Hayır | Hızlı |
| SHA-256 | 256 bit | Evet | Orta |
| SHA-3-256 | 256 bit | Evet | Orta |
Kriptografik hashing nerelerde kullanılır
Parola depolama
Bir hesap oluşturduğunuzda, iyi tasarlanmış bir sistem parolanızı asla düz metin olarak saklamaz. Hash'ini saklar. Giriş yaptığınızda sistem yazdığınızı hash'ler ve saklanan değerle karşılaştırır. Veritabanı ihlal edilse bile saldırganlar hash'leri elde eder — parolaları değil.
Modern sistemler bir adım daha ileri gider: hash'lemeden önce rastgele bir tuz (eklenen ekstra veri) ekler ve kaba kuvvetle tahmin etmeyi pratik olmayan hale getirmek için kasıtlı olarak yavaş algoritmalar kullanır — bcrypt, scrypt veya Argon2 gibi.
Dosya bütünlüğü doğrulama
Yazılım dağıtıcıları indirmelerinin yanında SHA-256 sağlama toplamları yayımlar. İndirdikten sonra dosyanın hash'ini kendi makinenizde hesaplarsınız ve karşılaştırırsınız. Eşleşme, dosyanın aktarım sırasında bozulmadığını veya değiştirilmediğini kanıtlar.
Dijital imzalar
Bir belgeyi dijital olarak imzaladığınızda, sistem önce belgeyi hash'ler, sonra hash'i özel anahtarınızla şifreler. Alıcı bunu genel anahtarınızla çözer ve belgenin kendi hash'iyle karşılaştırır. Bu, belgenin tamamını şifrelemekten çok daha verimlidir ve hem yazarlığı hem bütünlüğü kanıtlar.
Blok zinciri
Bir blok zincirindeki her blok, önceki bloğun hash'ini içerir ve değiştirilemez bir zincir oluşturur. Geçmişteki herhangi bir işlemi değiştirmek, o bloğun hash'ini değiştirir ve bu da zinciri o noktadan itibaren kırar; bu da kurcalamayı anında görünür kılar.
MD5 ve SHA-1 neden kırılmış kabul ediliyor
Bir hash algoritması, birisi kasıtlı olarak aynı hash'i üreten iki farklı girdi oluşturabildiğinde (çarpışma) "kırılmış" sayılır. Bu, benzersizliğe dayanan her kullanım alanını zayıflatır.
- MD5: Çarpışmalar saniyeler içinde üretilebilir. Araştırmacılar aynı MD5 hash'ine sahip iki farklı PDF dosyası oluşturmuşlardır.
- SHA-1: 2017'deki SHAttered saldırısı, aynı SHA-1 hash'ine sahip iki farklı PDF üretti; yaklaşık 6.500 yıllık tek CPU hesaplama süresi gerektirdi (bulut kaynakları ile mümkün).
Pratik kural: Güvenlikle ilgili hiçbir şey için — parolalar, sertifikalar, dijital imzalar veya bir rakibin dahil olabileceği bütünlük kontrolleri — asla MD5 veya SHA-1 kullanmayın. Bunun yerine SHA-256 veya SHA-3 kullanın.
Daha fazlası
Hashing, deneyim kazandıkça sezgisel hale gelen kavramlardan biridir. Bir cümleyi hash'leyin, ardından tek bir karakter değiştirin ve çığ etkisini kendiniz gözlemleyin.
- Hash Oluşturma ve Doğrulama — adım adım eğitim
- Hash Oluşturucu — SHA-256, MD5, SHA-512 ve daha fazlasını tarayıcınızda anında hesaplayın
- Hash Tanımlayıcı — bilinmeyen bir hash yapıştırın ve algoritmasını belirleyin
