web-dev-qa-db-ja.com

ハッシュソルティングとノンシングの違いは何ですか?

私はこれら2つのトピックについて読みましたが、ソルトハッシュとノンシングハッシュの違いを完全には理解できていないようです。

51
Ryan Ward

ソルトは秘密ではないランダムな値であり、同じプレーンテキストが常に同じ出力値にハッシュされないようにするために使用されます。 Rainbow Tables などの事前計算攻撃を防ぐために使用されます。

ナンス(「1回使用する数」)は、通常はランダムに生成される-暗号化スキームのメッセージに関連付けられた値であり、特定のスコープ(特定の時間間隔やセッションなど)内で一意である必要があります。通常、これは リプレイ攻撃 を防止するために使用されます。

ノンスと塩は似ており、関連する目的を果たしますが、同一ではありません。どちらも通常、シークレットではなくランダムに生成され、他の方法ではシステムに対して可能な攻撃を防止するのに役立ちます。それらは主に、それらが使用されるコンテキスト、および繰り返しの結果において異なります。重複するソルトは重要ではありませんが、重複するナンスは悲惨な結果をもたらす可能性があります。

46
Nick Johnson

nonce =一度使用される数。ハッシュするデータのビットごとに一意のソルトを生成する場合、それは本質的にナンスでもあります。

11
Marc B

ハッシュは、暗号化(復号化できるキーを使用)とは異なり、一方向のプロセスです。データの固定サイズとわずかな変更により、まったく新しいハッシュ値が生成されます。指紋のようなものです。例:MD5、MD6、SHA-1、SHA-2など。


ハッシュ形式でデータベースにパスワードを保存することも、レインボーテーブル、ディクショナリ攻撃、ブルートフォースでは安全ではありません(GPUは1秒あたり数十億のハッシュを計算できます)。これらの問題を回避するには、Saltを使用する必要があります。

Salt(random number)が使用されているため、同じパスワードが常に同じキーを生成するわけではありません。つまり、saltを追加するだけで、共通のパスワードが一般的ではなくなります。

A Saltは、ハッシュに次のようにハッシュをパスワードに変換する巨大なルックアップテーブルであるRainbowテーブルを使用したRainbow攻撃を防ぐためにハッシュに追加するものです。

dffsa32fddf23safd -> passwordscrete 
f32ksd4343fdsafsj -> stackoverflow

したがって、ハッカーはこのレインボーテーブルを見つけることができます。この問題を回避するには、パスワードとソルトの組み合わせでハッシュを保存する必要があります。

hash= hashFunction(passowrd+salt)

A Nonce[〜#〜] n [〜#〜]使用されるumber once)は秘密またはランダムである必要はありませんが、同じキーで再利用しないでください。これは、リプレイ攻撃(別名プレイバック攻撃)を防ぐために使用されます。

6
Premraj