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?