Chap и pap в чем разница
В чём разница между PAP и CHAP
PAP и CHAP – протоколы аутентификации, использующиеся в протоколе PPP. PAP расшифровывается банально – Password Authentication Protocol. Возможно такая простая расшифровка связана с тем, что протокол был одним из первых. CHAP расшифровывается как Challenge Handshake Authentication Protocol. В курсе CCNA затрагиваются оба этих протокола.
Как работает PAP?
Клиент хочет подключиться к серверу, он отправляет серверу пароль, сервер отвечает либо «Да», либо «Нет». Казалось бы, всё просто – зачем добавлять что-то ещё? Однако, всё становится сложнее, в случае если мы в силу каких-то обстоятельств обратились не к серверу, к, которому собирались, а к устройству злоумышленника. В этом случае получается, что спрашивая его, нравится ли ему наш пароль, мы по сути просто передаём ему пароль, с которым он в дальнейшем может делать всё что угодно. Чтобы избежать такой ситуации был придуман CHAP.
Как работает CHAP?
Клиент хочет обратиться к серверу, сервер передаёт клиенту случайную строку, клиент берёт пароль и эту строку и вычисляет от неё MD5 хеш, который возвращает серверу. Сервер проделывает те же операции (если он сам, конечно, знает правильный пароль). Если хеши слвпадают – клиент авторизован. Что мы получаем? Если клиент не знает пароль – хеши не совпадут, если вместо сервера злоумышленник – он получит только хеш, из которого ничего не выудить.
Таким образом, в реальных ситуациях лучше использовать протокол CHAP.
Авторизация и PPP
С PPP каждая система может требовать, чтобы другой конец линии опознал себя, используя один из двух опознавательных протоколов. Это Password Authentication Protocol (PAP) и Challenge Handshake Authentication Protocol (CHAP). Когда связь установлена, каждый может запросить другой конец линии, чтобы опознать себя, независимо от того, является ли он вызывающим или вызываемым. Ниже я буду говорить о «клиенте» и «сервере», когда захочу сделать различие между системой опознания и аутенфикатором. PPP daemon может спрашивать о подлинности, посылая LCP-запрос конфигурации, опознающий желаемый протокол.
PAP против CHAP
PAP в основном работает как нормальная процедура входа в систему. Клиент опознает себя, посылая имя пользователя и пароль серверу, который сравнивает их с базой данных. Этот метод легко уязвим для посторонних наблюдателей, которые могут попытаться получить пароль, слушая последовательную линию.
CHAP не имеет этих недостатков. С CHAP аутенфикатор (сервер) посылает беспорядочно сгенерированную «challenge»-строку клиенту, наряду с именем хоста. Клиент использует имя хоста (hostname) для того, чтобы искать соответствующий шифр, объединяет его с challenge и шифрует строку, используя однонаправленную hash-функцию. Результат будет возвращен на сервер наряду с hostname клиента. Сервер теперь выполняет те же самые вычисления и опознает клиента.
Другая особенность CHAP то, что он не требует опознания клиента для опознания самого себя при запуске, но посылает challenge в определенные промежутки времени, чтобы удостовериться, не был ли клиент заменен злоумышленником, например, переключив телефонные линии.
Файл для CHAP
Когда надо опознать себя с некоторым сервером, используя CHAP, pppd ищет в файле chap-secrets запись с именем клиента, равным локальному hostname, и именем сервера, равного удаленному hostname, посланному в CHAP Challenge. При требовании опознавания себя роли просто поменялись: pppd будет искать запись с именем клиента, приравненным к удаленному hostname (посланному в CHAP-ответе клиенту) и имя сервера, приравненное локальному хосту.
Типовой файл chap-secrets для vlager :
Файл для PAP
Файл шифров PAP очень похож на тот, который используется CHAP. Первые два поля всегда содержат имена пользователя и сервера, третье поле хранит шифр PAP. Когда удаленная машина посылает запрос опознания, pppd использует запись, которая имеет поле сервера равное локальному hostname, и поле пользователя, равное имени пользователя, посланному в запросе. Когда опознание произойдет, pppd выберет шифр, который будет послан с полем пользователя, приравненным к локальному имени пользователя, и полем сервера, приравненным к удаленному hostname.
В четвертом поле (и всех следующих) Вы можете определить, какие адреса IP разрешены точно, как в файле шифров CHAP. Удаленная машина затем может запроситьь только адреса из этого списка. В типовом файле мы требуем, чтобы c3po использовал реальный адрес IP.
Заметьте, что PAP довольно слабый опознавательный метод, и лучше использовать CHAP, если это возможно. Я не буду здесь описывать PAP в деталях: если Вы заинтересованы в использовании PAP, то найдете больше сведений на pppd(8) man-странице.
Chap и pap в чем разница
Нужно заметить, что комбинация FreeBSD + getty до недавнего времения не была таким сообразительным прибором, но, начиная с getty распознает начальные LCP-кадры PPP-соединения и может вызывать, скажем, pppd, который и решает, что делать дальше. До этого getty умел только выдать этот самый «login:» и приходилось использовать mgetty.
Так как наш скрипт дозвонки больше не будет заниматся аутентификацией, нужно убрать из него имя пользователя «igor«, его пароль «1234567» и ошибку аутентификации
Теперь скрипт заканчивает работу сразу же, как получит строку «login:«. Отметим, что приглашние «login:» не имеет ни какого отношения к PAP и CHAP, и pppd воспринимает его не более как шум в линии, поэтому вместо этой строки может быть любое другое приглашение провайдера, в крайнем случае, «>«.
Теперь мы можем звонить провайдеру:
Параметры user igor и remotename cool позволяют однозначно определить, какой пароль использовать при аутентификации, в данном случае это «1234567«. Как уже говорилось, параметр remotename необходим только, если мы не можем однозначно выбрать пароль из файла /etc/ppp/pap-secrets. Имя нашей стороны можно также задать с помощью параметра name igor, но параметр user имеет больший приоритет. Заметим, что хотя пароль передается в открытом виде, удалённая сторона может хранить пароль в виде результата какой-либо хэш-функции, например, MD5, в качестве параметра которой, выступает пароль.
Имена и пароли для CHAP хранятся в файле /etc/ppp/chap-secrets, права доступа у него должны быть такие же, как для PAP: и формат строк тоже совпадает:
Теперь наша строка для звонка провайдеру выглядит так:
Обратите внимание, что она отличается от PAP только отсутствием параметра remotename. Это объяснятеся тем, что удалённая сторона сама говорит своё имя, поэтому её имя, записаное в файле /etc/ppp/chap-secrets, не может быть произвольным, как это было в случае с PAP. Даже если Вы зададите параметр remotename, имя, сообщённое удалённой стороной, имеет больший приоритет. Что касается имени нашей стороны, то оно может быть также задано с помощью параметра
Кроме того, можно указать pppd, чтобы он не соглашался проводить аутентификацию тем или иным способом или же требовал какого-то одного способа с помощью различных комбинаций параметров refuse-pap, refuse-chap, require-pap и require-chap. Раньше эти параметры назывались соответственно -pap, -chap, +pap и +chap.
Linux.yaroslavl.ru
С PPP каждая система может требовать, чтобы другой конец линии опознал себя, используя один из двух опознавательных протоколов. Это Password Authentication Protocol (PAP) и Challenge Handshake Authentication Protocol (CHAP). Когда связь установлена, каждый может запросить другой конец линии, чтобы опознать себя, независимо от того, является ли он вызывающим или вызываемым. Ниже я буду говорить о «клиенте» и «сервере», когда захочу сделать различие между системой опознания и аутенфикатором. PPP daemon может спрашивать о подлинности, посылая LCP-запрос конфигурации, опознающий желаемый протокол.
PAP в основном работает как нормальная процедура входа в систему. Клиент опознает себя, посылая имя пользователя и пароль серверу, который сравнивает их с базой данных. Этот метод легко уязвим для посторонних наблюдателей, которые могут попытаться получить пароль, слушая последовательную линию.
CHAP не имеет этих недостатков. С CHAP аутенфикатор (сервер) посылает беспорядочно сгенерированную «challenge»-строку клиенту, наряду с именем хоста. Клиент использует имя хоста (hostname) для того, чтобы искать соответствующий шифр, объединяет его с challenge и шифрует строку, используя однонаправленную hash-функцию. Результат будет возвращен на сервер наряду с hostname клиента. Сервер теперь выполняет те же самые вычисления и опознает клиента.
Другая особенность CHAP то, что он не требует опознания клиента для опознания самого себя при запуске, но посылает challenge в определенные промежутки времени, чтобы удостовериться, не был ли клиент заменен злоумышленником, например, переключив телефонные линии.
Когда надо опознать себя с некоторым сервером, используя CHAP, pppd ищет в файле chap-secrets запись с именем клиента, равным локальному hostname, и именем сервера, равного удаленному hostname, посланному в CHAP Challenge. При требовании опознавания себя роли просто поменялись: pppd будет искать запись с именем клиента, приравненным к удаленному hostname (посланному в CHAP-ответе клиенту) и имя сервера, приравненное локальному хосту.
Типовой файл chap-secrets для vlager :
Файл шифров PAP очень похож на тот, который используется CHAP. Первые два поля всегда содержат имена пользователя и сервера, третье поле хранит шифр PAP. Когда удаленная машина посылает запрос опознания, pppd использует запись, которая имеет поле сервера равное локальному hostname, и поле пользователя, равное имени пользователя, посланному в запросе. Когда опознание произойдет, pppd выберет шифр, который будет послан с полем пользователя, приравненным к локальному имени пользователя, и полем сервера, приравненным к удаленному hostname.
Образец файла шифров для PAP:
В четвертом поле (и всех следующих) Вы можете определить, какие адреса IP разрешены точно, как в файле шифров CHAP. Удаленная машина затем может запроситьь только адреса из этого списка. В типовом файле мы требуем, чтобы c3po использовал реальный адрес IP.
Заметьте, что PAP довольно слабый опознавательный метод, и лучше использовать CHAP, если это возможно. Я не буду здесь описывать PAP в деталях: если Вы заинтересованы в использовании PAP, то найдете больше сведений на pppd(8) man-странице.
Chap и pap в чем разница
До сих пор наш скрипт сам выполнял аутентификацию, то есть, вводил имя и пароль в ответ на запросы удалённой стороны. Но PPP предусматривает и свои способы аутентификации PAP (Password Authentication Protocol) и CHAP (Challenge Handshake Authentication Protocol) и мы можем ими воспользоваться, если удалённая сторона достаточна сообразительна, чтобы не только выдать «login:«, но и провести PAP или CHAP аутентификацию.
Так как наш скрипт дозвонки больше не будет заниматься аутентификацией, нужно убрать из него имя пользователя «igor«, его пароль «1234567» и ошибку аутентификации
Теперь скрипт заканчивает работу сразу же, как получит строку «login:«. Отметим, что приглашение «login:» не имеет никакого отношения к PAP и CHAP, и pppd воспринимает его не более, как шум в линии, поэтому вместо этой строки может быть любое другое приглашение провайдера, в крайнем случае, «>«.
Формат этой строки таков наше имя, имя удалённой стороны и пароль. В PAP используется только наше имя и пароль, а имя удалённой стороны «cool» может быть произвольным. В принципе, оно нужно только для того, чтобы pppd мог определить, какой пароль нужно использовать в случае, когда Вы используете одно и то же имя у разных провайдеров, например:
Теперь мы можем звонить провайдеру:
CHAP аутентификация происходит следующим образом при установлении PPP-соединения удалённая сторона предлагает нам аутентификацию CHAP. Мы соглашаемся, и удалённая сторона высылает нам ключ (challenge), состоящий из случайной последовательности символов, и своё имя. Мы берём наш пароль и присланный ключ и прогоняем их через алгоритм MD5. Получившийся результат высылаем вместе со своим именем. Удалённая сторона, зная наш пароль и высланный её ключ, в свою очередь, проделывает то же самое у себя, и если её результат совпадает с присланным нами, то аутентификация считается успешной. Таким образом, пароль не передаётся в открытом виде, но удалённая сторона должна хранить наш пароль в открытом виде.
Теперь наша строка для звонка провайдеру выглядит так:
Кроме того, можно указать pppd, чтобы он не соглашался проводить аутентификацию тем или иным способом или же требовал какого-то одного способа с помощью различных комбинаций параметров refuse-pap, refuse-chap, require-pap и require-chap. Раньше эти параметры назывались соответственно -pap, -chap, +pap и +chap.