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 и после пытаться взломать долговременный ключ пользо-
вателя.