Hash ne işe yarar
Kriptografik bir hash fonksiyonu, herhangi bir boyuttaki girdiyi sabit uzunlukta bir parmak izine dönüştürür. Aynı girdi her zaman aynı özeti (digest) üretir ve girdinin tek bir bitini değiştirmek tamamen farklı bir özet üretir. Özetten girdiyi yeniden oluşturamazsınız ve modern algoritmalarda aynı özete sahip iki girdiyi pratikte bulamazsınız.
Bu, iki şeyi bayt bayt karşılaştırmadan aynı olup olmadıklarını bilmeniz gereken her durumda hash'leri kullanışlı kılar:
- İndirmeleri doğrulamak. Linux ISO'ları, firmware görüntüleri ve birçok yükleyici, indirme bağlantısının yanında bir SHA-256 yayımlar. Dosyanız aynı değeri veriyorsa sağlam ulaşmıştır.
- Kopyaları tespit etmek. Aynı SHA-256'ya sahip iki fotoğraf veya belge, adları ne olursa olsun aynı dosyadır.
- Önbellek anahtarları ve ETag'ler. Web sunucuları ve derleme araçları, içeriğin değişip değişmediğini anlamak için onu hash'ler.
- API'lerde bütünlük. Webhook'lar, paket kilit dosyaları ve Subresource Integrity öznitelikleri özetlere dayanır.
- Hata ayıklama. Kodunuzun hesapladığı hash'i bir referans değerle karşılaştırmak, hatanın hash'lemede mi yoksa girdide mi olduğunu hızla gösterir.
Beş algoritma yan yana
Araç beşini birden hesaplar, böylece bir sitenin yayımladığı formatla hangisi olursa olsun eşleştirebilirsiniz.
- MD5, 128 bit, 32 onaltılık karakter. 1991'de tasarlandı. 2004'ten beri pratik çakışmalar mümkün olduğundan, bir saldırganın girdi oluşturabileceği yerlerde kullanılmamalıdır. Hızlı kopya kontrolleri ve eski sağlama toplamları için hâlâ yaygındır.
- SHA-1, 160 bit, 40 onaltılık karakter. 2017'deki ilk kamuya açık çakışmadan sonra kullanımdan kaldırıldı. Git tarihsel olarak nesneleri SHA-1 ile tanımladı; hâlâ her yerde olmasının nedeni budur.
- SHA-256, 256 bit, 64 onaltılık karakter. Sağlama toplamları, sertifikalar, paket yöneticileri ve blok zincirleri için güncel varsayılandır.
- SHA-384, 384 bit, 96 onaltılık karakter. SHA-512'nin kısaltılmış bir varyantıdır; genellikle TLS'te ve Subresource Integrity hash'lerinde kullanılır.
- SHA-512, 512 bit, 128 onaltılık karakter. SHA-256 ile aynı ailedendir ancak 64 bitlik dahili işlemler kullanır; bu da onu 64 bitlik işlemcilerde SHA-256'dan hızlı yapabilir.
Seçme şansınız varsa SHA-256 yayımlayın ve kontrol edin. MD5 ve SHA-1 yalnızca kasıtlı değişikliği değil, kazara bozulmayı tespit etmek için kabul edilebilir.
Metin için eşleşen bir hash elde etmek
Özetiniz "aynı" metin için başka birininkinden farklı çıktığında, girdi neredeyse hiçbir zaman gerçekten aynı değildir. Kontrol edilecekler:
- Sondaki satır sonu.
echo hello | sha256sum,hellove ardından gelen bir satır besleme karakterini hash'ler. Buradaki metin kutusu tam olarak yazdığınızı hash'ler; bu yüzden sona yeni bir satır eklemediğiniz sürece sonuçlar farklı olur. Komut satırındaecho -nveyaprintffazladan karakteri önler. - Satır sonları. Windows CR LF, Linux ve macOS LF kullanır. Yapıştırılan çok satırlı bir metin, nereden geldiğine bağlı olarak satır sonlarını değiştirebilir.
- Kodlama. Metin hash'lenmeden önce UTF-8'e dönüştürülür. Latin-1 veya UTF-16 baytlarını hash'leyen bir sistem, düz ASCII dışındaki her şey için farklı bir sonuç alır.
- Görünmez karakterler. Web sayfalarından veya PDF'lerden kopyalanan bölünemez boşluklar ve sıfır genişlikli karakterler ekranda aynı görünür.
- Onaltılık harf büyüklüğü. Özetler küçük harfle gösterilir.
A3F…vea3f…aynı değerdir; büyük/küçük harfe duyarsız karşılaştırın.
Dosyaları hash'lemek ve sağlama toplamlarını doğrulamak
Dosya hash'i… seçilen dosyayı yerel olarak okur ve beş özetin hepsini tam baytlarından hesaplar. Dosya adı ve tarihi sonucu etkilemez, yalnızca içerik etkiler. SHA ailesi tarayıcının yerleşik Web Crypto uygulamasını kullanır; MD5 ise tarayıcılar onu sağlamadığı için küçük bir JavaScript kütüphanesiyle hesaplanır.
Bir indirmeyi doğrulamak için yayıncının sağlama toplamı sayfasını açın, dosyanıza ait satırı bulun ve buradaki ilgili satırla karşılaştırın. İlk ve son altı veya sekiz karakteri karşılaştırmak hızlı bir mantık kontrolüdür; gerçek güvenlik için dizenin tamamını karşılaştırın. Değerler farklıysa, kasıtlı bir değişiklik olduğunu varsaymadan önce dosyayı yeniden indirin; en olası neden yarıda kesilmiş bir indirmedir.
Dosyanın tamamı hash'lemeden önce belleğe yüklenir, bu yüzden çok büyük dosyalar, özellikle telefondaki birkaç gigabaytlık dosyalar, yavaş olabilir veya başarısız olabilir. Hiçbir şey yüklenmez.
Hash'ler ne değildir
Düz bir hash, şifre saklamanın bir yolu değildir. MD5 ve SHA ailesi hızlı olacak şekilde tasarlanmıştır; bu da saldırganların sızdırılmış bir özete karşı saniyede milyarlarca tahmini denemesine olanak tanır. Şifre saklamak için bcrypt, scrypt veya Argon2 gibi tuzlu (salt) ve bilinçli olarak yavaş bir fonksiyon gerekir. Yalnızca güçlü bir gizli değere ihtiyacınız varsa Şifre oluşturucu kullanın.
Hash aynı zamanda şifreleme de değildir. Tek yönlüdür: orijinali geri almak için bir anahtar yoktur.