Poiché la mia prima domanda ha mancato il segno, fornisco una risposta separata. La ragione principale è che i limiti sono obbligatori. Sebbene la preoccupazione relativa allo spazio di archiviazione e al canto coronato dei dati sia accurata, ci sono alcuni problemi.
Innanzitutto, se leggi la mia risposta originale qui sotto, vedrai che uno dei consigli è l'hashing iterativo (cioè pbkdf). Ciò richiede un gran numero di iterazioni per essere veramente efficace. Se un utente è in grado di inviare una stringa di grandi dimensioni, il costo del calcolo di questo valore hash iterativo diventa rapidamente più costoso del previsto per una semplice funzione di autenticazione.
Qualsiasi singola attività computazionalmente costosa su un server, specialmente quella che è esplicitamente disponibile per un utente non autenticato, è soggetta all'abuso da parte di un utente malintenzionato per eseguire un attacco denial of service.
In secondo luogo, implementando una password a lunghezza fissa fornisce l'opportunità di terminare in anticipo se viene inoltrata una richiesta estremamente lunga. Se i parametri nella richiesta sono al di fuori della lunghezza prevista, è semplice emettere un messaggio di errore e chiudere la connessione.
Il motivo per cui i requisiti di complessità della password sono applicati su molti siti è quello di impedire agli utenti di scegliere una password debole. Ci sono numerosi esempi nella storia recente che mostrano che la maggior parte degli utenti selezionerà password deboli, facili da inserire, facili da ricordare su password complesse. Quando ciò si verifica, il proprietario del sito si espone al rischio in quanto gli utenti invariabilmente incolpano il sito se una password viene rubata o incrinata, e qualsiasi risultato possa avere sia per il sito che per l'utente interessato.
Implementando requisiti di password complessi, riduce la probabilità che un utente malintenzionato possa facilmente indovinare la password. Le password devono anche essere protette da due diversi percorsi di attacco. Il primo, gli attacchi online, richiede che uno sviluppatore del sito abbia una politica che impedisca il successo degli attacchi brute force. Ciò si ottiene richiedendo all'utente di selezionare una password complessa e sufficientemente lunga e limitando il numero di tentativi di accesso non riusciti prima di rallentare (cioè blocchi temporanei, captcha, ecc.) O interrompere i tentativi di accesso (blocchi permanenti, reimpostazione della password obbligatoria, conferme dell'account) , ecc.)
Il secondo attacco è un attacco offline, in cui un utente malintenzionato acquisirà una copia di un database delle password e tenterà di utilizzare una tabella arcobaleno o un cracker password offline per bloccare più account. Questo tipo di attacco viene prevenuto utilizzando un algoritmo di hash strong in combinazione con un sale per utente e preferibilmente con pbkdf2 o bcrypt / scrypt che ridisegna lo stile per aumentare il costo computazionale del cracking offline.
In definitiva, entrambe queste tecniche falliscono se i siti non incoraggiano gli utenti a selezionare una password univoca per i loro vari account. Molti utenti selezionano le stesse password per più account e quando viene visualizzata tale password, in particolare con il proprio account di posta elettronica, è possibile che un utente malintenzionato utilizzi tale credenziale su un altro servizio. Per questo motivo è meglio generare password univoche e forti per ogni sito o almeno diversi gruppi di siti e utilizzare un gestore di password sicuro per memorizzare tutte le diverse password.