Инфраструктуры открытых ключей - [9]

Шрифт
Интервал

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

Эволюция механизмов аутентификации началась в ответ на атаки анализаторов. Очевидно, что должна была появиться защита от этих атак в виде шифрования. Шифрование предотвращает раскрытие пароля при передаче. Но если все пользователи используют один и тот же ключ шифрования, то любой из них может использовать анализатор, получить чужой пароль и расшифровать его тем же способом, что и сервер. Если каждый пользователь имеет свой ключ, то управление этими ключами обеспечивает более сильную аутентификацию, чем пароли. Следует отметить, что пользователь А защищен и в том случае, если его пароль используется однократно. Удачная атака анализатора позволяет пользователю С получить устаревший парольА. Ясно, что пользователю А в этом случае необходим новый пароль для каждой попытки аутентификации.

Механизмы одноразовой аутентификации

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

Аутентификация "запрос-ответ"

Как показано на рис. 2.2, сервер генерирует случайный запрос и отправляет его пользователю А[208]. Вместо того чтобы в ответ отправить серверу пароль, пользователь А шифрует запрос при помощи ключа, известного только ему самому и серверу. Сервер выполняет такое же шифрование и сравнивает результат с шифртекстом, полученным от пользователя А. Если они совпадают, то аутентификация прошла успешно, в противном случае - неудачно.

Этот простой механизм имеет несколько преимуществ по сравнению с простой аутентификацией при помощи паролей. Поскольку запрос генерируется случайным образом, пользователь С не может повторно использовать шифртекст, сгенерированный пользователем А, чтобы выдавать себя за него. Значение, которое отправляет пользователь А, аутентифицирует его идентичность только один раз. Имя пользователя А передается открыто, и нет причин его скрывать. Перехват информации больше не является угрозой, и пользователь А может выполнять аутентификацию на удаленном сервере в открытой сети.

Рис. 2.2.  Аутентификация "запрос-ответ"

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

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

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

Неявный запрос на базе времени

Рис. 2.3 иллюстрирует аутентификацию на базе времени [72]. Пользователь А шифрует значение текущего времени на часах своего компьютера и отправляет свое имя и шифртекст на сервер. Сервер расшифровывает значение, присланное пользователем А. Если оно достаточно близко к значению текущего времени на компьютерных часах сервера, то аутентификация проходит успешно, в противном случае - неудачно. Поскольку компьютерные часы пользователя А и сервера не синхронизированы и передача информации занимает некоторое время, сервер должен допускать несколько возможных значений времени.

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

Рис. 2.3.  Аутентификация при помощи неявного запроса

Этот механизм не слишком серьезно совершенствует схему "запрос-ответ", он также с трудом поддерживает аутентификацию пользователя на многих серверах и не обеспечивает