Протокол Kerberos
Другим методом аутентификации, основанным на использовании секретного идентификатора, является протокол Kerberos. Протокол Kerberos был создан более десяти лет назад в Массачусетском технологическом институте в рамках проекта Athena. Однако общедоступным этот протокол стал, начиная с версии 4, а версия 5 была принята в качестве стандарта IETF. Требования реализации протокола изложены в документе RFC 1510, кроме того, в спецификации RFC 1964 описывается механизм и формат передачи мандатов (билетов) безопасности в сообщениях Kerberos.
Протокол Kerberos предлагает механизм взаимной аутентификации клиента и сервера перед установлением связи между ними, причём в протоколе учтён тот факт, что начальный обмен информацией между клиентом и сервером происходит в незащищённой среде, а передаваемые пакеты могут быть перехвачены и модифицированы. Таким образом, протокол идеально подходит для применения в Internet.
Основная концепция протокола Kerberos заключается в возможности взаимного удостоверения взаимодействующих сторон при помощи разделяемого между ними общего секрета.
Для обмена информацией, содержащей общий секрет, Kerberos использует методы симметричной криптографии, в которой для шифрования и дешифрования данных используется один и тот же секретный ключ, знание которого подтверждает личность собеседника.
Протокол аутентификации с секретным ключом вступает в действие, когда клиент хочет аутентифицироваться на сервере. Для того чтобы идентифицировать себя, пользователь предъявляет аутентификатор в виде набора данных, зашифрованного секретным ключом. Получив аутенитификатор, сервер расшифровывает его и проверяет полученную информацию, чтобы убедиться в успешности дешифрования. Для создания невозможности перехвата сетевого трафика, и его последующего использования злоумышленником, содержание набора данных постоянно меняется. Если проверка прошла успешно, то это значит, что пользователю известен секретный код, а так как этот код знает только он и сервер, следовательно, пользователь тот, за кого себя выдаёт.
В некоторых случаях может потребоваться взаимная аутентификация, как пользователя, так и сервера. В этом случае сервер извлекает из исходного аутентификатора часть информации, затем шифрует её, превращая в новый аутентификатор, и передаёт обратно пользователю. Пользователь расшифровывает информацию и сравнивает её с исходной, если они совпадают — сервер знает секретный ключ (рис. 8).
- Пользователь оправляет сообщения на Kerberos-сервер включающее имя и аутентификатор, зашифрованный, при помощи разделяемого ключа, и содержащий структуру данных с двумя полями: имя и текущее время пользователя.
- Сервер дешифрует полученный аутентификатор, если операция успешна, то пользователь является именно тем за кого себя выдает.
- После дешифрования сервер сравнивает время из аутентификатора с локальным временем, если их разница приемлема, то сервер точно решает, что сообщение послано легальным пользователем.
- Для обеспечения аутентификации сервера, он создает новый аутентификатор содержащий только зашифрованное время, полученное от пользователя и отсылает его обратно.
- Пользователь дешифрует полученный аутентификатор и сравнивает время. Если процесс дешифрации успешен и времена совпадают, значит, сервер именно тот с которым хотел взаимодействовать пользователь.
Рис. 8. Схема реализации взаимной аутентификации в протоколе Kerberos
Представленные механизмы аутентификации обеспечивают высокую надежность, однако необходимо решить проблему первоначального обмена общими секретами. Если каждому клиенту для поддержания связи с каждой службой требуется индивидуальный ключ, и такой же ключ нужен каждой службе для каждого клиента, то проблема обмена ключами быстро становится достаточно острой.
Для решения проблемы управления ключами Kerberos использует дополнительное звено-посредник – центр распределения ключей (Key Distribution Center, KDC). KDC представляет собой службу, работающую на физически защищённом сервере. Она ведёт базу данных с информацией об учётных записях всех главных абонентов безопасности своей области. Вместе с информацией о каждом абоненте безопасности в базе данных KDC сохраняется криптографический ключ, известный только этому абоненту и службе KDC. Этот ключ, который называют долговременным, используется для связи пользователя системы безопасности с центром распределения ключей. В большинстве практических реализаций протокола Kerberos долговременные ключи генерируются на основе пароля пользователя, указываемого при входе в систему.
Когда клиенту нужно обратиться к серверу, он прежде всего направляет запрос в центр KDC, который в ответ направляет каждому участнику предстоящего сеанса копии уникального сеансового ключа, действующие в течение короткого времени. Назначение этих ключей – проведение аутентификации клиента и сервера. Копия сеансового ключа, пересылаемая на сервер, шифруется с помощью долговременного ключа этого сервера, а направляемая клиенту – долговременного ключа данного клиента (рис. 9).
Рис. 9. Схема работы KDC
Протокол Kerberos обеспечивает высокий уровень безопасности, обладает повышенной гибкостью и эффективностью, что способствует его широкому распространению в корпоративных сетях, особенно после принятия корпорацией Microsoft данного протокола в качестве основного протокола аутентификации в операционной системе Windows.
Необходимо отметить, что серверное программное обеспечение должно быть адаптировано (его обычно называют керберезированным) для работы с протоколом Kerberos.