È buona norma non limitare inutilmente la lunghezza della password, in modo che possano essere utilizzate passphrase di lunghezza appropriata (forse 35-45 caratteri per 6/7 dicewords). (Vedi ad esempio Dovrei avere una lunghezza massima della password? dove è suggerito un massimo di 1K, per proteggere contro la DoS senza limitare la possibilità per gli utenti di impostare password lunghe.)
bcrypt è anche comunemente raccomandato (vedi ad esempio Do alcuni esperti di sicurezza consigliano bcrypt per l'archiviazione delle password? , link )
Si raccomanda anche di usare un salt (random e memorizzato con l'hash della password) - credo che spesso siano raccomandati 32 bit (4 caratteri). (Capisco che la logica della dimensione del sale sia "abbastanza che il numero di combinazioni sia molto più grande del numero di record utente E sia sufficiente a rendere le tabelle dell'arcobaleno infettibilmente grandi" - 16 bit sono sufficienti per la seconda parte ma potrebbero non essere abbastanza per il primo.)
Ma AIUI bcrypt solo hash 55 byte - con 4 caratteri per il sale che lascia 51 per la password.
Suppongo che non dovremmo semplicemente bcrypt (left (password, 51)) e ignorare gli ultimi caratteri.
Dovremmo limitare gli utenti a 50 caratteri nella loro password (abbastanza per quasi tutti, ma non sicuramente abbastanza)?
Dovremmo invece usare qualcosa come bcrypt (sha256 (salt + password)) e consentire fino a 1K caratteri? O l'aggiunta del passo sha256 (o sha512?) Riduce in qualche modo la sicurezza generale?
Lo scrypt o il PBKDF2 hanno restrizioni di lunghezza simili?
(L'ultima domanda è solo per interesse, davvero - mi rendo conto che la resistenza spazio-durezza / FPGA e la relativa novità di scrypt e la resistenza GPGPU di bcrypt rispetto a PBKDF2 sono considerazioni molto più importanti nel decidere quale hash usare.)