Что такое соль применительно к MYSQL sha1?

Что такое «соль» в отношении MYSQL sha1? Я понятия не имею, что такое соль при шифровании паролей sha1? Может кто-нибудь объяснить, что это такое?


person Noah R    schedule 04.12.2010    source источник


Ответы (3)


Соль — это значение, которое добавляется к паролю (или другому секрету), который вы хотите хэшировать одним способом. Это означает, что он может быть до, после или где-то внутри пароля, если его положение и значение соответствуют заданному паролю.

Что это делает, так это смягчает атаки по словарю — в основном словари общих паролей, предварительно хешированные без соли — от использования для «угадывания» одностороннего пароля, пока злоумышленник не знает хеш. Если каждый пароль имеет разный хеш, злоумышленнику будет очень сложно создать словарь, оптимизированный для взлома ваших паролей (им потребуется словарь для каждой отдельной соли, и им также нужно будет знать, где соль была помещена в каждый пароль). ).

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

Что касается MySQL, в частности, если вы предоставляете соль при хешировании пароля, убедитесь, что вы где-то записали, что это была за соль. Затем, когда пользователь пытается выполнить аутентификацию, вы объединяете это записанное значение соли с паролем (например, во время вызова crypt), и если полученный хэш совпадает, значит, он ввел правильный пароль. (Обратите внимание, что хеширование пароля никогда не меняется на противоположное; таким образом, в одну сторону.)

person cfeduke    schedule 04.12.2010

соль — это не что иное, как строка, которую вы прикрепляете к паролю либо как константу, либо с помощью алгоритма.

что усложняет задачу для любого, кто нарушил вашу безопасность и получил доступ к вашему сохраненному паролю, что, в свою очередь, делает практически невозможным для него использование радужных словарей, чтобы разблокировать настоящий пароль, что с точки зрения хакера может быть полезным так как многие люди используют один и тот же пароль на разных сайтах

$salt = "this is a salt";
$password = 'this is an password';
$hash = sha1($salt.$password);

Вот как вы в основном могли солить пароль

person Breezer    schedule 04.12.2010
comment
Итак, для чего будет соль: sha1$0e7eb$f2353e34dd1811c3ce4af5c2b0f5cb43a04a16ce - person Noah R; 04.12.2010
comment
вы не можете сказать, это часть пароля - person Breezer; 04.12.2010
comment
@Breezer: неверно; вы не можете извлечь его из хеша. Однако он хранится отдельно вместе с используемым алгоритмом и результирующим хэшем. - person Ignacio Vazquez-Abrams; 04.12.2010
comment
Хорошо, хорошо... Я пытаюсь взломать свою собственную базу данных для моего утерянного пароля... Я использую для этого Каина и Авеля... и он запрашивает соль, чтобы его хешировать. Теперь... если вам нужно расшифровать его, чтобы найти соль, то зачем Каину и Авелю просить соль? - person Noah R; 04.12.2010
comment
теперь, когда я думаю об этом, sha генерирует 40-символьный хэш, так что это может быть $0e7eb$ - person Breezer; 04.12.2010
comment
Когда я пробую $0E7EB$ и затем помещаю остальную часть хэша f2353e34dd1811c3ce4af5c2b0f5cb43a04a16ce в Cain and Abel, он говорит, что это недопустимая длина соли. Есть идеи, почему? - person Noah R; 04.12.2010
comment
Формат ввода пароля authdb обычно следующий: «алгоритм» $ «соль» $ «хэш». $ являются только разделителями. - person Ignacio Vazquez-Abrams; 04.12.2010
comment
То есть я не смогу восстановить пароль? - person Noah R; 04.12.2010
comment
что он говорит, если я правильно понял, что 0e7eb - это соль - person Breezer; 04.12.2010
comment
соль всегда должна быть случайной. если вы используете константу, это ключ, а не соль. - person Jacco; 27.12.2010
comment
@Jacco: Не обязательно случайно, просто не постоянно. :) - person Sasha Chedygov; 27.12.2010
comment
@musicfreak должен иметь достаточную энтропию, непредсказуемость и отличие для каждого хешированного пароля во всех системах и для каждого экземпляра. Самый простой (единственный?) способ добиться этого — выбрать случайную соль. также читайте: stackoverflow.com /вопросы/1645161/ - person Jacco; 27.12.2010
comment
@Jacco: Верно, но не могли бы вы использовать, например, метку времени, когда пользователь зарегистрировался (или изменил свой пароль)? Это не случайно генерируется, но все же полезно. - person Sasha Chedygov; 28.12.2010
comment
@musicfreak временная метка имеет ограниченный диапазон и поэтому становится предсказуемой. Если бы я знал, что веб-сайт работает в течение 1 года, это было бы 31 556 926 секунд (но это неравномерно распределенные значения). При условии, что система не пропускала никакой информации, такой как «участник с тех пор», это было бы лучше, чем ничего, но гораздо меньше энтропии, чем случайная 32-битная соль (= 4 294 967 296 вариантов). Однако проблема заключается в том, что в эту же секунду на подписку могли подписаться несколько пользователей, что даже более вероятно, если ваше программное обеспечение запущено более чем на одной машине. Я бы сказал, зачем рисковать? - person Jacco; 28.12.2010
comment
@Jacco: Хм, интересно, спасибо за понимание! Я сам использовал случайную соль в последнем веб-приложении, над которым работал, но я всегда думал, что отметка времени достаточно безопасна. - person Sasha Chedygov; 28.12.2010

Соль добавляется к открытому тексту (или наоборот) перед хешированием, чтобы сделать поиск в словаре более дорогим.

person Ignacio Vazquez-Abrams    schedule 04.12.2010
comment
Не могли бы вы привести пример? - person Noah R; 04.12.2010
comment
+1 - верно. Например, это означает, что злоумышленник, имеющий доступ к множеству хешированных паролей, не может просто один раз хэшировать словарь с помощью алгоритма SHA1 и сравнить его со всеми паролями сразу; из-за соли хеширование должно быть выполнено повторно (с правильной солью) для каждого пароля. - person David Gelhar; 04.12.2010