¿Calificar mi esquema de autenticación? (Esto se siente lo suficientemente simple como para ser un duplicado, pero realmente es difícil buscar este tipo de preguntas. Lo siento si es un duplicado).
Cuando se configura una contraseña, se la revisa inmediatamente con un valor de sal aleatorio S1
y se almacena como H1
.
Cuando un usuario intenta autenticarse, se envían S1
y un valor aleatorio S2
. Luego, tienen su contraseña con S1
para obtener H1
, luego hash que con S2
para obtener H2
. H2
se envía al servidor.
El servidor simplemente calcula H2
de la misma manera, luego compara los valores. El servidor genera un valor aleatorio de 64 bits C
y lo envía al usuario.
Todas las comunicaciones posteriores con el servidor contienen C
como un token de autenticación.
El punto aquí es garantizar que la contraseña nunca se envíe en texto claro; se supone que el canal de comunicación entre el usuario y el servidor es "razonablemente seguro", ya que este esquema es para un objetivo de valor extremadamente bajo; es probable que las contraseñas más comunes del usuario sean la información más valiosa presente.
El protocolo debe defenderse contra:
- Determinación de la contraseña por un atacante pasivo o activo
- Suplantación del usuario por parte de un tercero sin capacidades de espionaje
EDITS
- No estoy usando TLS porque es para un videojuego; Estoy tratando de minimizar la latencia tanto como sea posible.
- La contraseña del usuario se establece mediante una aplicación web protegida por TLS.
- No me importa (mucho) que la NSA secuestre la cuenta de un usuario tanto como la cuenta de
1337Kid__1
hijackingOtherPlayer
o un atacante que intercepta las contraseñas.- En el apartado anterior, asumo que es difícil hacer una interceptación del tráfico de otro usuario (para alguien que no es NSA) sin estar en el mismo segmento de red que ellos; Si esta es una noción de la que debería desanimarme, hágamelo saber.