Я пытаюсь использовать SRP алгоритм, но у меня есть несколько вопросов:Вопросов алгоритма SRP
является то, что хороший выбор, чтобы использовать для регистрации и авторизации алгоритма SRP с SSL/TLS? А для всей другой передачи, используя только SSL/TLS? Я буду использовать C# Sockets для реализации.
Как сгенерировать g, k, N? Можно ли использовать эти константы приложения?
Правильно ли это алгоритм SRP?
// М-модуль, г-генератор, к-мультипликатор, I-имя пользователя, р-пароль, втор-соль, v проход верификатор
Регистрация:
Client : s = randomString(); x = Hash (s, p); v = g^x% N;
sendToServer (I, s, v);
save (I, s, v);
Авторизация:
Клиент: а = случайная(); A = g^a% N;
sendToServer (I, A);
Сервер: если (A!= 0) {b = random(); B = k * v + g^b% N;}
sendToClient (B, s);
u = Хеш (A, B);
if (u == 0) abortConnection();
Клиент: if (B == 0) abortConnection();
u = Хеш (A, B);
if (u == 0) abortConnection();
x = Хеш (с, р);
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);
Сервер: S = ((A * (v^u% N))^B)% N; K = Hash (S);
Ms = Hash (Hash (N) XOR Hash (g), Hash (I), s, A, B, K);
если (Mc == Ms) {Rs = Hash (A, M, K); sendToClient (Rs);}
Клиент: Rc = Hash (A, M, K);
if (Rc == Rs) ALL_OK();
Для большинства приложений я бы не стал беспокоиться о SRP. Положите свои усилия на правильную проверку сертификата/открытого ключа сервера, а затем просто отправьте пароль простым в TLS. – CodesInChaos
@CodesInChaos, так что вы думаете, что правильно настроенного TLS будет достаточно? –
Это было также опубликовано на нем безопасность. Пожалуйста, не размещайте сообщения на нескольких сайтах. – mikeazo