Domanda

Posso capire che imporre una lunghezza minima alle password abbia molto senso (per salvare gli utenti da se stessi), ma il mio banca ha come requisito che le password contengano tra 6 e 8 caratteri e ho iniziato a chiedermi...

  • Questo non renderebbe più facili gli attacchi di forza bruta?(Cattivo)
  • Ciò implica che la mia password viene archiviata non crittografata?(Cattivo)

Se qualcuno con (si spera) dei bravi professionisti della sicurezza IT che lavorano per loro impone una lunghezza massima della password, dovrei pensare di fare qualcosa di simile?Quali sono i pro/contro di questo?

È stato utile?

Soluzione

Le password vengono sottoposte ad hashing a 32, 40, 128, qualunque sia la lunghezza.L'unico motivo per cui è necessaria una lunghezza minima è impedire che le password siano facili da indovinare.Non esiste uno scopo per una lunghezza massima.

L'obbligatorio XKCD spiegando perché stai rendendo un disservizio al tuo utente se imponi una lunghezza massima:

The obligatory XKCD

Altri suggerimenti

La lunghezza massima specificata nel campo della password deve essere letta come a AVVISO DI SICUREZZA:Qualsiasi utente sensato e attento alla sicurezza deve presumere il peggio e aspettarsi che questo sito memorizzi la tua password letteralmente (ad es.non hash, come spiegato da epochwolf).

In questo caso è proprio così:(a) Evita di utilizzare questo sito come la peste, se possibile, [ovviamente conoscono i dadi sulla sicurezza] (b) Se è necessario utilizzare il sito, assicurarsi che la password sia univoca, a differenza di qualsiasi password che usi altrove.

Se stai sviluppando un sito che accetta password, NON impostare un limite stupido per le password, a meno che tu non voglia essere incastrato con lo stesso pennello.

[Internamente, ovviamente il tuo codice può trattare solo i primi 256/1028/2k/4k (qualunque cosa) byte come "significativi" per evitare di intasare password gigantesche.]

Consentire una lunghezza della password completamente illimitata presenta uno svantaggio importante se si accetta la password da fonti non attendibili.

Il mittente potrebbe provare a fornirti una password così lunga da comportare una negazione del servizio per altre persone.Ad esempio, se la password è 1 GB di dati e passi tutto il tuo tempo, accettala finché non esaurisci la memoria.Supponiamo ora che questa persona ti invii questa password tutte le volte che sei disposto ad accettarla.Se non presti attenzione agli altri parametri coinvolti, ciò potrebbe portare a un attacco DoS.

Impostare il limite superiore a qualcosa come 256 caratteri sembra eccessivamente generoso per gli standard odierni.

Innanzitutto, non dare per scontato che le banche abbiano validi professionisti della sicurezza IT che lavorano per loro. Molti no.

