Сергей Панасенко,
к. т. н., начальник отдела разработки ПО фирмы «Анкад»
develop@ancud.ru
Типы аутентификации
Как известно, практически в любых компьютерных системах существует необходимость аутентификации. В ходе этой процедуры компьютерная система проверяет, действительно ли пользователь тот, за кого себя выдает. Для того, чтобы получить доступ к компьютеру, в Интернет, к системе удаленного управления банковским счетом и т. д., пользователю необходимо убедительно доказать компьютерной системе, что «он есть та самая персона», а не кто-либо еще. Для этого он должен предъявить системе некую аутентификационную информацию, на основании которой модуль аутентификации данной системы выносит решение о предоставлении ему доступа к требуемому ресурсу (доступ разрешен/нет).
В настоящее время для такой проверки применяется информация трех видов.
Первый — уникальная последовательность символов, которую пользователь
должен знать для успешного прохождения аутентификации. Простейший пример — парольная
аутентификация, для которой достаточно ввести в систему свой идентификатор (например,
логин) и пароль.
Второй вид информации — уникальное содержимое или уникальные характеристики
предмета. Простейший пример — ключ от любого замка. В случае же компьютерной
аутентификации в этом качестве выступают любые внешние носители информации:
смарт-карты, электронные таблетки iButton, USB-токены и т. д.
И, наконец, третий вид аутентификации — по биометрической информации,
которая неотъемлема от пользователя. Это может быть отпечаток пальца, рисунок
радужной оболочки глаза, форма лица, параметры голоса и т. д.
Очень часто комбинируют несколько видов информации, по которой проводится аутентификация.
Типичный пример: аутентификационная информация хранится на смарт-карте, для
доступа к которой нужно ввести пароль (PIN-код). Такая аутентификация называется
двухфакторной. Существуют реальные системы и с трехфакторной аутентификацией.
В ряде случаев требуется и взаимная аутентификация — когда оба участника информационного обмена проверяют друг друга. Например, перед передачей удаленному серверу каких-либо важных данных пользователь должен убедиться, что это именно тот сервер, который ему необходим.
Удаленная аутентификация
В случае удаленной аутентификации (скажем, пользователь намерен получить доступ к удаленному почтовому серверу для проверки своей электронной почты) существует проблема передачи аутентификационной информации по недоверенным каналам связи (через Интернет или локальную сеть). Чтобы сохранить в тайне уникальную информацию, при пересылке по таким каналам используется множество протоколов аутентификации. Рассмотрим некоторые из них, наиболее характерные для различных применений.
Доступ по паролю
Простейший протокол аутентификации — доступ по паролю (Password Access Protocol,
PAP): вся информация о пользователе (логин и пароль) передается по сети в открытом
виде (рис. 1). Полученный сервером пароль сравнивается с эталонным паролем данного
пользователя, который хранится на сервере. В целях безопасности на сервере чаще
хранятся не пароли в открытом виде, а их хэш-значения (о хэшировании см. «Цифровая
подпись — как это делается», «BYTE/Россия» № 1’2004).
Рис. 1. Схема протокола PAP.
|
Данная схема имеет весьма существенный недостаток: любой злоумышленник, способный перехватывать сетевые пакеты, может получить пароль пользователя с помощью простейшего анализатора пакетов типа sniffer. А получив его, злоумышленник легко пройдет аутентификацию под именем владельца пароля.
По сети в процессе аутентификации может передаваться не просто пароль, а результат его преобразования — скажем, тот же хэш пароля. К сожалению, это не устраняет описанный выше недостаток — злоумышленник с тем же успехом может перехватить хэш пароля и применять его впоследствии.
Недостатком данной схемы аутентификации можно считать и то, что любой потенциальный пользователь системы должен предварительно зарегистрироваться в ней — как минимум ввести свой пароль для последующей аутентификации. А описанные ниже более сложные протоколы аутентификации типа «запрос-ответ» позволяют в принципе расширить систему на неограниченное количество пользователей без их предварительной регистрации.
Запрос-ответ
В семейство протоколов, называемых обычно по процедуре проверки «запрос-ответ», входит несколько протоколов, которые позволяют выполнить аутентификацию пользователя без передачи информации по сети. К протоколам семейства «запрос-ответ» относится, например, один из наиболее распространенных — протокол CHAP (Challenge-Handshake Authentication Protocol).
Процедура проверки включает как минимум четыре шага (рис. 2):
- пользователь посылает серверу запрос на доступ, включающий его логин;
- сервер генерирует случайное число и отправляет его пользователю;
- пользователь шифрует полученное случайное число симметричным алгоритмом шифрования
на своем уникальном ключе (см. «Современные
алгоритмы шифрования», «BYTE/Россия» № 8’2003), результат зашифрования
отправляется серверу; - сервер расшифровывает полученную информацию на том же ключе и сравнивает с исходным случайным числом. При совпадении чисел пользователь считается успешно аутентифицированным, поскольку признается владельцем уникального секретного ключа.
Рис. 2. Схема протокола аутентификации типа «запрос-ответ».
|
Аутентифицирующей информацией в данном случае служит ключ, на котором выполняется шифрование случайного числа. Как видно из схемы обмена, данный ключ никогда не передается по сети, а лишь участвует в вычислениях, что составляет несомненное преимущество протоколов данного семейства.
Основной недостаток подобных систем аутентификации — необходимость иметь на локальном компьютере клиентский модуль, выполняющий шифрование. Это означает, что, в отличие от протокола PAP, для удаленного доступа к требуемому серверу годится только ограниченное число компьютеров, оснащенных таким клиентским модулем.
Однако в качестве клиентского компьютера может выступать и смарт-карта либо аналогичное «носимое» устройство, обладающее достаточной вычислительной мощностью, например, мобильный телефон. В таком случае теоретически допустима аутентификация и получение доступа к серверу с любого компьютера, оснащенного устройством чтения смарт-карт, с мобильного телефона или КПК.
Протоколы типа «запрос-ответ» легко «расширяются» до схемы взаимной аутентификации (рис. 3). В этом случае в запросе на аутентификацию пользователь (шаг 1) посылает свое случайное число (N1). Сервер на шаге 2, помимо своего случайного числа (N2), должен отправить еще и число N1, зашифрованное соответствующим ключом. Тогда перед выполнением шага 3 пользователь расшифровывает его и проверяет: совпадение расшифрованного числа с N1 указывает, что сервер обладает требуемым секретным ключом, т. е. это именно тот сервер, который нужен пользователю. Такая процедура аутентификации часто называется рукопожатием.
Рис. 3. Схема протокола взаимной аутентификации.
|
Как видно, аутентификация будет успешна только в том случае, если пользователь предварительно зарегистрировался на данном сервере и каким-либо образом обменялся с ним секретным ключом.
Заметим, что вместо симметричного шифрования в протоколах данного семейства
может применяться и асимметричное шифрование, и электронная цифровая подпись.
В таких случаях схему аутентификации легко расширить на неограниченное число
пользователей, достаточно применить цифровые сертификаты в рамках инфраструктуры
открытых ключей (см. «Открытые ключи — опасности
и защита от них», «BYTE/Россия» № 7’2004).
Протокол Kerberos
Протокол Kerberos, достаточно гибкий и имеющий возможности тонкой настройки под конкретные применения, существует в нескольких версиях. Мы рассмотрим упрощенный механизм аутентификации, реализованный с помощью протокола Kerberos версии 5 (рис. 4):
Рис. 4. Схема протокола Kerberos.
|
Прежде всего стоит сказать, что при использовании Kerberos нельзя напрямую получить доступ к какому-либо целевому серверу. Чтобы запустить собственно процедуру аутентификации, необходимо обратиться к специальному серверу аутентификации с запросом, содержащим логин пользователя. Если сервер не находит автора запроса в своей базе данных, запрос отклоняется. В противном случае сервер аутентификации формирует случайный ключ, который будет использоваться для шифрования сеансов связи пользователя с еще одним специальным сервером системы: сервером предоставления билетов (Ticket-Granting Server, TGS). Данный случайный ключ (обозначим его Ku-tgs) сервер аутентификации зашифровывает на ключе пользователя (Kuser) и отправляет последнему. Дополнительная копия ключа Ku-tgs с рядом дополнительных параметров (называемая билетом) также отправляется пользователю зашифрованной на специальном ключе для связи серверов аутентификации и TGS (Ktgs). Пользователь не может расшифровать билет, который необходим для передачи серверу TGS на следующем шаге аутентификации.
Следующее действие пользователя — запрос к TGS, содержащий логин пользователя, имя сервера, к которому требуется получить доступ, и тот самый билет для TGS. Кроме того, в запросе всегда присутствует метка текущего времени, зашифрованная на ключе Ku-tgs. Метка времени нужна для предотвращения атак, выполняемых повтором перехваченных предыдущих запросов к серверу. Подчеркнем, что системное время всех компьютеров, участвующих в аутентификации по протоколу Kerberos, должно быть строго синхронизировано.
В случае успешной проверки билета сервер TGS генерирует еще один случайный ключ для шифрования сеансов связи между пользователем, желающим получить доступ, и целевым сервером (Ku-serv). Этот ключ шифруется на ключе Kuser и отправляется пользователю. Кроме того, аналогично шагу 2, копия ключа Ku-serv и необходимые целевому серверу параметры аутентификации (билет для доступа к целевому серверу) посылаются пользователю еще и в зашифрованном виде (на ключе для связи TGS и целевого сервера — Kserv).
Теперь пользователь должен послать целевому серверу полученный на предыдущем шаге билет, а также метку времени, зашифрованную на ключе Ku-serv. После успешной проверки билета пользователь наконец-то считается аутентифицированным и может обмениваться информацией с целевым сервером. Ключ Ku-serv, уникальный для данного сеанса связи, часто применяется и для шифрования пересылаемых в этом сеансе данных.
В любой системе может быть несколько целевых серверов. Если пользователю необходим доступ к нескольким из них, он снова формирует запросы к серверу TGS — столько раз, сколько серверов нужно ему для работы. Сервер TGS генерирует для каждого из таких запросов новый случайный ключ Ku-serv, т. е. все сессии связи с различными целевыми серверами защищены при помощи разных ключей.
Процедура аутентификации по протоколу Kerberos выглядит достаточно сложной. Однако не стоит забывать, что все запросы и зашифровывание их нужными ключами автоматически выполняет ПО, установленное на локальном компьютере пользователя. Вместе с тем необходимость установки достаточно сложного клиентского ПО — несомненный недостаток данного протокола. Впрочем, сегодня поддержка Kerberos встроена в наиболее распространенные ОС семейства Windows, начиная с Windows 2000, что нивелирует данный недостаток.
Второй недостаток — необходимость в нескольких специальных серверах (доступ к целевому серверу обеспечивают как минимум еще два, сервер аутентификации и TGS). Однако в системах с небольшим числом пользователей все три сервера (аутентификации, TGS и целевой) могут физически совмещаться на одном компьютере.
Вместе с тем следует подчеркнуть, что сервер аутентификации и TGS должны быть надежно защищены от несанкционированного доступа злоумышленников. Теоретически злоумышленник, получивший доступ к TGS или серверу аутентификации, способен вмешаться в процесс генерации случайных ключей или получить ключи всех пользователей и, следовательно, инициировать сеансы связи с любым целевым сервером от имени любого легального пользователя.
* * *
Выбор того или иного протокола зависит в первую очередь от важности информации, доступ к которой предоставляется по результатам аутентификации. Другой критерий — удобство использования. И здесь, как и везде, полезно соблюдать разумный баланс. Иногда, если нет особых требований к секретности процедуры аутентификации, вместо надежного (но непростого в реализации) протокола типа Kerberos лучше использовать «элементарный» парольный протокол РАР, простота и удобство применения которого часто перевешивают все его недостатки.