Определение
Kerberos — протокол аутентификации, при помощи которого компьютер, собирающийся установить связь с другим компьютером, может подтвердить свою «личность». После подтверждения Kerberos снабжает оба компьютера ключами шифрования для проведения защищенного сеанса связи.
Kerberos был разработан в 80-х в Массачусетсском технологическом институте. Протокол назван по имени трехглавого пса из греческой мифологии, сторожившего вход в царство теней.
И действительно, Kerberos представляет собой трехсторонний процесс, в котором роль посредника выполняет сервис под названием Key Distribution Center (KDC), подтверждающий личность компьютера по запросу другого компьютера и поставляющий ключи для установления между ними защищенного соединения. (Для простоты назовем первый компьютер клиентом, второй — сервером назначения).
Каждый из компьютеров, участвующих в сеансе связи, «делит секрет» с KDC, который состоит из двух компонентов: сервера аутентификации и сервера выдачи мандатов. Если KDC получает запрос о неизвестном ему сервере назначения, он перенаправляет аутентификационную транзакцию на другой KDC, располагающий нужными сведениями.
Обмениваясь с клиентом серией шифрованных сообщений, называемых мандатами, KDC генерирует новые ключи шифрования для каждого этапа процесса аутентификации. Он может успешно подтвердить личность одного компьютера по запросу другого, не выдавая секретных ключей ни одной из сторон и не требуя ни от одной из них постоянного хранения ключей доступа ко всем компьютерам, с которыми они когда-либо установят соединение. Мандат действителен в течение заданного периода времени и может использоваться только одним определенным компьютером для подключения к другому определенному компьютеру. (Более подробно о принципе действия мандатного процесса Kerberos можно узнать из схемы.)
После выдачи мандата клиент может использовать его для получения доступа к целевому серверу неограниченное число раз, но только в период действия мандата. Ни клиент, ни кто-то другой не могут считать или модифицировать мандат, не сделав его недействительным.
Насколько стандартен стандарт?
В Windows 2000 по умолчанию в качестве протокола сетевой аутентификации установлен Kerberos Version 5. Чтобы обеспечить возможность аутентификации по открытому ключу, а не только по стандартному секретному ключу Kerberos, Microsoft решила добавить к протоколу расширения собственной разработки. Реализация вышла несколько нестандартной, хотя и допускающей аутентификацию компьютеров, находящихся в сетях, управляемых не Windows 2000.
В Windows 2000 процесс аутентификации реализован более рационально, чем в NT, поскольку применение Kerberos устранило необходимость дополнительно сверяться с контроллером домена.
Принцип действия Kerberos
ШАГ ПЕРВЫЙ
Аутентификационный обмен: клиент запрашивает у сервера аутентификации мандат на доступ к серверу выдачи мандатов (TGS). Сервер аутентификации отыскивает клиент в базе данных, затем генерирует сеансовый ключ (SK1), который будет использоваться клиентом и TGS. Kerberos шифрует SK1, используя секретный ключ клиента. Сервер аутентификации также задействует секретный ключ TGS (известный только серверу аутентификации и TGS) для создания и отправки пользователю мандата на выдачу мандата (TGT).
ШАГ ВТОРОЙ
Обмен со службой выдачи мандатов: клиент дешифрует сообщение и восстанавливает сеансовый ключ; затем использует его для создания аутентификатора, содержащего имя пользователя, IP-адрес и отметку времени. Клиент отправляет этот аутентификатор вместе с TGT на TGS, запрашивая разрешение на доступ к серверу назначения. TGS дешифрует TGT, затем использует содержащийся в нем SK1 для расшифровки аутентификатора. TGS проверяет подлинность информации, содержащейся в аутентификаторе, мандат, сетевой адрес клиента и отметку времени. Если все совпадает, запрос допускается на обработку. Затем TGS создает новый сеансовый ключ (SK2) для использования клиентом и сервером назначения, шифрует его с помощью SK1 и отправляет клиенту. TGS также отправляет новый мандат, содержащий имя сервера, и зашифрованные при помощи секретного ключа сервера назначения имя клиента, сетевой адрес, временной ярлык и время истечения срока действия мандата.
ШАГ ТРЕТИЙ
Обмен между клиентом и сервером: клиент дешифрует сообщение и получает SK2. Он, наконец, готов к установлению связи с сервером назначения и создает новый аутентификатор, зашифрованный с использованием SK2. Клиент отправляет сеансовый мандат (уже зашифрованный по секретному ключу сервера назначения) и зашифрованный аутентификатор. То, что аутентификатор содержит обычный текст, зашифрованный по SK2, подтверждает, что клиент знает ключ. Зашифрованная отметка времени не дает потенциальному перехватчику записать одновременно и мандат, и аутентификатор для последующего их воспроизведения. Сервер назначения расшифровывает и проверяет мандат, аутентификатор, адрес клиента и отметку времени. Для приложений, требующих двусторонней аутентификации, сервер назначения возвращает сообщение, состоящее из зашифрованной по SK2 отметки времени, увеличенной на 1. Для клиента это служит подтверждением, что сервер действительно знает собственный секретный ключ и, следовательно, может расшифровать мандат и аутентификатор.
ШАГ ЧЕТВЕРТЫЙ
Защищенный обмен данными: сервер назначения «знает», что клиент — именно тот, за кого себя выдает, и теперь эта пара использует общий ключ шифрования для защищенного обмена данными. Поскольку данный ключ известен лишь клиенту и серверу, они имеют право предполагать, что последнее сообщение, зашифрованное этим ключом, отправлено одним из участников сеанса.
Примечание. Данное описание в адаптированном и существенно упрощенном виде заимствовано из книги Брюса Шнайера Applied Cryptography: Protocols, Algorithms, and Source Code in C.