¿La existencia de códigos de recuperación de dos factores significa que mi código de dos factores no es completamente aleatorio?

2

Con algunos servicios que utilizan códigos TOTP de 6 dígitos, también ofrecen la posibilidad de tener un conjunto de códigos de respaldo, en caso de que pierda su dispositivo de dos factores.

Con Google, por ejemplo, puede imprimir una copia impresa de 10 códigos de respaldo. Estos son más de 6 dígitos, por lo que no es preocupante.

Sin embargo, algunos otros sitios que generan códigos de copia de seguridad do usan 6 dígitos. Reddit, por ejemplo, está implementando la autenticación de dos factores, y sus 10 códigos de recuperación son todos de 6 dígitos, que es la misma longitud que el código estándar de dos factores que utilizan.

¿Esto significa que esos 10 códigos de alguna manera nunca serán generados al azar por la clave de inicio TOTP? Ya que están usando un algoritmo estándar (usado por Google Authenticator, Authy, etc.), asumo que cada número de 6 dígitos es posible.

Alternativamente, ¿eso significa que con el tiempo, algunos de estos códigos se volverán inválidos, suponiendo que el algoritmo TOTP genere ese código? O incluso a más largo plazo, si inicio sesión muchas veces, me imagino que eventualmente encontraré uno de estos códigos, lo usaré para iniciar sesión y, sin saberlo, eliminaré ese código de mi lista de copias de seguridad.

¿Qué puede implicar una configuración en la que los códigos de recuperación de dos factores tengan el mismo número de dígitos que un código de dos factores estándar?

    
pregunta Stephen Schrauger 12.10.2017 - 15:44
fuente

3 respuestas

1

Hay dos formas de implementar códigos de recuperación

  • los derivan de la semilla TOTP. Luego, la semilla funciona como una contraseña para los códigos de recuperación mientras se usa como semilla para los códigos de inicio de sesión.
  • cree algunos códigos de recuperación aleatorios y guárdelos independientemente de la semilla TOTP. A continuación, permita utilizarlos como una contraseña. Es posible que los elimine de la base de datos de códigos de recuperación después de que el usuario los haya utilizado.
respondido por el allo 12.10.2017 - 15:47
fuente
1

Los códigos de respaldo, o códigos de scratch, son totalmente independientes (al menos en términos de operación) de sus códigos estándar. TOTP se basa en el tiempo. Los códigos reutilizables se basan más bien en un contador incremental.

Los detalles de la implementación probablemente dependen del proveedor, pero creo que es seguro asumir que usan 2 semillas diferentes. Tal vez la función HMAC subyacente también cambie, es difícil decirlo.

En el número de dígitos, todo se reduce a la elección de HMAC subyacente y / o función de Truncamiento. ¿Por qué el código reutilizable sería más largo que TOTP para garantizar un nivel de seguridad suficiente? Si se arregla el código de memoria virtual durante un período potencialmente largo, tiene sentido que sean más largos. Por otro lado, TOTP requiere menos, porque ya es bastante difícil descifrar el código más corto en el marco de tiempo de disponibilidad dado, por lo que proporciona flexibilidad adicional al usuario que tiene que escribirlo manualmente.

    
respondido por el M'vy 12.10.2017 - 15:54
fuente
1

En primer lugar, como señaló M'vy, la implementación depende totalmente del proveedor.

  

¿Qué puede implicar una configuración en la que los códigos de recuperación de dos factores tengan el mismo número de dígitos que un código de dos factores estándar?

¡Creo que puedes dar a entender que este servicio es más inseguro! Si un código de recuperación es un número de 6 dígitos, el servicio es más inseguro:

Vea esto: el valor TOTP de 6 dígitos solo es válido durante 30 segundos o 60 segundos, incluida una ventana de tiempo según RFC6238.

El código de RECUPERACIÓN de 6 dígitos es válido como ... para siempre. Entonces, dependiendo de la implementación y el flujo de trabajo de recuperación, un atacante podría simplemente "probar" todos los códigos 1 Mio de un código de recuperación. A diferencia de TOTP, donde el atacante solo tiene 60 segundos para probar todas las combinaciones, un atacante tiene varios años para probar todas las combinaciones de códigos de recuperación.

    
respondido por el cornelinux 15.10.2017 - 20:09
fuente

Lea otras preguntas en las etiquetas