Как сравнить хэши MD5 при входе в систему? - PullRequest
0 голосов
/ 13 октября 2018

В дистрибутивах Linux, таких как CentOS (т.е. 6.3), используется специальный менеджер загрузки, такой как "GRUB", который содержит файл .conf, в котором вы можете редактировать информацию о пользователе, такую ​​как пароль и т. Д.

пароль должен быть зашифрован с использованием MD5 (то есть: пароль - md5 kw485 / fgf $ & e), и это немного сбивает с толку.

Предполагая, что MD5 является односторонним методом шифрования и что шифрованиеодна и та же строка всегда будет давать только что созданную строку.

Как система может сравнить два пароля, поскольку они никогда не совпадут?

вот пример:

grub> md5crypt
md5crypt
Password: hello
hello
Encrypted: $1$95Uz30$X/u7PX4F5GtEOsMguDDq10
grub> md5crypt
md5crypt
Password: hello
hello
Encrypted: $1$H8Uz30$LwAkSMZBYC07zJbx3lIVa1

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

$ login user
password : hello
  • привет будет преобразован в $1$H8Uz30$LwAkSMZBYC07zJbx3lIVa1 хешированный пароль в grub.conf $1$95Uz30$X/u7PX4F5GtEOsMguDDq10, это неудачная попытка входа в систему.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Предполагая, что MD5 - это односторонний метод шифрования и что шифрование одной и той же строки всегда будет давать вновь сгенерированную строку.

Функции хеширования:

  • односторонняя функция
  • идемпотентна: один и тот же вход производит тот же вывод, а НЕ вновь созданную строку
  • вы не можете получить входной пароль, начиная с выходного хеша, с помощьюматематическая функция (только путем атаки методом перебора)

Операционная система сравнивает предоставленный хэш с сохраненным хешем того же пароля, чтобы проверить его правильность.

0 голосов
/ 13 октября 2018

Хэш

Как вы говорите, пароль, введенный пользователем при установке его пароля, сохраняется как хешированное значение.Хорошая хеш-функция :

  • невозможно вернуть
  • устойчива к столкновениям (очень трудно найти два входа, что приводит к одинаковому выходу)
  • , но всегда выдает один и тот же вывод, если дан один и тот же ввод.

Давайте предположим, что ваша ОС использует md5, и возьмем пример пароля hello .Хэш md5 hello равен

echo -n hello | md5sum
5d41402abc4b2a76b9719d911017c592

Таким образом, операционная система будет хранить 5d41402abc4b2a76b9719d911017c592

Если пользователь снова войдет в систему, ОС запросит его пароль, и его ввод будет снова хеширован с помощьюта же функция, md5 в нашем примере. Если введенный пароль правильный, хэши совпадают.Таким образом, ОС знает, что был введен правильный пароль, фактически не зная пароля .

Но 5d414... - это не строка, которую GRUB показывает вам, потому что в действительности это немного сложнее.

Соль

Предположим, что злоумышленник получил хэш вашего пароля.Чтобы злоумышленник не смог получить ваш реальный пароль, ОС обычно добавляет к паролю случайное значение перед вычислением хэша.Это значение называется salt , оно хранится в незашифрованном виде вместе с хешем пароля пользователя.Соль предотвращает атаки до вычисления , когда злоумышленник предварительно вычисляет список общих паролей, сохраняет хэши, а затем просто сравнивает украденный хеш с этим списком.Но засоление не мешает злоумышленнику взломать ваш пароль путем грубого взлома, попробовав список возможных паролей вместе со значением соли в качестве ввода в хэш-функцию и сравнив результат с украденным хешем.

Так в вашем примере, в первый раз, когда вы ввели привет GRUB добавил соль 95Uz30 к вашему паролю

openssl passwd -1 -salt 95Uz30 hello
$1$95Uz30$X/u7PX4F5GtEOsMguDDq10

Полученная строка - это именно то, что GRUB показал вам, но это не просто хеш, это

$x$salt$hash

где

Этот формат не является конкретнымдля GRUB пароли в /etc/passwd или /etc/shadow (см. теневой пароль ) сохраняются таким же образом.

...