Выбрать главу

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

Рассмотрим более подробно аутентификацию в системе Kerberos (рис. 2.4), которая выполняется за четыре шага:

1 получение пользователем билета TGT на билеты;

2 получение пользователем билета на доступ к серверу ;

3 аутентификация пользователя сервером;

4 аутентификация сервера пользователем.

Получение пользователем билета TGT на билеты

В начале сеанса регистрации пользователь обращается к сервису аутентификации (Authentication Service - AS) Kerberos за получением билета TGT для ЦРК. Обмен сообщениями с сервисом AS не требует от пользователя А подтверждения своей идентичности. Обмен состоит из двух сообщений: запроса от А и ответа сервиса AS. Запрос содержит просто имя пользователя А, а ответ сервиса AS - сеансовый ключ регистрации SA и билет TGT, зашифрованные секретным ключом КA пользователя А. Обычно ключ КA извлекается из пароля пользователя А, что позволяет пользователю не запоминать двоичный симметричный ключ и обращаться к Kerberos с любой рабочей станции. Билет TGT содержит сеансовый ключ SA, имя пользователя А и срок действия билета, зашифрованные вместе секретным ключом ЦРК - КК. В дальнейшем при шифровании сообщений для пользователя А вместо секретного ключа КA ЦРК использует сеансовый ключ SA.

Получение пользователем билета на доступ к серверу

Когда пользователь А желает получить доступ к серверу, в своем сообщении он отправляет в ЦРК билет TGT, запрос на билет для доступа к серверу и аутентификатор. Это сообщение имеет следующий формат: "имя А", "имя B", TGT: КК ["имя А", SA, срок действия], SA [время] и называется запросом пользователя на доступ к серверу. Аутентификатор доказывает ЦРК, что пользователь А знает сеансовый ключ SA. Аутентификатор состоит из текущего значения даты и времени, зашифрованного сеансовым ключом. Шифрование защищает от возможного перехвата сторонним пользователем С билета TGT из ответа ЦРК пользователю А. Указание текущих значений даты и времени в аутентификаторе требует синхронизации компьютерных часов пользователя А и ЦРК. ЦРК может допускать некоторый разброс времени (обычно 5 мин.). На практике для поддержки синхронизации часов используется протокол синхронизации времени типа Simple Network Time Protocol (SNTP).

ЦРК получает запрос пользователя А на доступ к серверу В и готовит ответ. При помощи ключа КК ЦРК расшифровывает билет TGT из запроса, восстанавливает сеансовый ключ SA и проверяет срок действия билета TGT. Если билет TGT - действующий, то ЦРК генерирует ключ для пользователя А и сервера В - KAB и формирует билет. Билет шифруется секретным ключом сервера В - KB и содержит ключ KAB, имя пользователя А и срок действия. В ответе ЦРК указываются имя сервера В и ключ KAB, зашифрованные сеансовым ключом SA, ответ имеет следующий формат: SA ["имя В", KAB, TICKET: KB ["имя А", KAB, срок действия]]. Получив ответ от ЦРК, пользователь А расшифровывает его при помощи сеансового ключа SA.

Аутентификация пользователя сервером

Пользователь А отправляет на сервер В запрос, состоящий из билета, который был прислан в ответе ЦРК, и аутентификатора, который содержит текущее значение даты и времени, зашифрованное ключом KAB ( KAB - сеансовый ключ для пользователя А и сервера В, здесь опять необходима синхронизация компьютерных часов пользователя А и сервера В ).

Сервер В получает запрос пользователя А - TICKET: KB ["имя А", KAB, срок действия], KAB [время] - и готовит ответ. Сервер расшифровывает билет своим секретным ключом KB, обнаруживая ключ KAB, имя пользователя А и срок действия билета; при этом предполагается, что ЦРК разделил ключ KAB только со стороной, названной в билете пользователем А. Если после расшифрования аутентификатора при помощи ключа KAB получено значение даты и времени, близкое к значению текущего времени (в интервале 5 мин.), то это означает, что шифрование мог выполнить только пользователь А. Таким образом, сервер аутентифицирует пользователя.

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

Аутентификация сервера пользователем

Для того чтобы пользователь А, в свою очередь, мог аутентифицировать сервер, сервер В увеличивает на единицу значение времени из запроса пользователя А и вновь шифрует его при помощи ключа KAB. Этот шифртекст и является ответом сервера: KAB [время+1]. Пользователь А получает ответ сервера и расшифровывает его ключом KAB. Пользователь А полагается на то, что ЦРК разделил ключ только с тем сервером, для доступа к которому пользователь А запрашивал билет. Если в результате расшифрования ответа сервера В при помощи ключа KAB получается исходное значение даты и времени, увеличенное на единицу, то это означает, что только сервер В мог выполнить это шифрование. Когда взаимная аутентификация завершена, сеансовый ключ может использоваться для обеспечения конфиденциальности или целостности сообщений, которыми обмениваются пользователь А и сервер В.