Протокол аутентификации Kerberos
Общее
Протокол Kerberos работает в системах клиент/сервер для аутентификации и обмена ключевыми данными. Kerberos работает в сетях TCP-IP и реализован на основе доверия участников протокола к третьей (доверенной) стороне. Защищенность в рамках сессии Kerberos достигается засчет реализации симметричных алгоритмов шифрования. Служба Kerberos разделяет отдельный секретный ключ с каждым участником сети, и знание такого ключа равносильно подлинности участника сети.
В протоколе Kerberos участвуют два пользователя и доверенный сервер KS, реализующий роль центра распределения ключей. Пользователи сеанса А и В имеют уникальные идентификаторы IdA и IdB. Стороны А и В разделяют свой секретный ключ с сервером KS по отдельности. К примеру пользователь А хочет получить сеансовій ключ для обмена данными с пользователем В. Пользователь провоцирует фазу распределения ключей, отправляя серверу KS идентификаторы IdA и IdB:
- A → KS: IdA и IdB
Сервер KS создает пакет с временной отметкой Т, периодом работы L, случайным сеансовым ключом К и идентификатором IdA. Сервер шифрует пакет секретным ключом, который разделяет с пользователем В. Затем сервер KS берет все тоже самое, и шифрует секретным ключом разделенным с пользователем А. И оба пакета передает пользователю А:
- KS &arr; A:EA(T,L,K,IdB),EB(T,L,K,IdA)
Пользователь А расшифровывает первый пакет своим ключом и проверяет отметку времени Т, чтобы убедиться, что этот пакет действителен. После пользователь А создает пакет со своим идентификатором Id и отметкой времени Т, шифрует его сеансовым ключом К и передает пользователю В. Также А передает для пользователя В пакет от KS, зашифрованное ключом стороны В.
- A &arr; B: Ek(IdA,T), EB(T,L,K,IdA)
Только сторона В может расшифровать последние 2 пакета. Совпадение значений T и IdA подтверждает подлинность пользователя А к В. Чтобы пользователь В подтвердил свою подлинность пользователю А, он создает пакет, где содержится отметка времени Т +1 и шифрует его ключом К, затем передает его пользователю А.
- B &arr; A: Ek(T+1)
Когда пользователь А расшифрует пакет и получит ожидаемый результат, пользователь В подтвердит свою подлинность пользователю А. Протокол успешно работает, когда часы пользователей синхронизированы с часами сервера KS.
Система Kerberos имеет структуру вида клиент/сервер (рис.1).
Сервер Kerberos KS состоит из сервера аутентификации AS и сервера службы выдачи мандатов TGS. Kerberos создает сеансовые ключи, которые передаются клиентсу и серверу (или двум клиентам) и никому больше. Сеансовый ключ создается для шифрование пакетов, которые передаются между пользователями, и удаляется после конца сеанса. Область работы системы Kerberos распространяется на те участки сети, все пользователи которого зарегистрированы под именами и паролями в базе сервера системы.
Алгоритм работы системы Kerberos:
- Клиент (С) &arr; AS — запрос клиента С к серверу AS разрешить обратиться к службе TGS
- AS &arr; C — разрешение (мандат) от сервера AS клиенту С обратиться к службе TGS
- C &arr; — запрос С к службе TGS на получение допуска (мандата) к серверу ресурсов RS
- TGS &arr; C — разрешение (мандат) от службы TGS клиенту С для обращения к серверу ресурсов RS
- C &arr; RS — запрос к ресурсу сервера RS
- RS &arr; C — подтверждение подлинности сервера RS и предоставление ресурсов клиенту С
Такая модель взаимодействия сервера с клиентом может работать только при условии достижения целостности и конфиденциальности транспортируемой управляющей информации. Для избежания перехвата и несанкционированного использование информации, Kerberos реализует систему многократного шифрования при передаче любой управляющей информации. В системе Kerberos реализован два вида верительных документов: мандат и аутентификатор.
Мандат — нужен для безопасной транспортировки серверу идентификационных данных пользователя, которому дали мандат.
Аутентификатор — это дополнительный атрибут, предъявляемый вместе с мандатом.
Обозначение в документах kerberos:
- c — клиент
- S — сервер
- a — сетевой адрес пользователя
- v — время действие мандата
- t — метка времени
- Kx — секретный ключ х
- Kx,y — сеансовый ключ для x,y
- {m} Kx — пакет m, шифрованный секретным ключом Kx субъекта x
- Tx,y — мандат x на реализацию y
- Ax,y — аутентификатор x для y
Мандат kerberos имеет следующий вид: Tc,s = s, {c,a,v,Kc,s}Kx. Мандат дается конкретному пользователю на доступ к строгому серверу на определенное время. Пользователь не может расшифровать мандат, но он может предоставить его серверу в зашифрованном виде.
Аутентификатор Kerberos имеет следующий вид: Аc,s = {c,t, ключ} Kc,s. Аутентификатор создается пользователем каждый раз, когда он хочет получить доступ к серверу.
Сообщение Kerberos
Kerberos имеет 5 версий сообщений:
- Клиент — Kerberos: c, tgs
- Kerberos — клиент: {Kc,tgs}Kc {Tc,tgs} Ktgs
- Клиент TGS: {Ac,s} Kc,tgs {Tc,tgs} Ktgs,s
- TGS — клиент: {Kc,s} Kc,tgs {Tc,s} Ks
- Клиент — сервер: {Ac,s} Kc,s {Tc,s} Ks
Получение первоначального мандата
У клиента есть данные, которые доказывают его личность — пароль. Система Kerveros минимизирует вероятность выявление пароля, но не разрешает идентифицировать пользователя, который не знает пароля. Клиент отправляет на сервер аутентификации Kerberos пакет, содержащее его имя и имя сервера TGS:
- Клиент — Kerberos: c, tgs
На практике пользователь просто вводит свое имя, и приложение посылает запрос. Сервер аутентификации ищет данные о пользователе. Если информация есть, Kerberos создает сеансовый ключ Kc,tgs, который нужен для соединения между клиентом и сервером TGS. Система шифрует этот сеансовый ключ секретным ключом клиента Kc, и создает для клиента мандат на выделение мандата TGT (Ticket Granting Ticket). TGT шифруется на секретном ключе TGS и содержит идентификатора сервера и пользователя, сеансовый ключ пары TGS/клиент и время действия TGT. Сервер аутентификации отправляет пользователю этих два пакета:
- Kerberos — клиент: {Kc,tgs}Kc {Tc,tgs} Ktgs
Пользователь принимает два пакета, расшифровывает первый пакет своим секретным ключом К и имеет сеансовый ключ Kc,tgs. Секретный ключ является однонаправленной хэш-функцией пользовательского пароля. Злоумышленник не получит мандат и сеансовый ключ, потому что он не знает пароль.
Пользователь сохраняет мандат сеансовый ключ и TGT, удаляя пароль и хэш-значение. Злоумышленник может получить TGT и сеансовый ключ имея доступ к ПК пользователя, но эти данные имеют срок жизни.
Получение серверных мандатов
Пользователь может получить отдельный мандат для конкретной услуги. ему нужно послать в службу TGS запрос:
- Клиент TGS: {Ac,s} Kc,tgs {Tc,tgs} Ktgs,s
На практике приложение реализует такой запрос автоматически. TGS получив запрос, расшифровывает TGT своим личным секретным ключом. После TGS реализует включенный в TGT сеансовый ключ, чтобы расшифровать аутентификатор. Затем производится сравнение данных, имеющихся в аутентификаторе и информации мандата. Сравнивается сетевой адрес пользователя в мандате и тем, что указан в запросе, также сравнивается метка времени с текущем временем.
В ответ на верный запрос TGS дается пользователю мандат для доступа к нужному серверу. TGS создает сеансовый ключ для пользователя и нужно сервера, зашифрованный сеансовый ключом, общим для пользователя и TGS. Этих два пакета передаются пользователю:
- TGS — клиент: {Kc,s} Kc,tgs {Tc,s} Ks
Запрос услуги
Для успешной процедуры аутентификации у целевого сервера, клиент реализует аутентификатор, содержащий его имя, сетевой адрес и метку времени шифрованный на сеансовом ключей «клиент/сервер» и вместе с мандатом передает серверу:
- Клиент — сервер: {Ac,s} Kc,s {Tc,s} Ks
Сервер приняв пакеты, проводит проверку аутентификатора. Если нужна взаимная проверка подлинности, сервер отправляет пользователю пакет, содержащий метку времени зашифрованную сеансовым ключом.
Вывод
К протоколу Kerberos предъявлено ряд требований, который подробно описаны в RFC-1510. Основные из них:
- Система Kerberos должна быть защищена от атак, направленных на отказ в обслуживании
- нужна синхронизация системного времени всех участников системы
- Kerberos не защищает от атак перебора пароля.
- Мандаты и секретные ключи должны быть защищены от несанкционированного доступа