Hash Fonksiyonu (Özet) Nedir?
Kısa tanım
Hash fonksiyonu, herhangi uzunluktaki bir veriyi sabit uzunlukta bir değere, yani özete (digest) dönüştüren tek yönlü bir fonksiyondur. Aynı girdi her zaman aynı özeti verir, girdideki en küçük değişiklik ise özeti tamamen değiştirir. SHA-256 gibi kriptografik hash fonksiyonlarında özetten girdiyi bulmak ve aynı özeti veren iki farklı girdi üretmek pratikte imkânsızdır; bu yüzden bütünlük kontrolünde ve dijital imzalarda kullanılırlar.
Diğer adları: hash, Hash Function, özet fonksiyonu, özetleme fonksiyonu, kriptografik özet fonksiyonu

Parmak izi gibi çalışır
Bir hash fonksiyonu, girdiyi ne kadar büyük olursa olsun aynı uzunlukta bir çıktıya indirger. SHA-256 için bu çıktı 256 bittir ve genellikle 64 karakterlik onaltılık bir metin olarak yazılır. Birkaç baytlık bir kelime de, birkaç gigabaytlık bir video da aynı uzunlukta özet üretir. Aşağıdaki örnekte tek bir harfin büyük yazılması bile özeti baştan sona değiştiriyor:
$ printf 'merhaba' | sha256sum
4c6bcdd55f3153e1939669ab1ec039e4059174dc25abdfcb2f58868849b4d61b
$ printf 'Merhaba' | sha256sum
7fdc9f4717c5fe66df286c700fab969b4d6209d03aa84624c5f8f58c17c9c058Bu “çığ etkisi”, özetin girdinin parmak izi gibi kullanılabilmesini sağlar: iki dosyanın özeti aynıysa içerikleri de pratikte aynıdır; özet farklıysa en az bir bit değişmiştir.
Kriptografik hash'ten beklenen üç özellik
NIST'in onayladığı hash fonksiyonlarından beklenen özellikler şunlardır:
- Ön görüntü direnci (preimage resistance): Özeti bilen biri, o özeti üreten girdiyi bulamamalıdır. Fonksiyonun “tek yönlü” olması budur.
- İkinci ön görüntü direnci: Bilinen bir girdiyle aynı özeti veren başka bir girdi bulunamamalıdır.
- Çakışma direnci (collision resistance): Aynı özeti veren herhangi iki farklı girdi bulmak hesaplama açısından mümkün olmamalıdır.
Günümüzde onaylı aileler SHA-2 (SHA-256, SHA-384, SHA-512 vb.) ve SHA-3'tür. MD5'te ve SHA-1'de pratik çakışmalar üretilebildiği için ikisi de güvenlik amaçlı kullanımdan çıkarıldı; NIST SHA-1'i 2011'de kullanımdan kaldırdı (deprecated) ve 2022'de kalan sınırlı kullanımlarından da geçiş planını yayımladı. Eski sistemlerde hâlâ karşılaşılabilir, ama yeni bir tasarımda yeri yoktur.
Web'de nerelerde karşınıza çıkar?
- Dosya bütünlüğü: İndirme sayfalarındaki SHA-256 değerleri, indirdiğiniz dosyanın bozulmadığını veya değiştirilmediğini kontrol etmek içindir.
- Subresource Integrity (SRI): Bir betiği CDN'den yüklerken
integrity="sha384-…"özniteliği verirseniz, tarayıcı dosyanın özetini hesaplar ve eşleşmezse betiği çalıştırmaz. SRI, SHA-256, SHA-384 ve SHA-512'yi destekler. - Önbellek ve sürümleme: Derleme araçları dosya adlarına içerik özetini ekler (
app.3f9a1c.js); içerik değişince ad da değişir, böylece uzun Cache-Control süreleri güvenle kullanılabilir. ETag değerleri de çoğu zaman içerik özetinden üretilir. - İmza ve mesaj doğrulama: Dijital imzalar belgenin kendisini değil özetini imzalar. HMAC ise bir hash fonksiyonunu gizli bir anahtarla birleştirerek webhook ve API isteklerinin kimden geldiğini doğrular.
- İçerik adresleme: Git, commit'leri ve dosyaları içeriklerinin özetiyle adresler; aynı içerik her zaman aynı kimliği alır.
Şifreleme değil, parola saklamak için de tek başına yetmez
Hash, şifreleme ile sık karıştırılır ama ikisinin amacı farklıdır: şifrelenen veri anahtarla geri çözülür, özetlenen veri geri elde edilemez. “Özeti çözmek” diye bir işlem yoktur; yapılabilen tek şey olası girdileri tek tek deneyip aynı özeti arayan tahmin saldırılarıdır.
Bu son nokta parolalar için kritiktir. SHA-256 bilerek çok hızlı tasarlanmıştır; modern donanım saniyede milyarlarca özet hesaplayabilir. Hızlı bir hash ile saklanan parolalar, veritabanı sızdığında kısa sürede tahmin edilebilir. Parolalar için bilerek yavaş ve tuzlu çalışan özel algoritmalar kullanılır; bu konu parola özetleme maddesinde ayrıca anlatılıyor. Benzer şekilde, hash tablolarında kullanılan CRC32 veya xxHash gibi kriptografik olmayan hash'ler hız için tasarlanmıştır ve güvenlik amacıyla kullanılmamalıdır.

