Hash fonksiyonu nedir?
Bir hash fonksiyonu herhangi bir içeriği — bir cümleyi, bir yazılımı, birkaç gigabaytlık bir yedeklemeyi — sabit uzunlukta bir dizeye, yani parmak izi ya da özet. Üç özellik tanımlar: çıktı, girdi ne olursa olsun her zaman aynı boyutta olur; aynı içerik her zaman aynı parmak izini üretir ve parmak izinden girdiye geri dönmek pratikte imkânsız olmalıdır. Kriptografik bir hash'i CRC32 gibi bir kontrol toplamından ayıran bu üçüncü özelliktir.
Gerçek kullanımda iki amaç öne çıkar. Bütünlüğü doğrulamak : yayıncı dosyanın parmak izini yayımlar, siz yeniden hesaplarsınız; eşitlik indirmenin bozulmadığını kanıtlar. İçerikleri karşılaştırmak : belgelerin kendisini saklamak yerine parmak izlerini saklarsınız — birbirlerine eşitlerse, içeriklerin de eşit olduğu anlamına gelir; doğaları hakkında hiçbir şey açığa vermeden.
Bugün hangi algoritma seçilmeli?
SHA-256 varsayılan yanıttır: önce NSA tarafından standartlaştırılmış, sonra her yerde benimsenmiş, her dilde uygulanmış ve bilinen çakışması yoktur. SHA-512 işlemci 64 bit olduğunda yüksek hacimler için uygundur; bu mimaride genellikle akrabasından daha hızlıdır. SHA-384 daha uzun bir varyantın ötesinde özel bir şey sunmaz. Anahtarla mesaj imzalamak için ise HMAC-SHA-256 referanstır: gizli anahtarı ve hash'i birleştirir; böylece aynı değeri yalnızca anahtarın sahibi üretebilir.
Bunlar MD5 ile SHA-1 hassas olmayan denetimler için hâlâ kullanışlıdır — bir dizin, bir önbellek, mükerrer tespiti — dirençten çok hızın önemli olduğu yerler. CRC32 ise kriptografik bir hash değildir: kazara oluşan bozulmaları tespit eder, ancak kasıtlı bir bozulma saniyeler içinde üretilebilir.
MD5 ve SHA-1 neden kırılmış sayılır?
Çünkü araştırmacılar her ikisi için de aynı parmak izini paylaşan iki farklı belge. MD5 örneği 2004 yılına uzanır; SHA-1 için ise 2017'de SHAttered adıyla gerçek bir çakışma üretildi. Bir çakışma bir imzayı kırmak için yeterlidir: saldırgan belgeyi seçer ve yayıncı yalnızca onu hash'lerse, farklı bir içeriği imzalayan bir belge sunabilir. Sertifikaların, yazılım güncellemelerinin ve paket imzalarının bu algoritmaları terk etmesinin nedeni budur.
Hashlemenin yapmadıkları
Hash'lemek şifrelemek değildir: bir parmak izi tasarım gereği geri dönülemezdir, ancak içeriği okunamaz hâle getirerek korumaz. Hashleme hiçbir şeyi şifrelemez, TLS'in veya bir şifreleme anahtarının yerini tutmaz ve tek başına bir parolayı da korumaz — bunun işi, yavaş olması için tasarlanmış bcrypt, scrypt veya Argon2'dir. Son olarak, iki kez hash'lemek hiçbir şeyi güçlendirmez: algoritmaları zincirlemek, tek başına kırılmamış bir fonksiyonun yettiği yere kırılgan bir katman eklemekten ibarettir.
Şunlar için önerilir
Dağıtımların kontrol toplamını doğrulayan sistem yöneticileri ve BT direktörlükleri, artefaktları mühürleyen veya webhook'ları kimliği doğrulayan geliştiriciler, yedeklemelerin bütünlüğünü denetleyen denetçiler ve uyum ekipleri, belgeleri yaymadan karşılaştıran gazeteciler ve analistler, parmak izi, çakışma ve tuz kavramlarıyla çalışan kriptografi öğrencileri — ve bir içeriği hash'lemek hızlıca ve iz bırakmadan; tamamlayıcılar: parola oluşturucu, Base64 kodlayıcı ve kod çözücü, JWT kod çözücü, regex testeri ile karakter sayacı.