Algoritmo de contraseña de un solo uso para humanos

17

¿Existe un algoritmo de generación de contraseña de un solo uso (basado en un secreto predefinido y un valor / tiempo / contador / etc cambiante) que sea lo suficientemente simple como para que lo pueda procesar un humano promedio pero lo suficientemente seguro como para que no se pueda encontrar el secreto? solo unas pocas contraseñas (digamos 5-10)?

He visto preguntas sobre varios esquemas de contraseña específicos y qué tan seguros están. Pero me gustaría saber más generalmente si existen algunos algoritmos bien conocidos.

La intuición me dice que si algo es suficientemente fácil de procesar por un humano, entonces también es fácil de romper. Pero, de nuevo, me sorprendió mucho que el cifrado asimétrico fuera posible o el intercambio de claves seguro (DH). Así que, ¡sorprendeme!

Editar: Algunas aclaraciones.

La pregunta surgió cuando estaba pensando en la autenticación de dos factores para uso en exteriores. Una autenticación típica de dos factores para entornos seguros (hogar, oficina, ...) utiliza una contraseña y un generador de OTP en un dispositivo o en su teléfono. Pierdes el dispositivo / teléfono, todavía hay la contraseña. Un keylogger roba su contraseña, todavía existe el dispositivo / teléfono.

Pero, ¿qué pasa con las situaciones donde ambos podrían ser robados? Por ejemplo, utiliza una aplicación para recoger una bicicleta eléctrica en la calle o para abrir un casillero en una estación de tren. Alguien puede verlo mientras ingresa la contraseña en su teléfono y luego también se roba el teléfono.

El problema podría resolverse mediante el uso de contraseñas que se vuelven inútiles en un corto período de tiempo (por ejemplo, 10min). Además, el teléfono tendría un secreto individual (por ejemplo, un certificado de cliente SSL) para hacer que los ataques de fuerza bruta contra la autenticación de contraseña sean más difíciles.

La sugerencia de

mr.spuratic sobre el algoritmo HCMU de Blum es bastante similar a lo que estaba buscando. Todavía parece un poco demasiado pesado para el humano promedio, pero con algo de práctica sería factible.

    
pregunta ErosC 02.02.2017 - 13:43
fuente

4 respuestas

11

Hay algunos esquemas comerciales, por ejemplo, GridGuard de SyferLock que dicen hacer esto, pero nunca los he usado (yo no tener afiliación). Esto se basa en que el usuario elija correctamente entre varias opciones durante la autenticación en lugar de un OTP basado en el tiempo o el contador típico (lo que significa que no hay aritmética mental).

Solitaire ( Schneier ), a menudo se cita para un sistema criptográfico computable por humanos, aunque necesitaría alguna adaptación para fines de autenticación. Una autenticación de desafío-respuesta con clave compartida sería práctica, pero no cumple con su descripción de la OTP.

¿Qué debería funcionar (con la advertencia habitual ) sería una implementación de TOTP ( RFC6238 ) o HOTP ( RFC4226 ), utilizando un HMAC alternativo hash como el HCMU de Blum ( Human Computable Machine Unbreakable , descripción aquí ) hash computable mentalmente (vea también la OCRA (RFC6287) más generalizada.

TOTP / HOTP son básicamente la salida (truncada) de un HMAC que usa SHA-1, siendo la entrada un secreto compartido y una marca de tiempo o contador. Sin embargo, deberías usar una representación estrictamente alfabética de la entrada, ya que el algoritmo de Blum solo se aplica a la entrada alfabética.

Blum también es coautor de un documento Hacia las contraseñas humanas computables (en ArXiv) , aunque grande partes de ella son muy matemáticas. no cubre brevemente la OTP en §7.2.

Ver también:

respondido por el mr.spuratic 02.02.2017 - 16:42
fuente
6

Podrías tener una tabla de búsqueda que se use como una sola vez.

Cada página en el libro de búsqueda tiene un valor de PTO de un día, y usted busca el libro en la fecha / hora actual para obtener el OTP correcto para ese momento. Esto simula un TOTP. Puedes intercambiar entre la seguridad (la frecuencia con la que cambia el TOTP) y el grosor de tu libro de búsqueda.

    
respondido por el Lie Ryan 02.02.2017 - 14:45
fuente
4

Steve Gibson reunió algo llamado "Contraseñas de papel perfecto" como una especie de demostración de cómo podría hacerse. enlace tiene los detalles. El sitio tiene un código descargable que se puede usar para desarrollar una implementación más sofisticada.

Esto no se basa en el tiempo, sino que es simplemente una secuencia de contraseñas de un solo uso, que solo se pueden usar en orden. Incluso si se rastrea la contraseña actual, no proporciona información sobre la siguiente. El número de caracteres por contraseña y el "alfabeto" son ajustables.

Aquí vemos que los códigos 1A-D ya se han utilizado, y el siguiente código que se utilizará es E1 (Tygq).

    
respondido por el Monty Harder 02.02.2017 - 19:24
fuente
1

Para ser honesto, incluso el algoritmo TOTP oficial no es masivamente , aunque tendrías que estar bastante dedicado a calcular un HMAC en tu cabeza. Sin embargo, esto sugiere que podría tener un sistema de contraseñas basado en el tiempo calculado, utilizando la mayoría de los mismos bloques de construcción.

El principal problema sería que las personas no son tan buenas como las computadoras en muchas cosas:

  • Las personas no tienen fuentes de tiempo integradas, por lo que necesita la suficiente flexibilidad para manejar a alguien que se encuentre dentro de un tiempo razonable "fuera" de la fuente. Probablemente no puede contar con que alguien tenga más de aproximadamente 5 minutos dentro del tiempo correcto, e incluso más tiempo podría ser mejor, desde la perspectiva de minimizar los errores de cálculo.
  • La gente es lenta en el cálculo. Puede confiar en una computadora para realizar millones de cálculos en un segundo. Una persona probablemente pueda administrar un cálculo, una vez que tenga los valores necesarios. Eso también significa que debe permitir mucho más tiempo para que alguien ingrese un valor válido.
  • La gente comete errores al hacer operaciones repetidas. Eso significa que es más probable que tengan que ingresar múltiples valores, si cometen un solo error en el proceso. Cada intento toma algo de tiempo.

Por lo tanto, adaptar el algoritmo TOTP directamente implicaría:

  1. Reemplace el paso HMAC con algo que una persona promedio puede hacer mentalmente
  2. Defina una época en la que un humano puede calcular una diferencia mentalmente, tal vez la medianoche del día actual, con alguna modificación basada en la fecha en su lugar
  3. Defina un intervalo que sea lo suficientemente largo para que un humano pueda realizar algunos cálculos, y que se pueda identificar como un número dado de intervalos de la época elegida: se podrían hacer cinco minutos, por lo que se puede calcular un código. a las 0912 sería (9 * 12 + 2 * 5 = 118 como valor)
  4. Use el reemplazo HMAC con el valor y la clave memorizada.
  5. Transforme el valor a un rango apropiado, potencialmente descartando bits de él.

Esto será menos seguro que el basado en computadora, ya que un atacante podría computar muchos valores potenciales rápidamente, por lo que también querría restringir cuántos intentos se permitieron dentro de un intervalo dado.

Y no, no sé cuál sería un reemplazo de HMAC adecuado ...

    
respondido por el Matthew 02.02.2017 - 16:45
fuente

Lea otras preguntas en las etiquetas