Almacenar la contraseña de forma segura pero poder verificar los caracteres separados en esa contraseña

0

Estoy escribiendo un sistema en el que el usuario debe iniciar sesión con dos contraseñas: una contraseña normal (con sal y hash, almacenada en la base de datos) y una contraseña especial donde el usuario necesita escribir solo algunas letras, por ejemplo. "por favor escriba la segunda, tercera y última letra de su contraseña".

¿Cómo se puede diseñar ese sistema para admitir la segunda contraseña?

Idea 1: almacena la contraseña en texto plano. Por supuesto no.

Idea 2: Almacena cada personaje por separado, salado y picado. Mal porque si el atacante conoce la sal, solo se necesitan unas pocas docenas de conjeturas para forzar al personaje.

¿Hay alguna otra manera?

Aclaraciones:

Las dos contraseñas deben escribirse al mismo tiempo, de esta manera:

Los propósitos de la segunda contraseña son:

  • Derrota al atacante que mira por encima de tu hombro mientras escribes la contraseña o un keylogger.
  • Derrota el administrador de contraseñas en tu navegador, cuando alguien como tu familiar puede iniciar sesión en tu cuenta si eliges guardar tu contraseña en el navegador.
  • Proporcione una alternativa simple a 2FA cuando el usuario no está accediendo a información extremadamente confidencial, por lo que no les molestamos en recuperar su generador de contraseña de hardware (que también tienen).
pregunta K48 21.09.2018 - 13:25
fuente

2 respuestas

3

No puede, al menos no en el software, por las razones dadas por Matthew.

Si tiene una contraseña de cinco caracteres con a-z, es 26 * 26 * 26 * 26 * 26, o 11881376 posibilidades. Sin embargo, si puede probar un carácter a la vez, es 26 + 26 + 26 + 26 + 26, o 130 posibilidades.

Incluso para contraseñas largas y complejas, esto reduce la cantidad de trabajo que se debe hacer en niveles triviales.

Además es mala seguridad. Las personas deben usar administradores de contraseñas, para tener contraseñas únicas en todas partes. Los administradores de contraseñas no admiten este tipo de consultas. E incluso si se trata de una contraseña escrita, es difícil, ya que muchas personas confían en la memoria muscular para ingresar contraseñas. No podría darle el tercer carácter de mi contraseña sin escribirla y verificarla.

    
respondido por el vidarlo 21.10.2018 - 15:17
fuente
0

Use un Módulo de seguridad de hardware (HSM) que, de hecho, es de solo escritura para la contraseña completa y que genera las partes necesarias. El flujo en este caso es que su aplicación solicita al HSM un paso de verificación, devuelve un conjunto de letras esperadas y alguna forma de identificación para la solicitud, el usuario proporciona esas cartas, la aplicación las envía al HSM y al HSM. devuelve "sí" o "no", dependiendo de si son correctos. El HSM debe requerir que se proporcione el mismo conjunto de letras para esa cuenta hasta que el usuario las proporcione, o la cuenta esté bloqueada, para evitar que un atacante con conocimiento parcial de la contraseña pueda iniciar sesión actualizando hasta que obtengan los caracteres que lo sé Este método debe ser seguro, dado un HSM confiable, pero es probable que también sea costoso.

El almacenamiento de la contraseña de texto sin formato o los caracteres individuales con hash permiten que un atacante capaz de acceder a la tabla de la base de datos encuentre la contraseña completa con un esfuerzo predecible (bajo). De manera similar, el hash de cada grupo posible de caracteres da como resultado un pequeño espacio de búsqueda potencial, incluso si cada grupo tiene una sal única (la fuerza bruta de tres caracteres no es difícil, incluso con una sal larga, ya que la sal se fija para cada uno) . Cifrar la contraseña secreta aumenta el esfuerzo requerido, pero solo un poco: si usa la contraseña inicial (estirada apropiadamente) como clave, anule el concepto de que necesita dos datos para iniciar sesión. Si usa algo que esté almacenado en el servidor, el atacante potencialmente tiene acceso a la clave, por lo que puede obtener las contraseñas.

    
respondido por el Matthew 21.09.2018 - 14:12
fuente

Lea otras preguntas en las etiquetas