1

JSON Web サービス (C#、WCF) を作成しており、ユーザーを識別する必要があります。セッション管理がないため、ユーザーはコマンドごとに識別文字列を送信する必要があります。私が思いついた解決策は、ユーザーの資格情報と文字列が「期限切れ」になる時間 (現在は 1000ms) を AES 暗号化し、Base64 を使用してエンコード (HttpServerUtility.UrlTokenEncode) してから (URL またはその他の方法で) 送信することです。

私の問題は次のとおりです。エンコードされた文字列はほとんど常に同じように見えますが、変更はほとんどありません (資格情報の日付と時間がほとんど変更されないため、有効期限の分と秒になると思います。文字列は一度しか使用できませんが、 (最後に受信した文字列が記録されており、最後から 2 番目の文字列は期限切れになっている可能性があります)、GET 要求を傍受してブロックし、いくつかのことをごまかしてから再送信するのは簡単だと思います。自動化されているため、タイムアウトでさえおそらく機能しません。

そう。AES でエンコードされた Base64 文字列に追加の (可逆的な) エントロピーを導入するにはどうすればよいですか?

4

2 に答える 2

3

これを行うためのより良い方法は、情報を保持するサーバー側のセッションを持つことです。クライアント側の Cookie は、一時的に認証される種類の GUID になります。サーバー側では、ユーザー名と相関します。これは、後で再利用されるのを防ぐために、サーバー側でも期限切れになる可能性があります。

これにより、ユーザーはユーザー名とパスワードを常に送信しなくても、ランダムな文字列で認証されるようになります。レインボー テーブルを使用すると、ハッシュ化されたパスワードなどを簡単に元に戻すことができます。

暗号化する前に、暗号化された文字列に SALT を追加することも役立ちます。最後に少なくとも 15 のランダムな文字を追加することをお勧めします。これにより、そのルートに進むことを選択した場合に、ブルート フォーシングがはるかに困難になります。

于 2012-03-05T01:36:35.580 に答える
1

AES/CBC 暗号化データにエントロピーを追加する方法は、ランダムな IV を使用し、その IV (正確に 16 バイト、AES ブロックのサイズ) を暗号文の先頭に追加してから、base 64 でエンコードすることです。安全ではない可能性があるため、ECB よりも CBC を使用していることを願っています。

于 2012-03-05T01:49:41.877 に答える