Estoy desarrollando una aplicación cuya arquitectura está organizada de la siguiente manera:
Session host <---> Central relay server <---> Session client
Toda la comunicación entre el session host
de inicio y el session client
de conexión posterior se retransmite a través del servidor central.
El session host
debe protegerse de manera tal que no se pueda acceder sin una clave de sesión pública que lo identifique y una contraseña privada que haya estipulado de antemano.
De hecho, ninguna comunicación debería ser posible con el session host
a menos que el session client
pueda demostrar al servidor central que está autorizado, es decir, que la autenticación debe tener lugar en el mismo servidor central.
En el flujo de trabajo que tengo en mente:
-
El
session host
se conecta al servidor central a través de TLS, enviando un hash de su contraseña elegida. -
El servidor central responde con una clave de sesión generada que identifica el host de la sesión.
-
El
session client
se conecta al servidor central especificando la clave de sesión y el hash de la contraseña intentada. -
El servidor central verifica los hashes para una coincidencia, si hay una coincidencia, los mensajes
session client
s pueden pasar alsession host
, si no hay una coincidencia, la autenticación ha fallado.
Por lo tanto, mi pregunta es la siguiente.
¿El hash de la contraseña de esta manera proporciona alguna seguridad adicional en lugar de simplemente enviar las contraseñas estipuladas y las contraseñas intentadas? ¿Cómo debo manejar la salazón?
Me inclino a pensar que vale la pena, ya que significa que la contraseña completa nunca se envía a través del cable, incluso si se trata de TLS. Ni siquiera se almacena en la memoria RAM en el servidor central. Protege la contraseña del usuario, pero no ofrece seguridad adicional para la sesión ya que el hash se convierte en la contraseña.
Gracias