Удостоверение подлинности с помощью однонаправленных функций

Роджер Неедхэм (Roger Needham) и Майк Гай (Mike Guy) показали, что главному компьютеру не нужно знать сами пароли, вполне достаточно, чтобы главный компьютер мог отличать правильные пароли от непр а-вильных. Этого легко достичь с помощью однонаправленных функций [1599, 526,1274, 1121]. При этом на главном компьютере хранятся значения однонаправленных функций паролей, а не сами пароли .

(1) Алиса посылает главному компьютеру свой пароль.

(2) Главный компьютер вычисляет однонаправленную функцию пароля.

(3) Главный компьютер сравнивает полученное значение с хранящимся.

Раз главный компьютер больше не хранит таблицу правильных паролей всех пользователей, снижается у г-роза того, что кто-то проникнет в главный компьютер и выкрадет таблицу паролей . Список паролей, обработан­ный однонаправленной функцией, бесполезен, так как однонаправленную функцию не удастся инвертировать для получения паролей.

Вскрытия с помощью словаря и "соль"

Файл паролей, зашифрованных однонаправленной функцией, тем не менее, уязвим. Имея запас времени, Мэллори может составить список из миллиона наиболее часто встречающихся паролей . Он обработает весь миллион однонаправленной функцией и сохранит результат. Если каждый пароль состоит из восьми байт, раз­мер получившегося файла не превысит 8 Мбайт, и этот файл может быть размещен всего на нескольких на ди с-кетах. Теперь Мэллори добывает шифрованный файл паролей . Он сравнивает этот файл со своим файлом шиф­рованных возможных паролей и ищет совпадения.

Это вскрытие с помощью словаряможет быть удивительно успешным (см. раздел 8.1). "Соль"- это спо­соб затруднить его. "Соль" представляет собой случайную строку, добавляемую к паролям перед обработкой их однонаправленной функцией. Затем в базе данных главного компьютера сохраняются и значение "соли", и р е-зультат однонаправленной функции. Использование достаточно большого числа возможных значений "соли" практически устраняет возможность вскрытия с помощью словаря, так как Мэллори придется вычислять знач е-ние однонаправленной хэш-функции для каждого возможного значения "соли". Это простейший пример ис­пользование вектора инициализации (см. раздел 9.3).

Идея состоит в том, чтобы заставить Мэллори выполнить пробное шифрование каждого пароля из его ел о-варя при каждой попытке узнать чей-то чужой пароль вместо одноразовой обработки всех возможных паролей .

Для этого нужно много "соли". Большинство UNIX-систем используют для "соли" 12 бит. Несмотря на это Дэниел Кляйн (Daniel Klein) написал программу разгадывания паролей, которая в некоторых системах за нед е-лю часто вскрывала 40 процентов паролей [847,848] (см. раздел 8.1). Дэвид Фельдмайер (David Feldmeier) и Филип Кан (Philip Karn) составили список из 732000 наиболее часто используемых паролей, присоединив к ка­ждому из них 4096 возможных значений "соли". По их оценкам 30 процентов паролей на любом главном ком­пьютере могут быть взломаны с помощью этого списка [561].

"Соль" не является панацеей, увеличение числа бит "соли" не решит всех проблем . "Соль" предохраняет


только от самых обычных вскрытий файла паролей с использованием словаря, а не от согласованной атаке о д-ного пароля. Она защищает людей, использующих один и тот же пароль на различных машинах, но не делает лучше плохо выбранный пароль.