Kerberos — это протокол, предназначенный для обеспечения безопасного обмена данными по незащищенной сети. Он используется для защиты от подслушивания и атак типа «злоумышленник в середине».
Протокол включает:
- Клиент : Человек, пытающийся подключиться к службе.
- Сервер: сервер, на котором размещена служба.
- Сервер аутентификации (AS): аутентифицирует клиента. Если клиент аутентифицирован, создается TGT Ticket Granting Ticket , подтверждающий подлинность клиента.
- Сервер предоставления билетов (TGS): сервер приложений, который выдает билеты на обслуживание.
- Центр распространения ключей (KDC) : Один сервер, на котором размещены база данных, сервер аутентификации и TGS.
Kerberos использует ключи трех типов:
- Секретный ключ клиента/пользователя: хэш, сгенерированный паролем пользователя.
- Секретный ключ TGS: Хэш пароля, необходимого для определения сервера, выдающего билеты.
- Секретный ключ сервера: Хэш пароля, используемого для определения сервера, предлагающего service.
Вот шаги, описывающие, как работает протокол Kerberos:
-
Пользователь вводит учетные данные для входа и создается секретный ключ клиента.
-
клиент запрашивает у сервера аутентификации TGT, отправляя идентификатор клиента.
-
Сервер аутентификации проверяет доступность клиента и TGS в базе данных. Если он найден, секретный ключ клиента создается с использованием пароля пользователя из базы данных, а также секретного ключа TGS. Сеансовый ключ (SK1) генерируется и шифруется с использованием секретного ключа клиента. Генерируется TGT, содержащий идентификатор клиента, сетевой адрес клиента, время жизни, временную метку и SK1 (который зашифрован с использованием TGS). SK1 и TGT отправляются клиенту. Однако сообщение зашифровано с использованием секретного ключа клиента.
-
Клиент расшифровывает сообщение, используя секретный ключ клиента, который генерируется из пароля, введенного пользователем. . Создается аутентификатор, который содержит идентификатор клиента, сетевой адрес клиента и временную метку клиентского компьютера, все из которых зашифрованы с использованием SK1. Клиент отправляет аутентификатор и TGT на сервер выдачи билетов.
-
TGS расшифровывает TGT с помощью секретного ключа TGS и извлекает SK1. SK1 используется для дешифрования аутентификатора — он проверяет истечение срока действия TGT и проверяет соответствие информации от TGT и аутентификатора. Затем он создает служебный сеансовый ключ (SK2). Этот ключ является секретом, совместно используемым клиентом и TGS. Создается билет службы, содержащий идентификатор клиента, сетевой адрес клиента, метку времени и SK2. Он зашифрован секретным ключом сервера, полученным из базы данных. SK2 и билеты службы отправляются клиенту после шифрования с помощью SK1.
-
Клиент расшифровывает сообщение с помощью SK1 и извлекает SK2. Создается новый аутентификатор, содержащий идентификатор клиента, сетевой адрес клиента и метку времени. Затем этот аутентификатор шифруется с помощью SK2. Аутентификатор и билет службы отправляются на целевой сервер.
-
Целевой сервер дешифрует билет службы с секретным ключом. SK2 извлекается и используется для расшифровки аутентификатора. Применяются те же проверки, и сервер отправляет сообщение, состоящее из отметки времени (плюс 1) и зашифрованное с помощью SK2. Этот шаг подтверждает, что и клиент, и сервер были аутентифицированы. .