Cómo almacenar semillas OTP de forma segura en el servidor de validación

14

'Todo el mundo' sabe cuándo almacenar contraseñas en una base de datos, esto debe hacerse de forma segura, por ejemplo, utilizando sales y un algoritmo de hashing adecuado.

La mayoría de las soluciones OTP (One Time Password) se basan en un valor semilla aleatorio secreto largo. De alguna manera, esto debe almacenarse en el servidor de validación para poder verificar el valor OTP enviado.

En cierto modo, estas semillas tienen el mismo rol que las contraseñas proporcionadas por el usuario y deben almacenarse de forma igualmente segura. Salado & El hashing no funcionará aquí ya que esto romperá el algoritmo OTP.
La mayoría de los tokens OTP pequeños están protegidos físicamente al ser más o menos a prueba de manipulaciones, pero esto no se aplica al servidor.

¿Cómo pueden almacenarse las semillas de manera adecuada?

Y si hay una solución para almacenar las semillas sin hash, ¿por qué no aplicar el mismo método a las contraseñas normales?

    
pregunta Jeff 16.11.2012 - 15:52
fuente

3 respuestas

7

En términos generales, lo mejor que puedes hacer es endurecer el servidor para hacerlo tan resistente al compromiso como sea posible.

Lo ideal sería almacenar la semilla en un módulo de seguridad de hardware (HSM; también conocido como un coprocesador criptográfico). Se aseguraría de que la semilla nunca abandone el HSM, es decir, realice todos los cálculos criptográficos en el HSM. Esto ofrece una mejor protección, aunque es más caro.

Pero, como lo señala correctamente, no puede almacenar la semilla en forma de hash. La semilla debe almacenarse en el claro, por lo que si ese servidor se compromete , usted are en grande trouble . Esto significa que es absolutamente vital que protejas ese servidor tan bien como puedas.

Las semillas OTP son diferentes de las contraseñas. Las personas tienden a usar la misma contraseña en varios sitios; Eso no sucede con las semillas OTP. Las contraseñas de hash se utilizan en parte para proteger las contraseñas de los usuarios, de modo que si la base de datos del sitio X no se cumple, las cuentas de los usuarios de X en otros sitios no se ven comprometidas. Esa amenaza simplemente no se aplica a las semillas OTP.

También, con contraseñas, usted puede hash de contraseñas. Si puede, también podría hacerlo, ya que ayuda a mitigar algunos riesgos. (Y las contraseñas son tan ampliamente utilizadas y utilizadas por los desarrolladores que no son expertos en seguridad, que es casi un hecho dado que muchos sitios que usan contraseñas experimentarán una brecha de seguridad en algún momento). Ya que no puede hash de semillas OTP, esto la mitigación simplemente no está disponible para las semillas OTP, por lo que tendrá que usar otros métodos para proteger sus semillas OTP. Afortunadamente, solo los sitios muy conscientes de la seguridad deberían almacenar sus propias semillas OTP, por lo que si uno es optimista, uno puede esperar que esté en una mejor posición para aplicar otras defensas.

De todos modos, dado que las semillas OTP tienen características diferentes de las contraseñas, no debe asumir que cada mitigación de las contraseñas se transferirá necesariamente también a las semillas OTP.

    
respondido por el D.W. 16.11.2012 - 22:04
fuente
9

Puede cifrar la semilla OTP usando una clave simétrica derivada de la contraseña del usuario. Sin embargo, esto requiere que el usuario ingrese la contraseña antes de ingresar a la OTP, de lo contrario, el servidor no podrá descifrar la semilla OTP.

Alternativamente, podría tener un servidor altamente seguro que pase la semilla OTP cifrada y devuelva una OTP válida actualmente. La clave simétrica para las semillas se almacena en este servidor. HSM también podría ayudarte aquí.

    
respondido por el Matrix 21.11.2012 - 11:03
fuente
-2

Digamos que tienes un rango de tiempo TOTP de 'T'. es decir, su OTP expira después del tiempo T. Lo que se puede hacer es (para todos los usuarios uno por uno) que si el usuario no ha solicitado una hora OTP T antes de la hora actual, puede cambiar la semilla. Como el usuario no ha solicitado un otp en nuestra ventana de tiempo, podemos estar seguros de que no hay una OTP que aún no haya sido autenticada por nuestro servidor. Entonces, en caso de que el atacante obtenga la semilla, la semilla habría cambiado.

    
respondido por el Ayush Maheshwari 29.11.2018 - 23:48
fuente

Lea otras preguntas en las etiquetas