3

SRP アルゴリズムを使用しようとしていますが、いくつか質問があります。

  1. これは、SSL/TLS を使用した登録および承認 SRP アルゴリズムに使用するのに適していますか? また、SSL/TLS のみを使用する他のすべての送信については? 実装には C# ソケットを使用します。

  2. g、k、N を生成する方法は? これらをアプリ定数のように使用しても安全ですか?

  3. その 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();

4

2 に答える 2

2

自分でセキュリティ プロトコルを実装するときは、細心の注意を払います。それを正しく行うことは非常に困難であり、複雑なセキュア プロトコルを実装することで、正しく行わないとシステムのセキュリティが実際に危険にさらされることがよくあります (たとえば、間違ったメモリ管理、タイミング攻撃に対する脆弱性など)。

一般的なアドバイスは、監査済みで信頼できる (オープンソース) 保守されたライブラリを使用して、暗号処理を行うことです。これらのライブラリは通常、特殊なハードウェア暗号化命令を使用するため、パフォーマンスも向上します (たとえば、AES は最新のハードウェアで非常によくサポートされているため、高速であり、タイミング攻撃に対して脆弱ではありません)。

したがって、私の答えに照らして、SRP プロトコルの実装を提供するライブラリhttp://bouncycastle.org/を見てください。

さらに、ユースケースを真剣に検討する必要があります。何百万人ものユーザー向けに非常に安全なメール サーバーを開発していますか?それとも、休日の写真でホーム サーバーを保護したいだけですか? 最初のケースでは、最先端のセキュリティ アルゴリズムを備えた非常に堅牢で安全なシステムを使用する価値があります。後者の場合、そうではありません - 適切なパスワードと SSL で十分です :-)。

于 2015-02-26T19:19:05.007 に答える