Протокол CHAP является более защищенным, чем РАР. Он использует трехзвенную процедуру обмена пакетами. Для реализации этой процедуры используется четыре типа пакетов:
ВЫЗОВ – Challenge;
ОТКЛИК – Response;
ПОДТВЕРЖДЕНИЕ – Success;
ОТКАЗ – Failure.
Проверка подлинности проводится сразу после завершения фазы установления звена передачи данных и может быть повторена любое количество раз в любое время. После того, как звено передачи данных установлено, проверяющая сторона высылает пакет ВЫЗОВ, который включает в себя некоторую последовательность символов. Проверяемая сторона отвечает пакетом ОТКЛИК, содержащим последовательность, сгенерированную с помощью односторонней хэш-функции из содержащейся в пакете ВЫЗОВ последовательности и локально хранимого пароля. Проверяющая сторона сравнивает эту последовательность с самостоятельно вычисленной по тем же исходным данным. Если значения совпадают, то проверяющая сторона высылает проверяемой пакет ПОДТВЕРЖДЕНИЕ, если нет, то звено передачи данных следует разорвать.
CHAP обеспечивает защиту от повторного использования перехваченных (считанных злоумышленником, получившим физический доступ к линии передачи данных) пакетов. Это достигается путем использования последовательно возрастающего идентификатора и изменения содержащейся в пакетах ВЫЗОВ последовательности. Данный метод аутентификации основан на использовании пароля, который известен обеим сторонам. Он никогда не передается по звену передачи данных, хотя доступен обеим сторонам в незашифрованном виде. Используемый алгоритм требует, чтобы пароль имел длину не менее одного байта. Так как используется односторонняя хэш-функция, то практически невозможно вычислить пароль, даже зная исходные последовательности в пакете ВЫЗОВ и пакете ОТКЛИК.
Последовательность, содержащаяся в пакете ВЫЗОВ, должна быть уникальной (иначе можно было бы повторно использовать перехваченный ранее пакет ОТКЛИК, посланный в ответ на пакет ВЫЗОВ, содержащий ту же самую последовательность, и таким образом сфальсифицировать процедуру) и непредсказуемой (иначе можно было бы, предсказав эту величину, составить пакет ВЫЗОВ и, имитируя проверяющую сторону, послать проверяемой стороне этот пакет, получить и сохранить пакет ОТКЛИК, дождаться использования такого же пакета ВЫЗОВ настоящей проверяющей стороной и послать в ответ полученный “обманным путем” пакет ОТКЛИК).
Процедура аутентификации с помощью протокола CHAP может быть затребована так же, как и в случае с протоколом РАР, только с указанием шестнадцатиричного номера, соответствующего CHAP и метода аутентификации, то есть используемой хэш-функции. Причем стандартной функцией, которая должна поддерживаться во всех реализациях, является MD5 (Message Digest Version 5 – профиль сообщения, версия 5). После этого производится обмен пакетами протокола CHAP. Эти пакеты имеют тот же формат, что и пакеты протокола РАР (рис. 2.3). Поле КОД указывает тип пакета.
Поле ИДЕНТИФИКАТОР содержит уникальное значение, которое позволяет определить, какому запросу соответствует полученный ответ. Поле ДЛИНА содержит длину пакета в байтах. Длина и формат поля ДАННЫЕ определяются типом пакета CHAP.
Процедура аутентификации начинается с отправки проверяющей стороной пакета ВЫЗОВ. Этот пакет должен быть отправлен повторно, если в ответ на него не был получен пакет ОТКЛИК. Кроме того, такой пакет может быть отправлен уже в ходе работы протоколов сетевого уровня для того, чтобы убедиться, что система на противоположной стороне звена передачи данных осталась той же самой.
Поле данных CHAP в пакете ВЫЗОВ содержит:
произвольную последовательность символов, которая должна быть уникальной для каждого посланного пакета ВЫЗОВ; ее длина зависит от применяемого алгоритма генерации этой последовательности и не зависит от используемой хэш-функции;
длину последовательности в байтах;
идентификатор проверяюшей стороны, который может быть использован для того, чтобы проверяемая сторона могла отыскать в своей базе данных соответствующую пару идентификатор-пароль.
Пакет ОТКЛИК должен быть отправлен проверяемой стороной в ответ на каждый принятый пакет ВЫЗОВ. Поле данных CHAP в пакете ОТКЛИК содержит:
результат вoздeйcтвия односторонней хэш-функции на строку символов, полученную путем конкатенации идентификатора проверяющей стороны из пакета ВЫЗОВ, хранимого локально пароля и последовательности символов из пакета ВЫЗОВ; длина результата зависит от применяемой хэш-функции (16 байт для функции MD5); в случае использования двусторонней (взаимной) аутентификации пароли, используемые для получения результата, не должны совпадать (иначе злоумышленник сможет, получив пакет ВЫЗОВ, отправить его в качестве собственного, получить в ответ пакет ОТКЛИК и отправить его в качестве собственного пакета ОТКЛИК);
идентификатор проверяемой стороны, который может быть использован для того, чтобы проверяющая сторона могла отыскать в своей базе данных соответствующую пару идентификатор-пароль.
Получив пакет ОТКЛИК, проверяющая сторона сравнивает содержимое результата из этого пакета с вычисленной самостоятельно на основании тех же исходных данных с помощью той же хэш-функции величиной. В зависимости от результата этого сравнения проверяющая сторона высылает либо пакет ПОДТВЕРЖДЕНИЕ, либо пакет ОТКАЗ. После передачи пакета ОТКАЗ проверяющая сторона разрывает звено передачи данных.
Поле данных CHAP в пакете ПОДТВЕРЖДЕНИЕ и пакете ОТКАЗ содержит:
сообщение, которое, как правило, содержит текст, содержание которого стандартом не устанавливается;
длину сообщения в байтах.