Hash Fonksiyonları Açıklaması
Bir hash fonksiyonu herhangi bir girdiyi kısa, sabit uzunlukta bir parmak izine dönüştürür. Bu rehber MD5, SHA-1 ve SHA-256'nın ne işe yaradığını, nerede yetersiz kaldığını ve bir dosyanın yayımlanmış bir sağlama toplamıyla nasıl karşılaştırılacağını açıklar.
Hash Nedir?
Kriptografik bir hash fonksiyonu herhangi bir boyuttaki veriyi okur ve sabit uzunlukta bir özet üretir: MD5 için 128 bit, SHA-1 için 160 bit ve SHA-256 için 256 bit; bu özet genellikle onaltılık metin olarak gösterilir. Aynı girdi her seferinde aynı özeti verir ve girdinin tek bir bitini değiştirmek bile çok farklı bir özet üretir. Hash tek yönlüdür: girdileri tahmin edip sonuçları karşılaştırmak dışında, girdiyi özetten geri elde edemezsiniz.
Bu rehber genel bilgi verir. Güvenlik kararları için kuruluşunuzun veya birlikte çalıştığınız hizmetin gereksinimlerine uyun.
Sağlama Toplamları ve Bütünlük
Günlük hayattaki en yaygın kullanım, bir dosyanın eksiksiz ulaştığını kontrol etmektir. Bir indirme sayfası dosyanın yanında bir SHA-256 değeri yayımlayabilir. İndirdikten sonra kendi kopyanızın hash'ini hesaplar ve yayımlanan değerle karşılaştırırsınız. Değerler eşleşirse dosya büyük olasılıkla yayıncının hash'ini aldığı dosyayla aynıdır; farklıysa indirme bozulmuştur veya dosya farklı bir sürümdür.
Bir sağlama toplamı, yalnızca yayımlanan değerin kendisine güvenilebiliyorsa işe yarar. Bir saldırgan aynı sayfadaki hem dosyayı hem de sağlama toplamını değiştirebiliyorsa eşleşen bir hash pek bir şey kanıtlamaz. Dijital imzalar bu sorunu çözmeye yöneliktir.
MD5 ve SHA-1 Neden Güvenlik İçin Uygun Değil?
Güvenli bir hash, aynı özete sahip iki farklı girdi (çakışma) bulmayı pratikte imkânsız kılmalıdır. Hem MD5 hem de SHA-1 için uygulanabilir çakışma saldırıları yayımlanmıştır; yani bir saldırgan aynı hash'i paylaşan iki farklı dosya hazırlayabilir. Bu nedenle artık dijital imzalar, sertifikalar veya diğer güvenlik kullanımları için uygun kabul edilmezler.
MD5 ve SHA-1 kazara oluşan bozulmaları hâlâ tespit edebilir ve bazı eski sistemler bunları yayımlar. Yeni işler için genellikle SHA-256 veya SHA-2 ailesinin başka bir üyesi (SHA-384, SHA-512) tercih edilir.
| Algoritma | Özet uzunluğu | Güvenlik durumu |
|---|---|---|
| MD5 | 128 bit (32 hex karakter) | Çakışmalara karşı kırılmış; yalnızca eski tip sağlama toplamları |
| SHA-1 | 160 bit (40 hex karakter) | Çakışmalara karşı kırılmış; eski sistemlerde kullanım |
| SHA-256 | 256 bit (64 hex karakter) | Yaygın olarak kullanılır ve önerilir |
| SHA-384 / SHA-512 | 384 / 512 bit | Yaygın olarak kullanılır ve önerilir |
Hash'leme Şifreleme Değildir, Parolalar Daha Fazlasını Gerektirir
Şifreleme doğru anahtarla geri çevrilebilir; hash'leme ise geri çevrilmek üzere tasarlanmamıştır. Yine de bir hash kısa veya tahmin edilebilir girdileri gizlemez: herkes yaygın sözcüklerin veya telefon numaralarının hash'ini alıp eşleşme arayabilir.
Bu yüzden MD5 veya SHA-256 gibi hızlı hash'ler tek başına parola saklamak için uygun değildir. Hızlı olacak şekilde tasarlanmışlardır; bu da bir saldırganın çok sayıda tahmini hızla denemesine olanak tanır. Parola saklamada Argon2, scrypt veya bcrypt gibi bu amaçla geliştirilmiş, yavaş ve tuzlanmış (salted) algoritmalar kullanılır. Bir oturum açma sistemi geliştiriyorsanız genel amaçlı bir hash yerine bakımı yapılan bir kütüphane ve platformunuz için güncel yönergeleri kullanın.
Mesaj Kimlik Doğrulaması İçin HMAC
Düz bir hash verinin değişip değişmediğini gösterir, ancak herkes onu yeniden hesaplayabilir. HMAC (hash tabanlı mesaj kimlik doğrulama kodu), veriyi gizli bir anahtarla birleştirir; örneğin HMAC-SHA256. Doğru değeri yalnızca anahtarı bilen biri üretebilir; böylece alıcı, bir mesajın anahtar sahibinden geldiğini ve değiştirilmediğini kontrol edebilir. Webhook'lar ve API isteklerinin imzalanması genellikle HMAC kullanır. Anahtarı gizli tutun; ona sahip olan herkes geçerli kodlar oluşturabilir.
Aynı Metin Neden Farklı Bir Hash Verir?
Hash, gördüğünüz metin üzerinden değil, baytlar üzerinden hesaplanır. Şu farklar sonucu değiştirir:
- Satır sonları: Windows CR LF, Linux ve macOS ise LF kullanır.
- Karakter kodlaması: "é" UTF-8'de ve eski kodlamalarda farklı baytlardan oluşur.
- Sondaki bir satır sonu veya boşluk ya da dosyanın başındaki bir bayt sırası işareti (BOM).
- Girdideki büyük ve küçük harfler.
Bir hash eşleşmediğinde önce bunları kontrol edin. Özgün dosyanın hash'ini almak, ondan kopyalanan metnin hash'ini almaktan genellikle daha güvenilirdir. Hex çıktının kendisi büyük/küçük harfe duyarlı değildir: A1B2 ve a1b2 aynı değerdir.
Sık Sorulan Sorular
Bir MD5 veya SHA-256 hash'inin şifresini çözebilir miyim?
Hayır. Hash şifrelenmiş veri değildir. Çevrimiçi "şifre çözme" hizmetleri, yaygın girdilerin önceden hesaplanmış hash'lerinde arama yapar; basit değerlerin hash'lerinin pek koruma sağlamamasının nedeni budur.
Bir indirmeyi doğrulamak için hangi algoritmayı kullanmalıyım?
Yayıncının sağladığını kullanın. Birden fazla seçenek sunuluyorsa SHA-256 veya SHA-512, MD5 veya SHA-1'den daha iyi bir seçimdir.
Hash Oluşturucu dosyamı yükler mi?
LeedyBox Hash Oluşturucu hash'leri tarayıcınızda hesaplar; bu nedenle seçtiğiniz metin veya dosya cihazınızda işlenir.