"Por favor ingrese el carácter Nth" sin HSM

11

Esta pregunta ha sido preguntó varias veces , pero siempre en el formato

  

"¿Cómo implementa examplewebsite.com su función 'por favor ingrese x th y th y z 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?

    
pregunta lynks 22.04.2013 - 13:44
fuente

1 respuesta

10

Supongamos que la pregunta enviada al cliente puede tener aproximadamente tres caracteres: el servidor solicita (por ejemplo) los caracteres 4, 7 y 8 de la contraseña.

¡Tiempo de congelación! En ese punto exacto, el servidor ha formulado la pregunta anterior y podrá verificar una respuesta del cliente. Esto significa que en su estado completo, hay suficiente información para saber si una secuencia específica de tres valores de caracteres es una respuesta correcta o no. Y puede decir que después de invertir una cantidad limitada de CPU, digamos a lo sumo un segundo de cómputos en el servidor.

Si solo se trata de un software, entonces se puede recuperar el estado. Imaginamos a un atacante que secuestró la máquina, para poder obtener una copia completa del disco duro. En ese momento, el atacante tiene todo , por lo que puede ejecutar una emulación del servidor en sus propias máquinas. En particular, puede rebobinar el servidor a un estado anterior conocido.

Por lo tanto, el atacante ahora puede ejecutar una búsqueda exhaustiva en los tres valores de caracteres, al intentar y rebobinar el servidor emulado.

Esto es inevitable. Sin hardware dedicado no visible (un HSM, a saber), este tipo de ataque debe funcionar. Básicamente, esto significa que la fortaleza de la contraseña es la de una contraseña de tres caracteres, es decir, nada de lo que valga la pena jactarse.

    
respondido por el Tom Leek 22.04.2013 - 15:31
fuente

Lea otras preguntas en las etiquetas