Her zaman bir şifre karma algoritması kullanın: Argon2 , scrypt , bcrypt veya PBKDF2 .
Argon2 , 2015 şifre karma yarışmasını kazandı. Scrypt , bcrypt ve PBKDF2 şu anda daha az tercih edilen, ancak yine de temelde sağlam olan eski algoritmalardır, bu nedenle platformunuz Argon2'yi henüz desteklemiyorsa, şimdilik başka bir algoritma kullanmak iyidir.
Parolayı asla doğrudan veritabanında saklamayın. Şifrelemeyi de yapmayın: aksi takdirde, siteniz ihlal edilirse, saldırgan şifre çözme anahtarını alır ve böylece tüm şifreleri alabilir. Şifreler karma olmalıdır ZORUNLU .
Bir şifre karma bir karma tablo karma veya şifreleme karması farklı özelliklere sahiptir. Parola üzerinde asla MD5, SHA-256 veya SHA-512 gibi sıradan bir şifreleme karması kullanmayın. Parola karma algoritması benzersiz bir tuz kullanır (başka herhangi bir kullanıcı veya başka birinin veritabanında kullanılmaz). Tuz, saldırganların sadece ortak parolaların karmalarını önceden hesaplayamaması için gereklidir: bir tuzla, her hesap için hesaplamayı yeniden başlatmaları gerekir. Parola karma algoritması özünde yavaştır - karşılayabildiğiniz kadar yavaştır. Yavaşlık saldırganı sizden çok daha fazla incitir çünkü saldırganın birçok farklı parola denemesi gerekir. Daha fazla bilgi için bkz . Parolaları güvenli bir şekilde sağlama .
Parola karması dört bilgiyi kodlar:
- Hangi algoritmanın kullanıldığının bir göstergesi. Bu çeviklik için gereklidir : kriptografik öneriler zamanla değişir. Yeni bir algoritmaya geçiş yapabilmeniz gerekir.
- Zorluk veya sertlik göstergesi. Bu değer ne kadar yüksek olursa, karma değerini hesaplamak için o kadar fazla hesaplama gerekir. Bu, parola değiştirme işlevinde sabit veya genel bir yapılandırma değeri olmalıdır, ancak bilgisayarlar hızlandıkça zaman içinde artmalıdır, bu nedenle her bir hesap için değeri hatırlamanız gerekir. Bazı algoritmaların tek bir sayısal değeri vardır, diğerlerinin orada daha fazla parametresi vardır (örneğin CPU kullanımını ve RAM kullanımını ayrı ayrı ayarlamak için).
- Tuz. Tuzun küresel olarak benzersiz olması gerektiğinden, her hesap için saklanması gerekir. Tuz, her şifre değişikliğinde rastgele oluşturulmalıdır.
- Karma uygun, yani karma algoritmasındaki matematiksel hesaplamanın çıktısı.
Birçok kütüphane, bu bilgiyi uygun bir şekilde tek bir dize olarak paketleyen bir çift işlevi içerir: algoritma göstergesini, sertlik göstergesini ve parolayı alan, rastgele bir tuz üreten ve tam karma dizesini döndüren; ve parola ve tam sağlama dizesini girdi olarak alan ve parolanın doğru olup olmadığını gösteren bir boole döndüren bir parola. Evrensel bir standart yoktur, ancak ortak bir kodlama
$ algorithm $ parametreleri $ salt $ çıktı
nerede algorithm
bir sayı veya algoritmanın seçimi deşifre eden kısa alfanümerik dizedir parameters
yazdırılabilir dize ve salt
ve output
sonlandırma olmadan Base64 kodlanıyor =
.
Tuz ve çıktı için 16 bayt yeterlidir. (Örneğin Argon2 için önerilere bakın .) Base64 ile kodlanmıştır, her biri 21 karakterdir. Diğer iki bölüm algoritmaya ve parametrelere bağlıdır, ancak 20-40 karakter tipiktir. Bu , alanı daha sonra büyütmenin zor olacağını düşünüyorsanız, bir güvenlik marjı eklemeniz gereken toplam yaklaşık 82 ASCII karakteri ( CHAR(82)
ve Unicode'a gerek yoktur).
Karmayı ikili biçimde kodlarsanız, algoritma için 1 bayta, sertlik için 1–4 bayta (bazı parametrelerin kodunu sabit olarak kodlarsanız) ve tuz ve çıktı için her biri 16 bayta kadar alabilirsiniz. , toplam 37 bayt için. En az birkaç yedek bayta sahip olmak için 40 bayt ( BINARY(40)
) deyin . Bunların yazdırılabilir karakterler değil, 8 bit bayt olduğunu, özellikle alanın boş bayt içerebileceğini unutmayın.
Karma uzunluğunun parola uzunluğuyla tamamen alakasız olduğunu unutmayın.