Esta pregunta ha sido preguntó varias veces , pero siempre en el formato
"¿Cómo implementa
examplewebsite.com
su función 'por favor ingresex
thy
th yz
th de su contraseña'?
Y normalmente se supone que la respuesta es que utilizan un HSM capaz de responder a una consulta de este tipo con un pase / falla contra la contraseña almacenada.
Me parece que debe haber una manera sensata de lograr esto sin utilizando hardware seguro. Este podría ser un escenario poco probable, dado que cualquier persona que se preocupe lo suficiente por la seguridad para implementar dicha mitigación del keylogger probablemente tendrá el presupuesto y la experiencia para usar un HSM. Pero desde un punto de vista académico, ¿existe una buena implementación?
Un enfoque ingenuo podría ser almacenar todas las combinaciones 3 choose n
, donde n
es la longitud de la contraseña, y choose
es la función de combinación matemática .
Pero almacenar estos trillizos es problemático;
- Ninguna cantidad de sales será capaz de defender la base de datos, dado que el espacio de búsqueda es tan fácil de forzar.
- Una contraseña larga tiene una gran cantidad de combinaciones posibles que conducen a problemas de búsqueda y almacenamiento. Podríamos limitar el número a un límite fijo, pero eso comienza a dañar la seguridad de la contraseña (de una manera bastante compleja que depende de los triples que elija almacenar).
- Los índices utilizados para generar cada triple también deben almacenarse, y también se aplican los dos puntos anteriores.
Este enfoque es deficiente, ¿existe un mejor enfoque que no requiera el uso de un HSM?