SRP アルゴリズムを使用しようとしていますが、いくつか質問があります。
これは、SSL/TLS を使用した登録および承認 SRP アルゴリズムに使用するのに適していますか? また、SSL/TLS のみを使用する他のすべての送信については? 実装には C# ソケットを使用します。
g、k、N を生成する方法は? これらをアプリ定数のように使用しても安全ですか?
その SRP アルゴリズムは正しいですか?
//M-モジュラス、g-ジェネレーター、k-乗数、I-ユーザー名、p-パスワード、s-ソルト、v-パス検証者
登録:
クライアント: s = randomString(); x = ハッシュ (s、p); v = g^x %N;
sendToServer(私、s、v);
サーバー:保存 (I、s、v);
承認:
クライアント: a = random(); A = g^a %N;
sendToServer(I, A);
サーバー: if(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、p);
S = ((B - k*(g^x %N)) ^ (a + u*x)) %N;
K = ハッシュ (S);
Mc = Hash( Hash(N) XOR Hash(g), Hash(I), s, A, B, K);
sendToServer(M);
サーバー: S = ((A*(v^u %N)) ^ B) %N; K = ハッシュ (S);
Ms = Hash( Hash(N) XOR Hash(g), Hash(I), s, A, B, K);
if(Mc == Ms) {Rs = Hash(A, M, K); sendToClient(Rs);}
クライアント: Rc = Hash(A, M, K);
if(Rc == Rs) ALL_OK();