Пересмотр системного вызова crypt(3)
Рассмотрим вначале, что пишется в руководстве о функции crypt(3):
“crypt является функцией для шифрования паролей. Она основана на использовании алгоритмов DES с некоторыми вариациями, направленными на предотвращение возможности использования аппаратных реализаций DES для ключевого поиска.
Ключом шифра является введенный пользователем пароль, а зашифровываемой строкой — пустая строка. содержащая только символы NULL. Ядром (salt) при шифровании является двухсимвольная строка, элементы которой выбираются из множества a-zA-Z0-9./ . Эта строка используется для увеличения количества вариантов зашифровывания пароля в 4096 раз.
Путем извлечения младших 7 бит из каждого символа пароля формируется 56-битный ключ. Этот ключ используется для многократного шифрования константной строки. Полученное значение преобразуется в последовательность из 13 печатных символов ASCII, причем первые два символа являются собственно ядром.
Внимание: пространство ключей состоит из 256, что равно 7.2е16 значений. Исчерпывающий поиск в одобном пространстве возможен при использовании компьютеров с массовым параллелизмом. Программное обеспечение, подобное программе crack, осуществляет перебор только незначительной части этого пространства, используемой преимущественно людьми для выбора паролей. Поэтому при выборе паролей необходимо, по меньшей мере, избегать использования общих слов и имен.
Сам алгоритм DES имеет ряд уязвимых мест, которые делают его использование весьма опасным для какой-либо цели, кроме проверки паролей. Если вы планируете использовать интерфейс crypt(3) для реализации крипотграфического проекта, не делайте этого: лучше возьмите одну из популярных книг или какую-либо из широкодоступных библиотек DES.”
Большинство из реализаций Shadow Suite содержит код для удвоения длины порля до 16 символов. Однако эксперты по алгоритмам DES категорически возражают против подобного подхода, поскольку алгоритм шифрования просто применяется два раза — вначале к левой, а затем к правой половине пароля. В результате, с учетом особенностей формирования пароля с помощью программы crypt безопасность получаемого пароля ниже, чем раньше! Кроме того, администратор системы получает дополнительную головную боль, поскольку число пользователей, способных запомнить 16-символьный пароль несомненно меньше, чем 8-символьный.
В настоящее время ведется ряд работ по разработке нового алгоритма аутентификации, который позволит заменить существующие решения на более надежные и позволит, к тому же поддерживать пароли произвольной длины (в качестве примера можно упомянуть алгоритм MD5), но в то же время сохраняет совместимость с привычным методом crypt.