Tenere segreta la lunghezza della password è fondamentale per la sicurezza?
Qualcuno sa che hai una lunghezza della password diciamo 17 rende la password drasticamente più facile da usare con la forza bruta?
Tenere segreta la lunghezza della password è fondamentale per la sicurezza?
Qualcuno sa che hai una lunghezza della password diciamo 17 rende la password drasticamente più facile da usare con la forza bruta?
Bene, iniziamo con la matematica: se assumiamo che la tua password sia composta da lettere minuscole, maiuscole e numeri, ci sono 62 caratteri tra cui scegliere (solo per semplificare la matematica, anche le password reali usano simboli). Una password di lunghezza 1 ha 62 possibilità, una password di lunghezza 2 ha 62 ^ 2 possibilità, ..., una password di lunghezza n ha 62 ^ n possibilità.
Quindi questo significa che se conoscono il tuo password ha esattamente 17 caratteri, quindi possono saltare tutte le password con lunghezza inferiore a 17 e ci sono solo 62 ^ 17 password da provare.
Ma quante password ci sono con lunghezza inferiore a 17, rispetto a 62 ^ 17?
Bene, se sommiamo 62 ^ ne dividiamo per 62 ^ 17 otteniamo (somma da n = 1 an = 16 di 62 ^ n) / 62 ^ 17 = 0,016 ( link al calcolo), quindi controllare solo le password di lunghezza 17 è solo l'1,6% più veloce rispetto a controllare tutte le password fino alla lunghezza 17
Se abbiamo uno schema di password che consente tutti i 95 caratteri ASCII stampabili , il risparmio derivante dal non dover provare password inferiori a 17 scende a 1,06 % ( collegamento al calcolo).
Un'interessante stranezza matematica su questo rapporto tra il numero di password inferiori a n, rispetto al numero di password di lunghezza n, è che in realtà non dipende da n. Questo perché siamo già molto vicini all'asintoto di 1/95 = 0,0105. Quindi un utente malintenzionato ottiene lo stesso relativo, o percentuale, risparmio di tempo da questo trucco indipendentemente dalla lunghezza della tua password; è sempre compreso tra l'1% e il 2%. Anche se, ovviamente, il tempo assoluto che impiega cresce di ordini di grandezza con ogni nuovo carattere che aggiungi.
La matematica sopra presuppone un semplice brute-forcer che proverà a, b, c , ..., aa, ab, ... Che è un buon modello (ish) per decifrare password generate dal computer casualmente in modo appropriato, ma è un modello terribile per indovinare le password generate dall'uomo.
I cracker di password reali sono parole basate su dizionari (e combinazioni di parole) dal dizionario inglese, elenchi di password trapelate, ecc., quindi questi calcoli dovrebbero essere presi con le pinze.
Un altro effetto del conoscere la tua lunghezza è che non devono provare password più lunghe di 17 , cosa che per algoritmi brute-force che provano combinazioni di parole del dizionario, potrebbe effettivamente essere un enorme risparmio.
Come menzionato da @SteveSether, @xeon e @CountIblis, rivelare la lunghezza (o l'entropia) di una password può anche influire sul fatto che un utente malintenzionato tenti di violare la tua password dissuadendoli da password complesse e attirandoli invece a password deboli. Quindi, se sai di avere una password complessa, rivelala! Tuttavia, divulgare le lunghezze (o entropie) delle password per tutti gli utenti in un sistema ha l'effetto di rendere più forti le password complesse e quelle deboli più deboli.
Conclusione:
Dire a qualcuno la lunghezza della tua password non è la cosa peggiore che puoi fare, ma io comunque non lo farei.
A parte i calcoli matematici dettagliati da @Mike, considera anche che la password length trapela ovunque:
Quando viene digitata, un lo spettatore subdolo può apprenderlo, contando "*" sullo schermo o ascoltando i tasti premuti (in quest'ultimo caso, può registrare il suono con il suo smartphone e riprodurlo a suo piacimento).
In un classico scenario di "browser Web", il nome utente e la password verranno inviati al server tramite alcuni HTTPS POST. Il livello SSL crittograferà i dati, ma SSL non nasconde la lunghezza dei dati, quindi un osservatore di rete passivo imparerà anche la lunghezza della password.
Sia l'interfaccia lato utente che il sistema ricevente elaboreranno la password con funzioni il cui tempo di esecuzione e modelli di accesso alla memoria dipenderanno dalla lunghezza della password. Gli aggressori che possono eseguire misure di temporizzazione saranno generalmente in grado di dedurre la lunghezza della password da queste misure.
Pertanto, un approccio sano consiste nel considerare la lunghezza della password come dati pubblici. Alcuni aggressori non avranno accesso ad esso (il tipo di aggressore che ha appena preso una copia del database del server); altri lo sapranno. È molto difficile sapere "quanto segreto" sia la lunghezza della password, e poiché la sicurezza consiste nel quantificare le cose, è meglio presumere che tutti gli aggressori possano sapere la lunghezza della password. Credere di poterlo mantenere segreto e stimare la sicurezza in base a questa nozione sarebbe eccessivamente pericoloso.
Rivelare la lunghezza della password rivela qualcosa sulla forza della tua password. Quindi in sostanza stai dando a qualcuno un suggerimento su quanto potrebbe essere difficile indovinare.
Quindi se la tua password è molto lunga (17 caratteri nel tuo esempio) è un'informazione in gran parte inutile. Se la password è breve (6 caratteri), indica a un aggressore che potrebbe valere la pena attaccare. Gli aggressori inseguono gli obiettivi più facili.
Non sono d'accordo con la risposta accettata. È vero che la lunghezza della password è quasi inutile se tutte le password vengono create casualmente da una macchina. Questo non vale più se le password vengono create dagli esseri umani nel modo usuale : in base a una o più parole del dizionario, mescola maiuscolo minuscolo, sostituire alcuni caratteri con numeri o caratteri speciali e aggiungere prefissi e suffissi (es. "! 1"), ecc.
Diamo un'occhiata a 2 scenari, uno è che abbiamo 10'000 ' 000 hash delle password e desidera trovare quante più password corrispondenti possibile per questi hash. L'altro è un hash della password e vogliamo decifrarlo. In entrambi gli scenari la differenza risulta essere significativa. Come al solito, tutte le informazioni possono essere utilizzate in modo improprio in un attacco, anche se a prima vista non sembra così .
Possiamo semplicemente provare attacchi bruteforce su tutti gli hash delle password senza modo di distinguerli se non conosciamo la lunghezza della password.
Se noi utilizzare un attacco bruteforce completo (che è garantito per trovare la password) sapendo che la lunghezza della password offrirà solo un guadagno minimo. Perché? La forzatura bruta di tutte le password a 7 cifre richiede circa l'1-2% finché la forzatura bruta di tutte le password a 8 cifre. L'unica cosa che otteniamo conoscendo la lunghezza è che non abbiamo bisogno di forzare tutte le password a 7 cifre (e più piccole) se sappiamo già che la password ha 8 cifre. Tranne che un attacco di forza bruta richiede risorse quasi infinite (potenza di calcolo e / o tempo) e quindi non è qualcosa che possiamo o faremo.
Testiamo invece una serie di password "probabili" per ciascuna lunghezza di password . Un modo per farlo è con un attacco al dizionario. Testare le password probabili è di parecchi ordini di grandezza più economico rispetto all'utilizzo della forza bruta esaustiva, ma ha un enorme svantaggio: una volta che abbiamo provato tutte le password "probabili" a 7 cifre contro un hash della password, ma non abbiamo trovato la password corrispondente, non lo facciamo sapere se la password corrispondente per l'hash della password è più lunga di 7 cifre. Quindi, a meno che non sappiamo per certo che la password non è più lunga di 7 cifre, dobbiamo comunque testare l'hash della password con tutte le password "probabili" a 8 cifre, password a 9 cifre, password a 10 cifre, ecc. E quando si testano le password probabili, proprio come bruteforce esauriente, il costo del test di password più lunghe aumenta in modo esponenziale. Dato che ora sappiamo che la password è lunga 7 cifre, non dobbiamo testarla con probabili password a 8, 9, 10, 11, 12 cifre e anche più lunghe, risparmiando una quantità di lavoro davvero enorme.
Migliora. Una volta che abbiamo testato tutte le password probabili fino a una lunghezza, diciamo, 20 cifre, ora possiamo spendere le nostre risorse rimanenti per un attacco di forza bruta su quegli hash di password con una lunghezza di password piccola che la nostra precedente ricerca di password "probabili" non ha decifrato . Supponiamo di avere 2'000'000 hash di password non craccati rimanenti e 100'000 di questi hanno password con meno di 6 cifre. Tieni presente che abbiamo un budget limitato. Le password a 6 cifre sono economiche da decifrare. Ma poiché sappiamo quali 100'000 sono 6 cifre o più piccole, ora dobbiamo forzare la forza bruta di 100'000 password a 6 cifre per decifrare 100'000, invece di forzare 2'000'000 le password brute per decifrare 100'000 6 password di cifre. Questo è il 5% del lavoro per lo stesso risultato!
Se esaminiamo tutti i vantaggi combinati, il guadagno esatto che otteniamo dalla conoscenza della lunghezza delle password dipende dalla velocità del nostro metodo per testare le password "probabili", dalla rispettiva percentuale di successo del nostro metodo per testare le password probabili per ciascuna password length, la distribuzione delle lunghezze delle password nella raccolta di hash delle password che vogliamo decifrare e la quantità di risorse che abbiamo a disposizione (velocità di calcolo, tempo). Ma conoscendo la lunghezza delle password possiamo facilmente aumentare più volte il numero di password che troviamo con una data quantità di risorse - se i numeri funzionano fortemente a nostro favore, possiamo eventualmente ridurre il costo delle risorse per crackare 30 % delle password in un ordine di grandezza o più.
Non conoscendo la lunghezza della password, noi è necessario distribuire le nostre risorse tra la forzatura bruta di tutte le chiavi di breve durata e il test di password probabili con una lunghezza maggiore. Supponendo di spendere metà delle nostre risorse su ciascuno, conoscere la lunghezza della password ci consente di trasmettere completamente una delle 2 e quindi raddoppiare le nostre risorse disponibili.
Otteniamo anche informazioni aggiuntive che possono essere estremamente preziose in un attacco:
Se la password è abbastanza breve da forzarla, possiamo dare un limite superiore a quanto tempo ci vuole per ottenere la password. Questo può indurci a tentare alcuni attacchi che altrimenti non prenderemmo nemmeno in considerazione.
Possiamo anche calcolare la probabilità di violare la password. Se sappiamo che è improbabile che violeremo la password, possiamo spendere le nostre risorse per trovare altri modi per compromettere il sistema.
Se abbiamo 2 password diverse dallo stesso utente possiamo vedere se c'è la possibilità che siano effettivamente la stessa password. Se variano solo di 2-3 cifre, possiamo fare un'ipotesi plausibile che la password più lunga potrebbe essere la stessa di quella più corta, più un prefisso o un suffisso.
Se otteniamo ancora più informazioni sulla password, ciò potrebbe comportare un guadagno molto maggiore rispetto ai 2 pezzi singolarmente . Ad esempio, se scopriamo che la password è una singola parola dal dizionario di Oxford, hai ancora la possibilità di tenerla al sicuro se, ad esempio, possiamo forzare solo una password al minuto. Ma se sappiamo anche che la lunghezza della password è di 17 cifre, il gioco è finito.
Rivelare la lunghezza della password influisce. Se la tua password è debole (password breve), un utente malintenzionato potrebbe concentrarsi sul cracking. Se la password è complessa (password lunga), un utente malintenzionato potrebbe esplorare altri vettori di attacco. Quindi la conoscenza della lunghezza della password consente a un hacker di scegliere una strategia migliore risparmiando tempo.
Oltre alle risposte che danno una buona panoramica della tua domanda, c'è un'altra cosa da tenere in considerazione: quando effettui la valutazione del rischio devi presumere che l'aggressore sappia tutto sulla metodologia che usi per costruire la tua password .
In altre parole, se la tua password è composta da quattro parole inglesi medie incollate insieme, tutte minuscole ( à la xkcd) quindi devi assumere (diversamente da xkcd lo fa, BTW) che l'attaccante otterrà il dizionario pertinente e proverà solo una combinazione di quattro parole.
Ora hai uno spazio chiave (numero di possibilità) che hai messo contro il tempo necessario per controllare i suoi elementi a [un numero relativo a tecnologie e ambienti specifici] tentativi / secondo - e questo ti dà il tempo statistico in cui la tua password sopravviverà a un attacco.
Ora decidi se questo è abbastanza lungo, con i tuoi criteri (ciclo di vita della password, tempo in cui le persone lavorano con quell'account, età dell'universo, ...)
Se prendiamo l'esempio xkcd, sarebbe
Rivelare deliberatamente la lunghezza della password, ammesso che si utilizzi solo password molto lunghe, come sottolinea Steve Sether nella sua risposta, renderà meno probabile che gli hacker cerchino di indovinarla. Quindi, in realtà aumenti la sicurezza divulgando deliberatamente le informazioni sulla tua password.
Un utente malintenzionato non utilizzerà un attacco di forza bruta, provando tutte le password possibili, ma prima tenterà con password più probabili. Una password di otto lettere totalmente casuale può essere più difficile da decifrare rispetto a una password di diciassette lettere semplice da indovinare.
Di conseguenza, l'attaccante non proverà prima tutte le password brevi, ma proverà password di varie lunghezze durante l'attacco. Quindi, se hai una password di diciotto lettere "hellohellohello123" non sei al sicuro; una password di otto lettere totalmente casuale può essere più sicura.
La password rigida di otto lettere è più difficile da indovinare perché l'attaccante prova anche cose come "ciao ciao123" prima di controllare tutte le password di otto lettere. Se dici all'aggressore la lunghezza della password, quel po 'di correzione va. Quindi la perdita è molto peggiore dell'1,26% menzionato in precedenza.
Qualsiasi cosa che riduca l'entropia della tua password ne riduce la forza.
Potrebbe essere che anche quando si rivela la lunghezza della password, il pool di password rimanenti è ancora abbastanza grande.
Per quanto riguarda un esempio concreto, l'insieme di tutte le password di lunghezza 17 è sicuramente abbastanza forte contro quasi tutti gli attacchi. A condizione che tu non abbia rivelato altri dettagli come "La mia password di lunghezza 17 contiene il nome del mio micio, che nessuno conosce."
La lunghezza 17 implica 272843561753653169767435615050624325866274580142388791900214521038955085904188409449281578168966401 caratteri alfanumerici (considerando le possibili combinazioni personaggi speciali). Sono abbastanza sicuro che sia sufficiente, data la nostra attuale potenza di elaborazione. Il numero sopra è dell'ordine di grandezza di una cifra seguita da 98 0s.
Sì. È MOLTO cruciale. Un programma chiamato Crunch genera elenchi di parole per te. Intervalli come 1-17 caratteri occuperanno 15610 petabyte! Tuttavia, se un hacker sa che la tua password è esattamente di 17 caratteri, ci vorrà molto meno. Ecco perché è fondamentale.