職場では、塩に関して2つの競合する理論があります。私が取り組んでいる製品は、ユーザー名や電話番号などを使用してハッシュをソルトします。基本的にユーザーごとに異なりますが、すぐに利用できます。他の製品はユーザーごとにランダムにソルトを生成し、ユーザーがパスワードを変更するたびに変更されます。ソルトはデータベースで暗号化されます。
私の質問は、2番目のアプローチが本当に必要かどうかです。純粋に理論的な観点からは、最初のアプローチよりも安全であることは理解できますが、実用性の観点からはどうでしょうか。現在、ユーザーを認証するには、ソルトを暗号化せずにログイン情報に適用する必要があります。
それについて考えた後、私はこのアプローチから実際のセキュリティの向上を見ることはありません。アカウントごとにソルトを変更すると、攻撃者が各アカウントのハッシュをすばやく特定する方法を知っていたとしても、ハッシュアルゴリズムをブルートフォースにしようとする試みが非常に困難になります。これは、パスワードが十分に強力であることを前提としています。(明らかに、すべてが2桁のパスワードのセットの正しいハッシュを見つけることは、8桁のパスワードの正しいハッシュを見つけるよりもはるかに簡単です)。私の論理が間違っていますか、それとも私が見逃しているものはありますか?
編集:わかりましたので、ここで、ソルトを暗号化するのは本当に難しいと思う理由です。(私が正しい軌道に乗っているかどうかはわかります)。
以下の説明では、パスワードは常に8文字、saltは5文字で、すべてのパスワードが小文字で構成されていると仮定します(計算を簡単にするためです)。
エントリごとに異なるソルトがあると、同じレインボーテーブルを使用できません(実際には、十分なサイズの1つがあれば実際には技術的に使用できますが、今のところは無視します)。これは私が理解していることから、ソルトの本当の鍵です。すべてのアカウントをクラックするには、それぞれについて話すために、車輪を再発明する必要があるためです。ハッシュを生成するために正しいソルトをパスワードに適用する方法を知っている場合、ソルトはハッシュされたフレーズの長さ/複雑さを実際に拡張するだけなので、そうします。したがって、ソルトとは何かを知っているので、パスワードとソルトを "知っている"ために生成する必要がある組み合わせの数を13 ^ 26から8 ^ 26に削減します。今ではそれが簡単になりますが、それでも本当に難しいです。
ソルトの暗号化に移ります。ソルトが暗号化されていることがわかっている場合は、最初にそれを解読しようとはしません(十分なレベルの暗号化があることを前提として)。無視します。それを解読する方法を理解する代わりに、前の例に戻って、13 ^ 26のすべてのキーを含むより大きなレインボーテーブルを生成します。ソルトを知らないと間違いなく私は遅くなりますが、ソルトの暗号化を最初に解読しようとするという記念すべき仕事が増えるとは思いません。だからそれだけの価値はないと思います。考え?
以下は、ブルートフォース攻撃を受けた場合のパスワードの保持期間を説明するリンクです。http: //www.lockdown.co.uk/?pg = combi