Uso de BCrypt para transmitir datos confidenciales en la configuración del cliente / servidor

2

Estoy desarrollando un software en el que necesito transmitir datos confidenciales (contraseñas) en una configuración de servidor / cliente mediante TCP. Todos los datos se cifran mediante AES (la clave simétrica es única para cada intercambio y se transmite mediante PGP / RSA, esta parte es segura).

Me gustaría, para mayor seguridad, codificar los datos confidenciales antes de enviarlos. Las contraseñas se almacenan en una base de datos SQL. Usar SHA-256/512 funciona de maravilla, pero preferiría usar BCrypt, que es sólido en caso de que la base de datos sea robada. Sin embargo, dado que BCrypt requiere la contraseña simple para verificar las coincidencias y como la verificación se realiza en el lado del servidor, esto requerirá que envíe la contraseña en texto sin formato (aunque esté encriptado con AES). También pensé en hacer alrededor de 1000 iteraciones hashing de la contraseña usando sha-256 / sha-512, pero no estoy seguro de que sea realmente la mejor idea.

¿Cuál sería la mejor manera de garantizar una transmisión totalmente segura y un almacenamiento de contraseñas totalmente seguro?

    
pregunta Corentin Brossutti 23.01.2018 - 15:39
fuente

3 respuestas

2

Sin la seguridad de nivel de transporte adecuada (es decir, una conexión TLS) no es posible asegurar una aplicación contra los atacantes de hombre en el medio. Usar bcrypt o algo más para transferir la contraseña no ayuda a la situación. Debe tener una conexión segura entre el cliente y el servidor, tanto con el cifrado como con la autenticación.

Una vez que tenga eso, no hay ningún problema en enviar la contraseña tal y como se hace a través de la conexión segura.

Otra superficie de ataque es un compromiso de la base de datos, para el cual la solución adecuada es almacenar una contraseña cifrada en lugar de una contraseña de texto sin formato en la base de datos.

    
respondido por el Sjoerd 24.01.2018 - 08:48
fuente
0

Una posibilidad es utilizar la contraseña tanto en el cliente como en el servidor.

  1. El cliente envía bcrypt (contraseña) al servidor.
  2. Las computadoras del servidor bcrypt (bcrypt (contraseña)) y comprueban la contraseña con la base de datos.

Por lo tanto, las contraseñas en la base de datos se cifran dos veces. De esta manera, las contraseñas de texto simple son seguras contra la intercepción y el token de autenticación es seguro contra el compromiso de la base de datos.

    
respondido por el Sjoerd 23.01.2018 - 17:05
fuente
0

Podría intentar enviar el salt al cliente, que luego lo usaría para cifrar la contraseña. O pídale al cliente que ingrese la contraseña.

Luego, el servidor ejecutaría un código de acceso de contraseña de la contraseña y verificaría si coincide.

APLICENTEMENTE esto es más seguro, excepto que no lo es. Porque si el ataque contra el que está defendiendo (la captura del secreto en tránsito) tuvo éxito, el atacante ahora estaría en posesión de BCrypt (pwd) y, con eso, podría obtener acceso y hacerse pasar por un cliente legítimo. El sistema ya no requiere el conocimiento de la contraseña, solo de su hash bcrypt . Ahora estás expuesto a un ataque de reproducción .

Para poder cambiar la sal y defenderse contra los ataques de repetición luego de una captura exitosa, necesitarás almacenar la contraseña de texto simple.

Lo que puedes hacer entonces es:  - memorice la contraseña cifrada con salt S1 en el servidor, cada contraseña tiene su propio salt  - enviar al cliente un desafío que contenga S1 y SX (generado al azar cada vez); esto requiere que el usuario ya haya sido enviado al servidor. Un usuario desconocido recibe una sal creada mediante el hashing de un secreto con el nombre de usuario .  - el cliente tiene la contraseña de texto simple y le envía Bcrypt (SX, Bcrypt (S1, contraseña))

  • tienes Bcrypt (S1, contraseña) y, por lo tanto, no puedes revelar la contraseña
  • el cable ve Bcrypt (SX, hash) y, por lo tanto, no puede revelar el hash
  • obtienes un cifrado de CPU duro en cada etapa.
respondido por el LSerni 23.01.2018 - 17:25
fuente

Lea otras preguntas en las etiquetas