¿Cómo podría funcionar un esquema de autenticación web basado en PIN?

3

Estoy interesado en implementar la autenticación basada en PIN para una aplicación web, similar a lo que Facebook proporciona en su sitio web móvil.

Aquí está el flujo de usuarios:

  1. El usuario visita el sitio por primera vez en un nuevo navegador e ingresa username & contraseña en el indicador.
  2. Se solicita al usuario que cree un pin de 4 dígitos.
  3. En futuras visitas al sitio solo desde el mismo navegador , el usuario puede autenticarse simplemente ingresando el pin de 4 dígitos.

Al depurar Facebook en un navegador web, puedo ver que el servidor devuelve un nuevo "nonce" después de que el usuario establece el PIN y después de cada inicio de sesión exitoso basado en PIN. Este nonce se almacena en el navegador. Cuando el usuario intenta un inicio de sesión basado en el PIN, la fuente almacenada y el PIN se envían al servidor para validación.

Lo que no sé es lo que probablemente suceda en el servidor.

  1. ¿Qué podría estar almacenando el servidor? ¿Un hash del nonce + PIN?
  2. ¿Cómo podría el servidor validar los intentos de inicio de sesión de PIN?
  3. ¿Hay implementaciones de referencia para un sistema como este que pueda ver?
  4. Suponiendo que el atacante no tome el contenido almacenado en el navegador, ¿es posible que este sistema sea al menos tan seguro como la autenticación tradicional de nombre de usuario / contraseña? Si no, ¿a qué tipo de ataque sería más vulnerable?
pregunta Jonathan Schoeller 29.02.2016 - 12:48
fuente

1 respuesta

3

Su pregunta parece ser sobre qué hace Facebook y qué se podría hacer. No sé qué hace FB, pero puedo intentar hacer algunas buenas suposiciones sobre lo que hace que un sistema sea seguro. Espero que eso ayude.

Déjame intentar reformular lo que Facebook está haciendo. Los sitios generalmente admiten un factor de autenticación único , algo que usted sabe (es decir, su contraseña) ). En los sitios que admiten una funcionalidad de "recordarme", use el factor algo que usted tiene (el "algo" es la cookie en su navegador). Esto puede ser más débil, ya que cualquier persona con acceso a su navegador, incluso un atacante remoto, puede iniciar sesión como usted. Pero no tener que escribir su contraseña cada vez que accede a un sitio, especialmente si tiene una contraseña segura, es una molestia. Así que Facebook está eligiendo un término medio, básicamente tiene una función de "recordarme" de dos factores en la que necesita el nonce ( algo que tiene ) y su PIN ( algo que sabe ).

  
  1. ¿Qué podría estar almacenando el servidor? ¿Un hash del nonce + PIN?
  2.   

Es muy probable que Facebook esté almacenando un hash del nonce + PIN. Tenga en cuenta que esto podría ser un hash simple y seguro en lugar de algo así como la función de almacenamiento de contraseñas bcrypt más compleja. Un hash como SHA512 es irreversible cuando se opera en cadenas de datos grandes, criptográficamente aleatorias. El nonce es (presumiblemente) tal número aleatorio.

  
  1. ¿Cómo podría el servidor validar los intentos de inicio de sesión de PIN?
  2.   

El servidor simplemente rehace el hash y lo compara con el campo apropiado en la base de datos.

  
  1. ¿Hay implementaciones de referencia para un sistema como este que pueda ver?
  2.   

No que yo sepa, tal vez otros puedan ayudar.

  
  1. Suponiendo que el atacante no tome el contenido almacenado en el navegador, ¿es posible que este sistema sea al menos tan seguro como la autenticación tradicional de nombre de usuario / contraseña? Si no, ¿a qué tipo de ataque sería más vulnerable?
  2.   

Si hacemos que suposición realmente grande e infundada , este sistema es más seguro que uname / pwd regular, ya que tiene el efecto de hacer que la contraseña concatene un número aleatorio criptográficamente seguro, el nonce , y el PIN. Las contraseñas de números aleatorios seguras criptográficamente son muy fuertes.

Pero, en el mundo real, nunca se puede suponer que los datos del navegador sean seguros, por lo que la seguridad de este mecanismo se reduce a la seguridad del PIN y del nonce. Eso es difícil de concretar. Esto es definitivamente más seguro que la simple funcionalidad "recordarme". Si los datos de su navegador son razonablemente seguros, esto puede ser más seguro que las contraseñas estándar. De lo contrario, las contraseñas estándar pueden ser más seguras. En casi cualquier situación, esto supera las contraseñas débiles debido al factor algo que tiene .

Algunos puntos de nota:

  • El servidor debe realizar el hash. Si el cliente hiciera el hash, entonces una tabla de base de datos robada podría usarse como credenciales de inicio de sesión. Esto no puede suceder con el servidor que realiza el hash porque el hash es irreversible.
  • Se podría agregar seguridad adicional mediante el uso de una función de almacenamiento de contraseñas como bcrypt en lugar de un hash estándar. Esto solo es necesario si usas un nonce más corto. Los nonces más largos brindarán protección suficiente contra un ataque de fuerza bruta, incluso si se usa un simple SHA512 (o similar).
  • Creo que tiene sentido registrar los intentos fallidos en los inicios de sesión de PIN y, luego de 3 intentos fallidos, elimine el PIN de su base de datos y obligue al usuario a iniciar sesión con su contraseña. Esto proporciona mucha protección contra una búsqueda de diccionario para el PIN, incluso en el caso de que no haya fugas, ya que el PIN se volverá inútil. Incluso si el usuario reutiliza el mismo número que un nuevo PIN en su próximo inicio de sesión, obtendrán una nueva fuente que un atacante necesitará robar para probar más posibilidades de PIN.
respondido por el Neil Smithline 29.02.2016 - 19:37
fuente

Lea otras preguntas en las etiquetas