Toolyard

Hash nedir? MD5, SHA-1 ve SHA-256’nın açıklaması

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:

GirdiSHA-256 hash’i
hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Hello185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
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

AlgoritmaUzunlukDurum
MD5128 bit (32 onaltılık karakter)2004’ten beri kırık; yalnızca kazara bozulmayı fark etmek için uygun
SHA-1160 bit (40 onaltılık karakter)Kırık: ilk gerçek çakışma 2017’de yayımlandı
SHA-256256 bit (64 onaltılık karakter)Güvenli; bugünün standart seçimi
SHA-512512 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.

Bu kılavuzdaki araçlar

Diğer kılavuzlar