Neden sadece SHA-256 değil?
gibi sıradan bir kriptografik karma, bütünlük için doğru araçtır ama parolaları saklamak için yanlış araçtır ve nedeni tam da onu başka yerlerde iyi kılan özelliktir: hızlıdır. Bir SHA-256 parola karmaları veritabanını çalan bir saldırgan, sıradan donanımda saniyede milyarlarca tahmin deneyebilir, çünkü her tahmin yalnızca tek bir hızlı karmadır. Yaygın parolalar neredeyse anında düşer. Hız, genel amaçlı bir karmanın erdemi, burada bir kusurdur.
Parola saklama, kasıtlı olarak yavaş ve özel donanıma dirençli bir karma gerektirir. Üç yapı taşı bunu işler kılar: tuzlama, ayarlanabilir bir iş faktörü ve bellek sertliği.
Tuzlama: ön hesaplamayı yenmek
Bir tuz (salt), her parola karmasının yanında saklanan ve karmalamaya karıştırılan benzersiz rastgele bir değerdir. Tuz olmadan, aynı parolalar aynı karmaları üretir, böylece bir saldırgan yaygın parola karmalarının dev bir tablosunu bir kez ön hesaplayabilir ("rainbow table") ve her eşleşmeyi anında arayabilir. Parola başına benzersiz bir tuz, o ön hesaplamayı değersiz kılar: saldırgan her karmaya tek tek saldırmak zorundadır ve aynı parola her kullanıcı için farklı karmalanır. Modern parola karma fonksiyonları tuzu sizin için üretir ve saklar.
İş faktörü: her tahmini pahalı kılmak
Bir iş faktörü (veya maliyet parametresi), her karmanın ne kadar hesaplama gerektirdiğini denetler. Onu öyle ayarlayın ki tek bir karma, meşru bir oturum açma için fark edilmeyecek kadar yavaş (birkaç yüz milisaniye) ama ölçekte cezalandırıcı olsun. Bir parametre olduğu için, donanım hızlandıkça yıllar içinde onu yükseltebilir ve tahmin etmenin maliyetini kabaca sabit tutabilirsiniz. Bu, genel amaçlı bir karmanın basitçe sahip olmadığı düğmedir.
Üç standart seçenek
- bcrypt, yapılandırılabilir bir maliyet faktörüyle Blowfish şifresi üzerine kurulu, uzun süredir var olan, iyi anlaşılmış seçenektir. Mevcut olduğu yerde güvenli bir varsayılan.
- scrypt, bellek sertliği ekler: kasıtlı olarak ayarlanabilir miktarda bellek tüketir, bu da GPU'lar ve özel yongalar kullanan saldırganları köreltir, çünkü bunlar hesaplamayı bellekten çok daha ucuza ölçekler.
- Argon2, 2015'te Password Hashing Competition'ı kazandı ve yeni sistemler için güncel öneridir. Bellek, zaman ve paralellik için ayrı düğmelerle bellek serttir; Argon2id varyantı olağan seçimdir.
Bunlardan herhangi biri makul bir seçimdir; temel kural, bunlardan birini kullanmak, asla çıplak bir hızlı karma kullanmamak ve asla kendi şemanızı icat etmemektir.
Çıkarım
Hızın bir özellik olduğu sağlama toplamları ve bütünlük için SHA-256 (Karma aracında) kullanın. Yavaşlığın ve bellek maliyetinin tüm amaç olduğu parolalar için bcrypt, scrypt veya Argon2'ye uzanın. İki iş birbirine benzer ve karşıt araçlar gerektirir.