Я читал Статья в Википедии в теневом файле, и в нем упоминается, что формат строк такой:
$id$salt$hashed
Итак, у меня вопрос, как это работает?
Я попытался вычислить хэш для своей учетной записи, к которой у меня был пароль, поэтому я использовал эту команду:
sha512sum {salt} + {my_clear_text_password}
Но результат отличается от того хеша, который я вижу сам. Итак, как это работает? Что мне не хватает?
Пара вещей, о которых стоит подумать (вам нужно будет прочитать исходники в Linux coreutils и glibc2, чтобы подтвердить)
Вывод sha512sum выглядит как шестнадцатеричная нотация для печати, тогда как вывод, сохраненный в теневом файле, выглядит как base64, поэтому они будут другими.
Я думаю, что sha512sum в теневом файле проходила через хеш-функцию более одного раза ( #define ROUNDS_DEFAULT 5000
), тогда как sha512sum просто пропускает «файл» через хеш один раз.
Могут быть добавлены отступы одной или обеими командами для выравнивания данных, они могут отличаться.
Из shadow(5)
справочная страница:
зашифрованный пароль
Ссылаться на склеп(3) для получения подробной информации о том, как интерпретируется эта строка.
Если поле пароля содержит некоторую строку, которая не является допустимым результатом склеп(3), например! или *, пользователь не сможет использовать пароль unix для входа в систему (но пользователь может войти в систему другими способами).
Это поле может быть пустым, и в этом случае пароли не требуются для аутентификации в качестве указанного имени входа. Однако некоторые приложения, которые читают файл / etc / shadow, могут решить вообще не разрешать доступ, если поле пароля пусто.
Поле пароля, которое начинается с восклицательного знака, означает, что пароль заблокирован. Остальные символы в строке представляют собой поле пароля до блокировки пароля.
Из crypt(3)
справочная страница:
crypt () - это функция шифрования пароля. Он основан на алгоритме стандарта шифрования данных с вариациями, предназначенными (среди прочего) для предотвращения использования аппаратных реализаций поиска по ключу.
key - это вводимый пользователем пароль.
соль - это двухсимвольная строка, выбираемая из набора [a–zA–Z0–9./]. Эта строка используется для изменения алгоритма одним из 4096 различных способов.
Взяв 7 младших битов каждого из первых восьми символов ключа, получается 56-битный ключ. Этот 56-битный ключ используется для многократного шифрования постоянной строки (обычно строки, состоящей из всех нулей). Возвращаемое значение указывает на зашифрованный пароль, серию из 13 печатаемых символов ASCII (первые два символа представляют собой саму соль). Возвращаемое значение указывает на статические данные, содержимое которых перезаписывается при каждом вызове.
Если вы хотите создать хеш так же, как /etc/shadow
файл хранит его, используйте следующую команду:
mkpasswd --method=sha-512 --salt=YOUR_SALT PASSWORD