Hash fonksiyonları açıklandı: dosya bütünlüğünü doğrulama
Hash fonksiyonları aktarım sonrası dosya bütünlüğünü doğrulamak için gereklidir. SHA-256 ve MD5'in dosyaları korumasını öğrenin.
Bir hash fonksiyonu herhangi bir girdiyi alır ve sabit boyutlu bir çıktı üretir — SHA-256, girdi bir tweet de olsa 10 GB'lık bir video da olsa her zaman tam olarak 256 bit (32 bayt) döndürür. Girdinin tek bir bitini değiştirdiğinizde çıktı bitlerinin yaklaşık yarısı değişir. Bu tek yönlü ve deterministik özellik, hash'leri dosya bütünlüğü doğrulamasının varsayılan aracı haline getirir: göndermeden önce SHA-256(dosya) hesaplayın, aldıktan sonra tekrar hesaplayın; hash'ler eşleşirse dosya hasarsız gelmiş demektir. Linux dağıtımlarının ISO indirmelerini doğrulaması, Git'in commit'leri tanımlaması ve HexaTransfer gibi hizmetlerin çok gigabaytlık yüklemelerin bozulmadan tamamlandığını onaylaması bu şekilde çalışır.
Hash fonksiyonunun sunduğu garantiler
Üç özellik kriptografik bir hash fonksiyonunu tanımlar:
- Deterministik. Aynı girdi her zaman aynı çıktıyı üretir.
SHA-256("hello")her zaman2cf24dba5fb0a30e...değerini verir. - Ön-görüntü direnci. Bir hash verildiğinde, onu üreten bir girdiyi verimli biçimde bulamazsınız.
- Çakışma direnci. Aynı hash'i üreten iki farklı girdiyi verimli biçimde bulamazsınız.
İki kullanışlı davranış daha:
- Çığ etkisi. Bir girdi bitini değiştirmek çıktı bitlerinin yaklaşık %50'sini değiştirir. Hash'leri arama için işe yaramaz, ancak parmak izi almak için mükemmeldir.
- Sabit çıktı boyutu. SHA-256 32 bayt, SHA-512 64 bayt, BLAKE2b 64 bayttır; girdi boyutundan bağımsız olarak.
Hash'ler şifreleme değildir. Tek yönlüdür — çıktıdan girdiyi kurtaramazsınız. Zaten amacı da budur.
SHA ailesi
NIST tarafından FIPS 180-4 ve FIPS 202'de standartlaştırılan Güvenli Hash Algoritması ailesi:
- SHA-1 — 160 bit, Google'ın 2017'deki SHAttered saldırısıyla kırıldı. Güvenlik amacıyla kullanmayın.
- SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512). Modern sistemlerin çalışma atı. SHA-256 baskın konumdadır.
- SHA-3 (Keccak). Farklı yapı (sünger, Merkle-Damgård değil), SHA-2 zayıflıklarına karşı bir güvence olarak 2015'te standartlaştırıldı; bu zayıflıklar henüz ortaya çıkmadı.
SHA-256; TLS sertifikalarının imzaladığı, Bitcoin madenciliğinin kullandığı, Git'in benimsediği (SHA-256'ya geçiş planı hâlâ devam ediyor) ve dosya aktarım hizmetlerinin bütünlük kontrolleri için hesapladığı algoritmadır. SHA uzantılı modern CPU'larda çekirdek başına saniyede 2–4 GB verim elde edilir.
MD5 ve SHA-1 güvenlik açısından neden geçerliliğini yitirdi
MD5 (1991), 128 bit hash üretir ve 2004'te çakışmalar gösterilene kadar standart konumundaydı. 2012'de Flame kötü amaçlı yazılımı, bir MD5 çakışma saldırısı kullanarak Microsoft kod imzalama sertifikalarını taklit etti. Artık bir dizüstü bilgisayarda saniyeler içinde MD5 çakışmaları üretebilirsiniz.
SHA-1 daha uzun süre dayanıdı; ancak Google'ın 2017'deki SHAttered saldırısıyla yıkıldı. Bu saldırı 110 GPU-yıllık hesaplama sonucunda aynı SHA-1 hash'ine sahip iki PDF üretti — bulut GPU'larında artık 100.000 dolardan azına yeniden üretilebilir.
Her ikisi de güvenlik dışı kullanımlar için hâlâ uygundur: yanlışlıkla oluşan bozulmaları tespit etme, depolama tekilleştirme, önbellek anahtarı parmak izi alma. Dijital imzalar, parola doğrulama veya bir saldırganın eşleşmeyi taklit etmekten yarar sağlayacağı herhangi bir kullanım için uygun değildir.
BLAKE2 ve BLAKE3: hız ile güvenlik bir arada
BLAKE2 (2012) ve BLAKE3 (2020), SHA-256'nın 2–10 katı hızında SHA-3 düzeyinde güvenlik sunar. BLAKE3 tek iş parçacıklı yaklaşık 6 GB/s hıza ulaşır ve çekirdekler arasında doğrusal biçimde paralelleşir — 16 çekirdekli bir makine 100+ GB/s değerine erişebilir.
Benimseme hızlanıyor: WireGuard kimlik doğrulama için BLAKE2s, Zcash ise BLAKE2b kullanıyor; b3sum geliştirici araçlarında sha256sum'ın yerini almaya başladı. Çok gigabaytlık yüklemeleri işleyen dosya aktarım hizmetleri, hash hesaplamanın darboğaz haline gelmesini önlemek için BLAKE3'e giderek daha fazla yöneliyor.
Tarayıcılar BLAKE3'ü henüz Web Crypto API üzerinden sunmuyor; bu nedenle JavaScript uygulamaları tarayıcıda yaklaşık 500 MB/s hızında WASM ile derlenmiş referans koda dayanıyor.
Dosya aktarım iş akışlarında hash kullanımı
Hash'lerin gerçek değer kattığı alanlar:
- Yükleme sonrası bütünlük kontrolü. İstemci yükleme sırasında SHA-256 hesaplar; sunucu varışta hesaplar; uyuşmazlıklar yeniden yüklemeyi tetikler. S3, pasif bozulmaya karşı çakışma direncinden daha önemli hız için MD5 kullanır.
- Parçalı yükleme doğrulaması. Büyük dosyalar 4 MB veya 5 MB'lık parçalara bölünür; her parça bir hash alır ve bir hash ağacı (Merkle ağacı) tüm dosya için tek bir kök hash üretir.
- Tekilleştirme. İki kullanıcı aynı dosyayı yüklerse hash'ler eşleşir, depolama tek kopya saklar. Dropbox'ın blok düzeyinde tekilleştirmesi ve CDN önbelleği bu yöntemi kullanır.
- İndirme doğrulaması. Bazı hizmetler alıcıların doğrulama yapabilmesi için SHA-256'yı indirme sayfasında gösterir.
- Sürüm tanımlama. Git, commit kimliklerini SHA-1 (SHA-256'ya geçiliyor) ile kullanır — bir dosyanın içeriği onun kimliğini belirler.
HMAC uzantısı
Düz hash'ler bütünlüğü doğrulayabilir ama özgünlüğü doğrulayamaz — herkes SHA-256(dosya) hesaplayabilir. Gizli bir anahtar eklemek hash'i Mesaj Kimlik Doğrulama Kodu'na (MAC) dönüştürür: yalnızca anahtara sahip kişi MAC üretebilir veya doğrulayabilir.
HMAC (RFC 2104) standart yapıdır: HMAC(anahtar, mesaj) = SHA-256(anahtar' ⊕ opad || SHA-256(anahtar' ⊕ ipad || mesaj)). TLS 1.2'de, HS256 ile imzalanmış JWT'lerde, AWS istek imzalamada ve pek çok oturum çerezi düzeninde kullanılır.
Dosya aktarımında HMAC, AES-GCM'nin kimlik doğrulama etiketinde görünür (GHASH kullanır, ancak aynı işlevi görür) ve bazı hizmetlerin API istek imzalamasında yer alır.
Merkle ağaçları: ölçekte hash işlemi
Çok büyük dosyalar veya dosya koleksiyonları için her seferinde tümünü hashlemek verimsizdir. Bir Merkle ağacı hash'leri ikili ağaç biçiminde düzenler: yapraklar parça hash'leridir, iç düğümler çocuklarının hash'leridir ve kök hash tüm veri kümesini temsil eder.
Avantajları:
- Verimli güncellemeler. Bir parçayı değiştirmek yalnızca log(n) düğümün yeniden hesaplanmasını gerektirir.
- Dahil olma kanıtı. Yalnızca log(n) kardeş hash ile belirli bir parçanın kökün parçası olduğunu kanıtlayabilirsiniz.
- Paralel hesaplama. Dallar bağımsız biçimde hash işlemi yapar.
BitTorrent (v2 sonrası), IPFS içerik adresleme, Git'in ağaç nesneleri, sertifika şeffaflık günlükleri ve blok zinciri işlem kökleri bu yöntemi kullanır. Dosya aktarım hizmetleri, kısmi yüklemelerin orijinale karşı doğrulanması gereken sürdürülebilir yüklemelerde Merkle ağaçlarına başvurur.
Parolalar ve hash'ler
Hash'lerin önemli bir uygulama alanı daha var: parolaları güvenle depolanabilir değerlere dönüştürmek. Basit SHA-256(parola) yetmez — GPU çiftlikleri saniyede milyarlarca SHA-256 hesaplar, yaygın bir parola anında çözülür.
Parola özgü hash'ler hesaplama maliyeti ekler:
- PBKDF2-HMAC-SHA-256 600.000 iterasyon ile (OWASP 2023).
- bcrypt maliyet faktörü 12 ile (hash başına yaklaşık 250 ms).
- scrypt GPU'lara karşı direnç için bellek zorlamasıyla.
- Argon2id — güncel en iyi uygulama, bellek-zor ve paralel-dirençli.
Amaç hash'in kendisindeki güvenlik değil; zayıf parolalar dışında çevrimdışı kaba kuvvet saldırısını pratik olmaktan çıkarmak için her tahmin girişimini yeterince pahalı hale getirmektir.
İndirilen bir dosyayı elle doğrulama
Önem verdiğiniz herhangi bir dosya komut satırı araçlarıyla doğrulanabilir. macOS veya Linux'ta:
shasum -a 256 ubuntu-24.04.iso
Windows PowerShell'de:
Get-FileHash ubuntu-24.04.iso -Algorithm SHA256
Çıktıyı ubuntu.com'da yayınlanan hash ile karşılaştırın. Eşleşirlerse dosya hasarsız indirilmiş ve Canonical'ın imzaladığıyla örtüşüyor demektir. Farklılarsa ya indirme bozulmuş ya da dosya değiştirilmiştir.
Maksimum güven için GPG ve Canonical'ın imzalama anahtarını kullanarak hash dosyasının imzasını doğrulayın. Çok adımlı zincir — imzalı hash dosyası → dosya hash'i → dosya — Linux dağıtımlarının on yıllardır güveni korumasının yoludur.
Aktarım hizmetinin bütünlük yönetimini sorgulamak
Herhangi bir dosya aktarım sağlayıcısına sormaya değer dört soru:
- Yüklemeleri doğrulamak için hangi hash algoritmasını kullanıyorsunuz? (SHA-256 veya BLAKE3 uygundur; MD5 yalnızca bozulma kontrolleri için kabul edilebilir; yanıtsızlık sarı bayraktır.)
- Hash'i alıcıya gösteriyor musunuz? (Her hizmet göstermez, ancak değerli bir özellik.)
- Parçalı yüklemeler için Merkle ağacı doğrulaması yapıyor musunuz?
- Uç noktalar arasında hash karşılaştırması yapılabiliyor mu?
SwissTransfer, Tresorit, Proton Drive ve HexaTransfer, aktarım sırasında SHA-256 hesaplar ve varışta doğrular. Bütünlük hataları tüm aktarımı başarısız kılmak yerine etkilenen parçaların otomatik yeniden yüklenmesini tetikler.
Pratikte uygulamak
Bir sonraki hassas aktarımınız için: yüklemeden önce shasum -a 256 dosya.pdf hesaplayın, hash'i kaydedin ve alıcının indirme sonrasında aynısını yapmasını isteyin. Eşleşen hash'ler bayt bayt bütünlüğü kanıtlar. Bozulmayı, kurcalamayı ve zaman zaman yanlış yapılandırılmış CDN'yi yakalayan 30 saniyelik bir işlemdir.
hexatransfer.com'da deneyin — ücretsiz, hesap gerekmez, 10 GB'a kadar.
Uçtan uca şifreleme ile büyük dosyaları güvenle gönderin
Uçtan uca şifreleme ile 10 GB'a kadar dosya ücretsiz aktarın. Hesap gerekmez. Dosyalarınız yüklenmeden önce tarayıcınızda şifrelenir — başka kimse okuyamaz.
Dosya gönder