Veri için bir parmak izi
Bir hash fonksiyonu herhangi bir girdiyi (bir sözcük, bir belge, 4 GB’lık bir video) alır ve onu hash, özet ya da sağlama toplamı denen kısa, sabit uzunlukta bir dizgeye çevirir. Aynı girdi her zaman aynı hash’i verir ve çok küçük bir değişiklik bile tamamen farklı bir hash verir:
| Girdi | SHA-256 hash’i |
hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
Hello | 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 |
hello! | ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b |
Tek bir büyük harf ya da tek bir ünlem işareti sonucun her karakterini değiştirir. Hash oluşturucuda kendin dene.
İyi bir hash fonksiyonunu ne yapar
- Belirlenimci: aynı girdi her bilgisayarda her zaman aynı hash’i üretir.
- Tek yönlü: hash’ten girdiye geri gidemezsin.
- Çakışmaya dayanıklı: aynı hash’e sahip iki farklı girdi bulmak pratikte imkânsız olmalıdır.
- Sağlama toplamları için hızlı hesaplanır; bu yararlıdır ve hızlı hash’lerin parolalar için yanlış olmasının da nedenidir (aşağıda daha fazlası).
Hash şifreleme değildir
Şifreleme iki yönlüdür: anahtarla özgün veriyi geri alırsın. Bir hash’in anahtarı yoktur ve geri çevrilemez. Yalnızca bir şeyin eşleşip eşleşmediğini kontrol etmene olanak tanır. Base64 yine farklıdır: yalnızca bir kodlamadır ve herkes onu çözebilir.
Yaygın algoritmalar
| Algoritma | Uzunluk | Durum |
| MD5 | 128 bit (32 onaltılık karakter) | 2004’ten beri kırık; yalnızca kazara bozulmayı fark etmek için uygun |
| SHA-1 | 160 bit (40 onaltılık karakter) | Kırık: ilk gerçek çakışma 2017’de yayımlandı |
| SHA-256 | 256 bit (64 onaltılık karakter) | Güvenli; bugünün standart seçimi |
| SHA-512 | 512 bit (128 onaltılık karakter) | Güvenli; 64 bitlik bilgisayarlarda çoğu zaman SHA-256’dan hızlı |
hello sözcüğü her birinde şöyledir:
- MD5:
5d41402abc4b2a76b9719d911017c592 - SHA-1:
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d - SHA-256:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
MD5 ve SHA-1 için «kırık» ne demek
MD5 ve SHA-1 için araştırmacılar aynı hash’e sahip iki farklı dosyayı kasıtlı olarak oluşturabilir. Bir saldırgan bunu, zararsız bir dosyayı eşleşen sağlama toplamına sahip kötü amaçlı bir dosyayla değiştirmek ya da imzalı bir belgeyi sahtelemek için kullanabilir. İkisi de geri çevrilebilir anlamında kırık değildir ve rastgele bozulma hash’i yine değiştirir; bu yüzden bir MD5 sağlama toplamı yarıda kesilen bir indirmeyi hâlâ yakalar. Yalnızca kimsenin dosyayı kurcalamadığını kanıtlayamaz.
SHA-256 ve SHA-512, 2001’de yayımlanan SHA-2 ailesine aittir ve onlara karşı bilinen pratik bir saldırı yoktur. 2015’te standartlaştırılan SHA-3, yedek olarak tutulan farklı bir tasarımdır.
Hash’ler nerede kullanılır
- İndirmeleri kontrol etmek: geliştiriciler dosyalarının SHA-256’sını yayımlar; seninki eşleşiyorsa özdeştir. Bkz. sağlama toplamı nasıl doğrulanır.
- Dijital imzalar ve HTTPS sertifikaları: belge ya da sertifika hash’lenir ve hash imzalanır.
- Git: her commit ve dosya hash’iyle tanımlanır. Git uzun süre SHA-1 kullandı ve SHA-256 desteği ekledi.
- Bitcoin ve diğer blok zincirleri: bloklar SHA-256 ile birbirine zincirlenir.
- Yinelenen dosyaları bulmak: aynı SHA-256’ya sahip iki dosya aynı dosyadır.
Hash’ler ve parolalar
Web siteleri parolanı asla saklamamalı, yalnızca onun bir hash’ini saklamalıdır; giriş yaptığında yazdığını hash’leyip karşılaştırırlar. Ama SHA-256 burada yanlış araçtır: o kadar hızlıdır ki sızmış bir veritabanına sahip bir saldırgan saniyede milyarlarca tahmin deneyebilir. Parolalar bcrypt, scrypt ya da Argon2 gibi bu iş için tasarlanmış yavaş, tuzlu hash’leme gerektirir. Tuz, hash’lemeden önce her parolaya eklenen rastgele bir değerdir; böylece aynı parolaya sahip iki kişi farklı hash’ler alır.
Dene
Hash oluşturucu herhangi bir metnin ya da dosyanın MD5, SHA-1, SHA-256, SHA-384 ve SHA-512 değerini tarayıcında aynı anda hesaplar ve onları yayımlanmış bir sağlama toplamıyla karşılaştırabilir.