Cómo manejar de forma segura un sistema de inicio de sesión [duplicado]

0

Estoy creando una aplicación de escritorio en C # y quiero saber si estoy manejando esto (desde la perspectiva de seguridad) como debería ser o no.

La tabla Mis usuarios tiene tanto hashed_password como salt , ambos son binarios (32).

Para crear una nueva cuenta:

  • El usuario escribe el nombre de inicio de sesión y la contraseña
  • Se genera aleatoriamente una sal (esto sucede en el lado del cliente).
  • La sal creada se utilizará para codificar la contraseña (SHA256).

El inicio de sesión:

  • El usuario escribe su contraseña
  • Se realiza una declaración select en la base de datos para obtener el salt , hash la contraseña escrita con ese salt y luego se compara con la base de datos

Mis preguntas son:

  • ¿Es una mala práctica que su contraseña salte como binary(32) ?
  • ¿Tiene sentido generar la sal en la aplicación y luego enviarla a la base de datos? Si no, ¿por qué? (Solo un usuario tendrá acceso a la función de creación de cuentas, él creará las cuentas para todos)
  • ¿Si la parte en negrita de arriba es una mala práctica?
pregunta Black Panther 08.07.2018 - 12:44
fuente

1 respuesta

1

En primer lugar, no deberías tener contraseñas de hash con solo una única ronda SHA256.

Cuando cambias a un algoritmo de hashing de contraseña real, algunas implementaciones comunes de ellos (al menos en el pasado, no estoy seguro de que esto todavía sea cierto) no manejarán correctamente los bytes de cero (NUL), truncando la entrada a El hash, disminuyendo en gran medida la seguridad. Por lo tanto, almacenar la sal en binario puede ser una mala idea. Además, hace que su sistema sea menos flexible para aumentar la longitud de la sal, etc., en el futuro. Creo que normalmente la sal se almacena junto con la contraseña hash en un solo campo, ambos codificados en base64. Pero puedo estar equivocado, no hago cosas de bases de datos para ganarme la vida. :-)

En esa nota, realmente no puedo responder la pregunta sobre el uso de una consulta de selección para encontrar la sal para un usuario por la misma razón. Pero no sé qué más haría, solo asegúrese de no usar simplemente el nombre de usuario proporcionado por el usuario directamente en la consulta, eso es incorrecto en todo tipo de formas.

    
respondido por el Ben 08.07.2018 - 20:05
fuente

Lea otras preguntas en las etiquetas