Questa domanda è stata ha chiesto alcune volte , ma sempre nel formato
"How does
examplewebsite.com
implement their 'please enterx
thy
th andz
th characters of your password' function?"
In genere si presume che la risposta utilizzi un HSM in grado di rispondere a tale richiesta con un pass / fallire contro la password memorizzata.
Mi sembra che ci debba essere un modo ragionevole per raggiungere questo senza usando hardware sicuro. Questo potrebbe essere uno scenario improbabile, dato che chiunque si preoccupi della sicurezza per implementare tale mitigazione di keylogger avrà probabilmente il budget e le competenze per utilizzare un HSM. Ma da un punto di vista accademico, c'è una buona implementazione?
Un approccio ingenuo potrebbe essere quello di memorizzare tutte le combinazioni 3 choose n
, dove n
è la lunghezza della password e choose
è funzione di combinazione matematica .
Ma la memorizzazione di queste terzine è problematica;
- Nessuna quantità di salatura sarà in grado di difendere il database, dato che lo spazio di ricerca è così facilmente forzato.
- Una lunga password ha un numero molto elevato di possibili combinazioni che portano a problemi di ricerca e archiviazione. Potremmo limitare il numero a un limite fisso, ma questo inizia a nuocere alla forza della password (in un modo abbastanza complesso che dipende da quali triple si sceglie di memorizzare).
- Anche gli indici utilizzati per generare ogni tripla devono essere memorizzati e si applicano anche entrambi i punti sopra.
Questo approccio è scadente, esiste un approccio migliore che non richiede l'uso di un HSM?