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.