Книга: Инфраструктуры открытых ключей
Аутентификация Kerberos
Роджер Нидхэм и Михаэль Шредер в 1978 году впервые предложили механизм аутентификации, который базировался на шифровании, но он, к сожалению, не обеспечивал одинаковых гарантий для участвующих в коммуникации сторон >[93]. Для решения этой проблемы в Массачусетском технологическом институте в 1985 году была разработана система защиты информационных систем от вторжений, дополняющая механизм Нидхэма-Шредера специальным сервисом выдачи билетов. Она была названа Kerberos по имени трехглавого пса Цербера, охранявшего ворота в ад в греческой мифологии. Такое название было выбрано, потому что в аутентификации участвовали три стороны: пользователь, сервер, к которому желает получить доступ пользователь, и сервер аутентификации, или центр распределения ключей (ЦРК). Специальный сервер аутентификации предлагался в качестве доверенной третьей стороны, услугами которой могут пользоваться другие серверы и клиенты информационной системы >[4].
Рис. 2.4. Аутентификация Kerberos
Система Kerberos владеет секретными ключами обслуживаемых субъектов и помогает им выполнять взаимную аутентификацию. Сеанс начинается с получения пользователем Абилета для получения билета - Ticket-Granting Ticket (TGT) от ЦРК. Когда пользователь желает получить доступ к некоторому серверу В, то сначала отправляет запрос на билет для доступа к этому серверу вместе со своим билетом TGT в ЦРК. TGT содержит информацию о сеансе регистрации пользователя А и позволяет ЦРК оперировать, не поддерживая постоянно информацию о сеансе регистрации каждого пользователя. В ответ на свой запрос пользователь А получает зашифрованный сеансовый ключ SA и билет на доступ к серверуВ. Сеансовый ключ зашифрован секретным ключом, известным только пользователю А и ЦРК. Билет на доступ к серверуВ содержит тот же самый сеансовый ключ, однако он шифруется секретным ключом, известным только серверу В и ЦРК.
Аутентификация происходит тогда, когда пользователь А и сервер доказывают знание своего секретного ключа. Пользователь шифрует метку времени и отправляет ее на сервер В. Сервер расшифровывает метку, увеличивает ее значение на единицу, вновь зашифровывает и отправляет шифртекст пользователю А. Пользователь А расшифровывает ответ, и если в нем содержится значение метки времени с приращением, то аутентификация завершается успешно, в противном случае - неудачно. После взаимной аутентификации сеансовый ключ может использоваться для шифрования сообщений, которыми обмениваются пользователь А и сервер В. Очевидно, что стороны должны доверять ЦРК, поскольку он хранит копии всех секретных ключей.
Рассмотрим более подробно аутентификацию в системе 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 получается исходное значение даты и времени, увеличенное на единицу, то это означает, что только сервер В мог выполнить это шифрование. Когда взаимная аутентификация завершена, сеансовый ключ может использоваться для обеспечения конфиденциальности или целостности сообщений, которыми обмениваются пользователь А и сервер В.
Система Kerberos - это мощный механизм, поддерживающий взаимную аутентификацию и аутентификацию пользователя на многих удаленных серверах. Пользователь может аутентифицировать себя в открытой сети или проверить идентичность удаленного сервера при помощи того же самого механизма, который используется для подтверждения его собственной идентичности >[81].
К сожалению, ЦРК системы Kerberos представляет собой очень привлекательную цель для нападения. Успешная атака на ЦРК создает катастрофические проблемы. Если злоумышленник получает секретный ключ ЦРК, то одновременно получает возможность выдавать себя за любого пользователя. При обнаружении компрометации ЦРК должна быть проделана колоссальная работа по смене всех секретных ключей. И если системные администраторы могут легко изменить секретные ключи серверов, местонахождение которых им известно, то поиск каждого пользователя, чтобы он сформировал новый пароль (на основе которого затем будет сформирован секретный ключ), может потребовать значительных усилий. Для этого случая предлагает решение криптография с открытыми ключами.
Инициализация открытых ключей Kerberos
Инициализация открытых ключей Kerberos (Kerberos Public Key Initialization - PKIINIT) вносит изменения в процедуру начального обмена с ЦРК, а все остальное оставляет без изменений >[70]. В своем запросе пользователь А отправляет сертификат ключа подписи и подписанный открытый ключ. Сертификат ключа подписи пользователя А содержит имя А и открытый ключ, используемый для проверки подлинности цифровых подписей, сгенерированных пользователем А. Открытый ключ будет использоваться для управления ключами; он может быть либо ключом транспортировки ключей ( открытый ключRSA ) либо ключом согласования ключей ( открытый ключ Диффи-Хэллмана). ЦРК проверяет цифровую подпись, чтобы гарантировать, что открытый ключ принадлежит пользователю А. Проверив его один раз, ЦРК использует этот открытый ключ для подписания сеансового ключа.
Формат ответа ЦРК зависит от типа ключа пользователя А. Если пользователь А использует открытый ключ Диффи-Хэллмана, то ЦРК возвращает его подписанным при помощи открытого ключа Диффи-Хэллмана. Пользователь проверяет цифровую подпись, чтобы убедиться, что ответ принадлежит ЦРК. И пользователь А, и ЦРК вычисляют один и тот же симметричный ключ при помощи алгоритма Диффи-Хеллмана и используют его как сеансовый ключ SA. Пользователь А может использовать и открытый ключRSA. В этом случае ЦРК генерирует временный симметричный ключ и шифрует его при помощи открытого ключа ( RSA ) пользователя А. Кроме того, ЦРК генерирует и заверяет цифровой подписью второй симметричный ключ, который будет использоваться как сеансовый ключ SA. Затем подписанный ключ SA шифруется при помощи временного ключа и отправляется пользователю А вместе с временным ключом, зашифрованным открытым ключом ( RSA ) пользователя А. Пользователь А может извлечь ключ SA, расшифровав сначала временный ключ при помощи своего секретного ключа ( RSA ), а потом использовав этот временный ключ для окончательного расшифрования подписанного ключа SA. Проверка подписи гарантирует, что сеансовый ключ SA получен от ЦРК.
Без сертификатаЦРК был бы необходим другой механизм аутентификации открытого ключа пользователя А. Связывание имени пользователя А с его открытым ключом подписи позволяет ЦРК аутентифицировать запрос. ЦРК полагается на удостоверяющий центр (УЦ) для подтверждения того, что пользователь А владеет секретным ключом, соответствующим открытому ключу, указанному в сертификате.
Использование в системе Kerberos технологии открытых ключей позволяет ЦРК не хранить секретные ключи пользователей, что значительно снижает риск компрометации. В случае успешной атаки на ЦРК последствия оказываются менее серьезными, так как новые секретные ключи требуются только серверам.
- Глава 6 Аутентификация средствами Kerberos
- 15.9.1 Нулевая аутентификация
- 13.11.1 Аутентификация в telnet
- 15.9.2 Аутентификация систем
- 15.9.3 Аутентификация DCS
- 15.9.4 Аутентификация в Kerberos
- Аутентификация пользователя сервером
- Аутентификация сервера пользователем
- Инициализация открытых ключей Kerberos
- Нотариальная аутентификация
- Глава 28 Идентификация и аутентификация пользователей
- Идентификация и аутентификация