Mejores prácticas para generar y usar OTP de tiempo aleatorio

3

Supongamos que quiero implementar un sistema OTP que genere números de 6 a 10 dígitos. (supongamos que se usa para restablecer la contraseña o enviar dinero)

Las OTP tienen un tiempo de caducidad, por lo que se eliminan de la memoria del servidor.

He estado buscando en Internet, pero no pude encontrar una sola referencia a las siguientes mejores prácticas:

El "atacante / usuario" debe proporcionar el correo electrónico junto con la OTP para usarlo.

La razón por la que pregunto es porque tengo un colega que desea implementar la OTP de la siguiente manera:

  1. Generar OTP, almacenar (OTP, correo electrónico, expireTime, propósito) en la memoria del servidor. Si se vuelve a generar el mismo OTP, la entrada anterior se eliminará de la memoria.
  2. Enviar OTP al correo electrónico.
  3. Pregunte SOLO la entrada de OTP del usuario (ejemplo / VerifyEmail? OTP = 100434).
  4. Obtenga el (correo electrónico, propósito) de la memoria del servidor para la OTP
  5. Use la OTP para el propósito

No podría convencerlo de que esto es inseguro, ya que un atacante puede simplemente generar OTP aleatorias y llamar a las rutas, y provocar automáticamente algunas acciones. ("La OTP solo expira en 3 minutos", "solo de vez en cuando será un problema", "Lo usamos en otro proyecto y estaba bien", etc.).

Lo que necesito es una publicación de blog o artículo (no demasiado técnico) que explique POR QUÉ esto es inseguro.

Además, ¿cuáles son las formas de implementar un buen sistema OTP de 6 a 10 dígitos?

¿Es suficientemente buena la generación aleatoria de OTP?

Mi sugerencia sería requerir solo unicidad de par (correo electrónico, OTP) en lugar de unicidad de OTP y requerir que el usuario suministre correo electrónico + OTP. ¿Esto es seguro?

    
pregunta Jus12 16.09.2017 - 08:14
fuente

1 respuesta

1

Tu preocupación

Al restablecer una contraseña, es una práctica común enviar un token al usuario. El token es una cadena aleatoria larga . No necesariamente necesita la dirección de correo electrónico en la URL de restablecimiento.

Puede llamar a la URL de restablecimiento con este token y restablecer la contraseña de la cuenta a la que pertenece el token.

Pero vea esto: si está utilizando un "token de 6 dígitos", estas son solo 1 mio posibilidades. Luego, un atacante podría probar todos los valores y de esta forma podría restablecer varias contraseñas. Y si la respuesta es "su contraseña para [email protected] se ha restablecido", entonces el atacante obtendría varias cuentas con contraseñas recién restablecidas.

Sin NINGUNA NECESIDAD de interceptar ningún correo electrónico.

básicamente para transacciones

También puede consultar los valores predeterminados, TOTP ( RFC6238 ) y quizás OCRA (RFC6287 ).

OCRA también le permite generar el valor OTP en función de los datos de la transacción, como el dinero que se enviará.

    
respondido por el cornelinux 20.09.2017 - 09:47
fuente

Lea otras preguntas en las etiquetas