Detto questo, la lunghezza massima della password non ha valore.Spesso richiede agli utenti di creare una nuova password (argomenti sul valore dell'utilizzo di password diverse su ogni sito a parte per il momento), il che aumenta la probabilità che le trascrivano.Inoltre, aumenta notevolmente la suscettibilità agli attacchi, da qualsiasi vettore, dalla forza bruta all’ingegneria sociale.

Il limite massimo di lunghezza della password è ora sconsigliato dal Cheat Sheet di autenticazione OWASP

https://www.owasp.org/index.php/Authentication_Cheat_Sheet

Citando l'intero paragrafo:

Le password più lunghe forniscono una maggiore combinazione di caratteri e di conseguenza rendono più difficile indovinarle per un utente malintenzionato.

La lunghezza minima delle password deve essere imposta dall'applicazione.Le password più corte di 10 caratteri sono considerate deboli ([1]).Sebbene l’applicazione della lunghezza minima possa causare problemi con la memorizzazione delle password ad alcuni utenti, le applicazioni dovrebbero incoraggiarli a impostare passphrase (frasi o combinazioni di parole) che possono essere molto più lunghe delle password tipiche e tuttavia molto più facili da ricordare.

La lunghezza massima della password non deve essere impostata su un valore troppo basso, poiché impedirebbe agli utenti di creare passphrase.La lunghezza massima tipica è di 128 caratteri.Le passphrase inferiori a 20 caratteri sono generalmente considerate deboli se sono costituite solo da caratteri latini minuscoli.Ogni personaggio conta!!

Assicurati che ogni carattere digitato dall'utente sia effettivamente incluso nella password.Abbiamo visto sistemi che troncano la password a una lunghezza inferiore a quella fornita dall'utente (ad esempio, troncata a 15 caratteri quando ne ha immessi 20).Questo di solito viene gestito impostando la lunghezza di TUTTI i campi di input della password in modo che corrisponda esattamente alla lunghezza massima della password.Ciò è particolarmente importante se la lunghezza massima della password è breve, come 20-30 caratteri.

Un motivo che posso immaginare per imporre una lunghezza massima della password è se il frontend deve interfacciarsi con molti backend di sistemi legacy, uno dei quali impone a sua volta una lunghezza massima della password.

Un altro processo di riflessione potrebbe essere che se un utente è costretto a utilizzare una password breve, è più probabile che inventi parole senza senso casuali piuttosto che uno slogan o un soprannome facilmente indovinabile (dai suoi amici/familiari).Questo approccio è ovviamente efficace solo se il frontend impone la combinazione di numeri/lettere e rifiuta le password che contengono parole del dizionario, comprese le parole scritte in l33t-speak.

Un motivo potenzialmente valido per imporre una lunghezza massima della password è che il processo di hashing (a causa dell'uso di una funzione di hashing lenta come bcrypt) richiede troppo tempo;qualcosa di cui si potrebbe abusare per sferrare un attacco DOS contro il server.

Inoltre, i server dovrebbero essere configurati per eliminare automaticamente i gestori delle richieste che impiegano troppo tempo.Quindi dubito che questo sarebbe un grosso problema.

Penso che tu abbia perfettamente ragione su entrambi i punti dell'elenco.Se memorizzano le password con hash, come dovrebbero, la lunghezza della password non influisce in alcun modo sul loro schema DB.Avere una password di lunghezza illimitata aggiunge un'ulteriore variabile di cui un utente malintenzionato deve tenere conto.

È difficile trovare scuse per limitare la lunghezza della password, oltre al cattivo design.

L'unico vantaggio che vedo nella lunghezza massima della password sarebbe quello di eliminare il rischio di un attacco di buffer overflow causato da una password troppo lunga, ma ci sono modi molto migliori per gestire questa situazione.

Lo spazio di archiviazione è economico, perché limitare la lunghezza della password.Anche se stai crittografando la password anziché semplicemente eseguire l'hashing, una stringa di 64 caratteri non richiederà molto più di una stringa di 6 caratteri per essere crittografata.

È probabile che il sistema bancario si stia sovrapponendo a un sistema più vecchio, quindi è stato possibile consentire solo una certa quantità di spazio per la password.

Anche la mia banca fa così.In passato consentiva qualsiasi password e ne avevo una di 20 caratteri.Un giorno l'ho cambiato, ed ecco che mi ha dato un massimo di 8, e aveva tagliato i caratteri non alfanumerici che erano nella mia vecchia password.Non aveva alcun senso per me.

Tutti i sistemi back-end della banca funzionavano prima quando utilizzavo la mia password di 20 caratteri con caratteri non alfanumerici, quindi il supporto legacy non può essere stato il motivo.E anche se lo fosse, dovrebbero comunque consentirti di avere password arbitrarie e quindi creare un hash che soddisfi i requisiti dei sistemi legacy.Meglio ancora, dovrebbero sistemare i sistemi legacy.

Una soluzione basata su smart card non mi andrebbe bene.Ho già troppe carte così com'è...Non ho bisogno di un'altra trovata.

Se si accetta una password di dimensioni arbitrarie, si presuppone che venga troncata a una lunghezza di cortina per motivi di prestazioni prima che venga sottoposta ad hashing.Il problema con il troncamento è che man mano che le prestazioni del tuo server aumentano nel tempo, non puoi facilmente aumentare la lunghezza prima del troncamento poiché il suo hash sarebbe chiaramente diverso.Ovviamente potresti avere un periodo di transizione in cui entrambe le lunghezze vengono sottoposte ad hashing e controllate, ma questo utilizza più risorse.

Ignora le persone che dicono di non convalidare password lunghe.Owasp dice letteralmente che 128 caratteri dovrebbero essere sufficienti.Giusto per dare abbastanza respiro puoi dare un po' di più, diciamo 300, 250, 500 se ne hai voglia.

https://www.owasp.org/index.php/Authentication_Cheat_Sheet#Password_Length

La lunghezza della password password più lunghe fornisce una combinazione maggiore di caratteri e di conseguenza rendono più difficile indovinare un aggressore.

...

La lunghezza massima della password non deve essere impostata troppo bassa, poiché impedirà agli utenti di creare passphrasi. La lunghezza massima tipica è di 128 caratteri.I passphrasi più corti di 20 caratteri sono generalmente considerati deboli se sono costituiti solo da caratteri latini minuscoli.

Dovrebbe esserci una lunghezza massima?Questo è un argomento curioso nell'IT in quanto le password più lunghe sono in genere più difficili da ricordare e quindi è più probabile che vengano scritte (un GRANDE no-no per ovvi motivi).Le password più lunghe tendono anche a essere dimenticate più spesso, il che, pur non essendo necessariamente un rischio per la sicurezza, può portare a problemi amministrativi, perdita di produttività, ecc.Gli amministratori che ritengono che questi problemi siano urgenti è probabile che impongano lunghezze massime alle password.

Personalmente credo su questo tema specifico, ad ogni utente il suo.Se pensi di poter ricordare una password di 40 caratteri, tanto più potere per te!

Detto questo, però, le password stanno rapidamente diventando una modalità di sicurezza obsoleta, le smart card e l'autenticazione dei certificati si rivelano molto difficili se non impossibili da usare con la forza bruta, come hai affermato è un problema, e solo una chiave pubblica deve essere archiviata sul server con quella privata chiave sulla tua carta/computer in ogni momento.

Le password più lunghe, o passphrase, sono più difficili da decifrare semplicemente in base alla lunghezza e più facili da ricordare rispetto alla richiesta di una password complessa.

Probabilmente è meglio scegliere una lunghezza minima abbastanza lunga (10+), limitando la lunghezza inutile.

I sistemi legacy (già menzionati) o l'interfacciamento con i sistemi esterni del fornitore potrebbero richiedere il limite di 8 caratteri.Potrebbe anche essere un tentativo fuorviante di salvare gli utenti da se stessi.Limitarlo in questo modo risulterà in troppi pssw0rd1, pssw0rd2, ecc.password nel sistema.

Uno dei motivi per cui le password non possono essere sottoposte ad hashing è l'algoritmo di autenticazione utilizzato.Ad esempio, alcuni algoritmi di digestione richiedono una versione in chiaro della password sul server poiché il meccanismo di autenticazione prevede che sia il client che il server eseguano gli stessi calcoli sulla password inserita (che generalmente non produrrà lo stesso output ogni volta poiché la password viene combinata con un codice generato casualmente 'nonce', che è condiviso tra le due macchine).

Spesso questo può essere rafforzato poiché in alcuni casi il digest può essere parzialmente calcolato, ma non sempre.Una soluzione migliore è che la password venga archiviata con crittografia reversibile: ciò significa che le origini dell'applicazione devono essere protette poiché conterranno la chiave di crittografia.

Digst auth è lì per consentire l'autenticazione su canali altrimenti non crittografati.Se si utilizza SSL o qualche altra crittografia a canale completo, non è necessario utilizzare meccanismi di autenticazione digest, il che significa che le password possono invece essere archiviate con hash (poiché le password potrebbero essere inviate in chiaro in rete in modo sicuro (per un dato valore di sicurezza).

Cerca di non imporre alcuna limitazione se non necessaria.Attenzione:potrebbe e sarà necessario in molti casi diversi.Trattare con sistemi legacy è uno di questi motivi.Assicurati di testare bene il caso di password molto lunghe (il tuo sistema può gestire password lunghe 10 MB?).Potresti incorrere in problemi di Denial of Service (DoS) perché le funzioni di definizione delle chiavi (KDF) che utilizzerai (solitamente PBKDF2, bcrypt, scrypt) richiederanno molto tempo e risorse.Esempio di vita reale: http://arstechnica.com/security/2013/09/long-passwords-are-good-but-too-much-length-can-be-bad-for-security/

Solo password lunghe 8 caratteri sembrano semplicemente sbagliate.Se dovesse esserci un limite, allora almeno 20 caratteri sarebbe un'idea migliore.

Penso che l'unico limite che dovrebbe essere applicato sia come un limite di 2000 lettere, o qualcos'altro di follemente alto, ma solo per limitare la dimensione del database se questo è un problema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top