¿Es una mala idea que el usuario elija el secreto TOTP en lugar de generarlo automáticamente?

9

Al leer sobre los sistemas de autenticación basados en TOTP que usan los teléfonos inteligentes como generadores de código de una sola vez, entiendo que, por lo general, el secreto compartido se genera automáticamente por el "servidor" (el sistema al que el usuario debe autenticarse) y luego se codifica. en Base32 u otra codificación que dé como resultado caracteres "legibles por humanos" solamente, y luego el usuario ingresa ese secreto en su aplicación de teléfono inteligente que se utilizará para generar los códigos de una sola vez. A menudo, el secreto generado por el servidor se codifica en un código QR para ser escaneado con el teléfono para facilitar al usuario la introducción del secreto en la aplicación.

Suponiendo que es cierto que la anterior es una configuración típica (de la que no estoy seguro), me pregunto cuáles serían las desventajas de hacer que el usuario elija el secreto compartido y lo comunique al servidor para almacenarlo. , en lugar de al revés.

Es decir, el usuario crearía el secreto compartido y lo guardaría tanto en su aplicación de teléfono inteligente como en el servidor, y el servidor usaría el secreto tal como está (quiero decir sin considerarlo como codificado). O, el usuario crearía el secreto y lo codificaría en Base32 antes de guardarlo en el servidor, y el servidor lo consideraría como codificado.

Como entiendo que ninguno de estos dos casos es cómo funciona un sistema TOTP típico, estoy seguro de que hay razones por las que el usuario no ha elegido el secreto compartido y me gustaría saberlo.

AGREGADO : obtuve bastante información aquí que aclaró muchas de mis dudas. Pero todavía tengo una duda. Como entendí, gran parte del punto de la autenticación de dos factores es combinar algo que sabe (su contraseña habitual) y algo que tiene (el dispositivo generador de código), pero el dispositivo puede ser un teléfono inteligente común y se convierte en el dispositivo generador de código solo gracias a que el usuario ingresa el secreto (no importa cómo, el código QR o el teclado u otro, sigue siendo una información que el usuario necesita). saber y eso es todo lo que se necesita). No sabría qué responderle a alguien que afirma que "el secreto es algo que sabe o tiene tanto como la contraseña".

En otras palabras, entiendo que el dispositivo de generación de código que el banco le da al usuario para iniciar sesión es algo que el usuario tiene y no algo que el usuario sepa , y eso se debe a que el dispositivo tenía el conjunto de secretos antes de ser entregado al usuario, por lo que el usuario no conoce el secreto, por lo que si el usuario se autentica correctamente significa que en realidad fue la persona que físicamente tenía el dispositivo. Pero si el dispositivo es un teléfono inteligente común en su lugar, donde se supone que el usuario debe ingresar el secreto (p. Ej. A través del código QR), una autenticación exitosa solo significa que fue alguien que conocía el secreto y lo ingresó en su / su teléfono inteligente.

    
pregunta SantiBailors 19.06.2018 - 12:33
fuente

2 respuestas

19

Una mejor pregunta sería: ¿por qué harías eso?

Cuando desarrollas un protocolo de autenticación, controlas todas las variables. Esto significa que puede garantizar, por ejemplo, que el RNG que utiliza es seguro, que no está reutilizando un secreto existente y que no está seleccionando una clave "débil". Además, no tiene el problema de confiar en un canal lateral seguro para recuperar el secreto del usuario.

Cuando permites que el usuario genere sus secretos, desechas todo eso.

La única ventaja histórica de que los usuarios seleccionen su propio secreto es que pueden guardarlos en su memoria y no confiar en el almacenamiento local (potencialmente inseguro). En el caso de TOTP, ni siquiera tiene esa ventaja: sus usuarios necesitan confiar en algún tipo de software para obtener el código actual (que es el punto de 2FA: forzar al usuario a tener acceso a "algo que tienen" en Además de "algo que saben").

Entonces, sí, no es una buena idea.

    
respondido por el Stephane 19.06.2018 - 14:18
fuente
3

No debes hacer eso. Un TOTP es tan seguro como la clave, y los usuarios no son una buena fuente de aleatoriedad.

Agregue a esto que la mayoría de los usuarios usarán sus teléfonos inteligentes como el generador TOTP, y pedirle al usuario que ingrese una cadena aleatoria larga y suficiente en el teclado del teléfono inteligente es pedir demasiado. Ahora multiplique por dos: el usuario debe escribir la clave TOTP de mayúsculas y minúsculas en el teléfono inteligente Y su sistema.

No va a funcionar. Es mejor forzar al usuario a tomar una foto.

    
respondido por el ThoriumBR 19.06.2018 - 15:23
fuente

Lea otras preguntas en las etiquetas