Stai alludendo a Principio di Kerckhoff . Quando progettiamo sistemi crittografici, assumiamo che l'attaccante saprà tutto sul tuo sistema eccetto per le parti derivate dall'entropia (chiavi / password / etc, in genere) - questo perché non possiamo garantire che non conoscano i dettagli, ma deve presumere che non conoscono le nostre chiavi generate. Qualsiasi schema di generazione di password segue questo ragionamento: se uno schema di password è considerato sicuro, allora puoi credere che un utente malintenzionato sappia quale schema stai usando non è un problema.
Il motivo per cui non è un problema è dovuto al modo in cui funzionano gli spazi dei nomi delle password. Se si richiede che un utente generi una password basata su un elenco diceware noto, come l'elenco EFF, e si richiede che sia lungo almeno 4 parole, allora è possibile calcolare la complessità dello spazio dei nomi.
Per prima cosa, scopriremo lo spazio dei nomi di una singola parola: nella lista diceware di EFF, tiri cinque dadi a sei facce e scegli il risultato che emerge. Dato che ci sono cinque posizioni con sei opzioni, possiamo calcolare 6 ^ 5, che ci dà 7776 - questo significa semplicemente che ci sono 7776 parole possibili diverse per ogni luogo.
Ora possiamo calcolare la complessità minima dello spazio dei nomi di quattro di queste parole. Questo è fatto semplicemente prendendo il numero di parole possibili e aumentandolo alla potenza del numero di parole nella password - 7776 ^ 4. Questo ci dà 3656158440062976 (3,6 quadrilioni) possibili password diverse di quattro parole diceware di EFF.
Ora, per indovinare quanto tempo ci vorrà, dobbiamo fare alcune ipotesi -
-
Stai utilizzando un buon algoritmo di hashing: scrypt, bcrypt, PBKDF2, ecc.
-
L'hacker ha hardware di livello consumer. - Vedremo alcuni benchmark per una serie di 801 1080 TI, che sono al top della linea al momento della scrittura, ma non dovrebbero essere presi come il tasso massimo di hash: la NSA, ecc. Probabilmente ha hardware speciale solo per hashing password il più velocemente possibile.
Possiamo vedere da questo benchmark che in OpenCL, un utente malintenzionato con 8x 1080 Ti può attaccare buoni algoritmi al seguente tariffe:
- scrypt ad una velocità di ~ 6.4 milioni di hash al secondo.
- bcrypt ad un tasso di 184 mila hash al secondo.
- PBKDF2-SHA256 ad una velocità di 775 mila hash al secondo.
- SHA1 (solo per il confronto, non usare questo per le password) ad una velocità di 101 miliardi di hash al secondo.
Quindi, per il nostro spazio dei nomi di 3,6 quadrilioni di possibili password, possiamo calcolare i seguenti tempi attesi per craccare. Tieni presente che in media il 50% dello spazio dei nomi deve essere esaurito, non al 100%.
- scrpyt - 571274756.25984 secondi (~ 9 anni)
- bcrypt - 19870426304.690086956521739130435 secondi (~ 315 anni)
- PBKDF2 - 4717623793.6296464516129032258065 secondi (~ 75 anni)
- SHA1 - 36199.588515475009900990099009901 secondi (~ .2 giorni)
Quindi, possiamo vedere che è necessario implementare anche un buon algoritmo di hashing.
Da questo algoritmo mancano due cose: in primo luogo, non abbiamo omesso parole più corte di 4 caratteri. L'elenco diceware di EFF ha molte parole lunghe 3 caratteri. Se aumenti la lunghezza minima della parola, riduci lo spazio dei nomi. Penso che la lista EFF abbia ~ 500 parole di 3 caratteri, ma questa è una supposizione. Quindi, lo spazio dei nomi è leggermente meno complesso.
In secondo luogo, abbiamo trattato queste password in modo casuale. Perché invece volevi delle frasi, dobbiamo tenere a mente che le frasi non sono casuali. Se vuoi che le frasi abbiano un senso, allora ci sono degli attacchi che puoi eseguire contro di loro: puoi usare le catene di Markov e altre cose divertenti per generare frasi probabili piuttosto che brute forzare la password. Non ho statistiche su quanto sia più facile questo rispetto al forzante bruto, quindi vado avanti e dico che dovresti assumere che fa una grande differenza ed è molto più debole.