Что такое соль и как мне ее использовать? - PullRequest
41 голосов
/ 07 апреля 2011

Я искал вокруг, и я все еще не уверен, что такое «соль» и как ее использовать / реализовывать. Извините за нубистский вопрос, я самообучающийся php.

Ответы [ 6 ]

43 голосов
/ 07 апреля 2011

Я определенно не эксперт, но очень короткий ответ заключается в том, что «засоление» строки текста означает добавление нескольких дополнительных символов в конце.Вы можете посолить "соль" с "abcdefg", чтобы получить "saltabcdefg".Это может быть полезно, если «соль» - это пароль, который вы хотите сделать более сложным для угадывания.

Как правило, пароль + соль преобразуются («хэшируются») в результате некоторого труднообращаемого процесса в совершенно другую строку.Эта преобразованная строка затем сохраняется как пароль вместе с открытым текстом соли, и исходный простой текст самого пароля отбрасывается.Когда вы хотите проверить, что кто-то ввел правильный пароль, вы объединяете все, что они ввели, с солью, указанной в файле паролей, и затем хешируете результат.Если результат соответствует хэшу пароля, который у вас есть в записи, то вы знаете, что он ввел правильный пароль.

Реализация соли может быть так же проста, как выбрать строку, служащую солью, а затем убедиться, что вы отслеживаете ее.Но вы можете изменить соль для каждого пароля, и тогда вам понадобится способ отслеживать комбинации пароль и соль, а также генерировать варианты.Конечно, вы, вероятно, также захотите хешировать пароль, а не сохранять его в виде обычного текста, поэтому вам придется выбрать хеш-функцию.В этот момент проблема возникла из-за правильной засолки и реализации схемы защиты паролем.

Для PHP вы можете посмотреть, как некоторые фреймворки реализовали это.Две быстрые ссылки для CakePHP и Zend соответственно:

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/

25 голосов
/ 07 апреля 2011

Когда я впервые задал этот вопрос, много лет назад меня спросили: «Что соль делает для еды?»Ответ в том, что это добавляет разнообразия в еду.Идея, лежащая в основе криптографической соли, заключается в том, что это то, что вы добавляете в конец или начало строки, чтобы два идентичных пароля не хэшировали одно и то же криптографическое значение.

Учтите это - если бы у меня был действительно распространенный пароль, такой как 'hello123', а затем он хэшировался с тем же криптографическим хешем, что и все другие пароли 'hello123', я не мог бы просто посмотреть всписок хешированных паролей, чтобы узнать, кто еще имел такой же криптографический хеш, и использовать мой пароль в своей учетной записи?

6 голосов
/ 07 апреля 2011

Соль - это (короткая) строка, которая добавляется к строке, которую вы хотите зашифровать или хешировать. Пример:

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

Это повышает безопасность хэша, так как маловероятно, что "whatyouwant_abcdefg" уже хранится в базе данных хэша (http://en.wikipedia.org/wiki/Rainbow_tables)

6 голосов
/ 07 апреля 2011

Ну, это в комментариях, спасибо ceejayoz

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

Соль - это то, что вы добавляете в строку перед тем, как ее хешировать, она добавляет еще один слойбезопасности для паролей и тому подобное.

0 голосов
/ 17 апреля 2014

Давайте немного оживим ситуацию, объединив несколько алгоритмов хеширования и сделав алгоритм двойного хеширования:

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

Как видите, мы сначала хэшировали пароль, используя алгоритм двойного хеширования (md5 и sha1) и конкатенируя с созданным ключом солт-значением. После этого мы скомбинировали реальный пароль с сгенерированным значением соли и снова хэшировали его с помощью md5. Преимущество состоит в том, что таким образом alt value является случайным, и оно изменяется, делая практически невозможным его изменение. Я имею в виду, если вы можете подождать миллион лет и иметь суперкомпьютер в своих руках, попробуйте сломать его.

0 голосов
/ 07 апреля 2011

По какой-то причине. Соли, как правило, трудно понять начинающим криптографам. Как только он щелкает, концепция становится чрезвычайно простой Посмотрите на эту статью. Я думаю, что это объясняет концепцию лучше, чем большинство.

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

...