¿Almacenar el secreto de TOTP en una base de datos, texto sin formato o cifrado?

8

He estado leyendo sobre 2FA y cómo se usa, y lo que más me llamó la atención es que todos parecen estar guardando el secreto TOTP como texto simple en su base de datos.

Entiendo que necesita el secreto como texto simple para verificar la OTP, por lo que no puede modificarlo, pero ¿no podría al menos cifrarlo de cierta manera, en caso de que su base de datos se filtre? Siento que hay maneras de hacer esto un poco más seguro, pero me pregunto si hay inconvenientes con las ideas que tengo.

  1. Cifre el secreto TOTP usando la clave almacenada en el servidor: Esto no sería ideal ya que estaría cifrando todo con la misma clave, pero se puede filtrar una base de datos sin que el atacante tenga acceso completo a todos archivos en el servidor. En ese escenario, al menos los secretos de TOTP aún están protegidos.
  2. Cifre el secreto TOTP utilizando la contraseña del usuario: cuando el usuario inicie sesión y la verificación de la contraseña sea válida, la misma contraseña que se envió podría usarse como clave para cifrar / descifrar el secreto TOTP. Cuando el usuario configura su 2FA por primera vez, debe ingresar su contraseña para que podamos usarlo para cifrar el secreto TOTP. Cuando inician sesión con una contraseña correcta, descifra el secreto TOTP utilizando la contraseña y valida la OTP. Si se filtra su base de datos, la contraseña está oculta y el secreto TOTP está cifrado, por lo que el atacante no tiene información sobre ninguna cuenta a menos que sepa la contraseña.
  3. Combine ambos métodos: combine la contraseña con una clave almacenada localmente, y use esto como la clave de cifrado para el secreto TOTP. De esta manera, si la base de datos tiene fugas y el atacante conoce la contraseña, aún no podrán descifrar el secreto TOTP a menos que tengan acceso a la clave almacenada

¿Hay algún error en esto, y si es así, cuáles son? Siento que cualquier cosa sería mejor que simplemente almacenar el TOTP como texto simple.

    
pregunta Y0lk 08.03.2018 - 19:45
fuente

1 respuesta

1

¿Dónde ha estado leyendo sobre 2FA y por qué asume que todos almacenan las claves secretas en texto sin formato?

Mientras hablas de TOTP, probablemente deberías leer RFC4226 y RFC6238.

Sí, por ejemplo El módulo Google PAM almacena secretos en texto plano en el directorio de inicio de los usuarios. Pero tenga en cuenta : el algoritmo HOTP se publicó en 2005, el iPhone 1 se publicó en 2007. Simplemente podemos deducir que el algoritmo HOTP no se aplicó a los teléfonos inteligentes, ni el algoritmo TOTP, que se publicó incluso más tarde.

El problema con el cifrado o el texto sin formato se vuelve inmanente si está utilizando HOTP / TOTP para autenticarse en una máquina local. Pero los algoritmos OTP están diseñados para ser utilizados con un sistema backend confiable. Por supuesto, no se puede confiar en una máquina local, ya que un atacante podría sentarse frente a esta misma máquina.

Eche un vistazo a la sección 7.5 Gestión de secretos compartidos, RFC4226 :

Aquí se recomienda cifrar los secretos compartidos, tal como sugirió en el # 1. Y, por supuesto, si alguien obtiene la clave de cifrado, la autenticación es inútil. Pero este es un sistema de back-end, necesita proteger. P.ej. nuestro software de código abierto (¡descargo de responsabilidad!) privacyIDEA en realidad cifra los secretos compartidos y si lo desea, incluso con un módulo de seguridad de hardware. (De nuevo, este es un sistema backend)

Es posible que también desee leer un poco más sobre los defectos del diseño del Google Authenticator: enlace

    
respondido por el cornelinux 27.03.2018 - 08:32
fuente

Lea otras preguntas en las etiquetas