Лекция: Наконец, сама привязка преобразуется в два читабельных ASCII-сим-вола, а хэш -в II символов. Итак,
функция char* crypt (char* passwd, char* salt) выдает 13-символьную строчку, которая и записывается в файл
/etc/ passwd.
При входе пользователя в систему вызывается та же функция crypt() с введенным паролем и привязкой,
полученной из /etc/passwd. Если результат
Оказывается равным значению, хранящемуся в файле, то аутентификация считается состоявшейся.
После анализа этой схемы первое, что приходит в голову потенциальному взломщику (если он верит в
Невозможность обратного преобразования хэша в пароль), — перебор. Берется некоторый набор символов
(например, прописные и строчные буквы, цифры и специальные символы типа знаков препинания — всего
Получается 94 символа), а затем из них по очереди составляются все комбинации вплоть до 8-символьной
Длины. К каждой из них применяется crypt(), и результат сравнивается с имеющимся. Естественно, что в эти
Комбинации рано или поздно попадет любой пароль пользователя.
Обрезание пароля до 8 значимых символов, конечно, резко ограничивает множество для перебора, но для
Тех времен это было вполне допустимо, так как функция crypt() была реализована заведомо неэффективно и
Время одного ее выполнения доходило до одной секунды на машине класса PDP. Таким образом, в среднем
Злоумышленник потратил бы на поиск пароля около 100 миллионов лет. Если же в качестве ножества