今日、私はその違いを友人に説明するのに苦労しました。
「ランダムな」文字列を生成するときにシードが使用されることを知っています。また、ソルトはハッシュに異なる結果を提供するときに使用されます。
これらの概念と考えられる違いを説明するためのより良い方法は何ですか。
シード:
暗号化には乱数が使用されていますが、真に乱数を生成するにはどうすればよいですか?現在のミリ秒?使用中のプロセッサスレッドの数は?出発点が必要です。これはシードと呼ばれ、乱数を開始します。
塩:
文字列をハッシュすると、常に同じハッシュになります。
foo
= acbd18db4cc2f85cedef654fccc4a4d8
毎回。
これは、パスワードなど、本当に隠しておきたいものを保存したい場合に問題になります。 acbd18db4cc2f85cedef654fccc4a4d8
が表示されている場合は、常にfoo
であることがわかります。したがって、元の文字列に「塩」を追加して、一意であることを確認します。
foo
+ asdf
= e967c9fead712d976ed6fb3d3544ee6a
foo
+ zxcv
= a6fa8477827b2d1a4c4824e66703daa9
したがって、「塩」は元のテキストを不明瞭にすることで「ハッシュ」をより良くします。
私が考えることができる最も単純な用語:
私はそれらを使うのが好きです。なぜなら、物事を秘密にするかどうかという考えは、誰にとっても意味のあるものだからです。
大きな違いはないので、あなたの友人は彼の混乱で実際に正当化されます。高レベルでは、それぞれが入力として使用され、スクランブル機能の出力を変更します。
ハッシュ関数と乱数ジェネレーターの違いと、それらが通常使用される目的を強調してみてください。また、統計に使用される通常の乱数ジェネレーター(予測可能または既知のシードを使用できる)と、秘密鍵の生成に使用される暗号で保護された乱数ジェネレーター(シードとして推測できないエントロピーのソースが必要)を区別できます。 )
PRNG(シード)=乱数の文字列
hash(salt + password)=ハッシュされたパスワード
乱数ジェネレータは、コンピュータの基本的な性質を強調します。それらはランダムではありません。知覚されたランダム性でさえランダムではありませんが、ランダムに近いですが、最終的には目標に向かって半分の距離を歩いて、実際には到達しないという古い帽子の例を引き出すかもしれません。