¿Es este un método seguro para autenticar clientes?

0

Estoy trabajando con otras personas para escribir software que requiere autenticación antes de que acceda a los recursos. Para autenticarse, ideamos la siguiente estrategia.

  • El cliente envía un SHA1 de un nombre de usuario al servidor
  • El servidor responde con la ID única de un usuario, que es una clave pública en un par de claves RSA
  • El cliente crea un hash SHA256 de los detalles de inicio de sesión de un usuario y lo cifra utilizando la ID única.
  • Si el hash coincide con el hash de los detalles de inicio de sesión de un usuario, el servidor responde con un valor específico y registra la marca de tiempo del momento en que se envió la respuesta.
  • El cliente responde cifrando la marca de tiempo en el momento en que recibe la confirmación y la envía al servidor.
  • Si la marca de tiempo enviada por el cliente está dentro de x segundos de la marca de tiempo registrada del servidor, el servidor considera que el cliente está autenticado.

Actualmente, la comunicación cliente-servidor se llevará a cabo utilizando SSL / TLS sobre TCP.

Mi pregunta es la siguiente: ¿Es este método lo suficientemente seguro y, de no ser así, qué se puede hacer para mejorarlo?

    
pregunta LMS 13.03.2013 - 19:44
fuente

1 respuesta

9

¿Qué estás tratando de lograr? En particular, ¿por qué crearía un nuevo par de claves RSA?

Utiliza SSL ; eso es bueno. Con SSL, el cliente tiene una fuerte garantía de que habla con el servidor correcto y que lo que el cliente enviará solo será legible por ese servidor. En ese momento , simplemente envíe el nombre de usuario y la contraseña a través del túnel. No es necesario jugar con las marcas de tiempo y las claves públicas adicionales, el hash y lo que no. SSL es suficiente.

En el lado del servidor, simplemente almacene un hash de contraseña , como una segunda línea de defensa (no desea que alguien que haya echado un vistazo rápido a la base de datos del servidor obtenga inmediatamente una lista completa de contraseñas válidas). Pero esto está en el servidor y es irrelevante para el protocolo real. El protocolo es: el cliente se conecta al servidor con SSL, el cliente envía inicio de sesión + contraseña en el túnel SSL, el servidor verifica la contraseña y está contento (o no).

Si la protección SSL no es suficiente para usted, entonces el cliente o el servidor (o ambos) están bajo control hostil, y tiene mayores preocupaciones, y no hay nada más que pueda hacer para solucionarlo. Sus juegos con claves adicionales, hashes y marca de tiempo aportan una gran cantidad de complejidad y costos adicionales, sin beneficios de seguridad.

    
respondido por el Tom Leek 13.03.2013 - 19:59
fuente

Lea otras preguntas en las etiquetas