Checksum Nedir? MD5, SHA-1, SHA-256 Açıklaması
Checksum, bir dosyanın değiştirilmediğini veya bozulmadığını doğrulamanızı sağlayan kısa bir parmak izidir. Hangi hash algoritmasının kullanılacağını ve MD5'in nerede yetersiz kaldığını anlamak sizi yaygın güvenlik hatalarından kurtarır.
Checksum Nedir?
Checksum (denetim toplamı), bir veri parçasının bir hash fonksiyonu üzerinden geçirilerek elde edilen sabit uzunlukta bir dizidir. Checksum bir parmak izi gibi çalışır: orijinal verinin tek bir biti bile değişse, checksum tamamen değişir. Bu, checksum'ları iki şey için yararlı kılar:
- Bütünlük doğrulaması — bu dosya bozulmadan veya kurcalanmadan ulaştı mı?
- Kimlik — bu dosya (veya veri parçası) başka bir kopyayla aynı mı?
Bir resmi siteden yazılım indirdiğinizde, indirme sayfası genellikle bir MD5 veya SHA-256 hash gösterir. İndirmeden sonra yerel dosyanızın hash'ini hesaplar ve karşılaştırırsınız. Eğer eşleşiyorlarsa, dosya sağlamdır.
Hash Fonksiyonu Nasıl Çalışır
Kriptografik bir hash fonksiyonu herhangi bir uzunlukta girdi alır ve sabit uzunlukta bir özet (digest) üretir. İyi bir hash fonksiyonunu dört özellik tanımlar:
- Deterministik — aynı girdi her zaman aynı çıktıyı üretir
- Tek yönlü — bir hash'i orijinal girdiye geri döndüremezsiniz (makul bir süre içinde)
- Avalanche etkisi (Çığ etkisi) — girişteki tek bir karakterin değiştirilmesi, çıktı bitlerinin yaklaşık yarısını değiştirir
- Çarpışma dirençli — aynı hash'i üreten iki farklı girdiyi bulmak hesaplama açısından imkansız olmalıdır
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824SHA-256("Hello") = 185f8db32921bd46d35e3a1a4e9a9b9c6a7e6a7d2d2c4e9d... (tamamen farklı)
MD5 — Hızlı, Tanıdık ve Güvenlik İçin Bozuk
MD5 (Message Digest Algorithm 5), 128 bit (32 karakter hex) uzunluğunda bir özet üretir. 1991 yılında tasarlanmış ve yaklaşık iki dekada internetteki varsayılan checksum algoritması haline gelmiştir.
MD5'in hala kabul edilebilir olduğu durumlar:
- Güvenlik dışı bütünlük kontrolleri — büyük bir dosya transferinin yolda bozulmadığını doğrulamak
- Tekilleştirme (Deduplication) — iki dosyanın özdeş olup olmadığını kontrol etmek (bayt bazlı karşılaştırmadan önce hızlı bir ön kontrol olarak)
- Çarpışma saldırılarının endişe yaratmadığı cache anahtarları ve ETags
MD5'in kabul edilmediği durumlar:
- Şifre depolama — MD5 son derece hızlıdır, bu da GPU üzerinden yapılan kaba kuvvet (brute-force) saldırılarını kolaylaştırır. Tüketici donanımlarıyla saniyede milyarlarca MD5 hash'i elde edilebilir.
- Dijital imzalar — MD5 çarpışma saldırıları uygulamada kanıtlanmıştır. Aynı MD5 hash'ine sahip olacak şekilde iki farklı dosya oluşturulabilir.
- Sertifika parmak izleri — aynı çarpışma sorunu geçerlidir.
md5($password) bulursanız, bunu PHP'de password_hash() veya herhangi bir dilde bcrypt/Argon2 ile değiştirin. MD5 bir şifre hashleme algoritması değildir — asla yavaş olacak şekilde tasarlanmamıştır, oysa şifre hashlemede güvenlik sağlayan şey yavaştır.
SHA-1 — Kullanımdan Kaldırıldı
SHA-1, 160 bit (40 karakter hex) uzunluğunda bir özet üretir. 1990'ların sonunda önerilen algoritma olarak MD5'in yerini almış ve SSL/TLS sertifikaları, versiyon kontrol sistemleri ve dosya bütünlük kontrollerinde yaygın olarak kullanılmıştır.
2017'de Google'ın Project Zero ekibi, yaklaşık 6.500 CPU yılı değerinde hesaplama gerektiren ilk pratik SHA-1 çarpışmasını ( "SHAttered" saldırısı) başarıyla gerçekleştirdi. Büyük tarayıcılar ve sertifika makamları 2017'de SHA-1 sertifikalarını kabul etmeyi durdurdu. Git hala commit hash'leri için dahili olarak SHA-1 kullanıyor, ancak isteğe bağlı bir alternatif olarak SHA-256'ya geçiş sürecindeler.
Yeni uygulamalar için SHA-1 kullanmayın. Bunun yerine SHA-256 veya SHA-512 kullanın.
SHA-256 — Güncel Standart
SHA-256, NSA tarafından tasarlanan ve 2001'de yayınlanan SHA-2 ailesinin bir parçasıdır. 256 bit (64 karakter hex) uzunluğunda bir özet üretir. Bugün itibarıyla, SHA-256'ya karşı pratik bir çarpışma saldırısı bulunmamaktadır.
SHA-256 şunlar için kullanın:
- Dosya bütünlük doğrulaması (yazılım indirmeleri, yedekler)
- Dijital imzalar (TLS sertifikaları, kod imzalama)
- HMAC tabanlı kimlik doğrulama tokenları (HMAC-SHA256)
- Blockchain ve kripto para (Bitcoin çift SHA-256 kullanır)
- SHA-256 modundaki Git commit hash'leri
- HS256 veya RS256 kullanılırken JWT (JSON Web Token) imzaları
SHA-256, güvenli bir hash ihtiyacı duyan hemen her uygulama için doğru varsayılan değerdir. Şüpheye düştüğünüzde SHA-256 kullanın.
SHA-512 — Daha Fazlasına İhtiyaç Duyduğunuzda
SHA-512, 512 bit (128 karakter hex) uzunluğunda bir özet üretir. Aynı SHA-2 ailesinin parçasıdır ve eşit derecede güvenlidir. Temel pratik farklar:
- 64 bitlik işlemcilerde, SHA-512 aslında SHA-256'dan daha hızlı olabilir çünkü algoritma 64 bit sözcük boyutları için optimize edilmiştir
- 32 bitli sistemlerde ve donanımlarda, SHA-256 daha hızlıdır
- SHA-512 daha büyük bir çıktıya sahiptir, bu da daha uzun depolama ve iletim anlamına gelir
Uygulamanın daha büyük bir özet gerektirdiği veya SHA-512'nin performans avantajına sahip olduğu donanımlar üzerinde olduğunuzda SHA-512 kullanın. Çoğu web uygulaması için SHA-256 yeterlidir.
Şifre Hashleme Hakkında Bir Not
Yukarıdaki algoritmelerin hiçbiri doğrudan şifre depolama için kullanılmamalıdır. MD5, SHA-1, SHA-256 ve SHA-512'nin tamamı hızlı olacak şekilde tasarlanmıştır — ve hızlı olmak şifreler için tamamen yanlıştır.
Şifre hashleme bilinçli olarak yavaş olmalıdır, böylece çalınan bir veritabanı hızlıca kırılamaz. Özel olarak geliştirilmiş şifre hashleme algoritmalarını kullanın:
- bcrypt — 20 yılı aşkın süredir standarttır, hemen her dilde desteklenir
- Argon2 (özellikle Argon2id) — Password Hashing Yarışması'nın (2015) kazananı, yeni uygulamalar için önerilir
- scrypt — bellek yoğunluklu (memory-hard), yine güçlü bir seçimdir
PHP'de: password_hash($password, PASSWORD_ARGON2ID). Node.js'de: bcryptjs veya argon2 paketini kullanın. Bunlar salt üretimi ve çalışma faktörü ayarlamasını otomatik olarak halleder.
Bir Dosyanın Checksum'ını Nasıl Doğrularsınız
Yazılım indirdiğinizde ve site bir SHA-256 hash sağladığında:
shasum -a 256 downloaded-file.zip
# çıktıyı resmi hash ile karşılaştırın
Windows (PowerShell) üzerinde:
Get-FileHash downloaded-file.zip -Algorithm SHA256
Alternatif olarak, dosya içeriğini veya metni yapıştırıp doğrudan tarayıcınızda MD5, SHA-1, SHA-256 veya SHA-512 hash'lerini hesaplamak için Hash Generator aracımızı kullanın — hiçbir veri sunucuya gönderilmez.
MD5, SHA-256 ve Daha Fazlasını Oluşturun
Tarayıcınızda metin veya dosya içeriğinden herhangi bir hash'i (MD5, SHA-1, SHA-256, SHA-512) hesaplayın — yükleme yok, sunucu yok.