¿Cómo funciona 2FA de Authy, si no se conecta al servidor?

23

Pensé que sabía cómo funciona la autenticación de dos factores:

  • Ingreso la contraseña.
  • El servidor genera un número aleatorio (token) y me lo envía por SMS.
  • Entro en este token.
  • El servidor comprueba que el token que ingresé coincida con el generado para mi solicitud 2FA anterior.

Pero hoy, descubrí Authy , y parece que no sé cómo la autenticación de dos factores de este programa (2FA) funciona.

Authy me muestra números secretos (tokens 2FA) sin ninguna conexión con el servidor. ¿Cómo puede ser esto?

Supongo que estos tokens no son aleatorios? Tal vez sea algún tipo de secuencia numérica, donde conocer los parámetros iniciales de siembra hace que este sea un proceso determinista. Tal vez esta secuencia es una función del tiempo? ¿Es así como funciona?

¿Es seguro? ¿Puedo, por ejemplo, determinar los siguientes tokens 2FA, si conozco un número N de tokens anteriores?

    
pregunta demas 01.01.2014 - 06:54
fuente

2 respuestas

28
  

Authy mostrarme números secretos sin ninguna conexión con el servidor. ¿Cómo puede hacerlo?

Authy está usando un algoritmo de código de acceso único (OTP) que viene en varios sabores, los dos más populares son OTP basado en HMAC (HOTP) y OTP basado en tiempo (TOTP). Authy está utilizando TOTP.

Ambos algoritmos son esencialmente los mismos; requieren algunos datos semilla y un contador para generar el siguiente código de acceso en la serie. Las implementaciones de HOTP incrementan el contador cada vez que el usuario solicita / usa un código de acceso, TOTP incrementa el contador después de un intervalo de tiempo determinado.

En el caso de Authy, cuando el usuario envía un código de acceso al servidor, el servidor busca los datos iniciales del usuario, calcula el valor del contador según la marca de tiempo de la solicitud y luego genera el código de acceso correcto. El servidor luego verifica que el código de acceso generado coincida con el código de acceso enviado por el usuario.

  

¿Es seguro? ¿Puedo saber el siguiente número si sé N números anteriores?

Sí y no, depende de si confía o no en la seguridad del servidor.

Dados N tokens anteriores, un atacante aún no debería poder recuperar los datos de inicialización. Sin embargo, estos algoritmos requieren que el servidor almacene los datos semilla para todos los usuarios. Si un atacante puede comprometer la base de datos (a través de la inyección de SQL, etc.), entonces podrá generar códigos de acceso válidos. Esto es lo que le sucedió a RSA y sus tokens SecurID ( enlace )

Algunas empresas como Duo Security ( enlace ) y Twitter (> enlace ) están abordando este problema mediante la implementación de la autenticación de dos factores de desafío-respuesta con cifrado de clave asimétrica. En este caso, solo necesitan almacenar las claves públicas, lo que significa que si su base de datos se filtra, un atacante no tiene las claves privadas necesarias para generar respuestas válidas.

Descargo de responsabilidad, trabajé en Duo.

Actualizado basado en preguntas en los comentarios

  

¿Los algoritmos (HOTP o TOTP) deben ser los mismos en el servidor y en la aplicación cliente?

El algoritmo es idéntico, la forma en que se genera el valor del contador es diferente. Si Google fuera HOTP y Authy quisiera admitir cuentas de Google, su aplicación tendría que generar y almacenar el valor del contador de manera diferente a las cuentas TOTP.

  

¿El cliente HOTP requiere conexión con el servidor para obtener el siguiente código de acceso (porque no sabe cuántas solicitudes se hicieron desde la última vez), mientras que TOTP no lo requiere?

No, HOTP no requiere una conexión para funcionar, pero HOTP generalmente no se usa porque es fácil que el teléfono y el servidor no estén sincronizados.

Diga que tanto el servidor como la aplicación comienzan con un valor de contador de 0. El servidor generalmente tiene una ventana, tal vez los siguientes 10 códigos de acceso, que considerará válidos. Cuando el usuario envía un código de acceso, el servidor comparará el código de acceso enviado con los siguientes 10 códigos de acceso generados. Si cualquiera de los 10 coincide, el servidor puede actualizar el valor del contador almacenado y permanecer sincronizado.

Sin embargo, el problema es que el usuario puede generar demasiados códigos de acceso en la aplicación sin usarlos. Si el usuario puede incrementar el contador más allá del tamaño de la ventana de código de acceso, el servidor ya no podrá verificar que los códigos de acceso sean válidos.

Para ver en detalle cómo se generan los tokens OTP, consulte este blogpost informativo .

    
respondido por el JackWink 01.01.2014 - 09:33
fuente
0

Parece que se comunica mediante una simple API REST. En términos de qué tan seguros son los tokens -

El token se genera mediante una función de 1 vía (SHA-2) y una clave de 256 Bits. Incluso si el atacante tuviera acceso a cientos de Tokens, sería matemáticamente imposible para él generar un nuevo Token válido. Si desea saber más, Authy se basa en RFC4426 ( enlace ).

En resumen: sí, utiliza un método seguro para generar un token.

    
respondido por el Ashley B 01.01.2014 - 07:15
fuente

Lea otras preguntas en las etiquetas