2

ソルトの唯一の目的はレインボー テーブルの攻撃を防ぐことだと聞きましたが、それ以上の価値があるのでしょうか? 辞書ベースの攻撃も防げませんか? そして、ブルートフォースについてはどうですか、そこで塩は役に立ちますか? 理由を教えてください。

次に、マイクロタイム、128 文字のソルト、および 10 億から 100 億の間の乱数を取り、それらを一緒にハッシュするアルゴリズムがあるとします。これにより、優れたレベルのセキュリティが提供されますか? たとえ攻撃者がそれらの詳細の 1 つを知っていたとしても、残りを計算することは計算上実行不可能であるように私には思えます。そうですよね?

ありがとう、

ベン

編集:明確にするために、攻撃者はハッシュ アルゴリズムにアクセスできないため、システムに情報をスパム送信することはできません。彼らが持っているのはハッシュだけであり、それがどのようにコンパイルされたかを理解する必要があります. ハッシュがどのように生成されたかを知っていたとしても、長いソルトを使用してすべての組み合わせをブルート フォースしようとすると、非現実的になりますか?

また、ハッシュはユーザーのパスワードやユーザー名ではなく、認証に使用されるランダムな文字セットです。そのため、ソルトと乱数を保存する必要はなく、結果のハッシュだけを保存する必要があります。その場合、以下のコードのようなもので表される上記のシステムは、攻撃者がユーザーのハッシュが何であるかを現実的に推測することを防ぐのに適したシステムでしょうか?

$salt = "some random characters I made up";
hash('sha256', microtime(true).$salt.mt_rand(1000,9999));

上記の数十億ではなく、わずか 1000 ~ 9999 であることはわかっています。

再度、感謝します。

4

2 に答える 2

5

いいえ - レインボー テーブル攻撃を防ぐだけです。攻撃者は、パスワード エントリごとにレインボー テーブルを作成する必要があります。ソルトは、パスワードハッシュを他のすべてのものと区別する小さなスパイスを追加するためです.

ここでは、辞書ベースの攻撃と総当たり攻撃は本質的に同じものです。検証アルゴリズムが次のようなものであるため、ソルティングはこれらを停止しません

plain-text-passwd = 'secret provided by user'
salt = getSalt(username) //looks the salt value up in database based on the users username
hash-password-in-db = getPassword(username) // looks up hashed password bassed on users username
if(hash(plain-text-passwd + salt) == hash-password-in-db) //if true, password is correct

辞書ベースのブルート フォーシング攻撃では、plain-text-passwd の値がユーザーによってスパムされ、ソルトでハッシュされます。だから塩漬けは何もしない

次に、アルゴリズムがあるとします...

これは無意味です。このすべての情報をユーザー情報テーブルに対して保存する必要があります。ここでは、5 文字のソルト値が同じ目的を果たします。

于 2010-03-03T01:15:11.503 に答える
3

レインボー テーブルは、辞書攻撃とブルート フォース攻撃の両方に使用できる最適化手法です。

ソルトを正しく使用すると、辞書攻撃やブルート フォース攻撃に対して事前計算が実行不可能になります。レインボー テーブルは一種の事前計算最適化であるため、ソルティングによって中和される最適化の 1 つです。

あなたの2番目の例は、実際には、エントロピーの低い部分を含む、より長いソルトです。「乱数」と「ソルト」を区別するのは心配です。なぜなら、ソルトはランダムナンスでなければならないからです。

于 2010-03-03T01:47:45.267 に答える