Протокол Challenge Handshake Authentication Protocol (CHAP) [RFC-1994] используется для первоначальной аутентификации субъекта после установления соединения, но может, в зависимости от конкретной реализации, быть использован для периодического подтверждения аутентифицированности субъекта во время работы в рамках установленного соединения. Аутентификация происходит за три итерации (англ. three-way handshake). В поле Протокол РРР кадра указывается значение 0хС223, поле Данные преобразуется в четыре поля, аналогично РАР пакету (см. рис. 22.2) со схожими типами, единственное отличие в том, что поле Код имеет теперь четыре значения:
Код - 1: Запрос на предоставление данных для аутентификации.
Код - 2: Ответ на запрос с аутентификационными данными.
Код - 3: Подтверждение аутентификации.
Код - 4: Отказ в аутентификации.
Формат поля Данные зависит от поля Код.
Реализация протокола CHAP требует, чтобы обе стороны имели в распоряжении заранее согласованный пароль (англ. pre-shared secret), который не высылается по сети, но чаще всего присутствует у объекта в открытом виде (plaintext), при этом длина пароля должна быть не меньше 1 байта, и в принципе он должен соответствовать требованиям хэш-алгоритма, выбранного для реализации.
Рассмотрим подробнее структуру пакета для запроса и ответа (поле Данные кадра РРР) — рис. 22.7.
В поле Код указываются значения 1 для запроса и 2 для ответа.
Поле Идентификатор используется аналогично полю Идентификатор протокола РАР для обеспечения однозначного соответствия между запросом и ответом. Оно должно уменьшаться при новых запросах.
Поле Длина показывает суммарную длину всех полей пакета.
Поле Длина числа определяет размер следующего поля.
В поле Число указывается специальное значение, которое должно удовлетворять двум требованиям: быть уникальным и быть непредсказуемым. От качества выбора этого числа зависит, сможет ли злоумышленник использовать перехваченные им запросы-ответы при аутентификации уполномоченного субъекта. Для пакета Запрос это значение должно изменяться при каждом новом пакете.
В поле Имя указывается наименование системы, пославшей пакет. Так как субъект может аутентифииироваться на нескольких объектах, и объект может аутентифипировать несколько субъектов, это поле можно использовать для поиска пароля в соответствующей базе данных.
Собственно процедура аутентификации инициируется, в отличие от РАР, не субъектом, а объектом и происходит следующим образом (рис. 22.6):
1. Устанавливается РРР-соединение.
2. Объект посылает субъекту запрос на предоставление данных для произведения аутентификации.
3. Субъект отвечает необходимыми данными, часть из которых взята из содержимого запроса.
4. Объект анализирует полученные данные и отвечает подтверждением или отказом.
После получения Запроса субъект производит следующие действия:
1. Выбирает соответствующий объекту пароль.
2. Использует пароль и полученное Число как параметры для хэш-функции (обычно MD5) и получает соответствующее хэш-значение.
3. Формирует пакет Ответа, где в поле Число указывает полученное хэш-значение, а в поле Имя — свое наименование.
4. Высылает пакет объекту.
Объект, получив пакет, производит свое вычисление хэш-значения с использованием соответствующего пароля для данного субъекта и Числа, В случае совпадения рассчитанного и присланного хэш-значений, происходит подтверждение аутентификации, иначе — отказ. Формат пакета для этого аналогичен формату пакета РАР с Кодом = 3 для успешной авторизации и с Кодом = 4 для отказа.
Существует реализация данного протокола компанией Microsoft (MS-CHAP — Microsoft Challenge Handshake Authentication Protocol), в которой хранение пароля субъектом и объектом обеспечивается в зашифрованном виде.