Аутентификация с использованием хэш-функции
Для решения проблем аутентификации, связанных с неявными запросами, было предложено использовать одноразовые пароли, генерируемые при помощи односторонней хэш-функции. Эта идея нашла воплощение в системе одноразовых паролей S/Key One-Time Password System. Система S/Key, применяя одностороннюю хэш-функцию, генерирует последовательность одноразовых паролей. Начальное значение хэш-кода вычисляется путем хэширования секретного пароля пользователя, который сцеплен с несекретным случайным числом, выработанным генератором случайных чисел. Секретный пароль должен иметь длину не менее 8 символов. Последовательность одноразовых паролей формируется в результате многократного применения секретной хэш-функции (от 500 до 1000). То есть первый одноразовый пароль генерируется путем применения хэш-функции к секретному паролю пользователя определенное количество раз (N), следующий одноразовый пароль - путем применения хэш-функции к секретному паролю пользователя только (N - 1) раз и т.д.
Субъект, получивший одноразовый пароль путем прослушивания сети, не в состоянии сгенерировать следующий пароль, так как для этого требуется просчитать хэш-функцию в обратном направлении. Это не может быть сделано без знания секретного пароля, с которого начинались итерации. Поскольку в системе S/Key секретный пароль пользователя никогда не передается по сети и не хранится ни сервером, ни клиентом, риск хищения отсутствует.
Сервер генерирует отклик после получения от клиента login-запроса. Отклик сервера содержит номер итерации и случайное число. В ответ пользователь генерирует соответствующий одноразовый пароль, используя комбинацию своего секретного пароля, номера итерации и случайного числа, и отправляет его серверу. Первый одноразовый пароль из списка итераций сохраняется на шаге инициализации.
После успешной аутентификации пользователь получает доступ к серверу, но при следующей попытке аутентификации он должен генерировать новый одноразовый пароль. Использование случайных чисел, создаваемых генератором случайных чисел, позволяет клиенту выполнять аутентификацию на многих серверах при помощи одного секретного пароля, при этом каждому серверу соответствует свое случайное число. Кроме того, выбирая каждый раз новое случайное число, пользователь имеет возможность безопасно использовать секретный пароль много раз.
Обратная процедура, то есть получение из предыдущего пароля следующего пароля невозможна без знания начального одноразового пароля пользователя. Таким образом, ни серверу, ни клиенту нет необходимости хранить секретный пароль пользователя. На сервере в файле паролей сохраняется только копия последнего одноразового пароля, которого достаточно для аутентификации пользователя при следующей попытке. Секретный пароль известен только самому пользователю.
Так как количество итераций вычисления хэш-функции, выполняемого пользователем, уменьшается каждый раз на единицу, при обнулении счетчика итераций пользователь для доступа к серверу должен повторно инициализировать систему. Повторная инициализация сопровождается изменением номера итерации и случайного числа. Это операция идентична нормальной аутентификации, за исключением того, что одноразовый пароль, полученный по сети, не сверяется с существующей записью в файле паролей, а просто заменяет ее. Это позволяет безопасно выбирать новый пароль даже при прослушивании сети.
Аутентификация Kerberos
В 1985 году в Массачусетском технологическом институте была разработана система защиты информационных систем от вторжений. Она была названа Kerberos по имени трехглавого пса Цербера, охранявшего ворота в ад в греческой мифологии. Такое название было выбрано, потому что в аутентификации участвовали три стороны: пользователь, сервер, к которому желает получить доступ пользователь, и сервер аутентификации, или центр распределения ключей (ЦРК). Специальный сервер аутентификации предлагался в качестве доверенной третьей стороны, услугами которой могут пользоваться другие серверы и клиенты информационной системы.
Рис. 13. Аутентификация Kerberos
Система Kerberos владеет секретными ключами обслуживаемых субъектов и помогает им выполнять взаимную аутентификацию. Сеанс начинается с получения пользователем А билета для получения билета - Ticket-Granting Ticket (TGT) от ЦРК. Когда пользователь желает получить доступ к некоторому серверу В, то сначала отправляет запрос на билет для доступа к этому серверу вместе со своим билетом TGT в ЦРК. TGT содержит информацию о сеансе регистрации пользователя А и позволяет ЦРК работать, не поддерживая постоянно информацию о сеансе регистрации каждого пользователя. В ответ на свой запрос пользователь А получает зашифрованный сеансовый ключ SA и билет на доступ к серверу В. Сеансовый ключ зашифрован секретным ключом, известным только пользователю А и ЦРК. Билет на доступ к серверу В содержит тот же самый сеансовый ключ, однако он шифруется секретным ключом, известным только серверу В и ЦРК.
Аутентификация происходит тогда, когда пользователь А и сервер доказывают знание своего секретного ключа. Пользователь шифрует метку времени и отправляет ее на сервер В. Сервер расшифровывает метку, увеличивает ее значение на единицу, вновь зашифровывает и отправляет шифртекст пользователю А. Пользователь А расшифровывает ответ, и если в нем содержится значение метки времени с приращением, то аутентификация завершается успешно, в противном случае - неудачно. После взаимной аутентификации сеансовый ключ может использоваться для шифрования сообщений, которыми обмениваются пользователь А и сервер В. Очевидно, что стороны должны доверять ЦРК, поскольку он хранит копии всех секретных ключей.
Рассмотрим более подробно аутентификацию в системе Kerberos, которая выполняется за четыре шага:
- получение пользователем билета TGT на билеты;
- получение пользователем билета на доступ к серверу;
- аутентификация пользователя сервером;
- аутентификация сервера пользователем.