Подтвердить что ты не робот

Что такое СОЛЬ и как его использовать?

Я искал вокруг, и я до сих пор не знаю, что такое "соль" и как его использовать/внедрять. Извините за вопрос noobish, я сам изучаю php.

4b9b3361

Ответ 1

Я определенно не эксперт, но очень короткий ответ заключается в том, что "засовывание" строки текста означает вставить несколько лишних символов в конец. Вы можете солить соль с помощью "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/

Ответ 2

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

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

Ответ 3

Хорошо его в комментариях, спасибо ceejayoz

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

Давайте немного подправить вещи, объединив несколько алгоритмов для хэширования, создав двойной алгоритм хэширования:

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

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