Частично переписал и обновил Bill
Swingle.
У каждого пользователя UNIX® системы есть пароль,
связанный с его учетной записью. Очевидно, что эти пароли должны быть известны только
пользователю и соответствующей операционной системе. Для защиты паролей они шифруются
способом, известным как ``односторонний хэш'', то есть их можно легко зашифровать, но
нельзя расшифровать. Другими словами, то, что мы сказали чуть раньше было очевидно, но не
совсем верно: операционной системе сам
пароль неизвестен. Ей известен только пароль в зашифрованной форме. Единственный способ получить ``обычный''
пароль это простой перебор всех возможных паролей.
К сожалению, единственный способ шифрования пароля при появлении UNIX был основан на DES, Data Encryption Standard. Это не было
проблемой для пользователей, живущих в США, но поскольку исходный код DES нельзя было
экспортировать из США, FreeBSD нашла способ одновременно не нарушать законов США и
сохранить совместимость со всеми другими вариантами UNIX,
где все еще использовался DES.
Решение было в разделении библиотек шифрования, чтобы пользователи в США могли
устанавливать и использовать библиотеки DES, а у остальных пользователей был метод
шифрования, разрешенный к экспорту. Так FreeBSD пришла к использованию MD5 в качестве
метода шифрования по умолчанию. MD5 считается более безопасным, чем DES, поэтому
установка DES рекомендуется в основном из соображений совместимости.
До FreeBSD 4.4 libcrypt.a была символической ссылкой на
библиотеку, используемую для шифрования. В FreeBSD 4.4 libcrypt.a была изменена для предоставления настраиваемой
библиотеки аутентификации по хэшу пароля. На данный момент библиотека поддерживает хэши
DES, MD5 и Blowfish. По умолчанию FreeBSD использует для шифрования паролей MD5.
Довольно легко определить какой метод шифрования используется в FreeBSD. Один из
способов это проверка файла /etc/master.passwd. Пароли,
зашифрованные в хэш MD5 длиннее, чем те, что зашифрованы с помощью DES и начинаются с
символов $1$. Пароли, начинающиеся с символов $2a$ зашифрованы с помощью Blowfish. Пароли, зашифрованные DES не
содержат каких-то определенных идентифицирующих символов, но они короче, чем пароли MD5 и
закодированы в 64-символьном алфавите, не содержащем символа $, поэтому относительно короткая строка, не начинающаяся с этого
символа это скорее всего DES пароль.
Формат паролей, используемых для новых паролей, определяется параметром passwd_format в /etc/login.conf, которое
может принимать значения des, md5
или blf. Обратитесь к странице справочника login.conf(5) за
дополнительной информацией о параметрах login.