Intento usar el algoritmo SRP pero tengo algunas preguntas:
-
¿Es una buena opción para usar para el algoritmo SRP de registro y autorización con SSL / TLS? ¿Y para todas las demás transmisiones usando solo SSL / TLS? Usaré C # Sockets para la implementación.
-
¿Cómo generar g, k, N? ¿Es seguro usar estas constantes de aplicación similares?
-
¿Es correcto ese algoritmo SRP?
// Módulo M, generador g, multiplicador k, nombre de usuario I, contraseña p, s-salt, verificador de v-pass
Registro :
Cliente: s = randomString (); x = Hash (s, p); v = g ^ x% N;
sendToServer (I, s, v);
Servidor: guardar (I, s, v);
Autorización:
Cliente: a = random (); A = g ^ a% N;
sendToServer (I, A);
Servidor: if (A! = 0) {b = random (); B = k * v + g ^ b% N;}
sendToClient (B, s);
u = Hash (A, B);
if (u == 0) abortConnection ();
Cliente: if (B == 0) abortConnection ();
u = Hash (A, B);
if (u == 0) abortConnection ();
x = Hash (s, p);
S = ((B - k * (g ^ x% N)) ^ (a + u * x))% N;
K = Hash (S);
Mc = Hash (Hash (N) XOR Hash (g), Hash (I), s, A, B, K);
sendToServer (M);
Servidor: S = ((A * (v ^ u% N)) ^ B)% N; K = Hash (S);
Ms = Hash (Hash (N) XOR Hash (g), Hash (I), s, A, B, K);
si (Mc == Ms) {Rs = Hash (A, M, K); sendToClient (Rs);}
Cliente: Rc = Hash (A, M, K);
if (Rc == Rs) ALL_OK ();