#linux #cryptography #passwords #md5 #sha
#linux #криптография #пароли #md5 #sha
Вопрос:
Когда вы используете GNU / Linux, пароль (в основном) зашифрован в MD5 и SHA
Операционная система прикрепляет СОЛЬ к этому паролю перед его шифрованием, чтобы избежать атак по словарю.
Мой вопрос в том, где SO прикрепляет СОЛЬ, до или после пароля?
Например, мой пароль: peter2011 перед его шифрованием он выполняет:
saltpeter2011 или peter2011salt?
Заранее спасибо.
Я не знаю, неправильно ли вы поняли мой вопрос, но я не спрашиваю, как Linux хранит свои пароли, я спрашиваю, как это зашифровывается, я имею в виду:
encrypt_in_md5(saltpeter2011) или encrypt_in_md5 (peter2011salt)
Я знаю, что в файле /etc / shadow они хранятся как $saltamp;encripted_password
Заранее спасибо!
Комментарии:
1. Вашим лучшим источником будет исходный код glibc.
Ответ №1:
Это немного сложнее, чем это, включающее несколько раундов добавления и хеширования. Лучше всего просто использовать crypt(3)
и позволить системе справиться с этим.
Комментарии:
1. верно, смотрите эту ссылку для примера реализации: opensource.apple.com/source/tcl/tcl-87/tcl_ext/trf/trf /…
Ответ №2:
Это не так просто, как вы могли подумать.
Прежде всего, способ использования солей зависит от используемой функции хеширования. Вы упомянули MD5, поэтому мы рассмотрим этот случай.
Для ответа вам нужно заглянуть в файл glibc / crypt / md5-crypt.c в исходниках glibc.
Там вы обнаружите, что сначала он выполняет что-то вроде md5 (KEY $ 1 $ SALT), затем выполняет md5 (KEYSALTKEY), а затем смешивает их вместе странным образом. Затем выполняется еще несколько странных итераций на основе ключа, соли и предыдущих результатов, и, наконец, после еще некоторого смешивания байтов вы закончили.
Ответ №3:
Если вы внедряете систему, это полностью зависит от вас. Вообще не имеет значения.
Скорее всего, в unix так и есть $1$SALTpeter2011
.
Комментарии:
1. Это неверно — существует очень конкретный и очень хорошо согласованный порядок, в котором это должно быть сделано, чтобы файлы паролей были переносимыми как между компьютерами, так и между версиями программного обеспечения.