Esquema de autenticación basado en firma digital usando dos contraseñas

2

Estoy trabajando en un sistema de autenticación para un servicio web basado en Bitcoin. Como parte del servicio, los usuarios realizan algunas operaciones menos confidenciales (en su mayoría, leen y envían varios tipos de información) y algunas operaciones altamente sensibles (controlan los fondos de Bitcoin mediante la firma de transacciones).

Estoy buscando crear un sistema de autenticación que:

  1. Se basa en ECDSA y firmas digitales
  2. Permite un fácil acceso a las operaciones menos sensibles, almacenando permanentemente la clave en el almacenamiento local
  3. Requiere información adicional para operaciones altamente sensibles, lo que es más difícil de obtener para un atacante

Esto es lo que planeo hacer actualmente:

Proceso de creación de cuenta

  1. El usuario se registra con dos contraseñas: contraseña A1 y contraseña A2
    • La contraseña A1 se genera como 12 palabras aleatorias (132 bits)
    • La contraseña A2 se genera como 4 palabras aleatorias (44 bits)
  2. Se requiere que el usuario escriba (pero no recuerde) la contraseña A1, y recuerde la contraseña A2 (y posiblemente escriba hasta que la recuerde, en cuyo momento debe destruir la copia escrita)
  3. La contraseña A1 se usa para crear la clave privada A1 usando A1_key = Scrypt(A1_password, salt=GLOBAL_SALT||email, N=20, r=8, p=1)
  4. La clave A1 y la contraseña A2 se usan para crear la clave privada A2 usando A2_key = Scrypt(A2_password, salt=H(A1_key), N=10, r=8, p=1)
  5. Las claves públicas para A1 y A2 se guardan en el servidor.

Iniciar sesión

  1. El usuario inicia sesión con su contraseña A1, que se utiliza para volver a crear su clave pública.
  2. El navegador recuerda la clave A1 en el almacenamiento local, por lo que no es necesario que el usuario vuelva a ingresarla, a menos que inicie sesión desde una nueva máquina o borre su almacenamiento local
  3. La tecla A1 permite autorizar las acciones menos sensibles

Acciones sensibles

  1. Realice acciones confidenciales, se le solicita al usuario que ingrese su contraseña A2
  2. La contraseña A2 se utiliza para derivar la clave A2 y firmar digitalmente la operación
  3. La clave A2 se borra de la memoria inmediatamente después de ser utilizada, y el navegador nunca la recuerda

Con ese sistema instalado, se necesitan las contraseñas A1 y A2 para las operaciones altamente sensibles. Un atacante que obtenga acceso a la máquina del usuario solo tendrá acceso a la tecla A1; para obtener acceso a A2 se requiere un ataque activo mientras se proporciona la contraseña A2.

Mis preguntas

  1. ¿Cómo te sientes acerca de las propiedades de seguridad de dicho sistema? ¿Ves alguna desventaja o vulnerabilidad que me esté perdiendo?
  2. ¿Cree que la molestia de requerir que los usuarios manejen dos contraseñas vale la pena?
  3. ¿Ves alguna manera de mejorar mi esquema sugerido?
pregunta shesek 09.04.2014 - 18:29
fuente

0 respuestas