Хэш
Как вы говорите, пароль, введенный пользователем при установке его пароля, сохраняется как хешированное значение.Хорошая хеш-функция :
- невозможно вернуть
- устойчива к столкновениям (очень трудно найти два входа, что приводит к одинаковому выходу)
- , но всегда выдает один и тот же вывод, если дан один и тот же ввод.
Давайте предположим, что ваша ОС использует 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
(см. теневой пароль ) сохраняются таким же образом.