186
временного сеансового ключа. KDC возвращает ключ в двух вариантах —
один зашифрован долговременным ключом пользователя, другой зашифрован
долговременным ключом сервиса. Ответ KDC называется билетом, поскольку
кроме ключа содержит и некоторую дополнительную информацию. После
этого пользователь самостоятельно пересылает билет сервиса, и у них появля-
ется некоторый общий секрет, который уже можно использовать как для ау-
тентификации, так и для защиты канала (
рис. 7.6).
Применение доверенного сервера, который хранит секреты всех своих
пользователей, дает возможность обойтись без асимметричных алгоритмов
шифрования, что делает протокол Kerberos более легким в реализации и
управлении.
На приведенной схеме видно, что каждый сервис должен хранить собст-
венный долговременный ключ. В Unix-системах ключи сервисов хранятся в
так называемом keytab-файле (понятно, что данный файл не должен быть дос-
тупен для чтения всем пользователям), в ОС Windows ключ хранится в ло-
кальной базе учетных записей SAM (стандартными средствами просмотреть
информацию о ключе невозможно).
Долговременный ключ пользователя, как уже упоминалось выше, —
это, например, некоторая хэш-функция его пароля. Таким образом, в приве-
денной выше схеме пользователь все равно должен вводить свой пароль при
обращении к очередному сервису. Для обеспечения реальной возможности
однократной аутентификации схема взаимодействия клиента, сервера и KDC
реально несколько отличается от приведенной на
рис. 7.6. В процессе аутен-
тификации при входе в сеть пользователь получает специальный билет, назы-
ваемый ticket granting ticket (TGT), использующийся для аутентификации
пользователя в KDC (
рис. 7.7).
Полученные пользователем билеты сохраняются в специальном защи-
щенном кэше (в случае Unix-систем это файл, доступ к которому имеет только
пользователь, получивший билет, в Windows — это защищенное хранилище
модуля SSPI, т. е. оперативная память). При необходимости билет может пе-
реместиться на другой компьютер (например, если пользователь открыл сеанс
по SSH или RDP), но при этом действительным он останется только в том
случае, если в нем присутствует специальный флаг (соответственно, на KDC
можно задавать, какие из пользователей будут получать этот флаг в билете, а
какие нет).
Из изложенного выше механизма следует, что KDC не аутентифицирует
клиента перед самим собой. Аутентификация есть только неявная — смог ли
клиент воспользоваться тем сеансовым ключом, который он получил, или нет.
Это создает две проблемы: во-первых, злоумышленник может получить билет
пользователя и за какое-то время извлечь сеансовый ключ (например, если
применялся слабый алгоритм шифрования); во-вторых, злоумышленник мо-
жет запросить TGT и после пытаться взломать долговременный ключ пользо-
вателя.