it-swarm-tr.com

Parola uzunluğunu kısıtlamaktan kaçınmak için bcrypt uygulamadan önce parolayı önceden karma yapın

İyi uygulama, şifre uzunluğunu gereksiz yere kısıtlamak değildir, böylece uygun şekilde uzun parolalar (6/7 dicewords için belki 35-45 karakter) kullanılabilir. (Bkz. Kullanıcıların uzun parola ayarlama yeteneklerini kısıtlamadan DoS'a karşı korunmak için maksimum 1K önerilen maksimum parola uzunluğum olmalı mı? .)

bcrypt de yaygın olarak önerilir (bkz. örneğin Herhangi bir güvenlik uzmanı parola depolamak için bcrypt'i önerir mi? , http://chargen.matasano.com/chargen/2007/9/7/enough- ile-Gökkuşağı-tablolar-ne-gerek-bilmek-yaklaşık-s.html )

Ayrıca bir tuz kullanılması tavsiye edilir (rastgele ve parola karma ile saklanır) - Bence 32 bit (4 karakter) sıklıkla tavsiye edilir. (Tuz boyutu mantığının "kombinasyon sayısının kullanıcı kaydı sayısından çok daha fazla olması ve Rainbow tablolarını inanılmaz derecede büyük hale getirmesi için yeterli" olduğunu anlıyorum - ikinci bölüm için 16 bit yeterli, ancak olmayabilir birincisi için yeterli.)

Ancak AIUI bcrypt sadece 55 bayt hash eder - şifre için 51 bırakan tuz için 4 karakter.

Sadece bcrypt (sol (şifre, 51)) ve son karakterleri görmezden gelmemiz gerektiğini tahmin ediyorum.

Kullanıcıları şifrelerinde 50 karakterle sınırlamalıyız (neredeyse herkes için yeterli, ancak kesinlikle yeterli değil mi?

Bunun yerine bcrypt (sha256 (tuz + şifre)) gibi bir şey kullanmalı ve en fazla 1K karaktere izin vermeli miyiz? Yoksa sha256 (veya sha512?) Adımının eklenmesi genel güvenliği bir şekilde azaltır mı?

Scrypt veya PBKDF2 benzer uzunluk kısıtlamalarına sahip mi?

(Son soru sadece ilgi için, gerçekten - uzay sertliği/FPGA-direnci ve göreli scrypt yeniliği ve PBKDF2 ile karşılaştırıldığında bcrypt'in GPGPU-direncinin hangi hash'a karar vermede çok daha önemli olduğunu fark ediyorum kullanın.)

65
Misha

Parolayı önceden işlemek için güvenli bir sağlama işlevi kullanmak güvenlidir; bcrypt (SHA-256 (şifre)) bozulursa, parolanın tahmin edildiği veya SHA-256'nın bazı güvenlik özelliklerinin yanlış olduğu kanıtlanabilir. Bu seviyede tuzla uğraşmanıza gerek yoktur; sadece şifreyi hash, sonra sonuç üzerinde bcrypt kullanın (bcrypt zorunlu olarak tuz ile). SHA-256 güvenli bir sağlama işlevi olarak kabul edilir.

Bir tuzun noktası benzersiz olmalıdır - olabildiğince benzersizdir, böylece iki karma parola aynı tuz değerini kullanmaz. 32 bit bunun için biraz düşük; daha uzun bir tuz kullanmalısınız. n tuz bitiniz varsa, yaklaşık 2) 'den daha fazlasını alır almaz çarpışmalarla (aynı tuzu kullanan iki karma şifre) karşılaşacaksınız.n/2 karma şifreler - çok yüksek bir değer olmayan n = 32 ile yaklaşık 65000. 64 bit veya daha fazla tuz kullanmanız daha iyi olur (128 bit kullanın ve bunun için endişelenmeyi bırakabilirsiniz).

39
Thomas Pornin

Bcrypt 128 bit tuz VE 55 karakter (maks.) Parola kullanır. Başka tuz değerleri eklemenize gerek yoktur; bcrypt bunu idare eder.

Bcrypt tasarımcıları, paroladaki 55 karakter sınırının, karma değerinin 128 bit çıktısına sahip olduğundan bir sorun olmadığını hissetti. Parolanız 55 karakterden fazlaysa, tasarımcılar 128 bitten fazla entropi sağladığınızı varsaydılar, bu yüzden bu bir sorun değil. Aksine, NIST kılavuzları bunu sadece 77 bit entropi olarak sayacaktır. NIST yönergeleri, geçiş ifadelerinin karakter başına rastgele şifrelerden daha az entropiye sahip olmasına ve kullanıcıların daha uzun şifreler için geçiş ifadeleri kullanacağı varsayımına dayanmaktadır. Tam bir 128 bit entropi elde etmenizi sağlamak için daha uzun parolalara izin verebilir ve bunları kabul edilebilir bir uzunluğa sıkıştırmak için SHA-256 veya SHA-384 kullanarak karma yapabilirsiniz. Ayrıca uzunluk sınırlaması olmayan scrypt veya PBKDF2'yi kullanarak işleri basitleştirebilirsiniz. Scrypt, hesapsal olarak zaman alıcı olmanın yanı sıra "bellek açısından zor" olacak şekilde tasarlanmıştır; algoritma seçimim bu olurdu.

14
Steven Alexander