Глава 13. Примеры систем защиты

13.1. Kerberos для локальной сети

Система аутентификации и распределения ключей Kerberos основана на протоколе Нидхема Шрёдера (см. разделы [section-protocols-needham-schroeder, section-protocols-kerberos]). Самые известные реализации протокола Kerberos включены в Microsoft Active Directory и ПО Kerberos с открытым исходным кодом для Unix.

Протокол предназначен для решения задачи аутентификации и распределения ключей в рамках локальной сети, в которой есть группа пользователей, имеющих доступ к набору сервисов, для которых требуется обеспечить единую аутентификацию. Протокол Kerberos использует только симметричное шифрование. Секретный ключ используется для взаимной аутентификации.

Естественно, что в глобальной сети Интернет невозможно секретно создать и распределить пары секретных ключей, поэтому Kerberos построен для (виртуальной) локальной сети.

В протоколе используются 4 типа субъектов:

Для работы протокола требуется заранее распределить следующие секретные симметричные ключи для взаимной аутентификации.

Рис. 13.1 — Схема аутентификации и распределения ключей Kerberos

На рис. 13.1 представлена схема протокола, состоящая из 6 шагов.

Введём обозначения для протокола между пользователем $C$ с ключом $K_C$ и сервисом $S$ с ключом $K_S$:

Схема протокола следующая.

  1. Первичная аутентификация пользователя по паролю, получение сеансового ключа $K_{C,TGS}$ для дальнейшей аутентификации. Это действие выполняется один раз для каждого пользователя, чтобы уменьшить риск компрометации пароля.
    1. $C \rightarrow AS: ~ ID_C ~\|~ ID_{TGS} ~\|~ t_1 ~\|~ N_1$.
    2. $C \leftarrow AS: ~ ID_C ~\|~ T_{TGS} ~\|~ E_{K_C}( K_{C,TGS} ~\|~ \tilde{t}_1 ~\|~ N_1 ~\|~ ID_{TGS})$.
  2. Аутентификация сеансовым ключом $K_{C,TGS}$ на сервере TGS для запроса доступа к сервису выполняется один раз для каждого сервиса. Получение другого сеансового ключа аутентификации $K_{C,S}$.
    1. $C \rightarrow TGS: ~~ ID_S ~\|~ t_2 ~\|~ N_2 ~\|~ T_{TGS} ~\|~ E_{K_{C,TGS}}(ID_C ~\|~ ts_1)$.
    2. $C \leftarrow TGS: ~~ ID_C ~\|~ T_{S} ~\|~ E_{K_{C,TGS}}( K_{C,S} ~\|~ \tilde{t}_2 ~\|~ N_2 ~\|~ ID_S)$.
  3. Аутентификация сеансовым ключом $K_{C,S}$ на сервисе $S$ – создание общего сеансового ключа дальнейшего взаимодействия.
    1. $C \rightarrow S: ~~ T_{S} ~\|~ E_{K_{C,S}}(ID_C ~\|~ ts_2 ~\|~ K_1)$.
    2. $C \leftarrow S: ~~ E_{K_{C,S}}( ts_2 ~\|~ K_2)$.

Аутентификация и проверка целостности достигаются сравнением идентификаторов, одноразовых меток и меток времени внутри зашифрованных сообщений после расшифрования с их действительными значениями.

Некоторым недостатком схемы является необходимость синхронизации часов между субъектами сети.