TL; DR - sì & no. Sì, può essere fatto ma no, non dovrebbe essere fatto come suggerisci.
My question is: couldn't you use, at that very moment when you have the password in the clear that the user is trying to use for his new account, a gigantic rainbow-table on the server side to check for billions and billions of weak passwords in a split-nanosecond?
No, non puoi - o almeno, non come hai suggerito.
Per rendere l'approccio da te suggerito, sarebbe necessario compromettere la sicurezza del sito. E ci sono modi migliori per realizzare ciò che vuoi fare.
Perché? Il problema è un fraintendimento su come funzionano le tavole arcobaleno . E qui ci sono i problemi.
- Una tabella arcobaleno è precalcolata
- Un sale aggiunto alla password di un nuovo utente per l'hashing dovrebbe essere casuale
Un buon sale sarà lungo almeno 10 - 16 caratteri (vedi 1 , 2 , 3 ), che aggiungerà ~ 80-128 bit in più di entropia per la password complessiva. Anche con un carattere di 10 caratteri e una password di 8 caratteri (entrambi deboli), si tratta di 2,2 x 10 ^ 43 combinazioni potenziali. Una tabella arcobaleno con così tante combinazioni richiederebbe più spazio su disco di quanto la maggior parte possa permettersi.
Se si è utilizzato un valore fisso (che non è consigliato in quanto compromette la sicurezza), sarà possibile costruire in modo relativamente semplice una tabella arcobaleno che potrebbe essere utilizzata come suggerito. Ma un sale fisso in parte sconfigge lo scopo di usare un sale per cominciare.
Le tabelle arcobaleno sono utili vettori di attacco quando non si usano sali o quando il sale è una lunghezza fissa. Senza un salt casuale, è abbastanza facile prendere il valore hash dal file della password e cercare la password cleartext nella tabella arcobaleno.
L'uso di sali casuali obbliga un utente malintenzionato a usare la forza bruta per decifrare la password. Ci sono troppe combinazioni da memorizzare per rendere un approccio di ricerca utile. I progressi tecnologici hanno anche reso più pratico l'approccio alla forza bruta. A partire dal dicembre 2012, alcuni dei più veloci sistemi di cracking delle password con forza bruta supportati da GPU potrebbero elaborare 350 miliardi di password al secondo. (vedi qui per riferimento ) Con gli avanzamenti tecnologici, tale frequenza aumenterà solo.
Am I missing something obvious or would this help catch a lot of weak passwords and, hence, mitigate the endless accounts compromise we keep seeing on a nearly daily basis?
Sì, ti manca qualcosa sui tavoli arcobaleno, ma noi battiamo quel soggetto nel terreno con quanto sopra.
Come ho accennato prima, ci sono modi più semplici per fare ciò che stai suggerendo. Possono anche essere fatti lato client tramite javascript in modo da non dover incorrere in una penalità di andata e ritorno per il server per dire al client / nuovo utente che la loro password è troppo debole.
I vault delle password come KeePass * hanno un indicatore di entropia della password incorporato. Usando l'esempio di password "edcrfvtgb1" che hai fornito, vediamo che ha solo 50 bit di entropia, che è relativamente debole. Le raccomandazioni attuali sono di avere password da 98 a 128 bit di entropia a seconda di quanto sia sicuro che sia necessario.
Potrestiusareunpluginjavascriptchemisural'entropiadellapasswordperfornireunfeedbackimmediatoalnuovoutenteoall'utentechestacambiandolapassword. Questo link entra in dettaglio con il codice effettivo e contrasta anche con i metodi di gestione più vecchi Le password. Esecuzione di una ricerca sul Web contro javascript password strength meter
torna con un numero di accessi più che sufficiente per avviare ulteriori ricerche.
Quindi il tuo pensiero originale è buono, e sì la domanda più ampia che stai facendo può essere fatta. Dalla mia osservazione, ho visto un certo numero di siti iniziare a incorporare misuratori di forza della password per aiutare gli utenti nella selezione delle password.
* Mi è appena capitato di sapere di KeePass, ci sono molti altri eccellenti vault della password che offrono la stessa funzionalità.
... e il link xkcd obbligatorio. Punta di cappello a Marjan Venema per averlo postato per primo in un commento.
Quindiquantidatisarebbero?
10bytedisale+8bytedipasswordrestituiscono144bit.
2^144è~2.2x10^43combinazioni.
Ognicombinazioneavràbisognodialmeno18bytepersale+passworde60byteperunhashbcrypt.(vedi qui ) per un totale di (almeno) 78 byte per combinazione.
2.2x10 ^ 42 combinazioni * 78 byte = ~ 1.7x10 ^ 45 byte.
Riducendo un po 'i rendimenti: 1,438,846,037,749,345,026,048 YB ( yotta byte )
O forse potremmo chiamare 1,4 byte penta-yotta. Lo chiamo "molto".