web-dev-qa-db-ja.com

SALTとは何ですか?

私はあちこち検索してきましたが、「塩」とは何か、それをどのように使用/実装するかはまだわかりません。 noobishの質問で申し訳ありませんが、私はphpを自習しています。

41
Drewdin

私は間違いなく専門家ではありませんが、本当に短い答えは、テキスト行を「塩漬けする」ということは、末尾にいくつかの余分な文字を付けることを意味するということです。 「塩」を「abcdefg」で塩漬けして「saltabcdefg」を得ることができます。これは、「塩」がたまたま推測しにくくしたいパスワードである場合に役立ちます。

通常、パスワード+塩は、逆行するのが難しいプロセスによって完全に異なる文字列に変換(「ハッシュ」)されます。この変換された文字列は、ソルトのプレーンテキストとともにパスワードとして保存され、パスワードの本来のプレーンテキストは破棄されます。誰かが正しいパスワードを入力したことを確認したい場合は、入力した内容をパスワードファイルにリストされているソルトと組み合わせて、結果をハッシュします。結果が記録にあるパスワードハッシュと一致する場合、正しいパスワードが入力されていることがわかります。

ソルトの実装は、ソルトとして機能する文字列を選択し、それを追跡することと同じくらい簡単です。ただし、パスワードごとにソルトを変更することもできます。その場合、パスワードと塩の組み合わせを追跡し、バリエーションを生成する方法が必要になります。もちろん、パスワードのプレーンテキストを保存するのではなく、パスワードをハッシュすることもおそらく必要になるため、ハッシュ関数を選択する必要があります。この時点で、問題はソルティングからパスワードセキュリティスキームの実装に進みました。

PHPの場合、いくつかのフレームワークがこれをどのように実装しているかを調べてください。それぞれCakePHPとZendの2つのクイックリンク:

http://www.jotlab.com/2010/04/18/cakephp-Rainbow-table-protection-behaviour/

http://www.zimuel.it/blog/2009/07/build-a-secure-login-with-zend-framework/

43

何年も前にこの質問を最初に聞いたとき、「塩は食べ物のために何をするのですか?」答えは、食物に多様性を加えるということです。暗号ソルトの背後にある考え方は、同じ2つのパスワードが同じ暗号値にハッシュされないように、文字列の末尾または先頭に追加するものだということです。

これを考慮してください-「hello123」のような本当に一般的なパスワードがあり、それが他のすべての「hello123」パスワードとまったく同じ暗号化ハッシュにハッシュされた場合、ハッシュされたパスワードのリストを見るだけではわかりません誰が同じ暗号化ハッシュを持っていて、自分のアカウントで私のパスワードを使用していますか?

25
jwir3

コメントにあります、ありがとう ceejayoz

http://en.wikipedia.org/wiki/Salt_(cryptography)

ソルトは、ハッシュする前に文字列に追加するもので、パスワードなどに別のセキュリティ層を追加します。

6
Neal

ソルトは、暗号化またはハッシュする文字列に追加される(短い)文字列です。例:

<?php
 $password = 'abcdefg';
 $salt = 'anythingyouwant_';
 $pw_hash = md5($salt.$password);
?>

"anythingyouwant_abcdefg"が既にハッシュデータベースに保存されている可能性は低いため、これによりハッシュにセキュリティが追加されます( http://en.wikipedia.org/wiki/Rainbow_tables

6
Sutuma

何らかの理由で。通常、暗号化を初めて使用する人々が塩を把握するのは困難です。一度クリックすると、コンセプトは非常に簡単です。この記事をご覧ください。私はそれがほとんどよりも概念をよく説明すると思う。

http://cryptodox.com/Salt_%28cryptography%29

0
Matthew Vines

ハッシュ用のいくつかのアルゴリズムを組み合わせて、ダブルハッシュアルゴリズムを作成することで、少し物事を盛り上げましょう。

$password = "myPassword";
$salt = sha1(md5($password)).'k32duem01vZsQ2lB8g0s'; 
$password = md5($password.$salt);

ご覧のとおり、まずダブルハッシュアルゴリズム(md5およびsha1)を使用してパスワードをハッシュし、キーと連結してソルト値を作成しました。その後、実際のパスワードと生成されたソルト値を組み合わせて、md5で再度ハッシュしました。利点は、このようにalt値がランダムであり、変化するため、破ることがほぼ不可能になることです。つまり、100万年待ち、スーパーコンピューターを手に入れることができるなら、それを壊してみてください。

0
Lead Developer