web-dev-qa-db-ja.com

暗号化シードとソルトの違いは何ですか?

今日、私はその違いを友人に説明するのに苦労しました。

「ランダムな」文字列を生成するときにシードが使用されることを知っています。また、ソルトはハッシュに異なる結果を提供するときに使用されます。

これらの概念と考えられる違いを説明するためのより良い方法は何ですか。

27
Gabriel Fair

シード:

暗号化には乱数が使用されていますが、真に乱数を生成するにはどうすればよいですか?現在のミリ秒?使用中のプロセッサスレッドの数は?出発点が必要です。これはシードと呼ばれ、乱数を開始します。

塩:

文字列をハッシュすると、常に同じハッシュになります。

foo = acbd18db4cc2f85cedef654fccc4a4d8毎回。

これは、パスワードなど、本当に隠しておきたいものを保存したい場合に問題になります。 acbd18db4cc2f85cedef654fccc4a4d8が表示されている場合は、常にfooであることがわかります。したがって、元の文字列に「塩」を追加して、一意であることを確認します。

foo + asdf = e967c9fead712d976ed6fb3d3544ee6a

foo + zxcv = a6fa8477827b2d1a4c4824e66703daa9

したがって、「塩」は元のテキストを不明瞭にすることで「ハッシュ」をより良くします。

44
schroeder

私が考えることができる最も単純な用語:

  • シードは、一般に秘密にしておく必要があるランダムな値であるか、暗号化が破られている
  • A saltは、一般に秘密ではないランダムな値で、事前計算された攻撃を困難にするために使用されます

私はそれらを使うのが好きです。なぜなら、物事を秘密にするかどうかという考えは、誰にとっても意味のあるものだからです。

10
Cort Ammon

大きな違いはないので、あなたの友人は彼の混乱で実際に正当化されます。高レベルでは、それぞれが入力として使用され、スクランブル機能の出力を変更します。

ハッシュ関数と乱数ジェネレーターの違いと、それらが通常使用される目的を強調してみてください。また、統計に使用される通常の乱数ジェネレーター(予測可能または既知のシードを使用できる)と、秘密鍵の生成に使用される暗号で保護された乱数ジェネレーター(シードとして推測できないエントロピーのソースが必要)を区別できます。 )

5
John Deters

PRNG(シード)=乱数の文字列

hash(salt + password)=ハッシュされたパスワード

乱数ジェネレータは、コンピュータの基本的な性質を強調します。それらはランダムではありません。知覚されたランダム性でさえランダムではありませんが、ランダムに近いですが、最終的には目標に向かって半分の距離を歩いて、実際には到達しないという古い帽子の例を引き出すかもしれません。

0
munchkin