¿Es viable y seguro un esquema de contraseña de un solo uso basado en Diceware?

3

Hace poco aprendí sobre el software de dados y estaba pensando en cómo podría usarse para crear un esquema de contraseña de un solo uso. Estoy pensando que S / KEY es probablemente más apropiado, pero ¿un sistema que hace esto se considera seguro?

  1. Use un generador de números aleatorios para crear una semilla inicial
  2. Generar un nuevo número aleatorio desde un CSPRNG
  3. Cree una contraseña de diceware desde los 15 bits inferiores (para 5 dados, 18 para 6 dados, etc.)
  4. Almacena la semilla de forma segura

La generación de listas de contraseñas se puede hacer, obviamente, siempre que tenga la semilla inicial, y siempre puede generar nuevas contraseñas cambiando la semilla inicial. Parece bastante simple, y la lista de palabras de diceware es > 3 veces el tamaño de S / KEY, lo que lo hace más seguro ... Sin embargo, es probable que un esquema tan simple sea inseguro debido a algo que me falta. ¿Se ha estudiado este esquema antes? ¿Es viable?

Editar : me di cuenta de que mi paso 3 es defectuoso. Necesitamos múltiples números aleatorios para extraer 15 bits para cada salida de palabra de diceware. En otras palabras, necesitamos 60 bits para 5 palabras y 120 bits para 8 palabras. Pero, el punto sigue siendo el mismo.

    
pregunta apgwoz 20.12.2012 - 05:17
fuente

1 respuesta

1

El problema es que un generador de números aleatorios no es criptográficamente seguro. Alguien podría observar la progresión de las contraseñas y, potencialmente, trabajar hacia atrás a través del algoritmo para determinar la semilla que se está utilizando. En este punto, su clave se romperá.

Sin embargo, el método que describe es muy similar a la forma en que funcionan la mayoría de los dispositivos de token de dos factores. Básicamente, almacenan una clave de cifrado de forma segura. Luego usan esa clave de cifrado para cifrar una marca de tiempo basada en un reloj interno. El servidor también conoce la clave y sabe cuál debe ser el valor cifrado. Luego lo reducen a un valor que puede ser ingresado fácilmente por el usuario. Si ambos valores coinciden, se le da acceso.

La corrección de la deriva para el reloj del token se realiza buscando una deriva lenta y ajustando el desplazamiento de tiempo para el token en el servidor. (Por ejemplo, si constantemente comienza a introducir códigos que están a punto de ser válidos, entonces sabe que el reloj del token se está ejecutando rápidamente y puede ajustarse en consecuencia.

El servidor también almacena la marca de tiempo utilizada más recientemente y no aceptará ningún código que lo preceda. (Aunque de todos modos, no serían aceptados fuera de aproximadamente 1 minuto, pero esto es para evitar una repetición rápida después de que aparezca un código denegado).

    
respondido por el AJ Henderson 20.12.2012 - 15:20
fuente

Lea otras preguntas en las etiquetas