RFC 3912 WHOIS Protocol Specification

Network Working Group                                      L. Daigle
Request for Comments: 3912                            VeriSign, Inc.
Obsoletes: 954, 812                                   September 2004
Category: Standards Track

Спецификация протокола WHOIS

WHOIS Protocol Specification

PDF

Статус документа

Данный документ содержит спецификацию протокола, предложенного сообществу Internet, и служит запросом к дискуссии в целях развития протокола. Информацию о статусе данного протокола можно найти в текущей редакции документа Internet Official Protocol Standards (STD 1). Документ может распространяться без ограничений.

Авторские права

Copyright (C) The Internet Society (2004).

Аннотация

Этот документ обновляет спецификацию протокола WHOIS, содержащуюся в RFC 954. Обновление заключается в удалении из RFC 954 материалов, которые не имеют отношения к протоколу и неприменимы к сети Internet в ее современном состоянии. В документе не предпринимается попыток изменения протокола, как такового или добавления вариантов его использования сверх того, что опубликовано в RFC 954.

1. Введение

WHOIS представляет собой основанный на TCP и ориентированный на транзакции “запрос-отклик” протокол, который широко используется в сети Internet для получения информации. Протокол был изначально разработан для поддержки сервиса white pages — получения сведений о зарегистрированных доменных именах, однако сегодня спектр предоставляемой на основе этого протокола информации существенно шире. Протокол обеспечивает представление информации в удобном для человека формате. Данный документ обновляет спецификацию протокола WHOIS и, следовательно, действие документа RFC 954 [1].

В силу исторических причин протокол WHOIS имеет достаточно много недостатков (например, отсутствие языковой поддержки или средств обеспечения безопасности) по сравнению в более современными протоколами IETF. В этом документе не предпринимается попыток исправить эти недостатки – протокол WHOIS просто документируется в его текущем состоянии. Некоторые недостатки WHOIS из числа хорошо известных достаточно подробно рассматриваются в этом документе. Рассмотрение вопросов преодоления недостатков существующего протокола и добавления в него новых функций входит в сферу интересов рабочей группы CRISP в составе IETF.

2. Спецификация протокола

Сервер WHOIS прослушивает клиентские запросы TCP через порт 43. Клиенты WHOIS передают серверу текстовые запросы, а сервер возвращает свои отклики также в текстовом формате. Каждый запрос заканчивается последовательностью символов ASCII CRLF. Отклик может содержать более одной строки, поэтому символы CR и/или LF не должны трактоваться как завершение отклика. Сервер WHOIS закрывает соединение после завершения передачи отклика. Закрытое соединение TCP показывает клиенту, что отклик получен.

3. Пример протокола

Предположим, что некий клиент обращается к серверу WHOIS, на сайте whois.nic.mil для получения информации о пользователе Smith. Обмен пакетами будет иметь вид:

клиент                           сервер whois.nic.mil
open TCP   ---- (SYN) ------------------------------>
           <---- (SYN+ACK) --------------------------
send query ---- "Smith<CR><LF>" -------------------->
get answer <---- "Info about Smith<CR><LF>" ---------
           <---- "More info about Smith<CR><LF>" ----
close      <---- (FIN) ------------------------------
           ----- (FIN) ----------------------------->

4. Реализация

Протокол WHOIS не поддерживает интернационализации и не включает механизмов указания используемого набора символов. Обычно информация храниться в кодировке US-ASCII. На практике некоторые серверы WHOIS, особенно за пределами США могут использовать другие наборы символов для запросов, откликов или для того и другого сразу. Невозможность предсказания или выбора кодировки снижает уровень взаимодействия и практическую пользу протокола WHOIS.

5. Вопросы безопасности

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

Отсутствие механизмов обеспечения безопасности означает, что протокол в текущем состоянии не будет принят IETF.

6. Благодарности

Автор благодарит Рэна Аткинсона (Ran Atkinson) за подготовку первого варианта этого документа. Авторами исходного предварительного стандарта (Draft Standard) для протокола WHOIS являются Ken Harrenstien, Mary Stahl и Elizabeth Feinler.

7. Литература

7.1. Нормативные документы

[1] Harrenstien, K., Stahl, M., and E. Feinler, «NICNAME/WHOIS», RFC 954, October 1985.

Адрес автора

Leslie Daigle

VeriSign, Inc.

21355 Ridgetop Circle

Dulles, VA 20166

US

EMail: leslie@verisignlabs.com; leslie@thinkingcat.com


Перевод на русский язык

Николай Малых

nmalykh@gmail.com

Полное заявление авторских прав

Copyright (C) The Internet Society (2004).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and at www.rfc-editor.org, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an «AS IS» basis and THE CONTRIBUTOR, THE ORGANIZATION HE/S HE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Интеллектуальная собственность

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the ISOC’s procedures with respect to rights in ISOC Documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.

Рубрика: RFC | Оставить комментарий

RFC 3882 Configuring BGP to Block Denial-of-Service Attacks

Network Working Group                                        D. Turk
Request for Comments: 3882                               Bell Canada
Category: Informational                               September 2004

Настройка BGP для блокирования DoS-атак

Configuring BGP to Block Denial-of-Service Attacks

PDF

Статус документа

В этом документе содержится спецификация протокола, предложенного сообществу Internet. Документ служит приглашением к дискуссии в целях развития и совершенствования протокола. Текущее состояние стандартизации протокола вы можете узнать из документа Internet Official Protocol Standards (STD 1). Документ может распространяться без ограничений.

Авторские права

Copyright (C) The Internet Society (2004).

Аннотация

В этом документе обсуждается практический метод, использующий группы BGP в качестве способа удаленного запуска механизма создания «черной дыры» для определенной сети-адресата с целью блокирования атаки на службы (denial-of-service или DoS). «Черные дыры» могут создаваться для избранных маршрутизаторов, а не для всех понимающих BGP маршрутизаторов в сети. Документ также описывает метод «сливной трубы» (sinkhole tunnel), использующий группы BGP и туннели для того, чтобы направить трафик в специальный маршрутизатор (sinkhole router) для анализа пакетов.

1. Методы активизации «черных дыр» с помощью BGP

Существующие методы организации «черных дыр», запускаемые с помощью BGP1, основаны на изменении адреса следующего интервала BGP2 для сети, атакуемой через сеть iBGP. Генерируется специально подготовленный анонс iBGP от маршрутизатора, находящегося в целевой/атакуемой AS, и в этом анонсе адрес следующего интервала для маршрута в атакуемую сеть (или хост) заменяется на адрес RFC 1918 [RFC1918] (приватный адрес). Большинство маршрутизаторов в Internet (особенно краевые маршрутизаторы) имеет статические маршруты, указывающие на адреса RFC 1918 для null-интерфейса. Такие статические маршруты уводят весь трафик, адресованный в атакуемую сеть, на null-интерфейс.

Когда узел iBGP в целевой AS получает обновление iBGP, анонсируемый префикс будет добавляться в таблицу маршрутизации с адресом из какой-либо сети RFC 1918, в качестве следующего интервала (next-hop). Маршрутизатор будет пытаться преобразовать адрес RFC 1918 для следующего интервала, чтобы квалифицировать маршрут и определить интерфейс для пересылки. Этот процесс будет корректно возвращать в качестве следующего интервала null-интерфейс. В предположении, что маршрутизатор корректно настроен для направления адресованного в сеть RFC 1918 трафика в null-интерфейс, весь трафик, направленный в атакуемую сеть, будет в результате отброшен, а сама атакуемая сеть станет недоступной как для атакующего, так и для всех остальных.

Хотя такой метод позволяет экранировать сетевую инфраструктуру от атак, защищая большое число устройств, он имеет нежелательный побочный эффект, делающий атакуемую сеть недоступной для всей AS, в которой находится эта сеть. Даже если статический маршрут, указывающий на адрес RFC 1918 для null-интерфейса, задан не на всех маршрутизаторах AS, измененное значение next hop делает невозможной доставку трафика легитимным адресатам.

Обычно сетевые операторы используют такие методы в течение коротких периодов. Метод приводит к отбрасыванию трафика, адресованного в атакуемую сеть, на всех точках входа в AS. По умолчанию маршрутизаторам, отбрасывающим трафик в null-интерфейс, следует возвращать по адресу отправителя, относящемуся к исходной/атакующей AS, сообщение «ICMP unreachable».

Когда процедура достигнет этой точки3, один из адресов источников связанного с атакой трафика захватывается путем введения устройства с таким же IP-адресом в домен BGP целевой/атакуемой AS. Устройство, захватившее адрес источника, будет собирать пакеты ICMP unreachable. Адреса отправителей в таких пакетах ICMP будут показывать, через какие из граничных маршрутизаторов атакуемой AS проходит трафик данной атаки. Оператор после этого может вручную заблокировать этот трафик на определенных таким путем маршрутизаторах.

2. Расширенный метод активизации «черных дыр» с помощью BGP

В этом документе описан метод, позволяющий проинструктировать выбранный набор маршрутизаторов о необходимости изменения адреса следующего интервала для определенного префикса путем использования протокола BGP. В качестве следующего интервала может использоваться null-интерфейс или интерфейс рассмотренной ниже «сливной трубы». Метод не использует списков доступа или средств ограничения трафика для трактовки связанного с атакой трафика, а также не включает изменения адреса следующего интервала для всей сети. Значение next hop будет изменяться только на выбранных маршрутизаторах вспомогательной группы BGP в целевой/атакуемой AS.

Для подготовки сети к использованию этого метода оператору нужно определить уникальную группу (community) для каждого граничного маршрутизатора AS, который может использоваться для доставки в сеть связанного с атакой трафика. Например, сеть с номером автономной системы BGP 65001 имеет два граничных маршрутизатора R1 и R2. Группа 65001:1 создается для идентификации маршрутизатора R1, группа 65001:2 – для R2, а группа 65001:666 используется для идентификации обоих маршрутизаторов.

После определения групп BGP маршрутизаторы R1 и R2 нужно настроить, как показано ниже.

  1. Создать статический маршрут, указывающий на сеть RFC 1918 для null-интерфейса.
  2. Создать список управления доступом для AS-Path, которому соответствует анонс локального префикса BGP.
  3. Создать список управления доступом для BGP community, которому соответствует значение группы, выделенное оператором для соответствующего маршрутизатора (например, 65001:1 для маршрутизатора R1).
  4. Создать список управления доступом для BGP community, которому соответствует значение группы, выделенное оператором для всех маршрутизаторов (т. е., 65001:666 для R1 и R2).
  5. В BGP следует применять политику импорта маршрутов iBGP к получаемым анонсам iBGP для реализации показанной ниже логики (должны выполняться все приведенные ниже условия — AND)

  1. Правило, разрешающее маршруты, соответствующие перечисленным ниже критериям, и вносящее указанные изменения:
  1. проверить соответствие группе (community) указанной для данного маршрутизатора (т. е., 65001:1 для R1);

  2. проверить соответствие AS-Path для локально сгенерированных анонсов BGP;
  3. установить для BGP next hop сеть RFC 1918;
  4. заменить BGP community на общеизвестную группу no-advertise (не анонсировать).

  1. Правило, разрешающее маршруты, соответствующие перечисленным ниже критериям и вносящее указанные изменения.
  1. проверить соответствие группе, включающей все маршруты (т. е., 65001:666);
  2. проверить соответствие AS-Path для локально сгенерированных анонсов BGP;
  3. установить для BGP next hop сеть RFC 1918;
  4. заменить BGP community на общеизвестную группу no-advertise.

После того, как заданы правила для R1 и R2, сетевой оператор может в случае атаки анонсировать целевую сеть, которая может содержать маршруты к одному или множеству хостов (/32) в iBGP атакуемой AS. Анонсы должны содержать значение группы, связанное с маршрутизатором или маршрутизаторами, через которые проходит атака, в дополнение к общепринятой группе no-export. Использование групп BGP сохраняет исходный адрес next hop целевой сети на всех маршрутизаторах, где не присутствует специальная маршрутная политика. iBGP будет тогда передавать анонс префиксов во все маршрутизаторы атакуемой AS. Все маршрутизаторы в этой AS, за исключением тех, которые соответствуют указанной в префиксе группе, будут устанавливать маршрут с легитимным значением next hop. Маршрутизаторы, соответствующие группе, также будут устанавливать в своей таблице маршрут, но значение next hop будет указывать на сеть RFC 1918 и далее на null-интерфейс, как при настройке политики для маршрутов и рекурсивном просмотре маршрутов. Поиск соответствия среди локально анонсируемых сетей производится для того, чтобы ни один из партнеров eBGP не мог ошибочно воспользоваться этим анонсом и направить какую-либо сеть в null-интерфейс. Рекомендуется создавать «черную дыру» для атакуемых хостов, но не для всего блока, к которому они относятся, чтобы оказывать минимальное воздействие на работу атакуемой сети.

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

3. «Сливные» туннели

Метод Enhanced BGP-Triggered Black-holing может потребовать просмотра связанного с атакой трафика для его дальнейшего анализа. Это требование усложняет задачу. Обычно при использовании интерфейсов в широковещательные среды операторы для анализа сетевого трафика подключают анализатор к порту коммутатора. Другим вариантом будет анонсирование сетевого префикса, который включает адрес атакуемого хоста в iBGP и заменяет значение next hop адресом «сливного устройства4», способного сохранять трафик для анализа. Этот метод приводит к недоступности служб, обеспечиваемых атакуемыми адресами IP. Внешний (Inter-AS) трафик будет попадать в «слив» вместе с внутренним (Intra-AS). Анализ на уровне пакетов включает перенаправление трафика хоста-адресата в анализатор или маршрутизатор. В результате, если в этот поток входит и легитимный трафик, последний просто не попадет к адресату. В конечном итоге для легитимного трафика атакуемый хост становится недоступным.

Более эффективным вариантом будет использование «сливного туннеля5». Такой туннель организуется на всех возможных точках входа, через которые связанный с атакой трафик может передаваться в атакуемую AS. Используя группы BGP, можно перенаправить связанный с атакой трафик на специальный путь (туннель), где анализатор протоколов может собирать пакеты для последующего их анализа. После анализа трафика он выходит из туннеля и нормально маршрутизируется к хосту-адресату. Иными словами, трафик будет проходить через сеть к анализатору без изменения значений next hop для атакуемой сети. Все маршрутизаторы в домене iBGP атакуемой AS будут иметь корректный адрес next hop и только маршрутизаторы в точках входа будут иметь измененный адрес следующего интервала.

В сети устанавливается «сливной» маршрутизатор с подключенным к нему анализатором протоколов. Этот маршрутизатор настраивается на участие в IGP и iBGP атакуемой AS. Далее создаются туннели (например, с использованием MPLS TE6) от всех маршрутизаторов, через которые может входить связанный с атакой внешний трафик к «сливному» маршрутизатору. При возникновении атаки на хост или сеть передается специально подготовленный анонс iBGP с адресом атакуемого хоста или сети и подходящим адресом next hop, который обеспечит доставку трафика хосту или сети. Этот анонс будет также включать группу (community), которой соответствует набор граничных маршрутизаторов, используемых для передачи в сеть связанного с атакой трафика, как описано в параграфе 2. Новому значению next hop, заданному в правилах всех граничных маршрутизаторов, следует указывать IP-адрес «слива». Этот адрес относится к сети с маской /30, выделенной для «сливного» туннеля, соединяющего граничный маршрутизатор со «сливным».

Маршрутизаторы, которые не соответствуют группе, будут работать как обычно. Отсутствие соответствия в этих маршрутизаторах будет гарантировать, что специальное правило замены значения next hop не будет применено. Трафик, входящий в сеть через граничные маршрутизаторы, которые не соответствуют группе, будет проходить к легитимным адресатам через обычные интерфейсы этих маршрутизаторов. Может также потребоваться передача направленного в туннель трафика адресатам после его анализа. В этом случае создается используемый по умолчанию маршрут к любому интерфейсу, подключенному и сконфигурированному для сети iBGP. Этот маршрут будет также включать физический интерфейс, использованный для создания туннеля. Поскольку адрес next hop не меняется на «сливном» устройстве, попавший в это устройство трафик из туннеля будет передаваться обратно в сеть, благодаря наличию принятого по умолчанию маршрута. Протоколы маршрутизации после этого будут предпринимать попытки корректной маршрутизации трафика адресату (в атакуемую сеть).

Ясно, что этот метод можно использовать не только для анализа трафика, связанного с атаками. Легитимный трафик также можно перенаправить в туннель и вернуть в сеть после анализа без изменения схемы адресации next hop в сети iBGP.

Методы MPLS TE с их широкими возможностями весьма удобны для перенаправления трафика в «сливное» устройство. К связанному с атакой трафику можно применить возможности управления QoS, что позволит сохранить ресурсы для передачи легитимного трафика.

Для изменения адреса next hop на граничном маршрутизаторе подсеть RFC 1918 статически маршрутизируется на интерфейс туннеля. Примером такого маршрута может быть

ip route 192.168.0.12 255.255.255.255 Tunnel0

Установка в качестве next hop для IP-адреса получателя значения 192.168.0.12/32 будет приводить к направлению трафика в туннель.

Трафик принимается «сливным» интерфейсом через туннель TE. Следовательно, могут использоваться три метода, а именно – правила ограничения скорости, правила QoS и списки управления доступом. Эти правила позволяют ограничить скорость передачи трафика, связанного с атакой, или отбросить этот трафик совсем. Процесс будет полностью выполнен на интерфейсе “сливного» устройства. Другим полезным применением «сливных» маршрутизаторов является направление трафика в туннели при наличии принятого по умолчанию маршрута, который будет пересылать трафик на интерфейс Ethernet. Этот интерфейс подключается к сети iBGP и гарантирует корректную доставку трафика, который при этом остается доступным анализатору для сбора пакетов и последующего анализа связанного с атакой трафика.

Этот метод весьма полезен в тех случаях, когда нет возможности использовать список контроля доступа или ограничение скорости на маршрутизаторе BGP или последнем маршрутизаторе перед атакуемым хостом в силу аппаратных или программных ограничений. Вместо замены интерфейсов в точке входа связанного с атакой трафика последний просто «сливается» в туннель и обрабатываться «сливным» устройством. Эксплуатационные издержки могут быть минимальными, если «сливной» маршрутизатор является достаточно мощным устройством.

4. Вопросы безопасности

Прежде, чем реализовать описанный метод на практике, следует попрактиковаться в контроле партнерских точек eBGP. Пользователи eBGP могут направить в «черную дыру» трафик для той или иной сети, используя группы Blackhole. Для избавления от риска не следует пренебрегать проверкой соответствия для локально генерируемых анонсов BGP с использованием специальной политики маршрутизации.

5. Благодарности

Автор документа благодарит разработчиков механизма удаленного включения «черных дыр» и разработчиков метода backscatter для сбора backscatter-трафика. Автор также благодарен всем членам отдела IP Engineering за помощь, оказанную в проверке функциональности описанного метода.

6. Литература

[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G., and E. Lear, «Address Allocation for Private Internets», BCP 5, RFC 1918, February 1996.

7. Адрес автора

Doughan Turk

Bell Canada

100 Wynford Drive

EMail: doughan.turk@bell.ca


Перевод на русский язык

Николай Малых

nmalykh@protokols.ru

8. Полное заявление авторских прав

Copyright (C) The Internet Society (2004).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

Подтверждение

Финансирование функций RFC Editor обеспечивается Internet Society.


1BGP-triggered black-holing.

2BGP next hop.

3Отправки сообщения ICMP unreachable. Прим. перев.

4Sinkhole device.

5Sinkhole tunnel.

6Traffic Engineering – организация трафика.

Рубрика: RFC | Оставить комментарий

RFC 3874 A 224-bit One-way Hash Function: SHA-224

Network Working Group                                     R. Housley
Request for Comments: 3874                            Vigil Security
Category: Informational                               September 2004

Необратимая 224-битовая хэш-функция SHA-224

A 224-bit One-way Hash Function: SHA-224

PDF

Статус документа

В этом документе содержится информация для сообщества Internet. Документ не содержит каких-либо стандартов Internet. Допускается свободное распространение документа.

Авторские права

Copyright (C) The Internet Society (2004).

Аннотация

В данном документе описывается 224-битовая необратимая хэш-функция SHA-224, основанная на SHA-256, но использующая другое начальное значение и размер 224 бита.

1. Введение

В этом документе содержится спецификация 224-битовой необратимой хэш-функции, носящей название SHA-224. Национальный институт стандартов и технологии США (NIST) в документе FIPS 180-2 Change Notice от 28 февраля 2004 подтвердил необратимость хэш-функции SHA-224. Необратимые хэш-функции называют также цифровыми подписями1. Функция SHA-224 основана на алгоритме SHA-256, обеспечивающем необратимое 256-битовое хэширование, подтвержденное NIST [SHA2]. Расчет хэш-значения SHA-224 выполняется в два этапа. Сначала определяется значение SHA-256 (при этом используется иное стартовое значение) и затем полученный результат сокращается до 224 битов.

NIST занимается разработкой руководства по ключам шифрования и недавно этот институт опубликовал для комментариев черновой вариант документа [NISTGUIDE]. В руководстве обсуждаются пять уровней конфиденциальности с ключами размером 80, 112, 128, 192 и 256 битов. Для всех этих уровней, за исключением одного, доступны необратимые хэш-функции. SHA-224 предназначена для заполнения пустого места в этом списке. Необратимая хэш-функция SHA-224 обеспечивает ключи размером 112 битов, что совпадает с одним из общепринятых вариантов Triple-DES [3DES].

В этом документе приводится спецификация необратимой хэш-функции SHA-224 для сообщества Internet, а также идентификаторы объектов для использования в протоколах, основанных на ASN.1.

1.1. Вопросы применения

Поскольку функция SHA-224 основана на SHA-256, при ее вычислении выполняется примерно такой же объем работ. Однако, несмотря на практически одинаковую сложность вычислений, SHA-224 хорошо подходит для использования в качестве необратимой хэш-функции, генерирующей ключи размером 112 битов. Использование другого стартового значения и последующее отсечение созданных сигнатур SHA-256 позволяет однозначно идентифицировать сигнатуры SHA-224, рассчитанные для тех же данных.

Для некоторых сред важен каждый передаваемый октет. В таких случаях сокращение сигнатуры на 4 октета по сравнению с SHA-256 имеет важное значение.

Исходя из сказанного выше можно предложить следующие рекомендации по использованию функции:

  • при использовании с алгоритмами шифрования, основанными на ключах размером 112 битов SHA-224 обеспечивает подходящую необратимую хэш-функцию;
  • когда компактность сигнатур не играет важной роли, следует использовать SHA-256, а не SHA-224.

1.2. Терминология

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с [STDWORDS].

2. Описание SHA-224

Алгоритм SHA-224 может использоваться при расчете необратимых хэш-значений для сообщений размером до 264 битов.

SHA-224 использует алгоритм SHA-256 [SHA2]. Для расчета необратимой хэш-функции SHA-256 использует опись2 из шестидесяти четырех 32-битовых слов, восемь 32-битовых рабочих переменных и создает хэш-значение из восьми 32-битовых слов.

Функция SHA-224 определяется также, как SHA-256, с двумя отличиями:

  1. Для SHA-224 начальное хэш-значение представляет собой восемь 32-битовых рабочих переменных, совместно обозначаемых как H, которые должны быть равны:

         H_0 = c1059ed8               H_4 = ffc00b31
         H_1 = 367cd507               H_5 = 68581511
         H_2 = 3070dd17               H_6 = 64f98fa7
         H_3 = f70e5939               H_7 = befa4fa4
  1. SHA-224 просто использует первые сеть 32-битовых слов результата SHA-256. Таким образом, окончательное значение H представляет собой конкатенацию (||) семи компонент:

         H_0 || H_1 || H_2 || H_3 || H_4 || H_5 || H_6

3. Тестовые векторы

В этом параграфе описаны три тестовых вектора, которые могут использоваться для проверки реализации алгоритма SHA-224.

3.1. Вектор #1

Предположим, что хэшируемое сообщение содержит 24-битовую строку ASCII «abc», которая эквивалентна двоичной строке:

      01100001 01100010 01100011

Функция SHA-224 в этом случае должна возвращать значение (в шестнадцатеричном представлении):

      23097d22 3405d822 8642a477 bda255b3 2aadbce4 bda0b3f7 e36c9da7

3.2. Вектор #2

При хэшировании 448-битовой строки ASCII «abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq» функция SHA-224 должна возвращать значение (в шестнадцатеричном представлении):

      75388b16 512776cc 5dba5da1 fd890150 b0c6455c b4f58b19 52522525

3.3. Вектор #3

При хэшировании сообщения, содержащего 1 000 000 символов «a», функция SHA-224 должна возвращать хэш-значение (в шестнадцатеричном представлении):

      20794655 980c91d8 bbb4c1ea 97618a4b f03f4258 1948b2ee 4ee7ad67

4. Идентификатор объекта

NIST выделил идентификатор объекта ASN.1 [X.208-88, X.209-88] для SHA-224. Некоторые протоколы используют идентификатор объекта для именования необратимых хэш-функций. Примером такого протокола является CMS [CMS]. Разработчики такого типа протоколов, которые используют SHA-224, должны указывать идентификатор объекта.

    id-sha224  OBJECT IDENTIFIER  ::=  { joint-iso-itu-t(2)
                    country(16) us(840) organization(1) gov(101)
                    csor(3) nistalgorithm(4) hashalgs(2) sha224(4) }

5. Вопросы безопасности

Необратимые хэш-функции обычно используются с другими криптографическими алгоритмами (такими, как алгоритмы создания цифровых подписей и кодов аутентификации сообщений) или при генерации случайных значений. При использовании необратимой хэш-функции вместе с другим алгоритмом могут присутствовать указанные где-либо требования по уровню безопасности (размер ключа). Например, если сообщение подписывается сигнатурой размером 128 битов, алгоритм создания такой сигнатуры может потребовать использования необратимой хэш-функции, возвращающей хэш-значение такого же размера. SHA-224 генерирует 112-битовые хэш-значения, в общем случае пригодные для Triple-DES [3DES].

Этот документ содержит спецификацию SHA-224 для сообщества Internet. Автор не дает гарантий безопасности для того или иного использования алгоритма. Однако, поскольку применение SHA-256 обеспечивает ожидаемый уровень безопасности, SHA-224 также будет обеспечивать ожидаемый уровень.

6. Литература

6.1. Нормативные документы

[SHA2] Federal Information Processing Standards Publication (FIPS PUB) 180-2, Secure Hash Standard, 1 August 2002.

[STDWORDS] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

6.2. Информационные ссылки

[3DES] American National Standards Institute. ANSI X9.52-1998, Triple Data Encryption Algorithm Modes of Operation. 1998.

[CMS] Housley, R., «Cryptographic Message Syntax (CMS)», RFC 3852, July 2004.

[NISTGUIDE] National Institute of Standards and Technology. Second Draft: «Key Management Guideline, Part 1: General Guidance.» June 2002. [http://csrc.nist.gov/encryption/kms/guideline-1.pdf]

[X.208-88] CCITT Recommendation X.208: Specification of Abstract Syntax Notation One (ASN.1). 1988.

[X.209-88] CCITT Recommendation X.209: Specification of Basic Encoding Rules for Abstract Syntax Notation One (ASN.1). 1988.

7. Благодарности

Большое спасибо Джиму Шааду (Jim Schaad) за генерацию тестовых векторов. Для подтверждения корректности этих векторов была использована реализация Брайана Глэдмана (Brian Gladman).

8. Адреса авторов

Russell Housley

Vigil Security, LLC

918 Spring Knoll Drive

Herndon, VA 20170

USA

EMail: housley@vigilsec.com


Перевод на русский язык

Николай Малых

nmalykh@gmail.com

9. Полное заявление авторских прав

Copyright (C) The Internet Society (2004).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.


1 Английский термин — message digest. Прим. перев.

2 В оригинале message schedule. Прим. перев.

Рубрика: RFC | Оставить комментарий

RFC 3036 LDP Specification

Этот документ заменен RFC 5036.

Оригинал доступен по ссылке.

Рубрика: RFC | Комментарии к записи RFC 3036 LDP Specification отключены

sFlow Version 5

sFlow.org                                                    Peter Phaal
http://www.sFlow.org/                                        InMon Corp.
info@sflow.org

                                                             Marc Lavine
                                                        Foundry Networks

                                                               July 2004

sFlow Version 5

Протокол sFlow версии 5

PDF

Авторские права

Copyright (C) sFlow.org (2004). All Rights Reserved.

Аннотация

Этот документ определяет систему sFlow от sFlow.org, которая обеспечивает технологию мониторинга трафика в сетях передачи данных с коммутаторами и маршрутизаторами. В частности, определяются механизмы выборки трафика, реализованные в агентах sFlow, база sFlow MIB для настройки таких агентов и формат дейтаграмм sFlow для передачи данных измерения от агентов к коллектору sFlow.

Оглавление

Исключено в версии HTML.

1. Обзор

sFlow является технологией мониторинга трафика в сетях, содержащих коммутаторы и маршрутизаторы.

Система мониторинга sFlow включает агенты (sFlow Agent — встроенный в коммутатор/маршрутизатор или автономный датчик) и центральный сборщик данных sFlow Collector. Архитектура и методы выборки sFlow разработаны для непрерывного мониторинга трафика в масштабе сайта (и предприятия) высокоскоростных сетей с коммутацией и маршрутизацией. В частности, было уделено специальное внимание:

  • точности мониторинга при гигабитных и более высоких скоростях;

  • расширяемости системы до десятков тысяч агентов на один коллектор sFlow;

  • обеспечения максимально низкой стоимости реализации агентов sFlow.

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

В документе описаны механизмы отбора, применяемые агентами sFlow, база SFLOW MIB, используемая коллектором для управления агентами, а также формат дейтаграмм sFlow, служащих для передачи данных коллектору.

В документе описан протокол sFlow версии 5, который служит заменой sFlow версии 4, описанному в RFC 3176 [1]. Различия между версиями протокола перечислены в Приложении A.

2. Терминология и архитектура

В этом разделе определены элементы системы sFlow.

2.1 Термины

Ниже приведены определения основных терминов, используемых при описании архитектуры sFlow.

Network Device — сетевое устройство

Элемент сетевого оборудования, пересылающий пакеты данных (например, коммутатор или маршрутизатор).

Data Source — источник данных

Источник данных указывает место в сетевом устройстве, где можно выполнить измерения трафика. Источниками данных могут служить интерфейсы, элементы сетевого устройства (например, системная магистраль или VLAN). Каждый источник данных имеет доступ к подмножеству трафика, проходящего через устройство.

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

Packet Flow — поток пакетов

Поток пакетов определяется как путь или траектория прохождения пакетов через сетевое устройство (т. е. путь от приема пакетов на одном интерфейсе через принятие решения о коммутации или маршрутизации до передачи через выходной интерфейс). При этом входной и выходной интерфейс могут совпадать, а для групповых и широковещательных пакетов используется множество выходных интерфейсов.

Packet Flow Sampling — выборка из потока пакетов

Выборка из потока пакетов означает произвольный (случайный) отбор части потока, наблюдаемой в источнике данных.

Sampling Rate — период выборки

Период выборки определяется отношением числа пакетов, наблюдаемых в источнике данных, к числу отобранных. Например, при периоде 100 будет выбираться в среднем 1 пакет из 100 наблюдаемых.

Packet Flow Record — запись для потока пакетов

Запись для потока пакетов описывает атрибуты потока. В записи имеется два типа информации:

  1. информация о самом пакете (обычно заголовок, размер и инкапсуляция);
  2. информация о пути пакета через устройство, включая данные, относящиеся к выбору пути пересылки.

Counter Sampling — выборка счетчика

Периодическая выборка или опрос счетчиков, связанных с источником данных.

Sampling Interval — интервал выборки

Интервал времени между последовательными выборками счетчика.

Counter Record — запись для счетчика

Запись, содержащая значения счетчика, связанные с источником данных в конце интервала выборки.

sFlow Instance — экземпляр sFlow

Экземпляр sFlow — это измерительный процесс, связанный с источником данных. В одном источнике данных может присутствовать множество экземпляров sFlow.

Каждый экземпляр sFlow работает независимо от других экземпляров sFlow, например, экземпляры выборки из потоков отбирают данные со своими периодами, а экземпляры выборки счетчиков — со своими интервалами.

sFlow Agent — агент sFlow

Агент sFlow обеспечивает интерфейс для настройки экземпляров sFlow на устройстве. Агент может поддерживать настройку из командной строки и/или с помощью протокола SNMP.

Агент также отвечает за поддержку сеансов измерения с коллекторами sFlow. Он собирает данные в дейтаграммы sFlow для передачи коллекторам. По завершении сессии агент sFlow освобождает ресурсы.

sFlow Sub-Agent — субагент sFlow

При реализации sFlow на устройствах с распределенной архитектурой может оказаться желательным распределение функциональности агентов sFlow. Каждый субагент sFlow отвечает за определенное подмножество источников данных.

sFlow Collector — коллектор sFlow

Коллектор sFlow получает дейтаграммы sFlow от одного или множества агентов sFlow. Коллектор может также настраивать экземпляры sFlow с использованием механизмов, предоставляемых агентами sFlow.

sFlow Datagram — дейтаграмма sFlow

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

2.2 Эталонная модель sFlow

Связи между различными элементами системы sFlow показаны на рисунке.

Коллектор sFlow использует протокол SNMP для взаимодействия с агентом sFlow, чтобы настроить мониторинг sFlow на сетевом устройстве. База sFlow MIB описывает управляемые объекты, требуемые для настройки агента sFlow. Выборки счетчиков и потоков выполняются экземплярами sFlow, связанными с отдельными источниками данных в агенте sFlow. Для выполнения выборки из потока пакетов на экземпляре sFlow задается период выборки (Sampling Rate). Процесс выборки из потока пакетов приводит к генерации записей Packet Flow Record. Для выборки счетчика на экземпляре sFlow задается интервал выборки (Sampling Interval). Агент sFlow собирает записи для счетчиков и потоков, а затем передает их в дейтаграммах sFlow коллекторам sFlow.

+--------------------------------------+
|            Network Device            |
|                                      |
|  +--------------------------------+  |
|  |              Agent             |  |
|  |                                |  |
|  |  +--------------------------+  |  |             +-------------+
|  |  |         Sub-agent        |  |  |    SNMP     |             |
|  |  |                          |  +<-+------------>+             |
|  |  |  +--------------------+  |  |  |             |  Collector  |
|  |  |  |     Data Source    |  |  |  |  Datagram   |             |
|  |  |  |                    |  |  +--+------------>+             |
|  |  |  |   +-------------+  |  |  |  |             |             |
|  |  |  |   |  Instance   |  |  |  |  |             +-------------+
|  |  |  |   +-------------+  |  |  |  |                    .
|  |  |  |          .         |  |  |  |                    .
|  |  |  |          .         |  |  |  |             +-------------+
|  |  |  |   +-------------+  |  |  |  |      SNMP   |             |
|  |  |  |   |  Instance   |  |  |  +<-+--+--------->+             |
|  |  |  |   +-------------+  |  |  |  |  |          |  Collector  |
|  |  |  +--------------------+  |  |  |  | Datagram |             |
|  |  |             .            |  +--+--+--+------>+             |
|  |  |             .            |  |  |  |  |       |             |
|  |  |  +--------------------+  |  |  |  |  |       +-------------+
|  |  |  |     Data Source    |  |  |  |  |  |
|  |  |  +--------------------+  |  |  |  |  |
|  |  +--------------------------+  |  |  |  |
|  |                .               |  |  |  |
|  |                .               |  |  |  |
|  |  +--------------------------+  |  |  |  |
|  |  |         Sub-agent        |  |  |  |  |
|  |  +--------------------------+  |  |  |  |
|  +--------------------------------+  |  |  |
+--------------------------------------+  |  |
                    .                     |  |
                    .                     |  |
+--------------------------------------+  |  |
|             Network Device           |  |  |
|  +--------------------------------+  |  |  |
|  |                                +<-+--+  |
|  |               Agent            |  |     |
|  |                                +--+-----+
|  +--------------------------------+  |
+--------------------------------------+

3. Механизмы отбора

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

3.1 Выборка из потока пакетов

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

Выборка пакетов из потока выполняется в процессе их обработки. При поступлении пакета на интерфейс сетевое устройство применяет фильтры, что может приводить к отбрасыванию некоторых пакетов. Если пакет не отбрасывается, для него выбирается выходной интерфейс с помощью функции коммутации или маршрутизации. В этот момент принимается и решение о выборке. Механизм отбора пакетов включает счетчик, значение которого декрементируется с каждым пакетом, и при достижении нулевого значения происходит выборка пакета. Значение счетчика Total_Packets инкрементируется независимо от того, был ли пакет отобран, т. е. Total_Packets учитывает все пакеты, которые могли быть отобраны.

Выборка пакета включает копирование его заголовка или извлечение информации из пакета. Различные формы выборки рассмотрены в описании дейтаграмм sFlow.

При каждой выборке пакета значение счетчика Total_Samples инкрементируется, т. е. этот счетчик указывает общее число отобранных образцов. Выборки передаются экземпляром sFlow агенту sFlow для обработки. Выборка включает информацию о пакете, а также значения счетчиков Total_Packets и Total_Samples. Агент sFlow может использовать полученные образцы для получения дополнительной информации о прохождении пакета через устройство. Такая информация зависит от функций пересылки пакетов в устройстве. Примерами информации о прохождении пакета через устройство являются входной и выходной интерфейсы, исходная и целевая VLAN, подсеть следующего интервала (next hop), полный путь AS. Более подробно это рассмотрено в описании формата дейтаграмм sFlow.

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

Total_Packets/Total_Samples = Sampling Rate   (1)

Другим вариантом отбора образцов из потока пакетов является генерация для каждого пакета случайного числа, сравнение этого числа с заданным заранее пороговым значением и выборка пакета, если случайное число для него меньше заданного порога. Расчет порогового значения зависит от характеристик генератора случайных чисел, однако результат должен удовлетворять уравнению (1).

Требования к генератору случайных чисел приведены в Приложении B.

3.2 Выборка счетчиков

Основной целью выборки значений счетчиков является эффективный периодический экспорт значений, связанных с источниками данных.

Обычно источник данных связывается с каждым интерфейсом устройства, который может служить входом или выходом для потока пакетов. Эти источники данных будут использоваться для экспорта значений счетчиков, относящихся к интерфейсам.

Для каждого экземпляра sFlow, связанного с интерфейсным источником данных, задается максимальный интервал выборки, но агент sFlow может указать свой интервал опроса для обеспечения максимальной эффективности.

Выборки из потока пакетов и счетчиков являются частями интегрированной системы. Оба типа образцов передаются в дейтаграммах sFlow. Поскольку выборки из потоков создают случайный, но устойчивый поток дейтаграмм sFlow, передаваемых коллектору, выборки счетчиков могут выполняться произвольно для заполнения этих дейтаграмм.

Одна из стратегий выборки счетчиков заключается в поддержке агентом sFlow списка опрашиваемых счетчиков. При генерации выборки из потока агент sFlow проверяет список и добавляет значения счетчиков в дейтаграмму выборки из потока, беря из списка счетчики, которые опрашивались наиболее давно. При этом в дейтаграмму добавляются лишь те счетчики, для которых отклонение от заданного интервалом (см. sFlowCpInterval1 в SFLOW MIB) момента выборки невелико (скажем, 5 секунд). Всякий раз при добавлении счетчика в дейтаграмму выборки обновляется время выборки для этого счетчика и счетчик перемещается в конец очереди на опрос. Периодически (например, каждую секунду) агент sFlow просматривает список счетчиков и передает контроллеру значения всех счетчиков, для которых истекает интервал выборки.

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

4. sFlow MIB

База sFlow MIB обеспечивает стандартный механизм для удаленного управления и настройки агентов sFlow.

4.1 Схема управления SNMP

Модель управления SNMP в настоящее время включает пять основных компонент, перечисленных ниже.

  • Общая архитектура, описанная в RFC 2571 [2].

  • Механизмы именования и описания объектов и событий для целей управления. Первая версия структуры данных управления (SMI2) называется SMIv1 и описана в STD 16 RFC 1155 [3], STD 16 RFC 1212 [4] и RFC 1215 [5]. Вторая версия — SMIv2 описана в STD 58 RFC 2578 [6], STD 58 RFC 2579 [7] и STD 58 RFC 2580 [8].

  • Протоколы сообщений для обмена данными управления. Первая версия протокола сообщений SNMP под названием SNMPv1 была описана в STD 15 RFC 1157 [9]. Вторая версия, которая не стала стандартом Internet, называется SNMPv2c и описана в RFC 1901 [10] и RFC 1906 [11]. Третья версия протокола называется SNMPv3 и описана в RFC 1906 [11], RFC 2572 [12] и RFC 2574 [13].

  • Протокольные операции для доступа к данным управления. Первый набор протокольных операций и форматов связанных с ними PDU описан в STD 15 RFC 1157 [9]. Второй набор операций и форматов PDU описана в RFC 1905 [14].

  • Набор базовых приложений описан в RFC 2573 [15], а механизмы контроля доступа на основе представлений — в RFC 2575 [16].

Дополнительную информацию о текущей модели сетевого управления SNMP можно найти в RFC 2570 [17].

Доступ к управляемым объектам осуществляется через виртуальное хранилище информации MIB3. Объекты в MIB определяются с использованием механизмов, заданных в SMI.

Этот документ задает модуль MIB, соответствующий SMIv2. Модуль MIB, соответствующий SMIv1, можно получить с помощью подходящей трансляции. Транслированный модуль MIB должен быть семантически эквивалентен, за исключениям случаев, когда объекты или событие пропускаются по причине невозможности трансляции (использование Counter64). Часть машиночитаемой информации SMIv2 будет при трансляции преобразована в текстовые описания SMIv1. Однако потеря машиночитаемой информации не считается изменением семантики MIB.

4.2 Структура модуля SFLOW MIB

MIB состоит из трех групп объектов — группа получателей, группа выборки из потоков и группа опроса счетчиков.

4.2.1 Группа Receiver

Группа получателей определяет набор объектов, используемых для поддержки сессии sFlow между агентом и коллектором sFlow.

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

Записи не могут добавляться в таблицу получателей или удаляться из нее. Разработчикам агентов sFlow следует ограничивать число записей, чтобы число одновременных сессий sFlow не превысило возможностей устройства.

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

4.2.2 Группа Flow Sampling

Группа выборки из потоков определяет набор мест (источников данных) в устройстве, которые способны выполнять выборку из потока пакетов. Источники данных могут соответствовать интерфейсам, VLAN и другим элементам устройства. Набор источников данных, анонсируемый агентом sFlow, зависит от архитектуры устройства. Например, устройство может включать средства отбора пакетов, интегрированные в интерфейсные ASIC, и в этом случае будут анонсироваться источники данных для каждого интерфейса. Программный маршрутизатор может иметь просто один источник данных, связанный с модулем маршрутизации.

Каждый источник данных может быть способен поддерживать более одного независимого процесса выборки и тогда с ним будет связано множество экземпляров sFlow, каждый из которых может свой период выборки.

Даже если оборудование источника данных способно генерировать лишь один поток образцов пакетов, агент sFlow может использовать субвыборки для создания множества экземпляров sFlow на одном источнике данных. Предположим в качестве примера, два экземпляра sFlow, у одного из которых Sampling Rate составляет 512, а у другого — 1024. Оборудование можно настроить для выборки с периодом 512, а затем делать субвыборки на программном уровне с интервалом 1024. Привлекательным является использование периодов в виде степени 2, поскольку это позволяет задать на аппаратном уровне наименьшее значение Sampling Rate, а остальные скорости реализовать субвыборками на программном уровне.

Экземпляр выборки из потока может иметь минимальное разрешенное значение Sampling Rate. Установка консервативного значения, при котором агент sFlow никогда не будет перегружаться выборками из потока пакетов даже при худшей ситуации, не рекомендуется. Это приводило бы к слишком высоким минимальным значениям Sampling Rate, которые не отражали бы реальную картину трафика. Агент может реализовать автоматическое одностороннее снижение скорости отбора, которое запускается при генерации избыточного числа пакетов в секунду. При срабатывании триггера агент может удваивать значение Sampling Rate. При следующем превышении порога Sampling Rate удваивается еще раз. Значение Sampling Rate будет быстро приходить к установившемуся уровню. После этого значение скорости отбора должно сохраняться без возврата к заданному изначально. Начальное значение может быть возвращено вручную с помощью командного интерфейса или sFlow MIB. Такая схема защищает от неудачного выбора Sampling Rate и неожиданных изменений при пиках трафика, но позволяет без опаски устанавливать низкие значения Sampling Rate, когда это приемлемо.

4.2.3 Группа Counter Polling

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

Обычно источниками данных служат интерфейсы устройства. Каждый источник данных может быть способен поддерживать более одного независимого процесса опроса. В таких случаях с источником данных будет связано множество экземпляров опроса счетчиков, каждый из которых может использовать свой интервал опроса.

4.3 Определения

SFLOW-MIB DEFINITIONS ::= BEGIN

IMPORTS

      MODULE-IDENTITY, OBJECT-TYPE, Integer32, enterprises
              FROM SNMPv2-SMI
      TEXTUAL-CONVENTION
              FROM SNMPv2-TC
      SnmpAdminString
              FROM SNMP-FRAMEWORK-MIB
      OwnerString
              FROM RMON-MIB
      InetAddressType, InetAddress
              FROM INET-ADDRESS-MIB
      MODULE-COMPLIANCE, OBJECT-GROUP
              FROM SNMPv2-CONF;

      sFlowMIB  MODULE-IDENTITY
        LAST-UPDATED "200309240000Z"   -- 24 сентября 2003 г.
        ORGANIZATION "sFlow.org"
        CONTACT-INFO
               "Peter Phaal
                sFlow.org
                http://www.sflow.org/ 

                Tel:  +1-415-283-3260
                Email: peter.phaal@sflow.org" 
        DESCRIPTION
                "MIB для управления генерацией и транспортировкой записей sFlow."

        --
        -- История выпусков
        --

        REVISION    "200310180000Z"     -- 18 ноября 2003 г.
        DESCRIPTION
                "Версия 1.3 (вариант 5)

                 Разрешает устанавливать SflowReceiver, если это не меняет 
                 значение."

        REVISION    "200309240000Z"     --  24 сентября 2003 г.
        DESCRIPTION
                "Версия 1.3 (вариант 4)

                 По умолчанию для sFlowRcvrAddress следует использовать
                 шестнадцатеричное значение 00000000, для sFlowCpReceiver - 0."

        REVISION    "200304080000Z"     --  8 апреля 2003 г.
        DESCRIPTION
                "Версия 1.3 (вариант 3)

                 Разъяснена семантика интервала опроса счетчиков sFlowCpInterval."

        REVISION    "200209170000Z"     -- 17 сентября 2002 г.
        DESCRIPTION
                "Версия 1.3 (вариант 2)

                 Добавлена поддержка множества сборщиков sFlow на sFlowDataSource.
                 Номер организации сменен на sflow.org. Разделены выборки из потока
                 и счетчиков, а также спецификация получателя в разные таблицы."

        REVISION    "200107310000Z"     -- 31 июля 2001 г.
        DESCRIPTION
                "Версия 1.2

                 Преобразование структуры MIB в соответствии с SMIv2."

        REVISION    "200105010000Z"      -- 1 мая 2001 г.
        DESCRIPTION
                 "Версия 1.1

                  Добавлена переменная sfDatagramVersion."

        ::= { enterprises sflow(14706) 1 }

      sFlowAgent OBJECT IDENTIFIER ::= { sFlowMIB 1 }

      SFlowDataSource ::= TEXTUAL-CONVENTION
              STATUS      current
              DESCRIPTION
                "Указывает источник данных sFlow.

                Ниже перечислены определенные в настоящее время источники.

                - ifIndex.<I>
                SflowDataSource этой традиционной формы называются port-based.
                Идеальный элемент отбора будет делать выборки из всех потоков,
                начинающихся или завершающихся на заданном интерфейсе. Однако,
                если архитектура коммутатора разрешает лишь входную и выходную
                выборку, агент выборки сможет брать образцы лишь из входных или
                выходных потоков. Каждый пакет для выборки должен рассматриваться
                лишь однократно, независимо от числа портов, куда он пересылается.
                Примечание. Порт 0 служит для указания всех портов устройства
                   как одного источника данных. sFlowFsPacketSamplingRate 
                   применяется ко всем портам устройства, способным отбирать пакеты.

                - smonVlanDataSource.<V>
                SFlowDataSource для этой формы указывает Packet-based VLAN и 
                называется источником данных VLAN-based. <V> указывает идентификатор
                VLAN, соответствующий стандарту IEEE 802.1Q. Он может принимать
                значения от 1 до 4094, включительно и представляет 802.1Q 
                VLAN-ID со значимостью в масштабе домена на базе мостов.
                Выборка выполняется для всех пакетов, относящихся к заданной
                VLAN (порт не имеет значения). Каждый пакет учитывается при
                выборке лишь один раз, независимо от числа выходных портов.

                - entPhysicalEntry.<N>
                SFlowDataSource для этой формы указывает на физический элемент 
                в агенте (например, entPhysicalClass = backplane(4)) и называется
                источником данных entity-based. Выборка выполняется из всех
                пакетов, входящих в ресурс (например, при выборке из системной шины
                все пакеты, проходящие через магистраль, будут рассматриваться при
                отборе образцов, независимо от номеров портов).

                Примечание. Поскольку каждый источник функционирует независимо,
                   пакеты, проходящие через несколько источников, могут создавать
                   множество записей для потоков."
              SYNTAX      OBJECT IDENTIFIER

      SFlowInstance ::= TEXTUAL-CONVENTION
              STATUS      current
              DESCRIPTION
                "При наличии более одного отборщика проб sFlow для данного
                 SFlowDataSource эти отдельные отборщики различаются значением
                 SFlowInstance. Значения переменной берутся из диапазона от 1
                 до n, где n - число отборщиков, связанный с источником данных.

                 Примечание. Каждый экземпляр отборщика sFlow должен работать
                    независимо от всех других экземпляров. Установка атрибута 
                    для одного экземпляра не должна менять поведение и
                    настройки других экземпляров."
              SYNTAX      Integer32 (1..65535)

      SFlowReceiver ::= TEXTUAL-CONVENTION
              STATUS       current
              DESCRIPTION
                "Указывает получателя sFlow, связанного с этим ресурсом.

                 Нулевое значение говорит о доступности ресурса, отличные от 0
                 значения должны соответствовать действительным sFlowRcvrIndex.

                 Если в настоящий момент установлено значение 0, можно задать 
                 значение любой активной записи из sFlowRcvrTable. Для ненулевых
                 значений будет возникать ошибка SNMP (bad value) при задании 
                 значения, отличного от 0 и текущего значения.

                 Установка значения 0 освобождает ресурс и возвращает для записи
                 принятые по умолчанию значения.

                 Если срок действия записи в sFlowRcvrTable завершается в результате
                 установки для sFlowRcvrOwner пустой строки или обнуления таймера
                 sFlowRcvrTimeout, агент должен отметить все связанные с ней
                 ресурсы как доступные (установив 0 в соответствующей записи
                 SflowReceiver), а для записи должны быть установлены принятые
                 по умолчанию значения.

                 Этот механизм не включает принудительного выполнения и опирается
                 на кооперацию элементов управления для разрешения конфликтов при
                 доступе к ресурсам. Элементам управления не следует менять
                 какие-либо ресурсы без предварительного их приобретения путем
                 записи своего значения sFlowRcvrIndex в качестве SFlowReceiver."
              SYNTAX       Integer32

      sFlowVersion OBJECT-TYPE
              SYNTAX      SnmpAdminString
              MAX-ACCESS  read-only
              STATUS      current
              DESCRIPTION
                "Однозначно указывает версию и реализацию этого модуля MIB.
                 Строка версии должна иметь структуру
                    <MIB Version>;<Organization>;<Software Revision>
                 где
                    <MIB Version>  - должно быть 1.3, номер версии данного MIB.
                    <Organization> - название организации, ответственной за
                                     реализацию агента.
                    <Revision>     - выпуск данного агента.

                 Например, строка '1.3;InMon Corp.;2.1.1' указывает, что агент
                 реализует SFLOW MIB версии '1.2', разработанный 'InMon Corp.'
                 с номером выпуска '2.1.1'.

                 Версия MIB будет меняться в каждом новом выпуске SFLOW MIB.

                 Элементы управления должны проверять версию MIB и не пытаться 
                 управлять агентами, с номером версии больше того, для которого 
                 модуль MIB был разработан.

                 Примечание. Формат дейтаграмм sFlow использует свой номер версии,
                    который может меняться независимо от <MIB Version>. Версия MIB
                    относится лишь к структуре и семантике SFLOW MIB."
              DEFVAL { "1.3;;" }
              ::= { sFlowAgent 1 }

      sFlowAgentAddressType OBJECT-TYPE
              SYNTAX      InetAddressType
              MAX-ACCESS  read-only
              STATUS      current
              DESCRIPTION
                "Тип адреса, связанного с агентом. Поддерживаются лишь ipv4 и ipv6."
              ::= { sFlowAgent 2 }

      sFlowAgentAddress OBJECT-TYPE
              SYNTAX      InetAddress
              MAX-ACCESS  read-only
              STATUS      current
              DESCRIPTION
                "IP-адрес, связанный с агентом. Для многодомных агентов следует
                 указывать loopback-адрес агента. Адрес sFlowAgent должен 
                 обеспечивать SNMP-связность с агентом. Поле адреса следует сохранять
                 при перенастройке, включении, отключении, добавлении и удалении
                 интерфейсов. Менеджер должен иметь возможность использовать 
                 sFlowAgentAddress для однозначного указания агента в течение срока
                 поддержки истории работы."
             ::= { sFlowAgent 3 }

      --
      -- Таблица получателей
      --

      sFlowRcvrTable OBJECT-TYPE
              SYNTAX      SEQUENCE OF SFlowRcvrEntry
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Таблица получателей информации sFlow."
              ::= { sFlowAgent 4 }

      sFlowRcvrEntry OBJECT-TYPE
              SYNTAX      SFlowRcvrEntry
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Атрибуты получателя sFlow."
              INDEX { sFlowRcvrIndex }
              ::= { sFlowRcvrTable 1 }

      SFlowRcvrEntry ::= SEQUENCE {
              sFlowRcvrIndex                    Integer32,
              sFlowRcvrOwner                    OwnerString,
              sFlowRcvrTimeout                  Integer32,
              sFlowRcvrMaximumDatagramSize      Integer32,
              sFlowRcvrAddressType              InetAddressType,
              sFlowRcvrAddress                  InetAddress,
              sFlowRcvrPort                     Integer32,
              sFlowRcvrDatagramVersion          Integer32
      }

      sFlowRcvrIndex OBJECT-TYPE
              SYNTAX      Integer32 (1..65535)
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Индекс в таблице sFlowReceiverTable."
              ::= { sFlowRcvrEntry 1 }
      sFlowRcvrOwner OBJECT-TYPE
              SYNTAX      OwnerString
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Элемент, использующий эту запись sFlowRcvrTable. Пустая строка
                 говорит, что элемент не заявлен. Элемент, желающий заявить
                 запись sFlowRcvrTable, должен убедиться, что эта запись свободна.
                 Запись заявляется установкой строки владельца. Запись должна быть
                 заявлена до того, как могут быть внесены какие-либо изменения в
                 другие объекты отборщика.

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

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

                 Этот механизм не включает принудительного выполнения и опирается
                 на кооперацию элементов управления для разрешения конфликтов при
                 доступе к ресурсам. "
              DEFVAL { "" }
              ::= { sFlowRcvrEntry 2 }

      sFlowRcvrTimeout OBJECT-TYPE
              SYNTAX      Integer32
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Число секунд до освобождения отборщика и остановки выборки.
                 При установленном значении владелец организует контроль времени.
                 При считывании возвращается оставшееся время.

                 Элемент управления, желающий контролировать отборщик, отвечает
                 за установку нового значения до истечения прежнего.

                 По завершении интервала агент отвечает за восстановление для всех
                 других элементов принятых по умолчанию значений. Он должен также
                 освободить все ресурсы, связанные с этой записью sFlowRcvrTable."
              DEFVAL { 0 }
              ::= { sFlowRcvrEntry 3 }

      sFlowRcvrMaximumDatagramSize OBJECT-TYPE
              SYNTAX      Integer32
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                 "Максимальное число байтов данных, которые могут быть переданы в
                  одной дейтаграмме выборки. Менеджеру следует установить значение,
                  предотвращающее фрагментирование дейтаграмм sFlow."
              DEFVAL { 1400 }
              ::= { sFlowRcvrEntry 4 }

      sFlowRcvrAddressType OBJECT-TYPE
              SYNTAX      InetAddressType
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Тип адреса sFlowRcvrCollectorAddress."
              DEFVAL { ipv4 }
              ::= { sFlowRcvrEntry 5 }

      sFlowRcvrAddress OBJECT-TYPE
              SYNTAX      InetAddress
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "IP-адрес коллектора sFlow.
                 При установке 0.0.0.0 дейтаграммы sFlow не будут передаваться."
              DEFVAL { '00000000'h }  -- 0.0.0.0
              ::= { sFlowRcvrEntry 6 }
      sFlowRcvrPort OBJECT-TYPE
              SYNTAX      Integer32
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Порт получателя дейтаграмм sFlow."
              DEFVAL { 6343 }
              ::= { sFlowRcvrEntry 7 }

      sFlowRcvrDatagramVersion OBJECT-TYPE
              SYNTAX      Integer32
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Версия дейтаграмм sFlow, которые следует передавать.

                 При передаче не поддерживаемого агентом значения агенту следует
                 указать максимальный поддерживаемый номер (меньше предложенного)
                 или вернуть ошибку SNMP bad value, если такого значения нет."
              DEFVAL { 5 }
              ::= { sFlowRcvrEntry 8 }

      --
      -- Таблица выборки из потоков
      --

      sFlowFsTable OBJECT-TYPE
              SYNTAX      SEQUENCE OF SFlowFsEntry
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Таблица отборщиков потока в устройстве."
              ::= { sFlowAgent 5 }

      sFlowFsEntry OBJECT-TYPE
              SYNTAX      SFlowFsEntry
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Атрибуты отборщика потоков."
              INDEX { sFlowFsDataSource, sFlowFsInstance }
              ::= { sFlowFsTable 1 }

      SFlowFsEntry ::= SEQUENCE {
              sFlowFsDataSource               SFlowDataSource,
              sFlowFsInstance                 SFlowInstance,
              sFlowFsReceiver                 SFlowReceiver,
              sFlowFsPacketSamplingRate       Integer32,
              sFlowFsMaximumHeaderSize        Integer32
      }

      sFlowFsDataSource OBJECT-TYPE
              SYNTAX      SFlowDataSource
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "sFlowDataSource для данного отборщика потоков."
              ::= { sFlowFsEntry 1 }

      sFlowFsInstance OBJECT-TYPE
              SYNTAX      SFlowInstance
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Экземпляр sFlow для этого отборщика потоков."
              ::= { sFlowFsEntry 2 }

      sFlowFsReceiver OBJECT-TYPE
              SYNTAX      SFlowReceiver
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Получатель SFlowReceiver для этого отборщика потоков."
              DEFVAL { 0 }
              ::= { sFlowFsEntry 3 }

      sFlowFsPacketSamplingRate OBJECT-TYPE
              SYNTAX      Integer32
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Статистический период выборки для пакетов из этого источника.

                 Значение N задает выборку 1/N пакетов из контролируемых потоков.
                 Агенту следует выбрать свой алгоритм для добавления вариаций к
                 периоду выборки, чтобы не отбирался в точности каждый N-й пакет.
                 Значение 1 задает выборку каждого пакета, 0 отключает выборку.

                 Агенту разрешено иметь минимальное и максимальное разрешенное
                 значение для периода выборки. Минимальное значение ограничивает
                 издержки, связанные с отбором пакетов, а максимальное может
                 быть связано с аппаратными ограничениями (например, размер 
                 счетчика). Кроме того, не все разрешения между минимумом и 
                 максимумом могут использоваться для периода отбора (это 
                 вопрос реализации).

                 Когда период выборки установлен, агент может регулировать его в
                 диапазоне от минимального до максимального значения, выбирая 
                 ближайшее приемлемое значение.

                 При чтении агент должен возвращать используемое значение периода
                 отбора (после своей регулировки). Алгоритм отбора должен 
                 сходиться так, чтобы в среднем отбиралось 1/N пакетов из общего
                 числа в контролируемом потоке."
              DEFVAL { 0 }
              ::= { sFlowFsEntry 4 }

      sFlowFsMaximumHeaderSize OBJECT-TYPE
              SYNTAX      Integer32
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Максимальное число байтов, которые следует копировать из 
                 выбранного пакета. Агент может иметь внутренние ограничения 
                 минимального и максимального размера. При попытке выйти за 
                 пределы разрешенных значений агенту следует установить
                 ближайшее разрешенное значение."
              DEFVAL { 128 }
              ::= { sFlowFsEntry 5 }

      --
      -- Таблица опроса счетчиков
      --

      sFlowCpTable OBJECT-TYPE
              SYNTAX      SEQUENCE OF SFlowCpEntry
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Таблица считывателей счетчиков в устройстве."
              ::= { sFlowAgent 6 }

      sFlowCpEntry OBJECT-TYPE
              SYNTAX      SFlowCpEntry
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Атрибуты считывателя счетчиков."
              INDEX { sFlowCpDataSource, sFlowCpInstance }
              ::= { sFlowCpTable 1 }

      SFlowCpEntry ::= SEQUENCE {
              sFlowCpDataSource               SFlowDataSource,
              sFlowCpInstance                 SFlowInstance,
              sFlowCpReceiver                 SFlowReceiver,
              sFlowCpInterval                 Integer32
      }

      sFlowCpDataSource OBJECT-TYPE
              SYNTAX      SFlowDataSource
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Указывает источник данных для считывателя счетчиков."
              ::= { sFlowCpEntry 1 }

      sFlowCpInstance OBJECT-TYPE
              SYNTAX      SFlowInstance
              MAX-ACCESS  not-accessible
              STATUS      current
              DESCRIPTION
                "Экземпляр sFlowInstance для считывателя счетчиков."
              ::= { sFlowCpEntry 2 }

      sFlowCpReceiver OBJECT-TYPE
              SYNTAX      SFlowReceiver
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION
                "Получатель SflowReciever, связанный со считывателем счетчиков."
              DEFVAL { 0 }
              ::= { sFlowCpEntry 3 }

      sFlowCpInterval OBJECT-TYPE
              SYNTAX      Integer32
              MAX-ACCESS  read-write
              STATUS      current
              DESCRIPTION4
                "Максимальное число секунд между последовательными опросами 
                 счетчиков, связанных с этим источником данных. Значение 0 
                 отключает выборку счетчиков.

                 Агенту разрешено иметь минимальное и максимальное разрешенное
                 значение для интервала опроса. Минимальное значение ограничивает
                 издержки, связанные с опросом счетчиков, а максимальное может
                 быть связано с аппаратными ограничениями (например, размер 
                 счетчика). Кроме того, не все разрешения между минимумом и 
                 максимумом могут использоваться для периода отбора (это 
                 вопрос реализации).

                 При чтении агент должен возвращать используемое значение периода
                 отбора (после своей регулировки, как указано выше).

              DEFVAL { 0 }
              ::= { sFlowCpEntry 4 }

       --
       -- Заявления о соответствии
       --

      sFlowMIBConformance OBJECT IDENTIFIER ::= { sFlowMIB 2 }
      sFlowMIBGroups      OBJECT IDENTIFIER ::= { sFlowMIBConformance 1 }
      sFlowMIBCompliances OBJECT IDENTIFIER ::= { sFlowMIBConformance 2 }

      sFlowCompliance MODULE-COMPLIANCE
              STATUS      current
              DESCRIPTION
                "Заявления о совместимости для агента sFlow."

              MODULE - данный модуль
                  MANDATORY-GROUPS { sFlowAgentGroup }

                  OBJECT     sFlowAgentAddressType
                  SYNTAX     InetAddressType { ipv4(1) }
                  DESCRIPTION
                    "От агента нужна лишь поддержка ipv4."

                  OBJECT sFlowRcvrAddressType
                  SYNTAX InetAddressType { ipv4(1) }
                  DESCRIPTION
                    "От агента нужна лишь поддержка ipv4."
              ::= { sFlowMIBCompliances 1 }
      sFlowAgentGroup OBJECT-GROUP
              OBJECTS { sFlowVersion, sFlowAgentAddressType, sFlowAgentAddress,
                        sFlowRcvrOwner, sFlowRcvrTimeout,
                        sFlowRcvrMaximumDatagramSize, sFlowRcvrAddressType,
                        sFlowRcvrAddress, sFlowRcvrPort, 
                        sFlowRcvrDatagramVersion, sFlowFsReceiver,
                        sFlowFsPacketSamplingRate, sFlowFsMaximumHeaderSize,
                        sFlowCpReceiver, sFlowCpInterval }
               STATUS current
               DESCRIPTION
                 "набор объектов для управления генерацией и транспортировкой
                  записей sFlow."
                ::= { sFlowMIBGroups 1 }

END

sFlow MIB ссылается на определения из других RFC, включая [18], [19], [20] и [21].

5. Формат дейтаграмм sFlow

Формат дейтаграмм sFlow определяет стандартный формат, используемый агентом sFlow для передачи данных выборки удаленному коллектору sFlow.

Формат дейтаграмм задается с использованием стандарта XDR [32]. Это обеспечивает более компактное по сравнению с ASN.1 представление и упрощает кодирование в агентах sFlow и декодирование в коллекторах.

Выборки передаются в пакетах UDP с использованием адреса и порта, заданных в SFLOW MIB. Для протокола sFlow задан (и по умолчанию используется в SFLOW MIB) порт 6343. Всем агентам sFlow следует по умолчанию использовать порт UDP 6343. Стандартный номер порта позволяет избавиться от проблем несогласованности агентов и коллекторов sFlow, упрощает идентификацию пакетов sFlow, а также пересылку таких пакетов через промежуточные устройства (например, межсетевые экраны).

Недостаточная надежность транспорта UDP не оказывает значительного влияния на точность измерений агента sFlow.

  • Если будет потеряна выборка счетчика, при следующем опросе будут переданы новые значения. Вероятность перехода через 0 в течение этого времени пренебрежимо мала. В дейтаграммах sFlow передаются 64-битовые счетчики, а интервал опроса составляет обычно от 20 до 120 секунд, поэтому вероятность потери значительного числа дейтаграмм с переходом счетчика через 0 очень мала.

  • Потери выборок из пакетов в конечном итоге приводят лишь к незначительному снижению частоты отбора.

Использование UDP снижает объем памяти для буферизации данных, а также обеспечивает надежные способы своевременной доставки трафика в периоды высокой нагрузки (например, во время DoS5-атаки). Протокол UDP более устойчив к отказам по сравнению с транспортом с гарантированной доставкой, поскольку единственным результатом перегрузок является незначительный рост задержки при передаче и числа теряемых пакетов, что не оказывает существенного влияния на работу системы мониторинга sFlow. Использование механизмов гарантированной доставки будет приводить к значительным задержкам при перегрузке и существенному росту размера буферов у агента.

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

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

Ниже приведено описание дейтаграмм sFlow в формате XDR.

/* Формат дейтаграмм sFlow версии 5 (вариант 10) */

/* История выпусков
   - в версии 5 добавлена поддержка:
         расширенного кодирования для flow_sample и counter_sample;
         неизвестных типов адресов;
         субагентов;
         информации об отбрасывании пакетов;
         фирменных расширений;
         информации о размере полей данных;
         информации о размере типов выборки;
         семантики сброса порядковых номеров flow_sample, counter_sample.
         определение дейтаграмм отделено от определения данных потоков и счетчиков.
            Примечание. История выпусков определений данных sFlow сейчас является 
               частью документа с определениями данных. */

/* Типы адресов */

typedef opaque ip_v4[4];
typedef opaque ip_v6[16];

enum address_type {
   UNKNOWN  = 0,
   IP_V4    = 1,
   IP_V6    = 2
}
union address (address_type type) {
   case UNKNOWN:	void;
   case IP_V4:	ip_v4;
   case IP_V6:	ip_v6;
}

/* Формат данных
     Значение data_format однозначно указывает формат структуры opaque в 
     спецификации sFlow. Синтаксис data_format показан ниже.
       - старшие 20 битов соответствуют коду SMI Private Enterprise для
         элемента, отвечающего за определение структуры. Нулевое значение 
         указывает стандартные структуры, определенные sflow.org;
       - младшие 12 указывают номер формата структуры, определенный 
         организацией, который должен быть уникальным.

     В настоящее время определены 3 структуры opaque со значениями data_format:
       1. sample_data;
       2. counter_data;
       3. flow_data.

     Один и тот же номера формата можно использовать в разных контекстах.
     Например, (inmon,1) может указывать определенный набор счетчиков для
     описания counter_data и набор атрибутов потока для описания flow_data.

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

     Организациям рекомендуется публиковать определения структур в формате
     XDR на сайте www.sflow.org. В документ с определением структур следует
     включать определение XDR с комментарием, указывающим структуры, к 
     которым он относится, номером организации и номером структуры. Примерами
     могут служить определения counter_sample и flow_sample.

     Примечание. Организациям, определяющим структуры sFlow, можно расширять
        такие определения структур в конце без смены номера структуры. Все 
        изменения полей в опубликованных определениях структур должны 
        выполняться со сменой номера структуры. Это правило позволяет
        добавлять данные в структуры, сохраняя совместимость с прежними
        версиями. Приложения, получающие данные sFlow всегда должны 
        использовать данные о размере при декодировании структур opaque<>, 
        чтобы расширенные структуры не вызывали ошибок. Отметим, что эти
        правила относятся и к стандартным структурам. */

typedef unsigned int data_format;

/* Кодирование sFlowDataSource показано ниже.

     Старший байт source_id служит для указания типа sFlowDataSource:
        0 = ifIndex
        1 = smonVlanDataSource
        2 = entPhysicalEntry
     Три младших байта содержат значение подходящего индекса. */

typedef unsigned int sflow_data_source;

/* Входной/выходной порт.
     Кодирует интерфейсы на пути пакета через устройство.

     0 - интерфейс не известен.
     Два старших бита указывают формат 30-битового значения.

        - format = 0 - один интерфейс
            Значением служит ifIndex этого интерфейса. Максимальное
            значение 0x3FFFFFFF указывает отсутствие входного или
            выходного интерфейса (в зависимости от поля, где указано).
            Это используется для описания трафика, который не 
            пересылается устройством, но отслеживается агентом,
            поскольку адресован устройству или создается им. Во входном
            поле это значение указывает пакеты, созданные устройством
            (например, пакет RIP, созданный маршрутизатором). В выходном
            поле это значение указывает пакеты, адресованные устройству
            (например, индивидуальный или групповой отклик RIP, принятый
            маршрутизатором IP).

        - format = 1 - пакет отброшен
            Значение указывает код причины:
                0 - 255 используются коды ICMP Destination Unreachable, 
                        список которых доступен на сайте www.iana.org.
                        В параграфе 5.2.7.1 RFC 1812 описаны текущие
                        коды. Отметим, что применение этих кодов не
                        предполагает, что пакет относится к протоколу
                        IP, а для пакетов IP не предполагается генерация
                        каких-либо сообщений ICMP.
                          0  сеть не доступна
                          1  хост не доступен
                          2  протокол не доступен
                          3  порт не доступен
                          4  нужна фрагментация, но установлен флаг DF
                          5  отказ на заданном источником маршруте
                          6  целевая сеть не известна
                          7  целевой хост не доступен
                          8  исходных хост изолирован
                          9  связь с целевой сетью административно запрещена
                         10  связь с целевым хостом административно запрещена
                         11  целевая сеть не доступна для ToS
                         12  целевой хост не доступен для ToS
                         13  связь административно запрещена
                         14  нарушение предпочтений хоста
                         15  действует отсечка предпочтений
                256 = неизвестно
                257 = завершилось время жизни
                258 = ACL
                259 = нет места в буфере
                260 = RED
                261 = формование трафика или ограничение скорости
                262 = слишком большой пакет (для протоколов без фрагментирования)

             Примечание. С течением времени могут публиковаться дополнительные
                коды причин. Приложения, получающие sFlow, должны быть готовы
                воспринимать дополнительные коды. Актуальный список кодов
                будет поддерживаться на сайте www.sflow.org. 

        - format = 2 - множество интерфейсов-получателей
            Значение указывает число интерфейсов. 0 указывает неизвестное
            число интерфейсов больше 1.

      Примечание. Форматы 1 и 2 применимы только к выходному интерфейсу. Пакет
         всегда принимается одним (иногда неизвестным) интерфейсом.

      Примеры:
         0x00000002  указывает ifIndex = 2;
         0x00000000  ifIndex не известен;
         0x40000102  пакет отброшен на основании ACL6;
         0x80000007  пакет передан в 7 интерфейсов;
         0x80000000  пакет передан в неизвестное число интерфейсов > 1. */

typedef unsigned int interface;

/* Форматы выборки счетчиков и потоков

   Определены компактные и расширенные формы образцов для счетчиков и потоков.
   Агенту недопустимо смешивать компактное и расширенное кодирование. Если
   агент никогда не будет использовать значения ifIndex >= 224, он должен
   применять компактное представление для всех интерфейсов, в остальных 
   случаях должно использоваться расширенное представление.

   Хотя теоретический диапазон значений ifIndex составляет 232, RFC 2863
   рекомендует выделять номера с использованием небольших целых чисел,
   начиная с 1. Для большинства реализаций агентов поддерживается 
   224 значений ifIndex для компактного представления, которое 
   более адекватно и экономит пропускную способность. Расширенное
   кодирование позволяет использовать полный диапазон значений 
   ifIndex, хотя большие значения ifIndex не приветствуются. */

struct flow_record {
   data_format flow_format;         /* Формат sflow_data */
   opaque flow_data<>;              /* Данные потока однозначно 
                                       определяются flow_format. */
}
struct counter_record {
   data_format counter_format;     /* Формат counter_data */
   opaque counter_data<>;          /* Блок счетчиков однозначно
                                      определен counter_format. */
}

/* Компактная форма выборки счетчиков и потоков
      Если ifIndex всегда < 224, должна применяться эта форма. */

/* Формат одной выборки из потока. */
/* opaque = sample_data; enterprise = 0; format = 1 */

struct flow_sample {
   unsigned int sequence_number;  /* Инкрементируется для каждой выборки 
                                     из потока с этим экземпляром sFlow7.
                                     Примечание. Если агент сбрасывает
                                        sample_pool, он должен 
                                        сбрасывать и sequence_number.*/
   sflow_data_source source_id;   /* sFlowDataSource */
   unsigned int sampling_rate;    /* sFlowPacketSamplingRate */
   unsigned int sample_pool;      /* Общее число пакетов, которые могут
                                     быть отобраны (т. е. пропущенные
                                     пакеты и общее число выборок) */
   unsigned int drops;            /* Общее число случаев, когда агент sFlow
                                     обнаружил отбрасывание помеченного для
                                     выборки пакета по причине нехватки
                                     ресурсов. Счетчик указывает общее число
                                     обнаруженных фактов с момента сброса
                                     агента. Большое число отбрасываний
                                     показывает, что агент управления не 
                                     способен обрабатывать выборки со
                                     скоростью их создания оборудованием.
                                     Увеличение sampling_rate снизит скорость
                                     отбрасывания. Если агент не может 
                                     обнаружить отбрасывание, он сообщает 0. */
   interface input;               /* Интерфейс, принявший пакет. */
   interface output;              /* Интерфейс, передавший пакет. */
   flow_record flow_records<>;    /* Информация о выбранном пакете. */
}

/* Формат одной выборки счетчика. */
/* opaque = sample_data; enterprise = 0; format = 2 */

struct counters_sample {
   unsigned int sequence_number;   /* Инкрементируется с каждой выборкой 
                                      для этого экземпляра sFlow1.
                                      Примечание. Если агент сбрасывает любой
                                         из счетчиков, он должен также
                                         сбрасывать sequence_number. Для
                                         source_id на базе ifIndex порядковый
                                         номер должен сбрасываться при каждом
                                         изменении ifCounterDiscontinuityTime. */
   sflow_data_source source_id;    /* sFlowDataSource */
   counter_record counters<>;      /* Счетчики, опрашиваемые для этого источника. */
}

/* Расширенный формат выборки счетчиков и потоков.
      Если ifIndex может быть >= 224, должен применяться этот формат. */

struct sflow_data_source_expanded {
   unsigned int source_id_type;   /* Тип sFlowDataSource */
   unsigned int source_id_index;  /* Индекс sFlowDataSource */
}

struct interface_expanded {
  unsigned int format;            /* Формат интерфейса */
  unsigned int value;             /* Значение интерфейса */
}

/* Формат одной расширенной выборки из потока. */
/* opaque = sample_data; enterprise = 0; format = 3 */




struct flow_sample_expanded {
   unsigned int sequence_number;  /* Инкрементируется для каждой выборки 
                                     из потока с с этим экземпляром sFlow8.
                                     Примечание. Если агент сбрасывает
                                           sample_pool, он должен 
                                           сбрасывать и sequence_number.*/
   sflow_data_source_expanded source_id; /* sFlowDataSource */
   unsigned int sampling_rate;    /* sFlowPacketSamplingRate */
   unsigned int sample_pool;      /* Общее число пакетов, которые могут
                                     быть отобраны (т. е. пропущенные
                                     пакеты и общее число выборок) */
   unsigned int drops;            /* Общее число случаев, когда агент sFlow
                                     обнаружил отбрасывание помеченного для
                                     выборки пакета по причине нехватки
                                     ресурсов. Счетчик указывает общее число
                                     обнаруженных фактов с момента сброса
                                     агента. Большое число отбрасываний
                                     показывает, что агент управления не 
                                     способен обрабатывать выборки со
                                     скоростью их создания оборудованием.
                                     Увеличение sampling_rate снизит скорость
                                     отбрасывания. Если агент не может 
                                     обнаружить отбрасывание, он сообщает 0. */
   interface_expanded input;      /* Интерфейс, принявший пакет. */
   interface_expanded output;     /* Интерфейс, передавший пакет. */
   flow_record flow_records<>;    /* Информация о выбранном пакете. */
}

/* Формат одной расширенной выборки счетчика. */
/* opaque = sample_data; enterprise = 0; format = 4 */
struct counters_sample_expanded {
   unsigned int sequence_number;   /* Инкрементируется с каждой выборкой 
                                      для этого экземпляра sFlow1.
                                      Примечание. Если агент сбрасывает любой
                                         из счетчиков, он должен также
                                         сбрасывать sequence_number. Для
                                         source_id на базе ifIndex порядковый
                                         номер должен сбрасываться при каждом
                                         изменении ifCounterDiscontinuityTime. */
   sflow_data_source_expanded source_id; /* sFlowDataSource */
   counter_record counters<>;      /* Счетчики, опрашиваемые для этого источника. */
}

/* Формат дейтаграммы с выборкой. */

struct sample_record {
   data_format sample_type;       /* Указывает тип данных выборки. */
   opaque sample_data<>;          /* Структура, соответствующая sample_type. */
}

/* Информация заголовка для дейтаграмм sFlow версии 5.

   Поле субагента используется в тех случаях, когда агент sFlow реализован в
   распределенной архитектуре и для передачи непрактичны выборки в одной точке.

   Однако настоятельно рекомендуется не применять механизм субагентов без 
   крайней необходимости. Если в устройстве доступно множество процессоров, 
   разные задачи, связанные с выборками из потоков и счетчиков, можно 
   распределять между этими процессорами. Однако архитектуру агента следует
   организовать так, чтобы все образцы отправлялись в один поток дейтаграмм.
   Финальная задача отправки образцов включает минимальную обработку, но может
   существенно влиять на расширяемость системы sFlow. За счет снижения числа 
   пакетов UDP и потоков, связанные с sFlow издержки на приемной стороне
   существенно снижаются.

   Каждый источник sFlowDataSource должен быть связан лишь с одним субагентом. 
   Привязка sFlowDataSource к субагенту должна сохраняться в течение всей
   сессии sFlow. */
struct sample_datagram_v5 {
   address agent_address          /* IP-адрес агента выборки sFlowAgentAddress. */
   unsigned int sub_agent_id;     /* Служит для обозначения потоков дейтаграмм от
                                     разных элементов агента в устройстве. */
   unsigned int sequence_number;  /* Инкрементируется для каждой дейтаграммы выборки
                                     созданной субагентом в рамках агента. */
   unsigned int uptime;           /* Текущее время (в миллисекундах с момента
                                     загрузки устройства). Следует устанавливать 
                                     время, близкое к моменту передачи дейтаграммы.
                                     Примечание. Хотя субагенту нужно пытаться
                                        отслеживать глобальное значение sysUptime,
                                        получателю пакетов sFlow недопустимо
                                        предполагать синхронность субагентов. */
   sample_record samples<>;        /* Массив записей с выборками. */
}

enum datagram_version {
   VERSION5 = 5
}

union sample_datagram_type (datagram_version version) {
   case VERSION5:
      sample_datagram_v5 datagram;
}

struct sample_datagram {
   sample_datagram_type version;
}

Дейтаграмма sFlow содержит список записей из потоков и счетчиков. Формат каждой записи Packet Flow указан значением data_format. Пространство значений data_format может расширяться для добавления к стандартным типам фирменных расширений производителей.

Число стандартных типов записей определено. Однако агенты sFlow не обязаны поддерживать все типы записей и могут ограничиться лишь теми, которые применимы к трактовкам конкретных пакетов, о которых сообщает агент. Например, коммутатор L2 не будет информировать о подсетях, поскольку он не выполняет маршрутизации. Коммутатор L2/3 будет сообщать данные L2 для коммутируемых пакетов и данные L2 и L3 для маршрутизируемых.

Ниже приведено описание наборов данных дейтаграмм sFlow в формате XDR.

/* Предложенные стандартные форматы данных sFlow (вариант 14) */
/* История выпусков
   - версия 5
         уточнены определения extended_switch для портов без тега;
         добавлена информация о загрузке CPU и памяти;
         добавлена информация о туннелях mpls, виртуальных каналах и fec;
         уточнены определения next_hop;
         добавлен урезанный счетчик в sampled_header;
         добавлен POS header_protocol;
         добавлен BGP next hop router;
         уточнено определение размера пакета;
         снято ограничение для размера заголовка пакетов;
         добавлено поле host к расширению URL и уточнено url_direction;
         определен url как строка запроса http
         добавлена информация о кодировке символов для данных пользователя;
         добавлена поддержка NAT;
         добавлена информация MPLS.
   - в версии 4 добавлена поддержка групп BGP.
   - в версии 3 добавлена поддержка extended_url. */

/* Enterprise = 0 указывает стандартные структуры sFlow. Разработчикам
   sFlow следует применять стандартные структуры, когда это возможно, даже
   если они не используются полностью. Фирменные структуры разрешены, но
   их следует применять лишь в дополнение к имеющимся структурам или для
   передачи информации, которая еще не стандартизована.

   Приведенные ниже значения следует применять для неизвестных полей
   (если в определении структуры не указано иное).
      - Неизвестное целое число. Используйте значение 0.
      - Неизвестный счетчик. Используйте максимальное значение
        счетчика для индикации его недоступности. В любой данной 
        сессии sFlow конкретный счетчик должен быть всегда доступным
        или всегда недоступным. Доступные счетчики могут временно
        иметь максимальное значение перед сбросом в 0. Это разрешено.
      - Неизвестная строка. Используйте пустую строку (размера 0). */

/* Типы данных потока.

   В flow_sample должна содержаться информация о заголовке пакета.
   Предпочтителен формат sampled_header, однако при недоступности
   заголовка для процесса выборки можно использовать 1 или несколько
   sampled_ethernet, sampled_ipv4, sampled_ipv6. */




/* Данные заголовка пакета. */

/* Нумерация header_protocol может со временем расширяться.
   Приложения, получающие sFlow, должны быть готовы воспринимать
   структуры sampled_header с неизвестными значениями.

   Актуальный список номеров поддерживается на сайте www.sflow.org. */

enum header_protocol {
   ETHERNET-ISO88023    = 1,
   ISO88024-TOKENBUS    = 2,
   ISO88025-TOKENRING   = 3,
   FDDI                 = 4,
   FRAME-RELAY          = 5,
   X25                  = 6,
   PPP                  = 7,
   SMDS                 = 8,
   AAL5                 = 9,
   AAL5-IP              = 10, /* например, Cisco AAL5 мультиплекс */
   IPv4                 = 11,
   IPv6                 = 12,
   MPLS                 = 13,
   POS                  = 14  /* RFC 1662, 2615 */
}

/* Заголовок необработанных (Raw) пакетов */
/* opaque = flow_data; enterprise = 0; format = 1 */

struct sampled_header {
   header_protocol protocol;       /* Формат выбранного заголовка. */
   unsigned int frame_length;      /* Исходный размер пакета до выборки.
                                      Примечание. Для header_protocol 
                                         канального уровня - общее число 
                                         октетов данных, полученных из
                                         сети (без битов кадрирования, но
                                         с учетом FCS). Аппаратные 
                                         ограничения могут препятствовать
                                         указанию точно размера кадра на 
                                         канальном уровне, но агенту следует
                                         по-возможности соблюдать точность.
                                         Октеты, добавленные к frame_length
                                         для компенсации удаленной инкапсуляции,
                                         должны учитываться в числе вырезанных. */
   unsigned int stripped;          /* Число октетов, удаленных из пакета до
                                      извлечения октетов  header<>. Данные
                                      трейлера, соответствующего удаленной
                                      инкапсуляции, также должны вырезаться. 
                                      Данные трейлера для внешнего протокола,
                                      включенного в выборку, должны вырезаться.

                                      Для пакета 802.3 без инкапсуляции вырезается
                                      не менее 4 октетов, поскольку в дополнение к
                                      FCS может вырезаться тег VLAN.

                                      Внешняя инкапсуляция, которая не однозначна 
                                      или не относится к стандартным header_protocol,
                                      должна вырезаться. */
   opaque header<>;                /* Байты заголовка. */
}

typedef opaque mac[6];

/* Данные кадра Ethernet. */
/* opaque = flow_data; enterprise = 0; format = 2 */

struct sampled_ethernet {
     unsigned int length;   /* Размер кадра MAC, полученного из сети, без
                               учета инкапсуляции нижележащих уровней и
                               кадрирования, но с учетом октетов FCS. */
     mac src_mac;           /* MAC-адрес отправителя. */
     mac dst_mac;           /* MAC-адрес получателя. */
     unsigned int type;     /* Тип пакета Ethernet. */
}

/* Данные пакета IPv4. */
/* opaque = flow_data; enterprise = 0; format = 3 */
struct sampled_ipv4 {
   unsigned int length;     /* Размер пакета IP без учета инкапсуляции
                               нижележащих уровней. */
   unsigned int protocol;   /* Тип протокола IP (например, TCP = 6, UDP = 17) */
   ip_v4 src_ip;            /* IP-адрес отправителя. */
   ip_v4 dst_ip;            /* IP-адрес получателя. */
   unsigned int src_port;   /* Порт отправителя TCP/UDP или его эквивалент. */
   unsigned int dst_port;   /* Порт получателя TCP/UDP или его эквивалент. */
   unsigned int tcp_flags;  /* Флаги TCP. */
   unsigned int tos;        /* IP TOS. */
}

/* Данные пакета IPv6. */
/* opaque = flow_data; enterprise = 0; format = 4 */

struct sampled_ipv6 {
   unsigned int length;     /* Размер пакета IP без учета инкапсуляции
                               нижележащих уровней. */
   unsigned int protocol;   /* IP next header (например, TCP = 6, UDP = 17) */
   ip_v6 src_ip;            /* IP-адрес отправителя. */
   ip_v6 dst_ip;            /* IP-адрес получателя. */
   unsigned int src_port;   /* Порт отправителя TCP/UDP или его эквивалент. */
   unsigned int dst_port;   /* Порт получателя TCP/UDP или его эквивалент. */
   unsigned int tcp_flags;  /* Флаги TCP. */
   unsigned int priority;   /* IP priority */
}

/* Расширенные данные потока.

   Расширенные типы данных обеспечивают дополнительную информацию о
   выбранном пакете. В каждую выборку следует включать все применимые
   расширенные данные. */

/* Расширенные данные коммутатора. */
/* opaque = flow_data; enterprise = 0; format = 1001 */
/* Примечание. Для входных портов без тегов используются назначенные
      значения vlan и приоритета в качестве src_vlan и src_priority.
      Для выходных портов без тегов используются значения dst_vlan и
      dst_priority, которые будут помещаться в тег 802.1Q и делать
      порт членом VLAN. */

struct extended_switch {
   unsigned int src_vlan;     /* 802.1Q VLAN из входящего кадра.
                                 0xffffffff, если тег не известен. */
   unsigned int src_priority; /* Приоритет 802.1p из входящего кадра.
                                 0Xffffffff, если приоритет не известен. */
   unsigned int dst_vlan;     /* 802.1Q VLAN исходящего кадра.
                                 0xffffffff, если тег не известен. */
   unsigned int dst_priority; /* Приоритет 802.1p исходящего кадра.
                                 0Xffffffff, если приоритет не известен. */
}9

/* Следующий интервал маршрута IP.
   ipForwardNextHop (RFC 2096) для маршрутов IPv4.
   ipv6RouteNextHop (RFC 2465) для маршрутов IPv6. */

typedef next_hop address;

/* Расширенные данные маршрутизатора. */
/* opaque = flow_data; enterprise = 0; format = 1002 */

struct extended_router {
   next_hop nexthop;            /* IP-адрес следующего маршрутизатора. */
   unsigned int src_mask_len;   /* Число битов в маске префикса отправителя. */
   unsigned int dst_mask_len;   /* Число битов в маске префикса получателя. */
}

enum as_path_segment_type {
   AS_SET      = 1,            /* Неупорядоченный набор AS. */
   AS_SEQUENCE = 2             /* Упорядоченный набор AS. */
}




union as_path_type (as_path_segment_type) {
   case AS_SET:
      unsigned int as_set<>;
   case AS_SEQUENCE:
      unsigned int as_sequence<>;
}

/* Расширенные данные шлюза. */
/* opaque = flow_data; enterprise = 0; format = 1003 */

struct extended_gateway {
   next_hop nexthop;           /* Адрес граничного маршрутизатора 
                                  для целевой сети. */
   unsigned int as;            /* Номер AS для маршрутизатора. */
   unsigned int src_as;        /* Номер AS источника */
   unsigned int src_peer_as;   /* Номер AS партнера со стороны источника. */
   as_path_type dst_as_path<>; /* Путь AS к получателю */
   unsigned int communities<>; /* Группы, связанные с маршрутом. */
   unsigned int localpref;     /* LocalPref для маршрута. */
}

/* Кодировка символов
     Значение MIBEnum набора символов, используемого в строках, см. RFC 2978
     По-возможности следует применять кодировку UTF-8 (MIBEnum=106). 
     0 указывает неизвестную кодировку. */

typedef unsigned int charset;

/* Расширенные данные пользователя. */
/* opaque = flow_data; enterprise = 0; format = 1004 */

struct extended_user {
   charset src_charset;        /* Кодировка для src_user. */
   opaque src_user<>;          /* Идентификатор пользователя, связанный 
                                  с источником пакета. */
   charset dst_charset;        /* Кодировка для dst_user. */
   opaque dst_user<>;          /* Идентификатор пользователя, связанный 
                                  с адресатом пакета. */
}

enum url_direction {
   src    = 1,                 /* Источником является сервер. */
   dst    = 2                  /* Получателем является сервер. */
}

/* Расширенные данные URL. */
/* opaque = flow_data; enterprise = 0; format = 1005 */

struct extended_url {
   url_direction direction;    /* Направление соединения. */
   string url<>;               /* Строка запроса HTTP (см. RFC 2616). */
   string host<>;              /* Поле host из заголовка HTTP. */
}

/* Стек меток MPLS.
    - При неизвестном значении может возвращаться пустой стек.
    - Если известна лишь внешняя метка, стек может содержать 1 запись.
    - Кодирование меток описано в RFC 3032.
    - Метки используют сетевой порядок байтов. */
typedef int label_stack<>;

/* Расширенные данные MPLS. */
/* opaque = flow_data; enterprise = 0; format = 1006 */

struct extended_mpls {
   next_hop nexthop;           /* Адрес следующего интервала. */
   label_stack in_stack;       /* Стек меток принятого пакета. */
   label_stack out_stack;      /* Стек меток передаваемого пакета. */
}

/* Расширенные данные NAT.
   Записи для заголовка пакета указывают адрес, видимый в sFlowDataSource.
   Структура extended_nat указывает адрес отправителя и/или получателя
   после трансляции. Если адрес не меняется, он должен совпадать с
   указанным для заголовка. */
/* opaque = flow_data; enterprise = 0; format = 1007 */
struct extended_nat {
     address src_address;            /* Адрес отправителя. */
     address dst_address;            /* Адрес получателя. */
}

/* Расширенные данные туннеля MPLS. */
/* opaque = flow_data; enterprise = 0; format = 1008 */

struct extended_mpls_tunnel {
   string tunnel_lsp_name<>;   /* Имя туннеля. */
   unsigned int tunnel_id;     /* Идентификатор туннеля. */
   unsigned int tunnel_cos;    /* COS для туннеля. */
}

/* Расширенные данные MPLS VC. */
/* opaque = flow_data; enterprise = 0; format = 1009 */

struct extended_mpls_vc {
   string vc_instance_name<>;  /* Имя экземпляра VC. */
   unsigned int vll_vc_id;     /* Идентификатор экземпляра VLL/VC. */
   unsigned int vc_label_cos;  /* COS для VC Label. */
}

/* Расширенные данные MPLS FEC.
    - Определения из MPLS-FTN-STD-MIB mplsFTNTable */
/* opaque = flow_data; enterprise = 0; format = 1010 */

struct extended_mpls_FTN {
   string mplsFTNDescr<>;
   unsigned int mplsFTNMask;
}

/* Расширенные данные MPLS LVP FEC.
    - Определения из MPLS-LDP-STD-MIB mplsFecTable
    Примечание. Данные mplsFecAddrType, mplsFecAddr доступны из заголовка */
/* opaque = flow_data; enterprise = 0; format = 1011 */

struct extended_mpls_LDP_FEC {
   unsigned int mplsFecAddrPrefixLength;
}

/* Расширенные данные туннеля VLAN.
   Запись внешней инкапсуляции VLAN, которая была вырезана. Следует
   сообщать информацию extended_vlantunnel лишь при выполнении
   всех перечисленных ниже условий.
     1. Пакет имеет вложенные теги VLAN.
     2. Рапортующее устройство осведомлено о VLAN.
     3. Один или несколько тегов VLAN были вырезаны в результате
        использования фирменной инкапсуляции или по причине того,
        что оборудование коммутатора автоматически вырезает внешнюю 
        инкапсуляцию VLAN.
   Передача информации extended_vlantunnel не замещает передачу
   extended_switch. Данные extended_switch должны передаваться всегда
   для описания входящей/исходящей информации VLAN для пакета.
   Данные extended_vlantunnel применимы лишь к вложенным VLAN и только
   при вырезании одного или нескольких тегов VLAN. */
/* opaque = flow_data; enterprise = 0; format = 1012 */

extended_vlantunnel {
  unsigned int stack<>;  /* Список вырезанных уровней 802.1Q TPID/TCI. Каждая
                            пара TPID,TCI представляется 32-битовым целым числом.
                            Уровни указываются от внешнего к внутреннему. */
}

/* Типы данных счетчиков

   По возможности следует включать блок if_counters. Могут включаться также
   связанные со средой счетчики. */

/* Базовые счетчики интерфейсов - RFC 2233 */
/* opaque = counter_data; enterprise = 0; format = 1 */

struct if_counters {
   unsigned int ifIndex;
   unsigned int ifType;
   unsigned hyper ifSpeed;
   unsigned int ifDirection;    /* Взято из MAU MIB (RFC 2668)
                                   0 = неизвестно, 1=полнодуплексный, 
                                   2=полудуплексный, 3 = вход, 4=выход */
   unsigned int ifStatus;       /* битовое поле
                                   бит 0 = ifAdminStatus (0 = down, 1 = up)
                                   бит 1 = ifOperStatus (0 = down, 1 = up) */
   unsigned hyper ifInOctets;
   unsigned int ifInUcastPkts;
   unsigned int ifInMulticastPkts;
   unsigned int ifInBroadcastPkts;
   unsigned int ifInDiscards;
   unsigned int ifInErrors;
   unsigned int ifInUnknownProtos;
   unsigned hyper ifOutOctets;
   unsigned int ifOutUcastPkts;
   unsigned int ifOutMulticastPkts;
   unsigned int ifOutBroadcastPkts;
   unsigned int ifOutDiscards;
   unsigned int ifOutErrors;
   unsigned int ifPromiscuousMode;
}

/* Счетчики интерфейса Ethernet, см. RFC 2358 */
/* opaque = counter_data; enterprise = 0; format = 2 */

struct ethernet_counters {
   unsigned int dot3StatsAlignmentErrors;
   unsigned int dot3StatsFCSErrors;
   unsigned int dot3StatsSingleCollisionFrames;
   unsigned int dot3StatsMultipleCollisionFrames;
   unsigned int dot3StatsSQETestErrors;
   unsigned int dot3StatsDeferredTransmissions;
   unsigned int dot3StatsLateCollisions;
   unsigned int dot3StatsExcessiveCollisions;
   unsigned int dot3StatsInternalMacTransmitErrors;
   unsigned int dot3StatsCarrierSenseErrors;
   unsigned int dot3StatsFrameTooLongs;
   unsigned int dot3StatsInternalMacReceiveErrors;
   unsigned int dot3StatsSymbolErrors;
}

/* Счетчики Token Ring, см. RFC 1748 */
/* opaque = counter_data; enterprise = 0; format = 3 */

struct tokenring_counters {
  unsigned int dot5StatsLineErrors;
  unsigned int dot5StatsBurstErrors;
  unsigned int dot5StatsACErrors;
  unsigned int dot5StatsAbortTransErrors;
  unsigned int dot5StatsInternalErrors;
  unsigned int dot5StatsLostFrameErrors;
  unsigned int dot5StatsReceiveCongestions;
  unsigned int dot5StatsFrameCopiedErrors;
  unsigned int dot5StatsTokenErrors;
  unsigned int dot5StatsSoftErrors;
  unsigned int dot5StatsHardErrors;
  unsigned int dot5StatsSignalLoss;
  unsigned int dot5StatsTransmitBeacons;
  unsigned int dot5StatsRecoverys;
  unsigned int dot5StatsLobeWires;
  unsigned int dot5StatsRemoves;
  unsigned int dot5StatsSingles;
  unsigned int dot5StatsFreqErrors;
}

/* Счетчики интерфейса 100BaseVG, см. RFC 2020 */
/* opaque = counter_data; enterprise = 0; format = 4 */

struct vg_counters {
  unsigned int dot12InHighPriorityFrames;
  unsigned hyper dot12InHighPriorityOctets;
  unsigned int dot12InNormPriorityFrames;
  unsigned hyper dot12InNormPriorityOctets;
  unsigned int dot12InIPMErrors;
  unsigned int dot12InOversizeFrameErrors;
  unsigned int dot12InDataErrors;
  unsigned int dot12InNullAddressedFrames;
  unsigned int dot12OutHighPriorityFrames;
  unsigned hyper dot12OutHighPriorityOctets;
  unsigned int dot12TransitionIntoTrainings;
  unsigned hyper dot12HCInHighPriorityOctets;
  unsigned hyper dot12HCInNormPriorityOctets;
  unsigned hyper dot12HCOutHighPriorityOctets;
}

/* Счетчики VLAN */
/* opaque = counter_data; enterprise = 0; format = 5 */

struct vlan_counters {
  unsigned int vlan_id;
  unsigned hyper octets;
  unsigned int ucastPkts;
  unsigned int multicastPkts;
  unsigned int broadcastPkts;
  unsigned int discards;
}

/* Проценты указываются в сотых долях, т. е. 100 = 1%.
   Если значение не известно, используется -1. */

typedef int percentage;

/* Данные о процессоре */
/* opaque = counter_data; enterprise = 0; format = 1001 */

struct processor {
   percentage 5s_cpu;          /* средняя загрузка CPU в течение 5 секунд */
   percentage 1m_cpu;          /* средняя загрузка CPU в течение 1 минуты */
   percentage 5m_cpu;          /* средняя загрузка CPU в течение 5 минут */
   unsigned hyper total_memory /* размер памяти (в байтах) */
   unsigned hyper free_memory  /* свободная память (в байтах) */
}

В спецификациях дейтаграмм sFlow и записей данных используются определения из множества опубликованных RFC, включая [22], [23], [24], [25], [26], [27], [28], [29], [30], [31].

6. Вопросы безопасности

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

Хотя развертывание системы мониторинга связано с некоторым риском, этот мониторинг обеспечивает также мощные средства обнаружения и отслеживания несанкционированных действий в сети.

В этом разделе представлена информация, которая поможет оценить возможные риски и параметры конфигурации, позволяющие снизить риск.

6.1 Конфигурация

sFlow MIB применяется для настройки агентов sFlow. Защита SNMP со списками управления доступом обычно считается адекватной для корпоративных сред. Однако в некоторых ситуациях эти меры защиты не эффективны (например, при настройке маршрутизаторов ядра Internet) и настройку по протоколу SNMP отключают.

При отключенной поддержке SNMP обычно используется командный интерфейс через консоль управления. Аргументы, используемые для настройки выборки sFlow на интерфейсе, приведены ниже.

   -SFlowDataSource               <source>
   -sFlowFsPacketSamplingRate     <rate>
   -sFlowFsMaximumHeaderSize      <header size>
   -sFlowCpInterval               <interval>
   -sFlowRcvrMaximumDatagramSize  <datagram size>
   -sFlowRcvrCollectorAddress     <address>
   -sFlowRcvrCollectorPort        <port>

Если командный интерфейс используется вместе с SNMP для настройки агента sFlow, разработчикам агента следует обеспечить независимую работу этих механизмов или передачу внесенных с помощью команд изменений в sFlow MIB. Обычно внесенные с помощью команд изменения имеют более высокий приоритет, нежели изменения по протоколу SNMP. Записи, созданные с помощью команд, следует делать неизменяемыми для SNMP. Тогда строки в каждой из таблиц SNMP будут либо принадлежать командному интерфейсу (и не могут быть изменены с помощью SNMP), либо будут относиться к агенту SNMP с возможностью изменения по протоколу SNMP.

6.2 Транспорт

Информация о трафике передается от агентов sFlow коллекторам через сеть без шифрования, что делает возможным ее перехват. Риск можно снизить путем организации защищенной измерительной сети и передачи дейтаграмм sFlow через эту сеть. Выбор технологии для защищенной измерительной сети определяется реализацией и может включать VLAN и/или туннели VPN.

Коллекторы sFlow уязвимы для атак с использованием фиктивных дейтаграмм sFlow. Для снижения риска коллекторам sFlow следует проверять порядковые номера дейтаграмм и адреса их отправителей. При использовании защищенной измерительной сети следует обрабатывать лишь дейтаграммы sFlow, принятые из этой сети.

6.3 Конфиденциальность

Данные о трафике могут раскрывать конфиденциальную информацию об отдельных пользователях сети. Степень раскрытия данных прикладного уровня можно контролировать путем ограничения размера заголовков, собираемых агентами sFlow. Кроме того, механизмы выборки делают практически невозможным захват последовательных пакетов из отдельной транзакции.

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

7. Литература

[1] Phaal, P., Panchen, S., and N. McKee, «InMon Corporation’s sFlow: A Method for Monitoring Traffic in Switched and Routed Networks», RFC 3176, September 2001.

[2] Harrington, D., Presuhn, R., and B. Wijnen, «An Architecture for Describing SNMP Management Frameworks», RFC 2571, April 1999.

[3] Rose, M., and K. McCloghrie, «Structure and Identification of Management Information for TCP/IP-based Internets», STD 16, RFC 1155, May 1990.

[4] Rose, M., and K. McCloghrie, «Concise MIB Definitions», STD 16, RFC 1212, March 1991.

[5] Rose, M., «A Convention for Defining Traps for use with the SNMP», RFC 1215, March 1991.

[6] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M., and S. Waldbusser, «Structure of Management Information Version 2 (SMIv2)», STD 58, RFC 2578, April 1999.

[7] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M., and S. Waldbusser, «Textual Conventions for SMIv2», STD 58, RFC 2579, April 1999.

[8] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M., and S. Waldbusser, «Conformance Statements for SMIv2», STD 58, RFC 2580, April 1999.

[9] Case, J., Fedor, M., Schoffstall, M., and J. Davin, «Simple Network Management Protocol», STD 15, RFC 1157, May 1990.

[10] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, «Introduction to Community-based SNMPv2», RFC 1901, January 1996.

[11] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, «Transport Mappings for Version 2 of the Simple Network Management Protocol (SNMPv2)», RFC 1906, January 1996.

[12] Case, J., Harrington D., Presuhn R., and B. Wijnen, «Message Processing and Dispatching for the Simple Network Management Protocol (SNMP)», RFC 2572, April 1999.

[13] Blumenthal, U., and B. Wijnen, «User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)», RFC 2574, April 1999.

[14] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, «Protocol Operations for Version 2 of the Simple Network Management Protocol (SNMPv2)», RFC 1905, January 1996.

[15] Levi, D., Meyer, P., and B. Stewart, «SNMPv3 Applications», RFC 2573, April 1999.

[16] Wijnen, B., Presuhn, R., and K. McCloghrie, «View-based Access Control Model (VACM) for the Simple Network Management Protocol (SNMP)», RFC 2575, April 1999.

[17] Case, J., Mundy, R., Partain, D., and B. Stewart, «Introduction to Version 3 of the Internet-standard Network Management Framework», RFC 2570, April 1999.

[18] S. Waldbusser, «Remote Network Monitoring Management Information Base», RFC 2819, May 2000.

[19] Waterman, R., Lahaye, B., Romascanu, D., and S. Waldbusser, «Remote Network Monitoring MIB Extensions for Switched Networks Version 1.0», RFC 2613, June 1999.

[20] Daniele, M., Haberman, B., Routhier, S., and J. Schoenwaelder, «Textual Conventions for Internet Network Addresses», RFC 2851, June 2000.

[21] N. Brownlee, «Traffic Flow Measurement: Meter MIB», RFC 2720, October 1999.

[22] Smith, A., Flick, J., de Graaf, K., Romanscanu, D., McMaster, D., McCloghrie, K., and S. Roberts, «Definition of Managed Objects for IEEE 802.3 Medium Attachment Units (MAUs)», RFC 2668, August 1999.

[23] McCloghrie, K., and F. Kastenholz, «The Interfaces Group MIB», RFC 2863, June 2000.

[24] Flick, J., and J. Johnson, «Definition of Managed Objects for the Ethernet-like Interface Types», RFC 2358, June 1998.

[25] J. Case, «FDDI Management Information Base», RFC 1512, September 1993.

[26] McCloghrie, K., and E. Decker, «IEEE 802.5 MIB using SMIv2», RFC 1748, December 1994.

[27] J. Flick, «Definitions of Managed Objects for IEEE 802.12 Interfaces», RFC 2020, October 1996.

[28] Willis, S., Burruss, J., and J. Chu, «Definitions of Managed Objects for the Fourth Version of the Border Gateway Protocol (BGP-4) using SMIv2», RFC 1657, July 1994.

[29] Baker, F. (Editor), «Requirements for IP Version 4 Routers», RFC 1812, June 1995.

[30] F. Baker, «IP Forwarding Table MIB», RFC 2096, January 1997. [31] D. Haskin and S. Onishi, «Management Information Base for IP Version 6», RFC 2465, December 1998.

[32] R. Srinivasan, «XDR: External Data Representation Standard», RFC 1832, August 1995.

8. Адреса авторов

Peter Phaal

InMon Corp.

580 California Street, 5th Floor

San Francisco, CA 94104

Phone: (415) 283-3263

EMail: peter.phaal@inmon.com

Marc Lavine

Foundry Networks

2100 Gold Street

P.O. Box 649100

San Jose, CA 95164-9100

Phone: (408) 586-1700

EMail: mlavine@foundrynet.com


Перевод на русский язык

Николай Малых

nmalykh@gmail.com

Приложение A. Различия sFlow версий 4 и 5

Архитектура sFlow не изменилась, но было внесено множество изменений в формат дейтаграмм и sFlow MIB. Эти изменения подробно описаны в истории изменений каждой из этих спецификаций.

Главным отличием sFlow MIB версии 5 является деление sFlowTable на три отдельных таблицы:

  • sFlowRcvrTable для поддержки сессии с коллектором sFlow;

  • sFlowFsTable для настройки выборки пакетов;

  • sFlowCpTable для настройки опроса счетчиков интерфейсов.

Основные изменения в формате дейтаграмм sFlow связаны с расширяемостью. Записи в дейтаграммах теперь включают TLV10. Определено глобальное пространство имен для типов записей, позволяющее разработчикам создавать свои типы записей. Это также позволяет добавлять новые типы записей без изменения опубликованного протокола sFlow.

Приложение B. Генерация случайных чисел

Важным свойством генератора случайных чисел является сходимость среднего значения генерируемых значений к требуемой частоте выборки.

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

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

Новое значение пропуска требуется лишь при выполнении каждой выборки.

1В оригинале допущена ошибка. См. https://sflow.org/developers/errata.php. Прим. перев.

2Structure of Management Information.

3Management Information Base — база управляющей информации.

4В оригинале допущена ошибка. См. https://sflow.org/developers/errata.php. Прим. перев.

5Denial of service attack — атака на отказ служб.

6В оригинале допущена ошибка. См. https://sflow.org/developers/errata.php. Прим. перев.

7В оригинале допущена ошибка. См. https://sflow.org/developers/errata.php. Прим. перев.

8В оригинале допущена ошибка. См. https://sflow.org/developers/errata.php. Прим. перев.

9В оригинале допущена ошибка. См. https://sflow.org/developers/errata.php. Прим. перев.

10Tag, length and value — тег, размер и значение.

Рубрика: Мониторинг и управление | Комментарии к записи sFlow Version 5 отключены

RFC 3828 The Lightweight User Datagram Protocol (UDP-Lite)

Network Working Group                                    L-A. Larzon
Request for Comments: 3828            Lulea University of Technology
Category: Standards Track                               M. Degermark
                                                             S. Pink
                                           The University of Arizona
                                                   L-E. Jonsson, Ed.
                                                            Ericsson
                                                   G. Fairhurst, Ed.
                                              University of Aberdeen
                                                           July 2004

Облегченный протокол пользовательских дейтаграмм (UDP-Lite)

The Lightweight User Datagram Protocol (UDP-Lite)

PDF

Статус документа

Данный документ содержит стандарт протокола Internet, предложенного сообществу Internet, и является приглашением к дискуссии в целях развития этого протокола. Сведения о текущем состоянии стандартизации протокола вы найдете в документе Internet Official Protocol Standards (STD 1). Документ можно распространять без ограничений.

Авторские права

Copyright (C) The Internet Society (2004).

Аннотация

Данный документ описывает протокол UDP-Lite1, подобный протоколу UDP2 (RFC 768), но может также обслуживать в склонных к ошибкам сетевых средах приложения, которые предпочитают получать частично подтвержденные дейтаграммы, но не отбрасывать пакеты при любой ошибке. Если это свойство не использовать, UDP-Lite семантически идентичен протоколу UDP.

1. Введение

Этот документ описывает новый транспортный протокол UDP-Lite, известный также, как UDPLite. Основой нового протокола служат три наблюдения:

Во первых, существует класс приложений, которые получат преимущества, если поврежденные данные будут доставляться, а не отбрасываться. Множество кодеков для голоcа и видео относятся к этому классу (например, кодек речи AMR [RFC 3267], кодек Internet Low Bit Rate Codec [ILBRC], устойчивые к ошибкам видеокодеки H.263+ [ITU-H.263], H.264 [ITU-H.264; H.264], MPEG-4 [ISO-14496]). Эти кодеки могут разрабатываться так, что ошибки в данных для них будут предпочтительней отбрасывания пакетов целиком.

Во вторых, всем каналам, поддерживающим передачу трафика IP, следует использовать строгую проверку целостности на канальном уровне (например, CRC-32 [RFC 3819]) и эта проверка должна по умолчанию использоваться для трафика IP. Когда нижележащий канальный уровень поддерживает такую проверку, некоторые типы трафика (например, UDP-Lite) могут получить преимущества в результате смены поведения канального уровня, позволяющей по запросу пересылку частично поврежденных пакетов IP [RFC 3819]. Некоторые радио-технологии (например, [3GPP]) поддерживают такое поведение при работе при работе в точках, где стоимость и задержки достаточно малы. Если склонные к ошибкам каналы знают о чувствительной к ошибкам части пакета, для физического соединения можно обеспечить дополнительную защиту за счет снижения вероятности повреждения чувствительных к ошибкам байтов (например, использовать неоднородную упреждающую коррекцию ошибок FEC3).

В третьих, промежуточным уровням (т. е., IP и протокол транспортного уровня) не следует запрещать работу устойчивых к ошибкам приложений при наличии таких каналов. Протокол IP не создает проблем в этом отношении, поскольку заголовок IP включает контрольную сумму, покрывающую все данные пакета IP. Из транспортных протоколов общего назначения лучше всего подходит UDP, поскольку он не создает издержек, связанных с повтором передачи ошибочных пакетов, нарушением порядка доставки и коррекцией ошибок. Для IPv4 [RFC 791] контрольная сумма UDP покрывает пакет целиком или просто не используется. Для IPv6 [RFC 2460] контрольная сумма UDP является обязательной и ее использование не может быть отключено. Заголовок IPv6 не включает контрольной суммы самого заголовка и считается необходимым всегда защищать адресную информацию IP с помощью обязательной контрольной суммы UDP.

Требуется транспортный протокол, который соответствует свойствам канального уровня и перечисленным выше требованиям [LDP99]. Механизм детектирования ошибок транспортного уровня должен обеспечивать защиту важной информации (такой, как заголовки) вкупе с игнорированием ошибок, с которыми лучше иметь дело приложениям. Набор октетов, проверяемых с помощью контрольной суммы, лучше всего задавать со стороны передающего приложения.

Протокол UDP-Lite обеспечивает поддержку контрольных сумм с необязательным частичным покрытием. При использовании этой опции пакет делится на две части — чувствительную к ошибкам (покрывается контрольной суммой) и нечувствительную к ним (не покрывается контрольной суммой). Ошибки в нечувствительной к ним части не будут приводить к отбрасыванию пакетов транспортным уровнем принимающего конечного хоста. Когда контрольная сумма покрывает весь пакет (это следует делать по умолчанию), UDP-Lite семантически идентичен протоколу UDP.

По сравнению с UDP, неполные контрольные суммы UDP-Lite обеспечивают дополнительную гибкость для приложений, которые хотят определить часть своих данных в пакетах, как нечувствительную к ошибкам.

2. Терминология

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не следует (SHALL NOT), следует (SHOULD), не нужно (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе интерпретируются в соответствии с [RFC-2119].

3. Описание протокола

Заголовок пакетов UDP-Lite показан на рисунке 1. Его формат отличается от формата UDP — поле Length заменено полем Checksum Coverage. Эта замена допустима, поскольку информация о размере пакета UDP может быть обеспечена модулем IP так же, как это делается для TCP [RFC 793].

       0              15 16             31
      +--------+--------+--------+--------+
      |     Source      |   Destination   |
      |      Port       |      Port       |
      +--------+--------+--------+--------+
      |    Checksum     |                 |
      |    Coverage     |    Checksum     |
      +--------+--------+--------+--------+
      |                                   |
      :              Payload              :
      |                                   |
      +-----------------------------------+

Рисунок 1: Формат заголовка UDP-Lite

3.1. Поля

Поля Source Port и Destination Port определяются, как в спецификации UDP [RFC 768]. Протокол UDP-Lite использует тот же набор портов, который выделен агентством IANA для использования с UDP.

Поле Checksum Coverage указывает число октетов, начиная с первого октета заголовка UDP-Lite, используемых для расчета контрольной суммы. Заголовок UDP-Lite должен всегда покрываться контрольной суммой. Вопреки этому требованию значение Checksum Coverage выражается числом октетов от начала заголовка UDP-Lite, как это делается для UDP. Нулевое значение Checksum Coverage показывает, что контрольная сумма вычисляется для всего пакета UDP-Lite. Это означает, что отличные от 0 значения поля Checksum Coverage должны быть не меньше 84. Пакеты UDP-Lite со значением поля Checksum Coverage от 1 до 7 должны отбрасываться получателем. Безотносительно к значению Checksum Coverage поле Checksum должно учитывать псевдозаголовок, основанный на заголовке IP (см. ниже). Пакеты UDP-Lite со значением поля Checksum Coverage, превышающим размер IP, также должны отбрасываться.

Поле Checksum содержит 16-битовое поразрядное дополнение до 1 суммы поразрядных дополнений до 1 для информации псевдозаголовка, собранной из заголовка IP, числа октетов, заданного полем Checksum Coverage (начиная с первого октета в заголовке UDP-Lite), возможно дополненного октетом нулей в конце для выравнивания по 16-битовой границе [RFC 1071]. Перед расчетом контрольной суммы значение поля Checksum принимается нулевым. Если рассчитанная контрольная сумма равна 0, она передается как «все единицы» (эквивалентны в арифметике с дополнением до 1).

Поскольку недопустима передача контрольной суммы, состоящей только из нулей, приложениям UDP-Lite, не желающим защищать свои данные с помощью контрольной суммы, следует использовать Checksum Coverage = 8. Это отличается от использования протокола UDP на основе IPv4 тем, что минимальная контрольная сумма UDP-Lite всегда покрывает заголовок UDP-Lite, который включает поле Checksum Coverage.

3.2. Псевдозаголовок

Протоколы UDP и UDP-Lite используют однотипный псевдозаголовок с уровня IP для расчета контрольной суммы. Этот псевдозаголовок различается для протоколов IPv4 и IPv6. Псевдозаголовок UDP-Lite отличается от псевдозаголовка UDP тем, что поле Length берется не из заголовка UDP-Lite, а из информации, предоставляемой модулем IP. Расчет производится так же, как для протокола TCP [RFC 793], и предполагает, что поле Length псевдозаголовка включает заголовок UDP-Lite и все последующие октеты данных IP.

3.3. Интерфейс с приложением

Интерфейсу с прикладным уровнем следует разрешать такие же операции, как для протокола UDP. Кроме того, для передающего приложения следует обеспечивать способ передачи значения Checksum Coverage модулю UDP-Lite. Следует также обеспечивать способ передачи значения Checksum Coverage принимающему приложению или, по крайней мере, позволить принимающему приложению блокировать доставку пакетов, в которых покрытие для контрольной суммы меньше, чем значение, представленное этим приложением.

Рекомендуется по умолчанию протоколу UDP-Lite вести себя, подобно UDP, устанавливая значение поля Checksum Coverage соответствующим размеру пакета UDP-Lite и проверяя весь пакет. Приложениям, желающим определить часть своих данных, как нечувствительные к битовым ошибкам (например, для устойчивых к ошибкам кодеков RTP [RFC 3550]), следует делать это путем явного системного вызова на стороне отправителя. Приложениям, желающим получать данные с неполным покрытием для контрольной суммы, следует информировать принимающую систему с помощью явного системного вызова.

Характеристики каналов, формирующих путь через Internet, могут существенно различаться. Следовательно, трудно делать какие-либо предположения об уровне или характере ошибок, которые могут приводить к повреждению нечувствительной части данных пакетов UDP-Lite. Приложениям, использующим UDP-Lite, не следует делать каких-либо предположений о корректности принятых данных за пределами области, указанной полем Checksum Coverage, и следует, при необходимости пользоваться своими средствами контроля ошибок.

3.4. Интерфейс с IP

Как для UDP, модуль IP должен обеспечивать псевдозаголовок модулю протокола UDP-Lite (его называют также модулем UDPLite). Псевдозаголовок UDP-Lite содержит поля адресов IP и поле протокола из заголовка IP, а также размер данных IP, который определяется на основе поля Length в заголовке IP.

Передающему модулю IP недопустимо дополнять данные IP октетами заполнения, поскольку размер данных UDP-Lite, доставляемых принимающему приложению, определяется размером данных IP.

3.5. Джамбограммы

Поле Checksum Coverage имеет размер 16 битов и может представлять значения Checksum Coverage вплоть до 65535 октетов. Это позволяет использовать любое покрытие для контрольной суммы пакетов IP, если они не относятся к числу Jumbogram. Для Jumbogram контрольная сумма будет покрывать все данные (Checksum Coverage = 0) или не более 65535 начальных октетов пакета UDP-Lite.

4. Нижележащий уровень

Поскольку UDP-Lite может доставлять пакеты с поврежденными данными приложениям, которые пожелали такие пакеты получать, кадры, содержащие пакеты UDP-Lite, не требуется отбрасывать на нижележащих уровнях при обнаружении ошибок в нечувствительной части. Для каналов, поддерживающих частичное детектирование ошибок, поле Checksum Coverage в заголовке UDP-Lite может использоваться в качестве рекомендации где не следует проверять наличие ошибок. Нижележащие уровни должны использовать строгий механизм детектирования ошибок [RFC 3819] для обнаружения по крайней мере ошибок в чувствительной части и отбрасывания поврежденных пакетов. Чувствительная часть включает октеты, начиная с первого октета заголовка IP и заканчивая последним октетом, указанным полем Checksum Coverage. Чувствительная часть будет, таким образом, трактоваться в точности так же, как для пакета UDP.

Канальные уровни, не поддерживающие частичного детектирования ошибок, подходящего для UDP-Lite, как описано выше, должны детектировать ошибки во всем пакете UDP-Lite и отбрасывать поврежденные пакеты [RFC 3819]. Весь пакет UDP-Lite в этом случае трактуется в точности как пакет UDP.

Следует отметить, что протокол UDP-Lite будет отличаться для приложений только в том случае, когда частичное детектирование ошибок, основанное на неполных контрольных суммах UDP-Lite, реализовано также на канальном уровне, как сказано выше. Использование частичного детектирования ошибок на канальном уровне будет давать эффект только при работе через склонные к ошибкам каналы.

5. Совместимость с UDP

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

Протоколу UDP-Lite был выделен отдельный идентификатор протокола IP – 136 (UDPLite), что позволяет получателю отличить протокол UDP от протокола UDP-Lite. Конечный хост-адресат, не поддерживающий UDP-Lite, будет в общем случае возвращать сообщение ICMP Protocol Unreachable или ICMPv6 Payload Type Unknown (в зависимости от типа протокола IP). Этот простой метод детектирования не поддерживающих UDP-Lite систем является главным преимуществом использования отдельного идентификатора протокола.

В оставшейся части этой главы дается обоснование выделению отдельного идентификатора протокола IP для UDP-Lite, вместо использования имеющегося идентификатора для UDP.

Не существует известных проблем взаимодействия между UDP и UDP-Lite при использовании обоими протоколами одного идентификатора IP. В частности, не возникает ситуаций, когда пакет, способный вызвать проблемы, будет доставлен не подозревающему об этом приложению — данные UDP-Lite с частичным покрытием для контрольной суммы не могут быть доставлены приложениям UDP, а пакеты UDP, не полностью заполняющие поле данных IP, не могут быть доставлены приложениям, использующим UDP-Lite.

Однако при использовании протоколами UDP и UDP-Lite одного идентификатора, если реализация UDP-Lite будет передавать пакеты UDP-Lite с неполным покрытием для контрольной суммы реализации UDP, последняя будет отбрасывать пакеты без уведомления, поскольку несоответствие псевдозаголовков приведет к отказу при проверке контрольной суммы UDP. Ни одно из приложений не получит уведомления о сложившейся ситуации. Решениями этой проблемы могут служить:

  1. явная сигнализация на прикладном уровне через основное соединение (пока не используется опция частичного покрытия для контрольной суммы), позволяющая отправителю узнать, поддерживает ли получатель протокол UDP-Lite;
  2. использование отдельной сигнализации (например, H.323, SIP или RTCP) для передачи информации о поддержке получателем протокола UDP-Lite.

Поскольку протоколу UDP-Lite присвоен свой идентификатор протокола IP, не возникает необходимости рассмотрения возможности доставки пакета UDP-Lite в ничего не подозревающий порт UDP.

6. Вопросы безопасности

Вопросы безопасности UDP-Lite связаны с взаимодействием данного протокола с механизмами аутентификации и шифрования. При использовании опции неполного покрытия для контрольных сумм UDP-Lite нечувствительная к ошибкам часть пакета может быть изменена в процессе доставки. Это вступает в противоречие с идеей, лежащей в основе большинства механизмов аутентификации — аутентификация считается успешной, если пакет не изменен в процессе передачи. Пока не будет разработан и развернут механизм аутентификации, способный работать только с чувствительной частью пакета, аутентификация всегда будет приводить к отказу для пакетов UDP-Lite с повреждениями в нечувствительной к ошибкам части.

Проверка целостности IPsec (Encapsulation Security Protocol, ESP [RFC 2406] или Authentication Header, AH [RFC 2402]) применяется (как минимум) ко всей области данных пакета IP. Повреждение любого бита в защищенной области будет приводить к тому, что уровень IP на приемной стороне будет отбрасывать все поврежденные пакеты UDP-Lite.

При использовании IPsec с ESP для шифрования данных канал не может идентифицировать транспортный протокол пересылаемых пакетов путем просмотра области данных IP. В таких случаях канал должен обеспечивать стандартную проверку целостности для всего пакета IP. В этом случае протокол UDP-Lite не дает никаких преимуществ.

Для передачи данных может использоваться шифрование (например, на прикладном или транспортном уровне). В этом случае при повреждении небольшого числа битов пакета механизм дешифровки обычно приводит к распространению ошибки и пакет становится непригодным для использования. Подобное поведение характерно для многих современных механизмов шифрования. Существуют потоковые шифры, которые не приводят к распространению ошибок при дешифровке. Отметим, что отказ от проверки целостности может при некоторых обстоятельствах создавать риск потери конфиденциальности [Bellovin98]. Точность потоковых шифров обусловлена использованием собственных challenge [BB01]. В частности, атакующий может внести предсказуемые изменения в зашифрованный текст даже без его расшифровки.

7. Согласование с IANA

Новый номер протокола IP (1360 был выделен для протокола UDP-Lite. С этим идентификатором связано также имя UDPLite. Такое имя обеспечивает совместимость с широким спектром платформ, поскольку на некоторых платформах символ «-» не может быть частью имени протокольного объекта.

8. Литература

8.1. Нормативные документы

[RFC-768] Postel, J., «User Datagram Protocol», STD 6, RFC 768, August 1980.

[RFC-791] Postel, J., «Internet Protocol», STD 5, RFC 791, September 1981.

[RFC-793] Postel, J., «Transmission Control Protocol», STD 7, RFC 793, September 1981.

[RFC-1071] Braden, R., Borman, D. and C. Partridge, «Computing the Internet Checksum», RFC 1071, September 1988.

[RFC-2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC-2460] Deering, S. and R. Hinden, «Internet Protocol, Version 6 (IPv6) Specification», RFC 2460, December 1998.

8.2. Дополнительная литература

[Bellovin98] Bellovin, S.M., «Cryptography and the Internet», in Proceedings of CRYPTO ’98, August 1988.

[BB01] Bellovin, S. and M. Blaze, «Cryptographic Modes of Operation for the Internet», Second NIST Workshop on Modes of Operation, August 2001.

[3GPP] «Technical Specification Group Services and System Aspects; Quality of Service (QoS) concept and architecture», TS 23.107 V5.9.0, Technical Specification 3rd Generation Partnership Project, June 2003.

[H.264] Hannuksela, M.M., Stockhammer, T., Westerlund, M. and D. Singer, «RTP payload Format for H.264 Video», Internet Draft, Work in Progress6, March 2003.

[ILBRC] S.V. Andersen, et. al., «Internet Low Bit Rate Codec», Work in Progress7, March 2003.

[ISO-14496] ISO/IEC International Standard 1446 (MPEG-4), «Information Technology Coding of Audio-Visual Objects», January 2000.

[ITU-H.263] «Video Coding for Low Bit Rate Communication,» ITU-T Recommendation H.263, January 1998.

[ITU-H.264] «Draft ITU-T Recommendation and Final Draft International Standard of Joint Video Specification», ITU-T Recommendation H.264, May 2003.

[RFC-3819] Karn, Ed., P., Bormann, C., Fairhurst, G., Grossman, D., Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J. And L. Wood, «Advice for Internet Subnetwork Designers», BCP 89, RFC 3819, July 2004.

[RFC-3550] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, «RTP: A Transport Protocol for Real-Time Applications», RFC 3550, July 2003.

[RFC-2402] Kent, S. and R. Atkinson, «IP Authentication Header», RFC 24028, November 1998.

[RFC-2406] Kent, S. and R. Atkinson, «IP Encapsulating Security Payload (ESP)», RFC 24069, November 1998.

[RFC-3267] Sjoberg, J., Westerlund, M., Lakeaniemi, A. and Q. Xie, «Real-Time Transport Protocol (RTP) Payload Format and File Storage Format for the Adaptive Multi-Rate (AMR) and Adaptive Multi-Rate Wideband (AMR-WB) Audio Codecs», RFC 3267, June 2002.

[LDP99] Larzon, L-A., Degermark, M. and S. Pink, «UDP Lite for Real-Time Multimedia Applications», Proceedings of the IEEE International Conference of Communications (ICC), 1999.

9. Благодарности

Спасибо Ghyslain Pelletier за важные технические и редакторские комментарии. Благодарим также Steven Bellovin, Elisabetta Carrara и Mats Naslund за обзор главы, посвященной безопасности, и Peter Eriksson за просмотр документа с точки зрения языка, значительно улучшивший понимание документа.

10. Адреса авторов

Lars-Ake Larzon

Department of CS & EE

Lulea University of Technology

S-971 87 Lulea, Sweden

EMail: lln@csee.ltu.se

Mikael Degermark

Department of Computer Science

The University of Arizona

P.O. Box 210077

Tucson, AZ 85721-0077, USA

EMail: micke@cs.arizona.edu

Stephen Pink

The University of Arizona

P.O. Box 210077

Tucson, AZ 85721-0077, USA

EMail: steve@cs.arizona.edu

Lars-Erik Jonsson

Ericsson AB

Box 920

S-971 28 Lulea, Sweden

EMail: lars-erik.jonsson@ericsson.com

Godred Fairhurst

Department of Engineering

University of Aberdeen

Aberdeen, AB24 3UE, UK

EMail: gorry@erg.abdn.ac.uk


Перевод на русский язык

Николай Малых

nmalykh@protokols.ru

11. Полное заявление авторских прав

Copyright (C) The Internet Society (2004).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

Подтверждение

Финансирование функций RFC Editor обеспечивается Internet Society.


1Lightweight User Datagram Protocol — облегченный протокол пользовательских дейтаграмм.

2User Datagram Protocol — протокол пользовательских дейтаграмм.

3Forward Error Correction.

4Размер заголовка UDP-Lite. Прим. перев.

5Перевод этого документа доступен на сайте www.protokols.ru. Прим. перев.

6Работа завершена и опубликована в RFC 3984. Прим. перев.

7Работа завершена и опубликована в RFC 3951. Прим. перев.

8Этот документ устарел и заменен RFC 4302 и RFC 4305. Прим. перев.

9Этот документ устарел и заменен RFC 4303. Прим. перев.

Рубрика: RFC | Оставить комментарий

RFC 3852 Cryptographic Message Syntax (CMS)

Network Working Group                                         R. Housley
Request for Comments: 3852                                Vigil Security
Obsoletes: 3369                                                July 2004
Category: Standards Track

 

Синтаксис CMS

Cryptographic Message Syntax (CMS)

PDF

Статус документа

Данный документ содержит спецификацию стандартного протокола Internet, предложенного сообществу Internet, и является приглашением к дискуссии в целях развития этого протокола. Сведения о текущем состоянии стандартизации протокола вы найдете в документе Internet Official Protocol Standards (STD 1). Документ можно распространять без ограничений.

Авторские права

Copyright (C) The Internet Society (2004).

Аннотация

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

1. Введение

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

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

CMS может поддерживать множество вариантов архитектуры основанного на сертификатах распространения ключей (таких, как архитектура, разработанная группой PKIX [PROFILE]).

Значения CMS генерируются с применением нотации ASN.1 [X.208-88], использующей представление BER [X.209-88]. Значения обычно представляются в форме строк октетов. Хотя многие системы способны обеспечивать надежную передачу произвольных строк октетов, известно, что многие системы не обеспечивают этого. В этом документе не рассматриваются механизмы кодирования строк октетов для гарантированной передачи в подобных средах.

1.1. Развитие CMS

CMS происходит от PKCS #7 версии 1.5, документированной в RFC 2315 [PKCS#7]. PKCS #7 версии 1.5 была разработана без участия IETF и опубликована изначально как RSA Laboratories Technical Note в ноябре 1993 г. С этого момента ответственность за разработку и поддержку CMS перешла к IETF. В настоящее время несколько важных протоколов, стандартизируемых IETF, используют CMS.

В этом разделе описаны изменения, внесенные IETF в каждую из опубликованных версий CMS.

1.1.1. Отличия от PKCS #7 версии 1.5

RFC 2630 [CMS1] содержал первую версию CMS, включенную в процесс стандартизации IETF. Везде, где это было возможно, обеспечивалась совместимость с PKCS #7 версии 1.5, однако были внесены изменения для согласования с переносом сертификата атрибутов версии 1 и поддержки независимого от алгоритма управления ключами. PKCS #7 версии 1.5 включена только для поддержки транспортировки ключей. В RFC 2630 добавлена поддержка согласования ключей и методы шифрования с использованием заранее распространенных симметричных ключей.

1.1.2. Отличия от RFC 2630

RFC 3369 [CMS2] отменяет действие RFC 2630 [CMS1] и RFC 3211 [PWRI]. Управление ключами на основе паролей включено в спецификацию CMS и задан механизм расширения для поддержки новых схем управления ключами без внесения изменений в CMS. Совместимость со старыми версиями RFC 2630 и RFC 3211 сохранена, однако добавлен перенос сертификатов атрибутов версии 2, а применение сертификатов версии 1 запрещено.

Подписи S/MIME v2 [OLDMSG], основанные на PKCS#7 версии 1.5, совместимы с подписями S/MIME v3 [MSG], основанными на RFC 2630. Однако возникают незначительные проблемы совместимости с подписями на основе PKCS #7 версии 1.5. Эти вопросы рассматриваются в параграфе 5.2.1. Проблемы сохранились и в текущей версии CMS.

Конкретные криптографические алгоритмы не рассматриваются в этом документе, но они рассмотрены в RFC 2630. Обсуждение конкретных криптографических алгоритмов вынесено в отдельный документ [CMSALG]. Такое разделение позволяет IETF независимо обновлять каждый документ. Эта спецификация не требует реализации каких-либо конкретных алгоритмов. Вместо этого в CMS предполагается, что протоколы будут выбирать подходящие алгоритмы для работы в среде протокола. Эти алгоритмы могут выбираться из [CMSALG] или иных документов.

1.1.3. Отличия от RFC 3369

Этот документ отменяет действие RFC 3369 [CMS2]. Как отмечено в предыдущем параграфе, в RFC 3369 добавлен механизм расширения для поддержки схем управления ключами без внесения дополнительных изменений в CMS. Данный документ добавляет похожий механизм расширения для поддержки дополнительных форматов сертификатов и информации о статусе отзыва без внесения изменений в CMS. Эти расширения документированы в параграфах 10.2.1 и 10.2.2. Сохранена совместимость с предыдущими версиями CMS.

Использование номеров версий описано в параграфе 1.3.

С момента публикации RFC 3369 в документе был обнаружен ряд ошибок, указанных на сайте RFC Editor. В данном документе эти ошибки исправлены.

Прояснен текст параграфа 11.4, описывающего не подписанный атрибут countersignature. Будем надеяться, что новый текст более четко описывает часть подписи SignerInfo, которая покрывается countersignature.

1.2. Терминология

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не следует (SHALL NOT), следует (SHOULD), не нужно (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе интерпретируются в соответствии с [STDWORDS].

1.3. Номера версий

Каждая из основных структур данных включает номер версии в качестве первого элемента структуры. Номера версий предназначены для предотвращения ошибок при декодировании ASN.1. Некоторые реализации не проверяют номер версии перед началом декодирования и только в случае возникновения ошибки просматривают этот номер в процессе обработки ошибочной ситуации. Это разумный подход, поскольку обработка ошибок осуществляется за пределами «быстрого пути». Такой подход также обеспечивает снисходительность к применению отправителями неверного номера версии.

Большинство исходных номеров версий было выделено в рамках PKCS #7 версии 1.5. Другие значения выделялись при определении соответствующих структур данных. При обновлении структур выделялось большее значение номера версии. Однако для обеспечения взаимодействия старший номер версии меняется лишь в случаях изменения синтаксиса. Т. е., выбирается наименьший номер версии, которая поддерживает используемый синтаксис.

2. Общий обзор

Синтаксис CMS является достаточно общим для поддержки разных типов содержимого сообщений. В этом документе для защиты содержимого определяется ContentInfo. Метод ContentInfo инкапсулирует один указанный тип содержимого, а этот тип может поддерживать дополнительную инкапсуляцию. В документе определены 6 типов содержимого — данные (data), подписанные данные (signed-data), вложенные данные (enveloped-data), данные с цифровой подписью (digested-data), шифрованные данные (encrypted-data) и аутентифицированные данные (authenticated-data). Дополнительные типы содержимого могут быть определены в других документах.

Реализация, соответствующая требованиям этого документа, должна реализовать ContentInfo, а также должна поддерживать типы data, signed-data и enveloped-data. Могут поддерживаться также другие типы содержимого.

В качестве общего подхода для каждого типа содержимого возможна однопроходная обработка и использованием представления BER1 с неопределенным размером. Однопроходные операции особенно хороши для содержимого большого размера, сохраняемого на лентах или получаемого от других процессов через «конвейер» (pipe). Однако такие операции имеют один существенный недостаток — для них сложно выполнить представление с использованием правил DER2 [X.509-88] в один проход, поскольку размеры различных компонент заранее могут быть не известны. Однако подписанные атрибуты в типе signed-data (подписанные данные) и аутентифицированные атрибуты в типе authenticated-data требуется передавать в формате DER, чтобы получатели могли проверить наличие в содержимом нераспознанных атрибутов. Из числа используемых в CMS атрибутов представление DER требуется только для подписанных и аутентифицированных атрибутов.

3. Базовый синтаксис

Приведенный ниже идентификатор указывает тип информации в содержимом.

      id-ct-contentInfo OBJECT IDENTIFIER ::= { iso(1) member-body(2)
         us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) ct(1) 6 }

CMS связывает идентификатор типа содержимого с самим содержимым. Синтаксис должен использовать тип ContentInfo в представлении ASN.1.

      ContentInfo ::= SEQUENCE {
        contentType ContentType,
        content [0] EXPLICIT ANY DEFINED BY contentType }

      ContentType ::= OBJECT IDENTIFIER

Смысл полей ContentInfo разъяснен ниже.

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

content представляет собой связанное с объектом содержимое. Тип содержимого может быть уникально определен из contentType. Типы содержимого для data, signed-data, enveloped-data, digested-data, encrypted-data и authenticated-data определены в настоящем документе. При определении в других документах дополнительных типов содержимого определяемому типу ASN.1 не следует быть типом CHOICE.

4. Тип содержимого data

Ниже приведен идентификатор типа содержимого data (данные).

      id-data OBJECT IDENTIFIER ::= { iso(1) member-body(2)
         us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 }

Этот тип обозначает произвольную строку октетов (например, текст ASCII), интерпретация которой определяется приложением. Такие строки не обязаны иметь внутреннюю структуру (хотя и могут использовать свое определение ASN.1 или иную структуру).

S/MIME использует id-data для идентификации представленного в формате MIME содержимого. Использование этого идентификатора типа определено в RFC 2311 для S/MIME v2 [OLDMSG] и RFC 3851 для S/MIME v3.1 [MSG].

Содержимое типа data обычно инкапсулируется в тип signed-data, enveloped-data, digested-data, encrypted-data или authenticated-data.

5. Тип содержимого Signed-data

Тип signed-data содержит данные любого типа и может включать значения цифровых подписей. Содержимое документа может подписать произвольное число лиц.

Типовым применением типа signed-data являются данные с цифровой подписью содержимого типа data. Другим вариантом применения этого типа является распространение сертификатов и списков отзыва сертификатов (CRL3).

Процесс создания типа signed-data включает несколько этапов, перечисленных ниже.

  1. Для каждого подписывающего лица рассчитывается значение цифровой подписи или хэш-сумма для содержимого с использованием специфического для данного подписывающего алгоритма. Если подписывается какая-либо информация кроме содержимого, создается цифровая подпись для содержимого и этой информации с использованием алгоритма подписывающего лица (см. параграф 5.4) и результат называется «отпечатком сообщения» (message digest).

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

  3. Для каждого подписывающего лица значение подписи и другая специфическая для данного лица информация собираются в значение SignerInfo, как описано в параграфе 5.3. Сертификаты и списки CRL для каждого подписывающего, а также не соответствующие никому из подписавших собираются на этом этапе.

  4. Алгоритмы расчета отпечатков для всех подписавших, а также значения SignerInfo для них собираются в значение SignedData, как описано в параграфе 5.1.

Получатель независимо рассчитывает отпечаток сообщения. Полученное значение вместе с открытым ключом подписавшего служат для проверки значения подписи. Открытый ключ подписавшего может быть представлен одним из двух способов. В первом способе ключ представляется названием выпустившей ключ организации вместе с его порядковым номером или идентификатором субъекта ключа, уникально указывающим сертификат, содержащий открытый ключ. В другом варианте ключ может быть представлен идентификатором субъекта, который принимает как сертифицированные, так и не сертифицированные открытые ключи4. Хотя это и не требуется, сертификат подписавшего лица может быть включен в поле сертификатов SignedData.

Этот раздел поделен на 6 частей, описывающих типы верхнего уровня SignedData, EncapsulatedContentInfo, SignerInfo для подписавшего, а также расчет отпечатка сообщения, генерацию подписи и ее проверку.

5.1. Тип SignedData

Приведенный ниже идентификатор указывает содержимое типа signed-data.

      id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
         us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }

Тип signed-data должен иметь форму ASN.1 SignedData

      SignedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }

      DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier

      SignerInfos ::= SET OF SignerInfo

Значение полей типа SignedData описаны ниже.

version указывает номер версии синтаксиса. Набор допустимых значений определяется полями certificates, eContentType и SignerInfo. Значение version должно присваиваться по следующему алгоритму:

         IF ((имеется поле certificates) AND
            (присутствуют какие-либо сертификаты типа other)) OR
            ((присутствует crls) AND
            (присутствуют любые crls типа other))
         THEN version ДОЛЖНО иметь значение 5
         ELSE
            IF (имеется поле certificates) AND
               (присутствуют любые сертификаты атрибутов версии 2)
            THEN version ДОЛЖНО иметь значение 4
            ELSE
               IF ((имеется поле certificates) AND
                  ( присутствуют любые атрибуты сертификатов версии 1)) OR
                  (все структуры SignerInfo имеют версию 3) OR
                  (encapContentInfo eContentType отличается от id-data)
               THEN version ДОЛЖНО иметь значение 3
               ELSE version ДОЛЖНО иметь значение 1

digestAlgorithms — набор идентификаторов алгоритмов расчета отпечатка сообщения, который может содержать любое (включая 0) число элементов. Каждый элемент определяет алгоритм создания отпечатка (вместе со связанными с ним параметрами), используемого кем-либо из подписавших. Набор содержит список алгоритмов, используемых всеми подписавшими, в произвольном порядке для реализации однопроходной проверки подписей. Разработчики могут отказаться от проверки подписей, использующих алгоритмы, не включенные в список. Процесс создания отпечатков сообщений описан в параграфе 5.4.

encapContentInfo — подписанное содержимое, состоящее из идентификатора типа и собственно содержимого. Подробное описание типа EncapsulatedContentInfo приведено в параграфе 5.2.

certificates — набор сертификатов, включающий множество сертификатов, достаточное для поддержки путей сертификации от признанного «корня» (root) или агентства верхнего уровня (top-level certification authority) ко всем подписавшим из поля signerInfos. Набор может содержать избыточные сертификаты, а также может содержать сертификаты для поддержки путей к двум и более независимым агентствам верхнего уровня. Число сертификатов может быть меньше необходимого, если предполагается наличие у получателей других способов получения необходимых сертификатов (например, из предыдущего набора сертификатов). Могут включаться сертификаты подписавших. Использование сертификатов атрибутов версии 1 строго запрещено.

crls — набор информации о статусе отзывов. Предполагается, что этих данных предназначено для проверки пригодности сертификатов, указанных в поле certificates, но такое соответствие не является обязательным. Списки CRL являются первичным источником информации о статусе отзыва сертификатов. Поле может содержать избыточное число CRL, но может включать и недостаточное для проверки число списков.

SignerInfos представляет собой набор информации по каждому подписавшему. Эти данные могут содержать произвольное число элементов, включая 0. Подробное описание типа SignerInfo приведено в параграфе 5.3. Поскольку каждый подписавший может применять свой метод цифровой подписи, а будущие спецификации могут менять синтаксис, все реализации должно корректно обрабатывать нереализованные версии SignerInfo. Более того, поскольку каждая реализация явно не может поддерживать все возможные алгоритмы цифровой подписи, все реализации должны корректно обрабатывать не поддерживаемые алгоритмы цифровой подписи, которые встречаются.

5.2. Тип EncapsulatedContentInfo

Тип EncapsulatedContentInfo имеет структуру

      EncapsulatedContentInfo ::= SEQUENCE { 
        eContentType ContentType,
        eContent [0] EXPLICIT OCTET STRING OPTIONAL }

      ContentType ::= OBJECT IDENTIFIER

Поля EncapsulatedContentInfo описаны ниже.

eContentType — идентификатор объекта, уникально задающий тип содержимого.

eContent — собственно содержимое, передаваемое в виде строки октетов. Для eContent не требуется представление DER.

Поле eContent может отсутствовать в EncapsulatedContentInfo, что обеспечивает возможность создания «внешних подписей». В случае внешней подписи подписываемое содержимое отсутствует в EncapsulatedContentInfo, включаемом в тип signed-data. Если значение eContent отсутствует в EncapsulatedContentInfo, signatureValue рассчитывается и значение eContentType назначается как при наличии значения eContent.

В вырожденном случае отсутствия подписавших лиц значение EncapsulatedContentInfo не будет относиться к делу. В такой ситуации «подписываемый» тип содержимого в EncapsulatedContentInfo должен быть id-data (см. раздел 4), а поле содержимого в EncapsulatedContentInfo должно быть опущено.

5.2.1. Совместимость с PKCS #7

В этом параграфе приводится предупреждение для разработчиков, желающих поддерживать SignedData для типов данных CMS и PKCS #7 [PKCS#7] одновременно. Оба типа CMS и PKCS #7 указывают инкапсулированное содержимое с идентификатором объекта, но тип ASN.1 самого содержимого является переменным для PKCS #7 SignedData.

PKCS #7 определяет content как

      content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL

CMS определяет eContent как

      eContent [0] EXPLICIT OCTET STRING OPTIONAL

Определение CMS значительно проще в использовании для большинства приложений и совместимо с обоими форматами S/MIME v2 и S/MIME v3. Подписанные сообщения S/MIME, использующие CMS и PKCS #7, совместимы, поскольку форматы подписанных сообщений заданы идентично в RFC 2311 для S/MIME v2 [OLDMSG] и RFC 3851 для S/MIME v3.1 [MSG]. S/MIME v2 инкапсулирует содержимое MIME в тип Data (строка октетов — OCTET STRING), передаваемые в SignedData contentInfo любого поля, а S/MIME v3 передает содержимое MIME в строке октетов SignedData encapContentInfo eContent. Следовательно, в S/MIME v2 и S/MIME v3 содержимое MIME помещается в OCTET STRING и отпечаток сообщения рассчитывается для идентичных частей содержимого. Т. е., отпечаток сообщения рассчитывается по октетам OCTET STRING без учета октетов тегов и размера.

Между типами CMS и PKCS #7 для SignedData имеется несовместимость, когда инкапсулированное содержимое не форматировано с использованием типа Data. Например, когда подписанная с использованием RFC 2634 [ESS] информация инкапсулируется в тип CMS SignedData, последовательность Receipt SEQUENCE представляется строкой октетов SignedData encapContentInfo eContent, а отпечаток сообщения рассчитывается с использованием всей последовательности Receipt (включая октеты тега, размера и значения). Однако, если подписанное в соответствии с RFC 2634 содержимое инкапсулируется в тип PKCS #7 SignedData, последовательность Receipt представляется в формате DER [X.509-88] SignedData contentInfo любого поля (SEQUENCE не является OCTET STRING). Следовательно, отпечаток сообщения рассчитывается только для октетов последовательности Receipt.

Показанный ниже метод может использоваться для обеспечения совместимости с PKCS #7 при обработке содержимого типа SignedData. Если реализаций не способна выполнить декодирование ASN.1 для типа SignedData, использующего синтаксис строки октетов CMS SignedData encapContentInfo eContent, она может попытаться декодировать тип SignedData используя синтаксис PKCS #7 SignedData contentInfo и рассчитывая соответствующим образом подпись сообщения.

Приведенный ниже метод может использоваться для обеспечения совместимости с PKCS #7 при создании содержимого типа SignedData, в котором инкапсулируемые данные не форматированы с применением типа Data. Реализация может проверить значение eContentType и подправить ожидаемое DER-представление eContent на основе значения идентификатора объекта. Например, для поддержки Microsoft Authenticode [MSAC] можно выполнить следующее:

eContentType Object Identifier устанавливается в { 1 3 6 1 4 1 311 2 1 4 }
eContent содержит информацию Authenticode в представлении DER.

5.3. Тип SignerInfo

Информация для каждого подписавшего представляется типом SignerInfo.

      SignerInfo ::= SEQUENCE {
        version CMSVersion,
        sid SignerIdentifier,
        digestAlgorithm DigestAlgorithmIdentifier,
        signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
        signatureAlgorithm SignatureAlgorithmIdentifier,
        signature SignatureValue,
        unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }

      SignerIdentifier ::= CHOICE {
        issuerAndSerialNumber IssuerAndSerialNumber,
        subjectKeyIdentifier [0] SubjectKeyIdentifier }

      SignedAttributes ::= SET SIZE (1..MAX) OF Attribute

      UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute

      Attribute ::= SEQUENCE {
        attrType OBJECT IDENTIFIER,
        attrValues SET OF AttributeValue }

      AttributeValue ::= ANY

      SignatureValue ::= OCTET STRING

Поля SignerInfo описаны ниже.

version — номер версии синтаксиса. Если в SignerIdentifier используется выбор (CHOICE) issuerAndSerialNumber, для номера версии должно устанавливаться значение 1. Если SignerIdentifier представляет собой subjectKeyIdentifier, должен устанавливаться номер версии 3.

sid указывает сертификат (и, следовательно, открытый ключ) подписавшего. Открытый ключ подписавшего требуется получателю для проверки подписи. SignerIdentifier обеспечивает два варианта указания открытого ключа подписавшего. Вариант issuerAndSerialNumber идентифицирует ключ по имени эмитента и порядковому номеру сертификата, вариант subjectKeyIdentifier — по идентификатору ключа. При указании сертификата X.509 идентификатор ключа соответствует значению расширения X.509 subjectKeyIdentifier. При указании других форматов документ, задающий формат и использование сертификата с CMS, должен включать детали идентификатора соответствующего ключа в подходящем поле сертификата. Реализации должны поддерживать восприятие форм issuerAndSerialNumber и subjectKeyIdentifier для SignerIdentifier. При генерации SignerIdentifier реализация может поддерживать лишь одну из этих форм (issuerAndSerialNumber или subjectKeyIdentifier) и всегда применять ее, а может также произвольно смешивать применение этих двух форм. Однако должен применяться идентификатор subjectKeyIdentifier для указания открытого ключа, содержащегося в сертификате, отличном от X.509.

digestAlgorithm идентифицирует алгоритм цифровой подписи сообщения и все связанные с ними параметры, использованные подписавшим. Отпечаток (подпись) сообщения рассчитывается для подписываемого содержимого или для содержимого вместе с атрибутами подписи, как описано в параграфе 5.4. Алгоритм подписи сообщения следует указывать в поле digestAlgorithms связанных с ним данных SignerData. Реализации могут отказываться от проверки подписей, использующих не включенный в SignedData digestAlgorithms алгоритм.

SignedAttrs представляет набор подписанных атрибутов. Поле является необязательным, но оно должно присутствовать, если подписываемое значение EncapsulatedContentInfo не является id-data. SignedAttributes должно представляться в формате DER даже при использовании для остальной структуры представления BER. Полезные типы атрибутов (такие, как время подписания) определены в разделе 11. Если данное поле присутствует, оно должно содержать по крайней мере два приведенных ниже атрибута:

content-type в качестве своего значения использует тип содержимого EncapsulatedContentInfo подписываемого значения. Атрибут content-type описан в параграфе 11.1. Однако атрибут content-type недопустимо применять как часть не подписанного атрибута countersignature, определенного в параграфе 11.4.

message-digest в качестве своего значения использует отпечаток сообщения для содержимого. Атрибут message-digest определен в параграфе 11.2.

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

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

unsignedAttrs — набор атрибутов, которые не были подписаны. Это поле является необязательным. Полезные типы атрибутов (например, countersignatures) описаны в разделе 11.

Значения полей типов SignedAttribute и UnsignedAttribute описаны ниже.

attrType указывает тип атрибута и является идентификатором объекта.

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

5.4. Процесс расчета отпечатка сообщения

В процессе расчета отпечатка сообщения учитывается лишь само подписываемое сообщение или сообщение вместе с подписанными атрибутами. В любом случае исходной информацией для процесса расчета отпечатка является «значение» инкапсулируемого содержимого, которое будет подписано. В частности, исходной информацией служит строка октетов (OCTET STRING) encapContentInfo eContent, к которой применяется процесс подписания. Для алгоритма цифровой подписи сообщения входной информацией служат только строка октетов eContent без тегов и поля размера.

Результат процесса расчета отпечатка сообщения зависит от наличия поля signedAttrs. В отсутствие этого поля результатом будет просто отпечаток сообщения, как описано выше. Если же поле имеется, результатом будет отпечаток полного DER-представления значения SignedAttrs, содержащегося в поле signedAttrs. Поскольку значение SignedAttrs (при его наличии) должно содержать атрибуты content-type и message-digest, их значения также опосредованно включаются в результат. Атрибут content-type недопустимо включать в неподписанный атрибут countersignature, как описано в параграфе 11.4. При расчете отпечатка выполняется раздельное представление поля signedAttrs. Тег IMPLICIT [0] в signedAttrs не используется для представления DER и взамен применяется тег EXPLICIT SET OF. Т. е. в расчет должно включаться DER-представление тега EXPLICIT SET OF (а не IMPLICIT [0]) вместе с октетами размера и содержимого SignedAttributes.

При отсутствии поля signedAttrs для расчета отпечатка сообщения используется только строка октетов SignedData encapContentInfo eContent (например, содержимое файла). Преимущество этого заключается в том, что не требуется заранее знать размер подписываемого содержимого при генерации подписи.

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

5.5. Процесс создания подписи

Входные данные для процесса генерации подписи включают результат процесса создания отпечатка сообщения (message digest) и секретный ключ подписывающего. Детали процесса генерации подписи зависят от применяемого алгоритма. Идентификатор объекта вместе со всеми параметрами, задающими алгоритм, используемый подписывающим, передаются в поле signatureAlgorithm. Значение подписи, созданное подписывающим, должно представляться в форме строки октетов (OCTET STRING) и передаваться в поле signature.

5.6. Процесс проверки подписи

Входные данные для процесса проверки подписи включают результат процесса расчета отпечатка сообщения и открытый ключ подписавшего. Получатель может получить корректный открытый ключ подписавшего разными способами, но предпочтительно использовать метод из сертификата в поле SignedData certificates. Выбор и проверка пригодности ключа подписавшего могут базироваться на проверке пути сертификации (см. [PROFILE]), а также на иных способах, но этот вопрос выходит за рамки данного документа. Детали проверки подписи зависят от использованного алгоритма.

Получателю недопустимо полагаться на какие-либо значения отпечатка сообщения, рассчитанные его создателем. Если поле SignedData signerInfo включает signedAttributes, отпечаток содержимого сообщения должен быть рассчитан в соответствии с параграфом 5.4. Для того, чтобы подпись считалась действительной, рассчитанный отпечаток должен совпасть со значением атрибута messageDigest, включенным в поле signedAttributes структуры SignedData signerInfo.

Если SignedData signerInfo включает signedAttributes, значение атрибута content-type должно совпадать со значением SignedData encapContentInfo eContentType.

6. Тип содержимого Enveloped-data

Содержимое типа enveloped-data состоит из зашифрованных данных любого типа и зашифрованных ключей шифрования содержимого (encrypted content-encryption key) для одного или множества получателей. Комбинация шифрованного содержимого и шифрованного ключа шифрования содержимого для получателя представляет собой «цифровой конверт» (digital envelope) для данного получателя. Содержимое любого типа может быть упаковано в конверты для произвольного числа получателей с использованием любого из поддерживаемых методов управления ключами для каждого из получателей.

Типовым применением содержимого типа enveloped-data служит представление «цифровых конвертов» для одного или множества получателей с содержимым типа data или signed-data.

Этапы создания цифрового конверта Enveloped-data перечислены ниже.

  1. Ключи шифрования содержимого для конкретного алгоритма генерируются случайным образом.

  2. Ключи шифрования содержимого шифруются для каждого получателя. Детали этого шифрования зависят от применяемого механизма управления ключами и поддерживаются четыре основных метода:

    key transport (доставка ключей) — ключ шифрования содержимого шифруется с помощью открытого ключа получателя;

    key agreement (согласование ключей) — используются открытый ключ получателя и секретный ключ отправителя для генерации симметричного ключа, который применяется для шифрования ключей шифрования содержимого;

    symmetric key-encryption keys (шифрование с симметричным ключом) — ключ шифрования содержимого шифруется с использованием заранее полученного симметричного ключа, известного и получателю;

    passwords (пароль) — ключ шифрования содержимого шифруется с помощью ключа, генерируемого из пароля и некого заранее известного сторонам секретного значения.

  3. Для каждого получателя зашифрованный ключ шифрования содержимого и другая информация для конкретного получателя собираются в значение RecipientInfo, как описано в параграфе 6.2.

  4. Содержимое шифруется с использованием ключа content-encryption. При этом в зависимости от применяемого ключа и алгоритма может потребоваться дополнение шифруемого содержимого для выравнивания по размеру блока шифрования (см. параграф 6.3).

  5. Значения RecipientInfo для всех получателей собираются вместе с зашифрованным содержимым в структуру EnvelopedData, описанную в параграфе 6.1.

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

Далее рассматривается структура верхнего уровня EnvelopedData, а затем тип RecipientInfo с информацией для конкретного получателя, а также процессы расшифровки ключей шифрования содержимого и самого содержимого.

6.1. Тип EnvelopedData

Тип содержимого enveloped-data указывает идентификатор

      id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 }

Тип enveloped-data должен иметь форму ASN.1 EnvelopedData

    EnvelopedData ::= SEQUENCE {
     version CMSVersion,
     originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
     recipientInfos RecipientInfos,
     encryptedContentInfo EncryptedContentInfo,
     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }

    OriginatorInfo ::= SEQUENCE {
     certs [0] IMPLICIT CertificateSet OPTIONAL,
     crls [1] IMPLICIT RevocationInfoChoices OPTIONAL }

    RecipientInfos ::= SET SIZE (1..MAX) OF RecipientInfo

    EncryptedContentInfo ::= SEQUENCE {
     contentType ContentType,
     contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
     encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL }

    EncryptedContent ::= OCTET STRING

    UnprotectedAttributes ::= SET SIZE (1..MAX) OF Attribute

Значения полей EnvelopedData описаны ниже.

version — номер версии синтаксиса. Значение зависит от полей originatorInfo, RecipientInfo и unprotectedAttrs и должно присваиваться по следующему алгоритму:

         IF (присутствует originatorInfo) AND
            ((присутствуют любые сертификаты типа other) OR
            (присутствуют любые crls типа other))
         THEN устанавливается version = 4
         ELSE
            IF ((присутствует originatorInfo) AND
               (присутствуют любые сертификаты атрибутов версии 2)) OR
               (любая из структур RecipientInfo включает pwri) OR
               (любая из структур RecipientInfo включает ori)
            THEN устанавливается version = 3
            ELSE
               IF (originatorInfo отсутствует) AND5
                  (unprotectedAttrs отсутствует) AND1
                  (все структуры RecipientInfo имеют версию 0)
               THEN устанавливается version = 0
               ELSE устанавливается version = 2

originatorInfo — необязательное поле с информацией инициаторе; поле включается только в тех случаях, когда этого требует алгоритм управления ключами. Поле может содержать сертификаты и списки CRL:

certs — набор сертификатов, который может содержать сертификаты инициатора, связанные с несколькими разными алгоритмами управления ключами. Поле certs может также содержать сертификаты атрибутов, связанные с инициатором. Сертификаты в certs предназначены для того, чтобы обеспечить всем получателям возможность построения пути от признаваемого корня (root) или удостоверяющего центра верхнего уровня (top-level certification authority). Однако certs может содержать избыточные сертификаты, позволяющие построить несколько путей для двух и более удостоверяющих центров. Возможна и нехватка сертификатов в поле certs, если у получателя имеются другие способы получения требуемых сертификатов (например, предшествующий набор сертификатов).

crls — набор списков отзыва сертификатов (CRL). Это поле содержит информацию, которой может быть достаточно для проверки действительности сертификатов, указанных в поле certs, но эта достаточность не требуется. Это поле может содержать избыточное или недостаточное число списков CRL.

recipientInfos — набор информации, предназначенной для конкретного получателя. В наборе должен присутствовать по крайней мере один элемент.

encryptedContentInfo — зашифрованное содержимое.

unprotectedAttrs — необязательный набор незашифрованных атрибутов. Полезные типы атрибутов определены в разделе 11.

Поля типа EncryptedContentInfo имеют приведенные ниже значения

contentType указывает тип содержимого.

contentEncryptionAlgorithm указывает алгоритм шифрования содержимого и все связанные с ним параметры, которые применяются при шифровании содержимого. Процесс шифрования содержимого описан в параграфе 6.3. Для всех получателей используются одни и те же алгоритм и ключ шифрования содержимого.

encryptedContent — результат шифрования содержимого. Это поле является необязательным и при его отсутствии шифрованное содержимое должно доставляться иным способом.

Поле recipientInfos размещается перед полем encryptedContentInfo, что позволяет обрабатывать значение EnvelopedData за один проход.

6.2. Тип RecipientInfo

Предназначенная для отдельного получателя информация представляется типом RecipientInfo. Формат RecipientInfo отличается для каждого из поддерживаемых методов управления ключами. Для каждого получателя одного зашифрованного содержимого можно применять любой из методов управления ключами. Во всех случаях зашифрованный ключ шифрования содержимого передается одному или множеству получателей.

Поскольку не каждая реализация будет поддерживать все возможные алгоритмы управления ключами, все реализации должны корректно обрабатывать нереализованные алгоритмы, которые могут встречаться. Например, если получателю приходит ключ шифрования содержимого, зашифрованный с использованием его открытого ключа RSA и RSA-OAEP, а реализация поддерживает только RSA PKCS #1 v1.5, в ней должна быть реализована процедура корректного отказа.

Реализации должны поддерживать доставку ключей (key transport), согласование ключей (key agreement) и применение известных симметричных ключей, представленные ktri, kari и kekri, соответственно. Реализации могут поддерживать управление ключами на основе пароля, представляемое pwri. Реализации также могут поддерживать любой другой метод управления ключами, представляемый ori. Поскольку каждый получатель может использовать свой метод управления ключами, а будущие спецификации могут добавлять новые методы, все реализации должны корректно обрабатывать не реализованные в них варианты RecipientInfo CHOICE и должны корректно обрабатывать не реализованные версии поддерживаемых вариантов CHOICE, а также должны корректно обрабатывать неизвестные или не реализованные варианты ori.

            RecipientInfo ::= CHOICE {
              ktri KeyTransRecipientInfo,
              kari [1] KeyAgreeRecipientInfo,
              kekri [2] KEKRecipientInfo,
              pwri [3] PasswordRecipientinfo,
              ori [4] OtherRecipientInfo }

            EncryptedKey ::= OCTET STRING

6.2.1. KeyTransRecipientInfo

Информация для получателей, использующих доставку ключей (key transport), представляется типом KeyTransRecipientInfo. Каждый экземпляр KeyTransRecipientInfo переносит ключ шифрования содержимого для одного получателя.

      KeyTransRecipientInfo ::= SEQUENCE {
        version CMSVersion,  -- всегда имеет значение 0 или 2
        rid RecipientIdentifier,
        keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
        encryptedKey EncryptedKey }

      RecipientIdentifier ::= CHOICE {
        issuerAndSerialNumber IssuerAndSerialNumber,
        subjectKeyIdentifier [0] SubjectKeyIdentifier }

Поля типа KeyTransRecipientInfo описаны ниже.

version — номер версии синтаксиса. Если RecipientIdentifier представляет собой CHOICE issuerAndSerialNumber, номер версии должен иметь значение 0. Если RecipientIdentifier представляет собой subjectKeyIdentifier, номер версии должен быть 2.

rid указывает сертификат или ключ получателя, который отправитель применил для защиты ключа шифрования содержимого путем шифрования с помощью открытого ключа получателя. RecipientIdentifier поддерживает два варианта указания сертификата и, соответственно, открытого ключа получателя. Сертификат получателя должен содержать открытый ключ для транспортировки ключей. Следовательно, сертификат получателя X.509 версии 3, содержащий расширение использования ключей (key usage), должен иметь флаг keyEncipherment. Вариант issuerAndSerialNumber указывает сертификат получателя по отличительному имени эмитента и номеру сертификата, а subjectKeyIdentifier — по идентификатору ключа. При указании сертификата X.509 идентификатор ключа соответствует значению расширения X.509 subjectKeyIdentifier. При указании сертификатов иного формата документ, задающий формат сертификата и его использование с CMS, должен включать детали сопоставления идентификатора ключа с подходящим полем сертификата. На стороне получателя реализации должны поддерживать оба варианта указания сертификата получателя, на стороне отправителя должен поддерживаться хотя бы один из этих вариантов.

keyEncryptionAlgorithm указывает алгоритм шифрования ключа и все связанные с ним параметры, которые потребуются получателю для расшифровки ключа шифрования содержимого. Процесс шифрования ключей описан в параграфе 6.4.

encryptedKey — результат шифрования ключа шифрования содержимого для данного получателя.

6.2.2. KeyAgreeRecipientInfo

Информация для получателя, использующего согласование ключей (key agreement), представляется типом KeyAgreeRecipientInfo. Каждый экземпляр KeyAgreeRecipientInfo будет содержать ключ шифрования содержимого для одного или множества получателей использующих один алгоритм согласования ключей и общие параметры для него.

      KeyAgreeRecipientInfo ::= SEQUENCE {
        version CMSVersion,  -- всегда устанавливается значение 3
        originator [0] EXPLICIT OriginatorIdentifierOrKey,
        ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
        keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
        recipientEncryptedKeys RecipientEncryptedKeys }

      OriginatorIdentifierOrKey ::= CHOICE {
        issuerAndSerialNumber IssuerAndSerialNumber,
        subjectKeyIdentifier [0] SubjectKeyIdentifier,
        originatorKey [1] OriginatorPublicKey }

      OriginatorPublicKey ::= SEQUENCE {
        algorithm AlgorithmIdentifier,
        publicKey BIT STRING }

      RecipientEncryptedKeys ::= SEQUENCE OF RecipientEncryptedKey

      RecipientEncryptedKey ::= SEQUENCE {
        rid KeyAgreeRecipientIdentifier,
        encryptedKey EncryptedKey }

      KeyAgreeRecipientIdentifier ::= CHOICE {
        issuerAndSerialNumber IssuerAndSerialNumber,
        rKeyId [0] IMPLICIT RecipientKeyIdentifier }

      RecipientKeyIdentifier ::= SEQUENCE {
        subjectKeyIdentifier SubjectKeyIdentifier,
        date GeneralizedTime OPTIONAL,
        other OtherKeyAttribute OPTIONAL }

      SubjectKeyIdentifier ::= OCTET STRING

Поля типа KeyAgreeRecipientInfo описаны ниже.

version — номер версии синтаксиса. Всегда должен иметь значение 3.

originator представляет собой выбор (CHOICE) из трех вариантов указания открытого ключа отправителя для согласования ключей. Отправитель использует соответствующий секретный ключ и открытый ключ получателя для генерации парного ключа, с помощью которого шифруется ключ шифрования содержимого. Вариант issuerAndSerialNumber задает сертификат отправителя и, следовательно, его открытый ключ путем указания отличительного имени эмитента сертификата и порядкового номера сертификата. Вариант subjectKeyIdentifier указывает сертификат и ключ отправителя с помощью идентификатора ключа. Для сертификата X.509 идентификатор ключа соответствует значению расширения X.509 subjectKeyIdentifier. Для других форматов сертификата документ со спецификацией этого формата и его применения в CMS должен подробно описывать сопоставление идентификатора подходящему полю сертификата. Вариант originatorKey указывает идентификатор алгоритма и открытый ключ отправителя для согласования ключей. Этот метод обеспечивает анонимность инициатора, поскольку открытый ключ не сертифицируется. Реализации должны поддерживать все три варианта указания открытого ключа отправителя.

ukm является не обязательным. Для некоторых алгоритмов согласования ключей отправитель представляет ключевой материал UKM6, чтобы гарантировать создание нового ключа каждый раз при взаимодействии с тем же партнером. Реализации должны воспринимать последовательности KeyAgreeRecipientInfo, включающие поле ukm. Реализации, не поддерживающие алгоритмы согласования ключей с использованием UKM, должны аккуратно обрабатывать наличие UKM.

keyEncryptionAlgorithm указывает алгоритм шифрования ключа и все связанные с ним параметры, использованные для зашифровки ключа шифрования содержимого с помощью этого ключа. Процесс шифрования ключей описан в параграфе 6.4.

recipientEncryptedKeys включает идентификатор получателя и зашифрованный ключ для одного или множества получателей. KeyAgreeRecipientIdentifier представляет собой выбор (CHOICE) из двух вариантов задания сертификата получателя и, следовательно, его открытого ключа, который был использован отправителем для генерации парного ключа для зашифровки ключа шифрования содержимого. Сертификат получателя должен содержать открытый ключ, применяемый для согласования ключей. Следовательно, сертификат получателя X.509 версии 3 с расширением key usage должен иметь установленный бит keyAgreement. Ключ шифрования содержимого шифруется с использованием парного ключа. Вариант issuerAndSerialNumber указывает сертификат получателя по отличительному имени эмитента и порядковому номеру сертификата, тип RecipientKeyIdentifier описан ниже. encryptedKey представляет собой результат зашифровки ключа шифрования содержимого с помощью парного ключа, генерируемого с использованием алгоритма согласования ключей. Реализации должны поддерживать оба варианта указания сертификата получателя.

Поля типа RecipientKeyIdentifier описаны ниже.

subjectKeyIdentifier указывает сертификат получателя идентификатором ключа. При указании сертификата X.509 идентификатор ключа соответствует значению расширения X.509 subjectKeyIdentifier. Для других сертификатов документы со спецификацией формата и использования с CMS должны включать детали сопоставления идентификатора ключа подходящему полю сертификата.

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

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

6.2.3. KEKRecipientInfo

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

      KEKRecipientInfo ::= SEQUENCE {
        version CMSVersion,  -- всегда устанавливается значение 4
        kekid KEKIdentifier,
        keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
        encryptedKey EncryptedKey }

      KEKIdentifier ::= SEQUENCE {
        keyIdentifier OCTET STRING,
        date GeneralizedTime OPTIONAL,
        other OtherKeyAttribute OPTIONAL }

Поля типа KEKRecipientInfo описаны ниже

version — номер версии синтаксиса. Всегда должен иметь значение 4.

kekid указывает симметричный ключ, которым зашифрован ключ шифрования содержимого, заранее переданный отправителю и одному или множеству получателей.

keyEncryptionAlgorithm указывает алгоритм шифрования ключа и все связанные с ним параметры, которые нужны для расшифровки ключа шифрования содержимого. Процесс шифрования ключей описан в параграфе 6.4.

encryptedKey — результат зашифровки ключа шифрования содержимого с помощью симметричного ключа.

Поля типа KEKIdentifier описаны ниже.

keyIdentifier — указывает ключ шифрования ключей, который был независимо передан отправителю и одному или множеству получателей.

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

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

6.2.4. PasswordRecipientInfo

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

Тип PasswordRecipientInfo задан в RFC 3211 [PWRI]. Структура PasswordRecipientInfo приведена здесь лишь для полноты.

      PasswordRecipientInfo ::= SEQUENCE {
        version CMSVersion,   -- всегда устанавливается значение 0
        keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier OPTIONAL,
        keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, encryptedKey EncryptedKey }

Поля типа PasswordRecipientInfo описаны ниже.

version — номер версии синтаксиса. Всегда должен иметь значение 0.

keyDerivationAlgorithm указывает алгоритм создания ключа и все связанные с ним параметры, которые нужны для воспроизведения знающим пароль или общий секрет получателем зашифрованного ключа шифрования содержимого. Отсутствие этого поля означает передачу ключа шифрования ключа иным способом (например, с помощью смарт-карты или крипто-токена).

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

encryptedKey — результат зашифровки ключа шифрования содержимого с помощью ключа шифрования ключей.

6.2.5. OtherRecipientInfo

Информация для получателей, использующих иные методы управления ключами, представляется типом OtherRecipientInfo. Этот тип позволяет использовать другие методы, в дополнение к транспортировке ключей, их согласованию, применению известных симметричных ключей, управлению ключами на основе паролей, а также методы, которые будут определены в будущих документах. Ниже показан формат идентификатора объекта, уникально указывающего такие методы управления ключами.

      OtherRecipientInfo ::= SEQUENCE {
        oriType OBJECT IDENTIFIER,
        oriValue ANY DEFINED BY oriType }

Поля типа OtherRecipientInfo описаны ниже.

oriType указывает метод управления ключами.

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

6.3. Процесс шифрования содержимого

Случайным образом генерируется ключ шифрования содержимого для нужного алгоритма. Защищаемые данные дополняются в соответствии с приведенным ниже описанием и после этого шифруются с использованием созданного ключа. Операция шифрования отображает произвольную строку октетов (исходные данные) в другую строку октетов (шифрованные данные) с использованием ключа шифрования содержимого. Зашифрованные данные включаются в строку октетов EnvelopedData encryptedContentInfo encryptedContent.

В некоторых алгоритмах шифрования предполагается, что размер исходных данных кратен некому целому числу k, где k больше 1. Для таких алгоритмов к входным данным в конце будут добавляться октеты заполнения со значениями k — (lth mod k) в количестве k — (lth mod k), где lth — размер исходных данных. Иными словами, после исходных данных будут добавляться последовательности

                     01 -- если lth mod k = k-1
                  02 02 -- если lth mod k = k-2
                      .
                      .
                      .
            k k ... k k -- если lth mod k = 0

Октеты заполнения могут быть однозначно идентифицированы и удалены, включая ситуацию, когда исходные данные имеют размер, кратный величине блока и заполнения не используется. Этот метод заполнения корректно работает только в тех случаях, когда размер блока (k) меньше 256.

6.4. Процесс шифрования ключа

Исходными данными для процесса шифрования ключа (значение, представляемое алгоритму шифрования ключей у получателя) является просто «значение» ключа шифрования содержимого.

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

7. Тип содержимого Digested-data

Тип содержимого digested-data включает данные любого типа с отпечатком (message digest) для них.

Обычно тип digested-data используется для защиты целостности содержимого и результат процесса создания подписанных данных служит входной информацией для создания типа enveloped-data.

Создание типа digested-data включает два этапа:

  1. рассчитывается отпечаток (хэш) содержимого с использованием алгоритма message-digest;

  2. алгоритм message-digest и отпечаток сообщения вместе с подписанным содержимым объединяются в структуру DigestedData.

Получатель проверяет отпечаток сообщения, сравнивая полученное значение с рассчитанным им самим отпечатком.

Ниже приведен идентификатор объекта для содержимого типа digested-data.

      id-digestedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5 }

Тип digested-data должен иметь форму ASN.1 DigestedData:

      DigestedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithm DigestAlgorithmIdentifier,
        encapContentInfo EncapsulatedContentInfo,
        digest Digest }

      Digest ::= OCTET STRING

Поля типа DigestedData описаны ниже.

version — номер версии синтаксиса. Если инкапсулировано содержимое типа id-data, для номера версии должно быть указано значение 0, однако для остальных типов должно устанавливаться значение 2.

digestAlgorithm — указывает алгоритм цифровой подписи и все связанные с ним параметры, использованные для создания подписи. Процесс создания цифровой подписи совпадает с описанным в параграфе 5.4, если не подписывается дополнительных атрибутов.

encapContentInfo — подписываемое содержимое, как определено в параграфе 5.2.

digest — результат процесса создания подписи для сообщения.

Порядок размещения полей digestAlgorithm, encapContentInfo и digest делает возможной обработку значения DigestedData за один проход.

8. Тип содержимого Encrypted-data

Тип encrypted-data содержит зашифрованные данные любого типа. В отличие от enveloped-data тип encrypted-data не включает ни получателей, ни зашифрованных ключей шифрования содержимого. Управление ключами должно осуществляться иным способом.

Типовым применением encrypted-data является шифрование содержимого для локального хранения (возможно, с генерацией ключа шифрования по паролю).

Ниже показан идентификатор объекта для содержимого типа encrypted-data.

      id-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 }

Тип encrypted-data должен иметь форму ASN.1 EncryptedData

      EncryptedData ::= SEQUENCE {
        version CMSVersion,
        encryptedContentInfo EncryptedContentInfo,
        unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }

Поля типа EncryptedData описаны ниже

version — номер версии синтаксиса. При наличии unprotectedAttrs номер версии должен иметь значение 2, при отсутствии unprotectedAttrs должно указываться значение 0.

encryptedContentInfo — зашифрованное содержимое, как описано в параграфе 6.1.

unprotectedAttrs — набор атрибутов, которые не шифруются. Это поле не является обязательным. Полезные типы атрибутов определены в разделе 11.

9. Тип содержимого Authenticated-data

Тип authenticated-data включает содержимое произвольного типа, код аутентификации сообщения (MAC7) и зашифрованные ключи аутентификации для одного или множества получателей. Комбинация MAC и одного из зашифрованных ключей аутентификации требуется получателю для проверки целостности содержимого. Защита целостности может обеспечиваться для любого типа содержимого и произвольного числа получателей.

Процесс создания authenticated-data включает перечисленные ниже шаги.

  1. Случайным образом генерируется ключ аутентификации сообщения для конкретного алгоритма аутентификации.

  2. Ключ аутентификации сообщения шифруется для каждого получателя. Детали этого шифрования зависят от используемого алгоритма управления ключами.

  3. Для каждого получателя зашифрованный ключ аутентификации сообщения вместе с другой, относящейся к этому получателю, информацией собираются в значение RecipientInfo, как описано в параграфе 6.2.

  4. Используя ключ аутентификации сообщения, инициатор рассчитывает значение MAC для содержимого. Если инициатор в дополнение к содержимому сообщения аутентифицирует какую-либо информацию (см. параграф 9.2), рассчитывается отпечаток (подпись) для содержимого, а затем этот отпечаток и дополнительные данные аутентифицируются с использованием ключа аутентификации и результат служит значением MAC.

9.1. Тип AuthenticatedData

Ниже приведен идентификатор объекта для содержимого типа authenticated-data.

      id-ct-authData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
         us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2 }

Тип authenticated-data должен иметь форму ASN.1 AuthenticatedData.

      AuthenticatedData ::= SEQUENCE {
        version CMSVersion,
        originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
        recipientInfos RecipientInfos,
        macAlgorithm MessageAuthenticationCodeAlgorithm,
        digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
        encapContentInfo EncapsulatedContentInfo,
        authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
        mac MessageAuthenticationCode,
        unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }

      AuthAttributes ::= SET SIZE (1..MAX) OF Attribute

      UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute

      MessageAuthenticationCode ::= OCTET STRING

Поля типа AuthenticatedData описаны ниже.

version — номер версии синтаксиса. Значение version должно устанавливаться по приведенным ниже правилам

         IF (присутствует originatorInfo) AND
            ((присутствуют любые сертификаты типа other) OR
            (присутствуют любые crls типа other))
         THEN version = 3
         ELSE
            IF ((присутствует originatorInfo) AND
               (присутствуют любые сертификаты атрибутов версии 2))
            THEN version = 1
            ELSE version = 0

originatorInfo — необязательная информация об инициаторе. Параметр указывается лишь в тех случаях, когда этого требует механизм управления ключами. Поле может включать сертификаты, сертификаты атрибутов и CRL, как указано в параграфе 6.1.

recipientInfos — набор информации для получателей, как определено в параграфе 6.1. Набор должен включать не менее 1 элемента.

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

digestAlgorithm указывает алгоритм цифровой подписи для сообщения и все связанные с ним параметры, которые были использованы для расчета отпечатка инкапсулированного содержимого, если присутствуют аутентифицированные атрибуты. Процесс создания цифровой подписи (отпечатка) сообщения описан в параграфе 9.2. Размещение поля digestAlgorithm облегчает получателю обработку за один проход. При наличии поля digestAlgorithm должно присутствовать и поле authAttrs.

encapContentInfo — аутентифицируемое содержимое, как определено в параграфе 5.2.

authAttrs — набор аутентифицируемых атрибутов. Структура authAttrs является необязательной, но она должна присутствовать, если тип содержимого для значения EncapsulatedContentInfo, которое аутентифицируется, отличается от id-data. При наличии поля authAttrs должно присутствовать также поле digestAlgorithm. Для структуры AuthAttributes должно использоваться представление DER, даже если остальная часть структуры задана в представлении BER. Полезные типы атрибутов определены в разделе 11. При наличии поля authAttrs оно должно содержать по крайней мере два перечисленных ниже атрибута:

content-type использует в качестве своего значения тип аутентифицируемого значения EncapsulatedContentInfo. Атрибут content-type определен в параграфе 11.1.

message-digest использует в качестве своего значения цифровую подпись содержимого. Атрибут message-digest определен в параграфе 11.2.

mac — код аутентификации сообщения.

unauthAttrs — необязательный набор атрибутов, которые не аутентифицируются. В настоящее время не определены неаутентифицированные атрибуты, а другие полезные атрибуты определены в разделе 11.

9.2. Генерация MAC

В процессе расчета MAC вычисляется код аутентификации сообщения (MAC) для аутентифицируемого содержимого или отпечатка аутентифицируемого содержимого вместе с аутентифицируемыми атрибутами инициатора.

Если поле authAttrs отсутствует, входными данными для процесса расчета MAC служит строка октетов encapContentInfo eContent. В расчете MAC используются только октеты строки eContent без учета октетов тега и размера. Это позволяет рассчитывать значение MAC для строк, размер которых не известен заранее процессу MAC.

При наличии поля authAttrs должны учитываться атрибуты content-type (параграф 11.1) и message-digest (параграф 11.2), а входной информацией для процесса расчета MAC служит DER-представление authAttrs. Для расчета цифровой подписи сообщения выполняется отдельное кодирование поля authAttrs. Тег IMPLICIT [2] в поле authAttrs не используется для представления DER, взамен его применяется тег EXPLICIT SET OF. Т. е. в расчет цифровой подписи вместо DER-представления тега IMPLICIT [2] включается представление тега SET OF вместе с октетами размера и содержимого authAttrs.

Процесс расчета цифровой подписи вычисляет отпечаток аутентифицируемого сообщения. Исходными данными для процесса является «значение» инкапсулированного содержимого, которое будет аутентифицироваться. А именно, входными данными служит строка октетов encapContentInfo eContent, к которой применяется процесс аутентификации. Алгоритм расчета цифровой подписи учитывает только значение encapContentInfo eContent без октетов тега и размера. Это позволяет рассчитать цифровую подпись для содержимого, размер которого не известен заранее. Хотя октеты тега и размера encapContentInfo eContent не включаются в расчет цифровой подписи, они защищаются другими средствами. Октеты размера защищаются самой природой алгоритма цифровой подписи, поскольку найти два варианта содержимого произвольного размера, которые имели бы одинаковые отпечатки, не представляется возможным.

Входные данные процесса расчета MAC включают определенные выше входные данные MAC и ключ аутентификации, передаваемый в структуре recipientInfo. Детали расчета MAC зависят от используемого алгоритма MAC (например, HMAC). Идентификатор объекта вместе со всеми параметрами, определяющими использованный инициатором алгоритм MAC, передаются в поле macAlgorithm. Значение MAC, инициатором инициатором, передается в форме строки октетов (OCTET STRING) в поле mac.

9.3. Проверка MAC

Входом для процесса проверки MAC служат входные данные (определяются на основе наличия или отсутствия поля authAttrs, как указано в параграфе 9.2) и ключ аутентификации, передаваемый в recipientInfo. Детали процесса проверки MAC зависят от используемого алгоритма MAC.

Получателю недопустимо опираться на любые значения MAC или цифровой подписи, рассчитанные инициатором. Содержимое аутентифицируется в соответствии с описанием параграфа 9.2. Если инициатор включил аутентифицируемые атрибуты, содержимое authAttrs аутентифицируется в соответствии с параграфом 9.2. Для того, чтобы аутентификация считалась пройденной, значение MAC, рассчитанное получателем, должно совпасть со значением поля mac. Аналогично для успешной аутентификации при наличии поля authAttrs значение цифровой подписи, рассчитанное получателем, должно совпадать со значением атрибута message-digest в authAttrs.

Если AuthenticatedData включает authAttrs, значение атрибута content-type должно соответствовать значению AuthenticatedData encapContentInfo eContentType.

10. Полезные типы

Этот раздел состоит из двух частей — в первой определены идентификаторы алгоритмов, а во второй другие полезные типы.

10.1. Типы идентификаторов алгоритма

Все идентификаторы алгоритмов используют один тип:

AlgorithmIdentifier — определение заимствовано из X.509 [X.509-88].

Для каждого типа алгоритма имеется множество вариантов.

10.1.1. DigestAlgorithmIdentifier

Тип DigestAlgorithmIdentifier указывает алгоритм message-digest, примерами могут служить алгоритмы SHA-1, MD2, MD5. Алгоритм message-digest отображает строку октетов (содержимое) в другую строку октетов (отпечаток).

      DigestAlgorithmIdentifier ::= AlgorithmIdentifier

10.1.2. SignatureAlgorithmIdentifier

Тип SignatureAlgorithmIdentifier указывает алгоритм подписи и может также указывать алгоритм отпечатка8 (message digest). Примерами могут служить RSA, DSA, DSA с SHA-1, ECDSA и ECDSA с SHA-256. Алгоритм подписи поддерживает операции создания и проверки подписи. При генерации подписи используется отпечаток сообщения и секретный ключ подписывающего. При проверке подписи используется отпечаток сообщения и открытый ключ подписавшего для проверки пригодности полученной подписи. Выполняемая операция определяется контекстом.

      SignatureAlgorithmIdentifier ::= AlgorithmIdentifier

10.1.3. KeyEncryptionAlgorithmIdentifier

Тип KeyEncryptionAlgorithmIdentifier указывает алгоритм шифрования ключа используемого для шифрования содержимого. Операция шифрования отображает строку октетов (ключ) на другую строку октетов (зашифрованный ключ) под управлением ключа шифрования ключа. Операция расшифровки обратна операции шифрования. Выбор операции определяется контекстом.

Детали шифрования и расшифровки зависят от используемого алгоритма управления ключами. Поддерживаются доставка (key transport) и согласование (key agreement) ключей, заранее известные симметричные ключи и ключи, создаваемые из паролей.

      KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier

10.1.4. ContentEncryptionAlgorithmIdentifier

Тип ContentEncryptionAlgorithmIdentifier указывает алгоритм шифрования содержимого (примерами могут служить Triple-DES и RC2). Алгоритм шифрования содержимого поддерживает операции шифрования и расшифровки. Операция шифрования отображает строку октетов (открытый текст) на другую строку октетов (шифрованный текст) с использованием ключа шифрования содержимого. Операция расшифровки выполняет обратное преобразование. Выбор операции определяется контекстом.

      ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier

10.1.5. MessageAuthenticationCodeAlgorithm

Тип MessageAuthenticationCodeAlgorithm указывает алгоритм для кода аутентификации сообщения (MAC) — примерами могут служить DES-MAC и HMAC-SHA-1. Алгоритм MAC поддерживает операции создания и проверки кода, в которых используется один и тот же симметричный ключ. Выбор операции определяется контекстом.

      MessageAuthenticationCodeAlgorithm ::= AlgorithmIdentifier

10.1.6. KeyDerivationAlgorithmIdentifier

Тип KeyDerivationAlgorithmIdentifier определен в RFC 3211 [PWRI] и здесь это определение повторено для полноты.

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

      KeyDerivationAlgorithmIdentifier ::= AlgorithmIdentifier

10.2. Другие полезные типы

В этом параграфе определены типы, используемые в других разделах данного документа. Типы никак не упорядочены.

10.2.1. RevocationInfoChoices

Тип RevocationInfoChoices дает набор вариантов информации о статусе отзыва. Предполагается, что такой набор содержит информацию, достаточную для идентификации связанных с набором сертификатов и сертификатов атрибутов, которые отозваны. Однако в наборе может содержаться избыточная информация о статусе отзыва, а также набор может не включать всей требуемой информации. Списки отзыва сертификатов X.509 (CRL) [X.509-97] являются основным источником информации о статусе отзыва, но могут поддерживаться иные форматы такой информации. Обеспечивается вариант OtherRevocationInfoFormat для поддержки любых других форматов информации об отзыве без дополнительного изменения CMS. Например, с помощью OtherRevocationInfoFormat могут поддерживаться отзывы протокола OCSP9 [OCSP].

CertificateList может содержать список CRL, ARL10, Delta CRL или Attribute CRL. Все эти списки используют общий синтаксис.

Тип CertificateList указывает список отзыва сертификатов (CRL). Эти списки определены в X.509 [X.509-97] и заданы для использования в Internet документом RFC 3280 [PROFILE].

Ниже приведено определение CertificateList из X.509.

      RevocationInfoChoices ::= SET OF RevocationInfoChoice

      RevocationInfoChoice ::= CHOICE {
        crl CertificateList,
        other [1] IMPLICIT OtherRevocationInfoFormat }

      OtherRevocationInfoFormat ::= SEQUENCE {
        otherRevInfoFormat OBJECT IDENTIFIER,
        otherRevInfo ANY DEFINED BY otherRevInfoFormat }

10.2.2. CertificateChoices

Тип CertificateChoices задает расширенный сертификат PKCS #6 [PKCS#6], сертификат X.509, сертификат атрибута X.509 версии 1 (ACv1) [X.509-97], сертификат атрибута X.509 версии 2 (ACv2) [X.509-00] или сертификат иного формата. Расширенные сертификаты PKCS #6 считаются устаревшими и поддерживаются лишь для совместимости со старыми версиями, поэтому применять их не следует. Сертификаты ACv1 также являются устаревшими, включены лишь для совместимости со старыми версиями и применять их не следует. Профиль Internet для сертификатов X.509 задан в документе Internet X.509 Public Key Infrastructure: Certificate and CRL Profile [PROFILE], профиль для сертификатов ACv2 — в документе An Internet Attribute Certificate Profile for Authorization [ACPROFILE]. Вариант OtherCertificateFormat служит для поддержки других форматов сертификатов без изменения CMS.

Определение Certificate заимствовано из X.509.

Определения AttributeCertificate заимствованы из X.509-1997 и X.509-2000 — определение из X.509-1997 обозначено AttributeCertificateV1 (см. параграф 12.2), а определение из X.509-2000 — AttributeCertificateV2.

      CertificateChoices ::= CHOICE {
       certificate Certificate,
       extendedCertificate [0] IMPLICIT ExtendedCertificate, -- отменено
       v1AttrCert [1] IMPLICIT AttributeCertificateV1,       -- отменено
       v2AttrCert [2] IMPLICIT AttributeCertificateV2,
       other [3] IMPLICIT OtherCertificateFormat }

      OtherCertificateFormat ::= SEQUENCE {
       otherCertFormat OBJECT IDENTIFIER,
       otherCert ANY DEFINED BY otherCertFormat }

10.2.3. CertificateSet

Тип CertificateSet представляет набор сертификатов, достаточный для обеспечения «пути сертификации» (certification path) от «корня» или «удостоверяющего центра верхнего уровня» до всех сертификатов отправителя, с которыми связан данный набор. Однако набор может включать избыточные сертификаты, а также может содержать неполный их комплект.

Точное значение термина «путь сертификации» выходит за рамки данной спецификации. Однако [PROFILE] включает определения для сертификатов X.509. Некоторые приложения могут ограничивать сверху размер пути сертификации, а другие могут предъявлять те или иные требования к связям между субъектами и эмитентами в пути сертификации.

      CertificateSet ::= SET OF CertificateChoices

10.2.4. IssuerAndSerialNumber

Тип IssuerAndSerialNumber указывает сертификат и, таким образом, субъекта и его открытый ключ по отличительному имени (distinguished name) эмитента и порядковому номеру сертификата.

Определение поля Name заимствовано из X.501 [X.501-88], а поля CertificateSerialNumber — из X.509 [X.509-97].

      IssuerAndSerialNumber ::= SEQUENCE {
        issuer Name,
        serialNumber CertificateSerialNumber }

      CertificateSerialNumber ::= INTEGER

10.2.5. CMSVersion

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

      CMSVersion ::= INTEGER { v0(0), v1(1), v2(2), v3(3), v4(4), v5(5) }

10.2.6. UserKeyingMaterial

Тип UserKeyingMaterial указывает синтаксис для пользовательского ключевого материала (UKM11). Некоторым алгоритмам согласования ключей UKM требуется для генерации разных ключей в каждом случае согласования между данной парой сторон. Отправитель предоставляет UKM для использования с конкретным алгоритмом согласования ключей.

      UserKeyingMaterial ::= OCTET STRING

10.2.7. OtherKeyAttribute

Тип OtherKeyAttribute задает синтаксис для включения других атрибутов ключа, которые позволят получателю выбрать ключ, использованный отправителем. Идентификаторы атрибутов объектов должны регистрироваться вместе с синтаксисом самих атрибутов. Использования этого типа следует избегать, поскольку он может приводить к несовместимости.

      OtherKeyAttribute ::= SEQUENCE {
        keyAttrId OBJECT IDENTIFIER,
        keyAttr ANY DEFINED BY keyAttrId OPTIONAL }

11. Полезные атрибуты

В этом разделе определены атрибуты, которые могут использоваться с содержимым типов signed-data, enveloped-data, encrypted-data, authenticated-data. Синтаксис Attribute совместим с X.501 [X.501-88] и RFC 3280 [PROFILE]. Некоторые из описанных в этом разделе атрибутов были определены в PKCS #9 [PKCS#9], а другие — в предыдущей версии этой спецификации [CMS1]. Атрибуты перечислены без какого-либо упорядочения.

Из числа атрибутов, определенных в других документах, следует отметить спецификацию S/MIME версии 3 [MSG] и расширенные средства защиты для S/MIME [ESS], которые включают также рекомендации по размещению этих атрибутов.

11.1. Тип содержимого

Атрибут content-type указывает тип содержимого ContentInfo в signed-data или authenticated-data. Атрибут content-type должен присутствовать при наличии подписанных атрибутов в signed-data или аутентифицированных атрибутов в authenticated-data. Значение атрибута content-type должно соответствовать значению encapContentInfo eContentType в signed-data или authenticated-data.

Атрибут content-type должен быть подписанным (signed) или аутентифицированным (authenticated) атрибутом, для него недопустимо быть неподписанным (unsigned), неаутентифицированным (unauthenticated) или незащищенным (unprotected) атрибутом.

Ниже приведен идентификатор объекта для атрибута content-type.

      id-contentType OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3 }

Значения атрибута content-type имеют тип ASN.1 ContentType

      ContentType ::= OBJECT IDENTIFIER

Хотя синтаксис определен, как SET OF AttributeValue, атрибут content-type должен иметь единственное значение, отсутствие или несколько экземпляров AttributeValue не допускается.

Синтаксис SignedAttributes и AuthAttributes определяет их как SET OF Attributes. В SignedAttributes поля signerInfo недопустимо включать множество экземпляров атрибута content-type. Аналогично, в AuthAttributes поля AuthenticatedData недопустимо включать множество экземпляров атрибута content-type.

11.2. Отпечаток сообщения

Тип атрибута message-digest задает отпечаток (message digest) строки октетов encapContentInfo eContent, подписанной в signed-data (см. параграф 5.4) или аутентифицированной в authenticated-data (см. параграф 9.2). Для signed-data отпечаток рассчитывается с использованием алгоритма хэширования подписывающей стороны. Для authenticated-data отпечаток рассчитывается с использованием алгоритма хэширования инициатора.

В signed-data тип атрибута message-digest должен присутствовать при наличии любых подписанных атрибутов. В authenticated-data тип атрибута message-digest должен присутствовать при наличии любых аутентифицированных атрибутов.

Атрибут message-digest должен быть подписанным (signed) или аутентифицированным (authenticated), недопустимо использование неподписанного (unsigned), неаутентифицированного (unauthenticated) или незащищенного (unprotected) атрибута.

Ниже приведен идентификатор объекта для атрибута message-digest.

      id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 }

Атрибут message-digest должен иметь тип ASN.1 MessageDigest

      MessageDigest ::= OCTET STRING

Атрибут message-digest должен иметь единственное значение, несмотря на то, что его синтаксис определен, как SET OF AttributeValue. Недопустимо отсутствие или наличие множества экземпляров AttributeValue.

Синтаксис SignedAttributes и AuthAttributes определяет их как SET OF Attributes. В SignedAttributes поля signerInfo недопустимо включать множество экземпляров атрибута message-digest. Аналогично, в AuthAttributes поля AuthenticatedData недопустимо включать множество экземпляров атрибута message-digest.

11.3. Время подписи

Атрибут signing-time указывает время, когда подписавший (предположительно) «поставил свою подпись». Этот атрибут предназначен для использования в signed-data.

Атрибут signing-time должен быть подписанным (signed) или аутентифицированным (authenticated), недопустимо использование неподписанного (unsigned), неаутентифицированного (unauthenticated) или незащищенного (unprotected) атрибута.

Ниже приведен идентификатор объекта для атрибута signing-time.

      id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 }

Значения атрибута signing-time имеют тип ASN.1 SigningTime.

      SigningTime ::= Time

      Time ::= CHOICE {
        utcTime UTCTime,
        generalizedTime GeneralizedTime }

Примечание. Определение Time соответствует версии X.509 от 1997 года [X.509-97].

Даты между 1 января 1950 г. и 31 декабря 2049 г. (включительно) должны представляться в формате UTCTime. Даты до 1950 г. и после 2049 г. должны представляться в формате GeneralizedTime.

Значения UTCTime должны указываться по времени Coordinated Universal Time (ранее, гринвичское время — Greenwich Mean Time или GMT, а также время Zulu) и должны включать секунды (т. е., использовать формат YYMMDDHHMMSSZ) даже если число секунд равно 0. Полночь должна представляться в виде YYMMDD000000Z. Информация о столетии является неявной и должна определяться следующим образом:

при YY не меньше 50 значение года должно интерпретироваться, как 19YY;

при YY < 50 значение года должно интерпретироваться, как 20YY.

Значения GeneralizedTime должны представляться во времени Coordinated Universal Time и должны включать секунды (т. е., использовать формат YYYYMMDDHHMMSSZ) даже если число секунд равно 0. В значения GeneralizedTime недопустимо включать доли секунд.

Атрибут signing-time должен иметь единственное значение, несмотря на синтаксис определения SET OF AttributeValue. Недопустимо отсутствие или множество экземпляров AttributeValue.

Синтаксис SignedAttributes и AuthAttributes определяет их как SET OF Attributes. В SignedAttributes поля signerInfo недопустимо включать множество экземпляров атрибута signing-time. Аналогично, в AuthAttributes поля AuthenticatedData недопустимо включать множество экземпляров атрибута signing-time.

Требования к корректности времени подписания не задаются и решение вопроса о доверии к этому времени остается за получателем. Однако неявно предполагается, что некоторым из подписывающих (например, серверам временных меток) можно доверять.

11.4. Заверяющая подпись

Тип атрибута countersignature указывает одну или множество подписей для строки октетов содержимого signature в значении SignerInfo для signed-data. Т. е., отпечаток сообщения рассчитывается для октетов, представляющих значение OCTET STRING, без октетов тега и размера. Таким образом, тип атрибута countersignature «заверяет» (еще раз подписывает) другую подпись.

Атрибут countersignature должен быть неподписанным (unsigned), недопустимо использование подписанных (signed), аутентифицированных (authenticated), неаутентифицированных (unauthenticated) и незащищенных (unprotected) атрибутов.

Ниже приведен идентификатор объекта для атрибута countersignature.

      id-countersignature OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 6 }

Значения атрибута countersignature имеют тип ASN.1 Countersignature

      Countersignature ::= SignerInfo

Значения countersignature имеют такой же смысл, как значения SignerInfo для обычных подписей, за исключением отмеченных ниже различий.

  1. В поле signedAttributes недопустимо включать атрибут content-type — для заверяющих подписей нет типа содержимого.

  2. Поле signedAttributes должно включать атрибут message-digest, если в нем есть какие-либо другие атрибуты.

  3. Входными данными для процесса создания отпечатка сообщения являются октеты содержимого DER-представления поля signatureValue в значении SignerInfo, с которым связан атрибут.

Атрибут countersignature может иметь множество значений. Синтаксис определен, как SET OF AttributeValue и должен присутствовать хотя бы один экземпляр AttributeValue.

Синтаксис UnsignedAttributes определен, как SET OF Attributes. UnsignedAttributes в signerInfo может включать множество экземпляров атрибута countersignature.

Поскольку countersignature имеет тип SignerInfo, атрибут сам по себе может включать атрибут countersignature. Это позволяет создавать цепочки заверяющих подписей произвольной длины.

12. Модули ASN.1

В параграфе 12.1 приведен модуль ASN.1 для CMS, а в параграфе 12.2 — для сертификата атрибутов версии 1.

12.1. Модуль CMS ASN.1

   CryptographicMessageSyntax2004
     { iso(1) member-body(2) us(840) rsadsi(113549)
       pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) }

   DEFINITIONS IMPLICIT TAGS ::=
   BEGIN

   -- Экспортируется все
   -- Типы и значения, определенные в этом модуле, экспортируются для использования 
   -- в других модулях ASN.1. Их могут применять для своих целей другие приложения.

   IMPORTS

     -- Импорт из RFC 3280 [PROFILE], Приложение A.1
           AlgorithmIdentifier, Certificate, CertificateList,
           CertificateSerialNumber, Name
              FROM PKIX1Explicit88
                   { iso(1) identified-organization(3) dod(6)
                     internet(1) security(5) mechanisms(5) pkix(7)
                     mod(0) pkix1-explicit(18) }

     -- Импорт из RFC 3281 [ACPROFILE], Приложение B
           AttributeCertificate
              FROM PKIXAttributeCertificate
                   { iso(1) identified-organization(3) dod(6)
                     internet(1) security(5) mechanisms(5) pkix(7)
                     mod(0) attribute-cert(12) }

     -- Импорт из Приложения B к данному документу
           AttributeCertificateV1
              FROM AttributeCertificateVersion1
                   { iso(1) member-body(2) us(840) rsadsi(113549)
                     pkcs(1) pkcs-9(9) smime(16) modules(0)
                     v1AttrCert(15) } ;

   -- Синтаксис криптографического сообщения

   ContentInfo ::= SEQUENCE {
     contentType ContentType,
     content [0] EXPLICIT ANY DEFINED BY contentType }

   ContentType ::= OBJECT IDENTIFIER

   SignedData ::= SEQUENCE {
     version CMSVersion,
     digestAlgorithms DigestAlgorithmIdentifiers,
     encapContentInfo EncapsulatedContentInfo,
     certificates [0] IMPLICIT CertificateSet OPTIONAL,
     crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
     signerInfos SignerInfos }

   DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier

   SignerInfos ::= SET OF SignerInfo

   EncapsulatedContentInfo ::= SEQUENCE {
     eContentType ContentType,
     eContent [0] EXPLICIT OCTET STRING OPTIONAL }

   SignerInfo ::= SEQUENCE {
     version CMSVersion,
     sid SignerIdentifier,
     digestAlgorithm DigestAlgorithmIdentifier,
     signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
     signatureAlgorithm SignatureAlgorithmIdentifier,
     signature SignatureValue,
     unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }

   SignerIdentifier ::= CHOICE {
     issuerAndSerialNumber IssuerAndSerialNumber,
     subjectKeyIdentifier [0] SubjectKeyIdentifier }

   SignedAttributes ::= SET SIZE (1..MAX) OF Attribute

   UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute

   Attribute ::= SEQUENCE {
     attrType OBJECT IDENTIFIER,
     attrValues SET OF AttributeValue }

   AttributeValue ::= ANY

   SignatureValue ::= OCTET STRING

   EnvelopedData ::= SEQUENCE {
     version CMSVersion,
     originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
     recipientInfos RecipientInfos,
     encryptedContentInfo EncryptedContentInfo,
     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }

   OriginatorInfo ::= SEQUENCE {
     certs [0] IMPLICIT CertificateSet OPTIONAL,
     crls [1] IMPLICIT RevocationInfoChoices OPTIONAL }

   RecipientInfos ::= SET SIZE (1..MAX) OF RecipientInfo

   EncryptedContentInfo ::= SEQUENCE {
     contentType ContentType,
     contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
     encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL }

   EncryptedContent ::= OCTET STRING

   UnprotectedAttributes ::= SET SIZE (1..MAX) OF Attribute

   RecipientInfo ::= CHOICE {
     ktri KeyTransRecipientInfo,
     kari [1] KeyAgreeRecipientInfo,
     kekri [2] KEKRecipientInfo,
     pwri [3] PasswordRecipientInfo,
     ori [4] OtherRecipientInfo }

   EncryptedKey ::= OCTET STRING

   KeyTransRecipientInfo ::= SEQUENCE {
     version CMSVersion,  -- всегда устанавливается значение 0 или 2
     rid RecipientIdentifier,
     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
     encryptedKey EncryptedKey }

   RecipientIdentifier ::= CHOICE {
     issuerAndSerialNumber IssuerAndSerialNumber,
     subjectKeyIdentifier [0] SubjectKeyIdentifier }

   KeyAgreeRecipientInfo ::= SEQUENCE {
     version CMSVersion,  -- всегда устанавливается значение 3
     originator [0] EXPLICIT OriginatorIdentifierOrKey,
     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
     recipientEncryptedKeys RecipientEncryptedKeys }

   OriginatorIdentifierOrKey ::= CHOICE {
     issuerAndSerialNumber IssuerAndSerialNumber,
     subjectKeyIdentifier [0] SubjectKeyIdentifier,
     originatorKey [1] OriginatorPublicKey }

   OriginatorPublicKey ::= SEQUENCE {
     algorithm AlgorithmIdentifier,
     publicKey BIT STRING }

   RecipientEncryptedKeys ::= SEQUENCE OF RecipientEncryptedKey

   RecipientEncryptedKey ::= SEQUENCE {
     rid KeyAgreeRecipientIdentifier,
     encryptedKey EncryptedKey }

   KeyAgreeRecipientIdentifier ::= CHOICE {
     issuerAndSerialNumber IssuerAndSerialNumber,
     rKeyId [0] IMPLICIT RecipientKeyIdentifier }

   RecipientKeyIdentifier ::= SEQUENCE {
     subjectKeyIdentifier SubjectKeyIdentifier,
     date GeneralizedTime OPTIONAL,
     other OtherKeyAttribute OPTIONAL }

   SubjectKeyIdentifier ::= OCTET STRING

   KEKRecipientInfo ::= SEQUENCE {
     version CMSVersion,  -- всегда устанавливается значение 4
     kekid KEKIdentifier,
     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
     encryptedKey EncryptedKey }

   KEKIdentifier ::= SEQUENCE {
     keyIdentifier OCTET STRING,
     date GeneralizedTime OPTIONAL,
     other OtherKeyAttribute OPTIONAL }

   PasswordRecipientInfo ::= SEQUENCE {
     version CMSVersion,   -- всегда устанавливается значение 0
     keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier OPTIONAL,
     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
     encryptedKey EncryptedKey }

   OtherRecipientInfo ::= SEQUENCE {
     oriType OBJECT IDENTIFIER,
     oriValue ANY DEFINED BY oriType }

   DigestedData ::= SEQUENCE {
     version CMSVersion,
     digestAlgorithm DigestAlgorithmIdentifier,
     encapContentInfo EncapsulatedContentInfo,
     digest Digest }

   Digest ::= OCTET STRING

   EncryptedData ::= SEQUENCE {
     version CMSVersion,
     encryptedContentInfo EncryptedContentInfo,
     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }

   AuthenticatedData ::= SEQUENCE {
     version CMSVersion,
     originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
     recipientInfos RecipientInfos,
     macAlgorithm MessageAuthenticationCodeAlgorithm,
     digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
     encapContentInfo EncapsulatedContentInfo,
     authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
     mac MessageAuthenticationCode,
     unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }

   AuthAttributes ::= SET SIZE (1..MAX) OF Attribute

   UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute

   MessageAuthenticationCode ::= OCTET STRING

   DigestAlgorithmIdentifier ::= AlgorithmIdentifier

   SignatureAlgorithmIdentifier ::= AlgorithmIdentifier

   KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier

   ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier

   MessageAuthenticationCodeAlgorithm ::= AlgorithmIdentifier

   KeyDerivationAlgorithmIdentifier ::= AlgorithmIdentifier

   RevocationInfoChoices ::= SET OF RevocationInfoChoice

   RevocationInfoChoice ::= CHOICE {
     crl CertificateList,
     other [1] IMPLICIT OtherRevocationInfoFormat }

   OtherRevocationInfoFormat ::= SEQUENCE {
     otherRevInfoFormat OBJECT IDENTIFIER,
     otherRevInfo ANY DEFINED BY otherRevInfoFormat }

   CertificateChoices ::= CHOICE {
     certificate Certificate,
     extendedCertificate [0] IMPLICIT ExtendedCertificate,  -- Отменено
     v1AttrCert [1] IMPLICIT AttributeCertificateV1,        -- Отменено
     v2AttrCert [2] IMPLICIT AttributeCertificateV2,
     other [3] IMPLICIT OtherCertificateFormat }

   AttributeCertificateV2 ::= AttributeCertificate

   OtherCertificateFormat ::= SEQUENCE {
     otherCertFormat OBJECT IDENTIFIER,
     otherCert ANY DEFINED BY otherCertFormat }

   CertificateSet ::= SET OF CertificateChoices

   IssuerAndSerialNumber ::= SEQUENCE {
     issuer Name,
     serialNumber CertificateSerialNumber }

   CMSVersion ::= INTEGER  { v0(0), v1(1), v2(2), v3(3), v4(4), v5(5) }

   UserKeyingMaterial ::= OCTET STRING

   OtherKeyAttribute ::= SEQUENCE {
     keyAttrId OBJECT IDENTIFIER,
     keyAttr ANY DEFINED BY keyAttrId OPTIONAL }

   -- Идентификаторы типа содержимого

   id-ct-contentInfo OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) ct(1) 6 }

   id-data OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 }

   id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }

   id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 }

   id-digestedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5 }

   id-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 }

   id-ct-authData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2 }

   -- Атрибуты CMS

   MessageDigest ::= OCTET STRING

   SigningTime  ::= Time

   Time ::= CHOICE {
     utcTime UTCTime,
     generalTime GeneralizedTime }

   Countersignature ::= SignerInfo

   -- Идентификаторы атрибутов объекта

   id-contentType OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3 }

   id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 }

   id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 }

   id-countersignature OBJECT IDENTIFIER ::= { iso(1) member-body(2)
       us(840) rsadsi(113549) pkcs(1) pkcs9(9) 6 }

   -- Устаревший расширенный синтаксис из PKCS#6

   ExtendedCertificateOrCertificate ::= CHOICE {
     certificate Certificate,
     extendedCertificate [0] IMPLICIT ExtendedCertificate }

   ExtendedCertificate ::= SEQUENCE {
     extendedCertificateInfo ExtendedCertificateInfo,
     signatureAlgorithm SignatureAlgorithmIdentifier,
     signature Signature }

   ExtendedCertificateInfo ::= SEQUENCE {
     version CMSVersion,
     certificate Certificate,
     attributes UnauthAttributes }

   Signature ::= BIT STRING

   END -- для CryptographicMessageSyntax2004

12.2. Модуль ASN.1 для сертификата атрибута версии 1

   AttributeCertificateVersion1
       { iso(1) member-body(2) us(840) rsadsi(113549)
         pkcs(1) pkcs-9(9) smime(16) modules(0) v1AttrCert(15) }

   DEFINITIONS EXPLICIT TAGS ::=
   BEGIN

   -- Экспортируется все

   IMPORTS

     -- Импорт из RFC 3280 [PROFILE], Приложение A.1
           AlgorithmIdentifier, Attribute, CertificateSerialNumber,
           Extensions, UniqueIdentifier
              FROM PKIX1Explicit88
                   { iso(1) identified-organization(3) dod(6)
                     internet(1) security(5) mechanisms(5) pkix(7)
                     mod(0) pkix1-explicit(18) }

     -- Импорт из RFC 3280 [PROFILE], Приложение A.2
           GeneralNames
              FROM PKIX1Implicit88
                   { iso(1) identified-organization(3) dod(6)
                     internet(1) security(5) mechanisms(5) pkix(7)
                     mod(0) pkix1-implicit(19) }

     -- Импорт из RFC 3281 [ACPROFILE], Приложение B
           AttCertValidityPeriod, IssuerSerial
              FROM PKIXAttributeCertificate
                   { iso(1) identified-organization(3) dod(6)
                     internet(1) security(5) mechanisms(5) pkix(7)
                     mod(0) attribute-cert(12) } ;

   -- Определения взяты из X.509-1997 [X.509-97], но используются другие имена
   -- в целях предотвращения конфликтов.

   AttributeCertificateV1 ::= SEQUENCE {
     acInfo AttributeCertificateInfoV1,
     signatureAlgorithm AlgorithmIdentifier,
     signature BIT STRING }

   AttributeCertificateInfoV1 ::= SEQUENCE {
     version AttCertVersionV1 DEFAULT v1,
     subject CHOICE {
       baseCertificateID [0] IssuerSerial,
         -- связано с сертификатом открытого ключа
       subjectName [1] GeneralNames },
         -- связано с именем
     issuer GeneralNames,
     signature AlgorithmIdentifier,
     serialNumber CertificateSerialNumber,
     attCertValidityPeriod AttCertValidityPeriod,
     attributes SEQUENCE OF Attribute,
     issuerUniqueID UniqueIdentifier OPTIONAL,
     extensions Extensions OPTIONAL }

   AttCertVersionV1 ::= INTEGER { v1(0) }

   END -- для AttributeCertificateVersion1

13. Литература

13.1. Нормативные документы

[ACPROFILE] Farrell, S. and R. Housley, «An Internet Attribute Certificate Profile for Authorization», RFC 3281, April 2002.

[PROFILE] Housley, R., Polk, W., Ford, W., and D. Solo, «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 3280, April 2002.

[STDWORDS] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[X.208-88] CCITT. Recommendation X.208: Specification of Abstract Syntax Notation One (ASN.1). 1988.

[X.209-88] CCITT. Recommendation X.209: Specification of Basic Encoding Rules for Abstract Syntax Notation One (ASN.1). 1988.

[X.501-88] CCITT. Recommendation X.501: The Directory — Models. 1988.

[X.509-88] CCITT. Recommendation X.509: The Directory — Authentication Framework. 1988.

[X.509-97] ITU-T. Recommendation X.509: The Directory — Authentication Framework. 1997.

[X.509-00] ITU-T. Recommendation X.509: The Directory — Authentication Framework. 2000.

13.2. Дополнительная литература

[CMS1] Housley, R., «Cryptographic Message Syntax», RFC 2630, June 1999.

[CMS2] Housley, R., «Cryptographic Message Syntax (CMS)», RFC 3369, August 2002.

[CMSALG] Housley, R., «Cryptographic Message Syntax (CMS) Algorithms», RFC 3370, August 2002.

[ESS] Hoffman, P., «Enhanced Security Services for S/MIME», RFC 2634, June 1999.

[MSAC] Microsoft Development Network (MSDN) Library, «Authenticode», April 2004 Release.

[MSG] Ramsdell, B., «S/MIME Version 3.1 Message Specification», RFC 3851, July 2004.

[OCSP] Myers, M., Ankney, R., Malpani, A., Galperin, S. and C. Adams, «X.509 Internet Public Key Infrastructure Online Certificate Status Protocol — OCSP», RFC 2560, June 1999.

[OLDMSG] Dusse, S., Hoffman, P., Ramsdell, B., Lundblade, L., and L. Repka, «S/MIME Version 2 Message Specification», RFC 2311, March 1998.

[PKCS#6] RSA Laboratories. PKCS #6: Extended-Certificate Syntax Standard, Version 1.5. November 1993.

[PKCS#7] Kaliski, B., «PKCS #7: Cryptographic Message Syntax Version 1.5», RFC 2315, March 1998.

[PKCS#9] RSA Laboratories. PKCS #9: Selected Attribute Types, Version 1.1. November 1993.

[PWRI] Gutmann, P., «Password-based Encryption for CMS», RFC 3211, December 2001.

[RANDOM] Eastlake 3rd, D., Crocker, S., and J. Schiller, «Randomness Recommendations for Security», RFC 175012, December 1994.

14. Вопросы безопасности

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

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

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

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

Метод управления ключами, используемый для распространения ключей аутентификации сообщений, сам по себе должен обеспечивать аутентификацию источников, поскольку в противном случае будут доставляться целостные сообщения из неизвестных источников. Алгоритмы RSA [PKCS#1, NEWPKCS#1] и Ephemeral-Static Diffie-Hellman [DH-X9.42] не обеспечивают требуемой аутентификации источников. Алгоритм Static-Static Diffie-Hellman [DH-X9.42] обеспечивает требуемую аутентификацию, когда ключи инициатора и получателя оба привязаны к приемлемой идентификации в сертификатах X.509.

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

Реализации должны генерировать случайные значения ключей шифрования содержимого, ключей аутентификации сообщений, векторов инициализации (IV) и заполнения. Генерация ключевых пар «открытый-секретный» также основана на случайных значениях. Использование некачественных генераторов псевдослучайных чисел (PRNG13) при создании криптографических ключей может приводить к снижению уровня или полной утрате защиты. Атакующему может оказаться гораздо проще воспроизвести среду PRNG, в которой создавались ключи, перебрав сравнительно небольшой набор вариантов, нежели использовать средства подбора (brute force) во всем пространстве возможных ключей. Генерация качественных случайных чисел достаточно сложна. В RFC 1750 [RANDOM] представлены важные рекомендации по решению таких задач.

При использовании алгоритмов согласования ключей или заранее известных ключей шифрования ключей, такие ключи служат для шифрования ключей, которые, в свою очередь, применяются для шифрования содержимого. Если для шифрования ключей и содержимого применяются разные алгоритмы, эффективный уровень защиты определяется наиболее слабым из этих двух алгоритмов. Если, например, содержимое шифруется с помощью алгоритма Triple-DES с использованием 168-битового ключа, а для ключа шифрования ключей применяется алгоритм RC2 с 40-битовым ключом, уровень защиты будет соответствовать 40-битовому ключу. Тривиальный поиск для определения 40-битового ключа RC2 позволит расшифровать ключ Triple-DES, который после этого может использоваться для расшифровки содержимого. Следовательно, разработчики должны гарантировать, что для шифрования ключей используется алгоритм не менее (а возможно и более) сильный, нежели для шифрования содержимого.

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

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

15. Благодарности

Этот документ включает результаты работы многих профессионалов. Автор отмечает значительный вклад всех членов рабочей группы IETF S/MIME. Отдельные благодарности Rich Ankney, Simon Blake-Wilson, Tim Dean, Steve Dusse, Carl Ellison, Peter Gutmann, Bob Jueneman, Stephen Henson, Paul Hoffman, Scott Hollenbeck, Don Johnson, Burt Kaliski, John Linn, John Pawling, Blake Ramsdell, Francois Rousseau, Jim Schaad, Dave Solo, Paul Timmel и Sean Turner за поддержку с их стороны.

16. Адрес автора

Russell Housley

Vigil Security, LLC

918 Spring Knoll Drive

Herndon, VA 20170

USA

EMail: housley@vigilsec.com

Перевод на русский язык

Николай Малых

nmalykh@gmail.com

17. Полное заявление авторских прав

Copyright (C) The Internet Society (2004).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.


1Basic Encoding Rules — базовые правила представления.

2Distinguished Encoding Rules — правила «изысканного» представления.

3Certificate revocation list.

4В оригинале ошибочно указан только первый способ. См. https://www.rfc-editor.org/errata_search.php?eid=1744. Прим. перев.

5В оригинале ошибочно сказано OR. См. https://www.rfc-editor.org/errata_search.php?eid=222. Прим. перев.

6User Keying Material — пользовательский ключевой материал.

7Message authentication code.

8В оригинале ошибочно указан только алгоритм подписи. См. https://www.rfc-editor.org/errata_search.php?eid=1756. Прим. перев.

9Online Certificate Status Protocol — протокол интерактивной информации о статусе сертификата.

10Authority Revocation List — список отзыва УЦ.

11User keying material.

12Этот документ заменен RFC 4086. Прим. перев.

13Pseudo-random number generators.

 

Рубрика: RFC | Комментарии к записи RFC 3852 Cryptographic Message Syntax (CMS) отключены

Защита сети на основе систем с открытым исходным кодом

Курс предназначен для администраторов безопасности и сетевых администраторов. Основной задачей курса является рассмотрение возможности реализации систем обеспечения информационной безопасности хостов и сетей на базе программных средств с открытым исходным кодом. Курс содержит рекомендации по выбору и развертыванию систем обеспечения безопасности, основанные на реальном опыте тестирования и эксплуатации подобных систем на базе операционной системы Linux в реальных условиях корпоративных сетей и сайтов Internet. Достаточно большое внимание уделяется вопросам создания эффективной системы фильтрации на уровне пакетов, как одной из основных компонент систем обеспечения безопасности. Приводится обзор средств организации и поддержки соединений VPN. Кроме того, рассматриваются вопросы, связанные с фильтрацией незапрошенной электронной почты и вирусов на граничных узлах сети. Отдельно рассматриваются программные средства, позволяющие администратору обеспечить эффективный мониторинг сети и обнаружение потенциальных брешей в системе безопасности граничных узлов, сетевых серверов и пользовательских компьютеров.

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

Этот курс был неоднократно прочитан в России и сопредельных странах, вызывая интерес у администраторов сетей и сотрудников служб информационной безопасности.

Слушателям курса предоставлялся обширный (более 400 страниц А4) документ со справочной информацией о системах Linux. Вы можете загрузить этот документ в формате PDF (29Мбайт)

Рубрика: Linux | Комментарии к записи Защита сети на основе систем с открытым исходным кодом отключены

RFC 3846 Mobile IPv4 Extension for Carrying Network Access Identifiers

Network Working Group                                   F. Johansson
Request for Comments: 3846                               ipUnplugged
Category: Standards Track                               T. Johansson
                                                          Bytemobile
                                                           June 2004

Расширение Mobile IPv4 для передачи идентификаторов доступа

Mobile IPv4 Extension for Carrying Network Access Identifiers

PDF

Статус документа

Данный документ содержит спецификацию стандартного протокола Internet, предложенного сообществу Internet, и является приглашением к дискуссии в целях развития этого протокола. Сведения о текущем состоянии стандартизации протокола вы найдете в документе Internet Official Protocol Standards (STD 1). Документ можно распространять без ограничений.

Авторские права

Copyright (C) The Internet Society (2004).

Аннотация

При перемещении мобильного узла из одной сети в другую требуется повторная аутентификация этого узла. Если в домашней сети используется множество серверов AAA1 и агентов HA2 у сервера Home AAA может отсутствовать достаточная для корректной повторной аутентификации узла информация, что может привести к необходимости смены HA для узла. В настоящем документе определено расширение Mobile IP, используемое для передачи идентификаторов серверам Home AAA и HA в форме NAI3. Это расширение позволяет агентам HA передавать свою идентификационную информацию, а также данные о сервере Home AAA мобильному узлу, который может передать ее на локальный сервер AAA при изменении точки подключения. Это расширение может также использоваться в других ситуациях, требующих обмена NAI между узлами Mobile IP.

1. Введение

При создании сетей одним из требованием является обеспечение резервирования. Для решения этой задачи в одном домене может использоваться множество серверов AAA. Когда мобильный узел регистрируется в сети, процедура аутентификации выполняется с использованием одного из серверов AAA в домашнем домене пользователя. При последующей регистрации пользователя в другом домене процедура аутентификации должна повторяться. Однако избыточность, обеспечиваемая протоколом AAA, может привести к тому, что повторная аутентификация будет выполняться с использованием другого сервера AAAH, который может не иметь информации о присвоенной сессии HA. В этом документе определяется расширение протокола Mobile IP, которое может использоваться для распространения данных, позволяющих решить эту проблему. Более того, обычно единственной информацией о домашнем агенте (HA) в регистрационном запросе является адрес IP, как определено в RFC 3344 [5]. К сожалению этого может оказаться недостаточно для некоторых инфраструктур AAA (таких, как Diameter [6]), использующих маршрутизацию на базе областей (realm); таким инфраструктурам AAA требуется знать полное имя FQDN4 для домашнего агента, чтобы обеспечить корректную обработку. Просмотр обратной зоны DNS5 позволяет идентифицировать лишь интерфейс Mobile IP для IP-адреса HA, который может не обеспечивать взаимно-однозначного соответствия с именем FQDN данного домашнего агента. Это является для HA основанием включать свою идентификацию в регистрационный отклик. Определенное в этом документе расширение MIP v4 включает также субтип, показывающий, как это можно сделать. Идентификация HA тогда может быть включена мобильным узлом в последующие регистрационные запросы через другие точки подключения.

2. Спецификация требований

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не следует (SHALL NOT), следует (SHOULD), не нужно (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с BCP 14, RFC 2119 [1].

Используемая в документе терминология, связанная с Mobile IP, описана в RFC 3344 [5]. В дополнение здесь определено еще несколько используемых в данном документе терминов:

AAAH

Один из нескольких серверов AAA в домашней сети

FQDN

Fully Qualified Domain Name – полное доменное имя, включающее имя хоста в домене и имя самого домена.

Identity

Идентификация узла, определяемая его FQDN.

NAI

Network Access Identifier – идентификатор доступа в сеть [2].

3. Расширение для передачи NAI

В этом документе описывается расширение NAI Carrying Extension, которое может использоваться в запросах и откликах Mobile IP Registration, а также в анонсах Mobile IP Agent [5]. Расширение может быть использовано любым узлом, которых хочет передать идентификацию в форме NAI [4]. В этом документе определены также несколько номеров субтипов, которые идентифицируют конкретные типы передаваемых NAI (главы 4 и 5). Предполагается, что дополнительные типы NAI будут определяться в последующих документах.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   Length      |   Sub-Type    |    NAI ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type (тип) — 136 (может быть опущен) [5].

Length (размер) – 8-битовое целое число без знака. Задает размер расширения в октетах с учетом полей Type и Length. В это поле должно помещаться значение, на 1 превышающее общий размер поля NAI.

Sub-Type (субтип) – это поле показывает конкретный тип NAI, передаваемый в поле NAI.

NAI – значение NAI [2] в форме строки (string).

3.1. Обработка NAI Carrying Extension

Когда мобильный узел или домашний агент добавляет NAI Carrying Extension в регистрационное сообщение, это расширение должно размещаться до любых расширений, связанных с аутентификацией.

Если чужой агент (FA6) добавляет NAI Carrying Extension в регистрационное сообщение, это расширение должно появляться до любых связанных с аутентификацией расширений, добавляемых FA.

Если агент HA добавил NAI Carrying Extension в отклик Registration Reply для MN, и не получил расширение NAI в последующих сообщениях Registration Request от MN, этот агент HA может предполагать, что MN не понимает расширение NAI. В таких случаях агенту HA не нужно добавлять это расширение NAI в конце последующих сообщений Registration Reply, передаваемых MN.

4. Субтип HA Identity

Для HA Identity используется субтип 1 расширения NAI Carrying Extension. Идентификация содержит значение NAI для HA в форме hostname@realm. Имя хоста вместе с областью формируют полное имя FQDN (hostname.realm) для HA.

Домашний агент, использующий это расширение, должен обеспечить его присутствие в первом сообщении Registration Reply, передаваемом мобильному узлу MN7, который в настоящее время не зарегистрирован. Расширение требуется включать в последующие сообщения Registration Reply лишь в тех случаях, когда это же было расширение включено в сообщение Registration Request, полученное от того же узла MN.

Мобильный узел, использующий это расширение, должен (если он получает это расширение в сообщении Registration Reply) включать его в каждый последующий регистрационный запрос, когда требуется повторная аутентификация. Отказ в повторной аутентификации (например, по причине недоступности AAAH) может приводить к прерыванию сеанса Mobile IP. При инициировании новой сессии мобильному узлу может передаваться новое значение HA Identity NAI и приведенные выше требования будут относиться к полученному в этом случае NAI.

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

Чужому агенту, который получил HA NAI с этим расширением в регистрационном запросе, следует включить HA NAI при запросе аутентификации MN через инфраструктуру AAA, если используемый протокол AAA способен передать эту информацию.

5. Субтип AAAH Identity

Для AAAH Identity используется субтип 2 расширения NAI Carrying Extension. Идентификация содержит NAI домашнего сервера AAA в формате hostname@realm. Имя хоста вместе с областью формируют полное имя FQDN (hostname.realm) для домашнего сервера AAA.

Если в домашней сети имеется несколько серверов AAA, домашний агент, обеспечивающий поддержку выбора AAAH, в соответствии с данным документом должен обеспечивать AAAH identity в первом сообщении Registration Reply, передаваемом мобильному узлу MN. Расширение требуется включать в последующие сообщения Registration Reply лишь в тех случаях, когда это же расширение было включено в сообщение Registration Request, полученное от того же узла MN.

Мобильному узлу следует сохранять последнюю идентификацию AAAH Identity, полученную в сообщении Registration Reply, а также следует включать AAAH Identity в каждое последующее сообщение Registration Request при повторной аутентификации в целях повышения эффективности. Невозможность доступа к указанному серверу AAAH при повторной аутентификации будет приводить к возврату нового значения AAAH Identity NAI (которое следует сохранить и включать в последующие регистрационные запросы). Отказ при аутентификации (например, в результате недоступности AAAH) будет приводить к разрыву сессии Mobile IP; при инициировании нового сеанса мобильному узлу может указываться новое значение AAAH для его использования после новой регистрации.

Чужому агенту, который получает AAAH NAI с этим расширением в регистрационном запросе, следует включить полученную идентификацию AAAH NAI при запросе аутентификации мобильного узла через инфраструктуру AAA, если используемый протокол AAA способен передать эту информацию.

6. Вопросы безопасности

Данная спецификация вводит новые расширения Mobile IP, используемые для передачи идентификации мобильного агента и сервера AAA в форме идентификаторов NAI. Сообщения Mobile IP, которые переносят такие расширения, должны аутентифицироваться, как указано в [4], если ранее не был согласован иной метод аутентификации. Следовательно, данная спецификация не снижает уровень защиты сообщений Mobile IP.

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

7. Согласование с IANA

В этом документе определены новое расширение Mobile IP и новое пространство кодов субтипа расширений Mobile IP для управления IANA.

В главе 3 определено новое расширение Mobile IP — Mobile IP NAI Carrying Extension. Код типа для этого расширения — 136. Данное расширение добавляет новое пространство кодов субтипа, в котором значения 1 и 2 выделены настоящим документом. Рассмотрение новых кодов субтипа для Mobile IP NAI Carrying Extension выполняется в соответствии с процедурой Expert Review8, и описывается при необходимости, как указано в документе [3].

Содержание и формат данного расширения не привязаны к конкретным AAA NAI, поэтому при определении в будущем новых значений NAI, которые не будут относиться к категории AAA NAI, они могут, тем не менее, быть согласованы с пространством кодов субтипа, определенным в данном документе для NAI Carrying Extension.

Для расширений NAI Carrying Extension следует выделять значения кодов типа одновременно из пространства IANA для необязательных (skippable) расширений Mobile IPv4 и пространства IANA для анонсов Mobile IPv4. В идеальном случае выделяемые из этих пространств значения должны совпадать.

8. Благодарности

Спасибо авторам исходного документа GNAIE — Mohamed M Khalil, Emad Qaddoura, Haseeb Akhtar и Pat R. Calhoun. Исходный документ был удален из “сферы влияния” рабочей группы MIP, поскольку она не использовала данное расширение. Идеи этого документа использованы здесь. Благодарим также Henrik Levkowetz и Kevin Purser за их полезные отклики и помощь в написании этого документа.

9. Нормативные документы

[1] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[2] Aboba, B. and M. Beadles, «The Network Access Identifier», RFC 2486, January 1999.

[3] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

[4] Calhoun, P. and C. Perkins, «Mobile IP Network Access Identifier Extension for IPv4», RFC 2794, March 2000.

[5] Perkins, C., «IP Mobility Support for IPv4», RFC 3344, August 2002.

[6] Calhoun, P., Loughney, J., Guttman, E., Zorn, G. and J. Arkko, «Diameter Base Protocol», RFC 3588, September 2003.

10. Адреса авторов

Fredrik Johansson

ipUnplugged AB

Arenavagen 23

Stockholm S-121 28

SWEDEN

Phone: +46 8 725 5916

EMail: fredrik@ipunplugged.com

Tony Johansson

Bytemobile Inc

2029 Stierlin Court

Mountain View, CA 94043

USA

Phone: +1 650 862 0523

EMail: tony.johansson@bytemobile.com


Перевод на русский язык

Николай Малых

EMail: nmalykh@gmail.com

11. Полное заявление авторских прав

Copyright (C) The Internet Society (2004).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.


1Authentication Authorization and Accounting – аутентификация, авторизация (предоставление полномочий) и учет.

2Home Agent – домашний агент.

3Network Access Identifier – идентификатор доступа в сеть.

4Fully Qualified Domain Name.

5Reverse DNS lookup.

6Foreign Agent.

7Mobile Node.

8Рецензия эксперта.

Рубрика: RFC | Оставить комментарий

RFC 3748 Extensible Authentication Protocol (EAP)

Network Working Group                                       B. Aboba
Request for Comments: 3748                                 Microsoft
Obsoletes: 2284                                             L. Blunk
Category: Standards Track                         Merit Network, Inc
                                                       J. Vollbrecht
                                           Vollbrecht Consulting LLC
                                                          J. Carlson
                                                                 Sun
                                                   H. Levkowetz, Ed.
                                                         ipUnplugged
                                                           June 2004

Расширяемый протокол аутентификации (EAP)

Extensible Authentication Protocol (EAP)

PDF

Статус документа

В этом документе содержится спецификация протокола, предложенного сообществу Internet. Документ служит приглашением к дискуссии в целях развития и совершенствования протокола. Текущее состояние стандартизации протокола вы можете узнать из документа Internet Official Protocol Standards (STD 1). Документ может распространяться без ограничений.

Авторские права

Copyright (C) The Internet Society (2004).

Аннотация

В этом документе определен расширяемый протокол аутентификации (EAP1) — модель проверки подлинности, которая поддерживает множество методов проверки. EAP обычно работает непосредственно на базе протоколов канального уровня типа PPP2 или IEEE 802 и не требует использования протокола IP. EAP обеспечивает собственную поддержку повторов передачи и избавления от дубликатов, основанную на гарантированном порядке доставки нижележащего уровня. Фрагментация в EAP не поддерживается, однако отдельные методы EAP могут реализовать свои средства фрагментации.

Этот документ отменяет действие RFC 2284. Перечень отличий от RFC 2284 приведен в Приложении A.

Оглавление

Исключено в версии HTML.

1. Введение

В этом документе определен расширяемый протокол аутентификации (EAP) — модель проверки подлинности, которая поддерживает множество методов проверки. EAP обычно работает непосредственно на базе протоколов канального уровня типа PPP или IEEE 802 и не требует использования протокола IP. EAP обеспечивает собственную поддержку повторов передачи и избавления от дубликатов, но она основана на гарантированном порядке доставки нижележащего уровня. Фрагментация в EAP не поддерживается, однако отдельные методы EAP могут реализовать свои средства фрагментации.

EAP может использоваться на выделенных каналах и в коммутируемых устройствах как в проводных, так и в беспроводных средах. В настоящее время протокол EAP реализован на хостах и маршрутизаторах, которые соединены через устройства коммутации или по телефонным линиям с использованием протокола PPP [RFC1661]. Протокол также может быть реализован в коммутаторах и точках доступа, использующих протоколы IEEE 802 [IEEE-802]. Инкапсуляция EAP в проводных средах IEEE 802 описана в стандарте [IEEE-802.1X], а инкапсуляция в беспроводных ЛВС — в стандарте [IEEE-802.11i].

Одним из преимуществ архитектуры EAP является ее гибкость. EAP служит для выбора конкретного механизма аутентификации, обычно после того, как проверяющая сторона (authenticator) запрашивает дополнительную информацию для определения конкретного метода аутентификации, который будет применяться. Вместо требования обновлять проверяющую сторону для поддержки каждого нового метода аутентификации EAP разрешает использование внутреннего сервера аутентификации, который может реализовать те или иные методы аутентификации, а проверяющая сторона просто пропускает через себя все или некоторые методы проверки подлинности партнеров.

В этом документе требования к проверяющей стороне не зависят от того, работает она в проходном (pass-through) режиме или нет. Когда требования относятся к проверяющей стороне или к внутреннему серверу аутентификации (в зависимости от того, где завершается аутентификация EAP), будет использоваться термин «сервер EAP».

1.1. Спецификация требований

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не следует (SHALL NOT), следует (SHOULD), не нужно (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе интерпретируются в соответствии с [RFC2119].

1.2. Терминология

Ниже определены часто используемые в этом документе термины.

Authenticator — проверяющая сторона (аутентификатор)

Инициирующая аутентификацию EAP сторона соединения. Термин authenticator используется в стандарте [IEEE-802.1X] и в данном документе его трактовка совпадает с принятой в этом стандарте.

Peer — партнер

Сторона соединения, отвечающая на запрос аутентификации. В стандарте [IEEE-802.1X] для обозначения этой стороны соединения используется термин Supplicant.

Supplicant — проверяемая сторона

Сторона соединения, отвечающая на запрос аутентификации. Трактовка этого термина в данном документе совпадает с трактовкой в стандарте [IEEE-802.1X]. Кроме того, в этом документе для обозначения отвечающей на запрос аутентификации стороны используется термин peer (партнер).

Backend authentication server — внутренний сервер аутентификации

Внутренний сервер аутентификации представляет собой объект, обеспечивающий услуги аутентификации для проверяющей стороны. При использовании этого сервера он обычно выполняет методы EAP для проверяющей стороны. Такая же терминология применяется в стандарте [IEEE-802.1X].

AAA

Проверка подлинности (Authentication), полномочий (Authorization) и учет (Accounting). Протоколы AAA для работы с EAP включают RADIUS [RFC3579] и Diameter [DIAM-EAP]. В этом документе термины «сервер AAA» и «внутренний сервер аутентификации» используются, как синонимы.

Displayable Message — отображаемое сообщение

Понятная человеку строка символов. Кодирование сообщений должно следовать формату преобразований UTF-8 [RFC2279].

EAP server — сервер EAP

Объект, завершающий использование метода аутентификации EAP с проверяемой стороной. При использовании внутреннего сервера аутентификации сервер EAP является частью проверяющей стороны. При работе проверяющей стороны в проходном (pass-through) режиме сервер EAP размещается на внутреннем сервере аутентификации.

Silently Discard — отбрасывание без уведомления

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

Successful Authentication — успешная аутентификация

В контексте этого документа успешная аутентификация означает обмен сообщениями EAP, в результате которого проверяющая сторона принимает решение о предоставлении доступа проверяемой стороне, а та принимает решение об использовании этого доступа. Решение проверяющей стороны обычно включает два аспекта — аутентификацию и проверку полномочий, проверяемая сторона может быть аутентифицирован проверяющей, но не получить доступа в соответствии с политикой проверяющей стороны.

Message Integrity Check (MIC) — проверка целостности сообщения

Функция хэширования (с ключом), используемая для аутентификации и защиты целостности данных. Обычно используется термин MAC3, но в спецификациях IEEE 802 и в данном документе применяется акроним MIC во избежание путаницы с контролем доступа к среде — Medium Access Control.

Cryptographic Separation — криптографическое разделение

Два ключа (x и y) считаются «криптографически разделенными», если наличие всех сообщений, переданных с использованием протокола, не позволяет определить x по y или y по x без «взлома» некоторых криптографических допущений. В частности, это определение допускает наличие у злоумышленника информации о всех nonce, переданных открытым текстом, а также всех предсказуемых значений счетчиков, используемых протоколом. Криптографический взлом будет обычно требовать обращения необратимой (one-way) функции или предсказания значения криптографического генератора псевдослучайных чисел без знания секрета. Иными словами, если ключи разделены криптографически, не существует способа сокращения расчета x из y или y из x и противник должен выполнить расчет, эквивалентный по объему полному поиску значения секретного ключа.

Master Session Key (MSK) — основной ключ сеанса

Ключевой материал, создаваемый сервером и проверяемой стороной EAP, который экспортируется методом EAP. MSK имеет размер не менее 64 октетов. В существующих реализациях сервер AAA, действующий в качестве сервера EAP, доставляет MSK проверяющей стороне.

Extended Master Session Key (EMSK) — расширенный основной ключ сеанса

Дополнительный ключевой материал, создаваемый клиентом и сервером EAP, который экспортируется методом EAP. Размер EMSK составляет не менее 64 октетов. EMSK не используется совместно с проверяющей стороной или третьими сторонами. EMSK зарезервирован на будущее и в настоящее время не используется.

Result indications — индикация результата

Метод обеспечивает индикацию результата, если после передачи и получения последнего сообщения:

  1. проверяемая сторона понимает была ли она аутентифицирована сервером и был ли сервер аутентифицирован ею;

  2. сервер понимает аутентифицировал ли он другую сторону и был ли аутентифицирован ею.

В случаях, когда успешной аутентификации достаточно для предоставления доступа, стороны будут также знать о желании другой стороны предоставить доступ. Это бывает не всегда и доступ проверяемой стороны может быть отвергнут по причине отсутствия нужных полномочий (например, ограничение сессии) или по иным причинам. Поскольку обмен EAP осуществляется между проверяемой стороной и сервером, на решение о предоставлении доступа могут влиять и друге узлы (например, AAA-прокси). Более подробное обсуждение этого вопроса содержится в параграфе 7.16.

1.3. Применимость

Протокол EAP был разработан для аутентификации в системах доступа, где недоступен уровень IP. Использование EAP для иных целей (например, для передачи больших объемов данных) не рекомендуется.

Поскольку EAP не требует связности IP, этот протокол лишь обеспечивает гарантированный транспорт для протоколов аутентификации и не более того.

EAP является пошаговым протоколом и в каждый момент в сети находится только один пакет. В результате протокол EAP не обеспечивает эффективной передачи больших объемов данных, в отличие от транспортных протоколов типа TCP [RFC793] или SCTP [RFC2960].

Хотя EAP поддерживает повторную передачу, он предполагает наличие упорядоченной доставки на нижележащем уровне и поэтому обработка пакетов, доставленных с нарушением порядка, не поддерживается.

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

Хотя методы аутентификации типа EAP-TLS [RFC2716] обеспечивают поддержку фрагментации и сборки, определенные в этом документе методы EAP не поддерживают этого. В результате при превышении пакетом EAP размера MTU для канала, эти методы сталкиваются с проблемами.

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

При поддержке аутентификации на основе сертификатов число дополнительных периодов кругового обхода может многократно возрасти по причине фрагментации цепочек сертификатов. В общем случае фрагментированный пакет EAP будет требовать для передачи столько периодов кругового обхода, сколько было создано фрагментов. Например, цепочка сертификатов размером 14960 октетов будет требовать 10 периодов кругового обхода при передаче 1496-октетных EAP MTU.

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

2. Расширяемый протокол аутентификации (EAP)

Аутентификационный обмен EAP осуществляется в описанном ниже порядке.

  1. Проверяющая сторона передает пакет запроса (Request) на аутентификацию партнера. Пакет имеет поле Type для указания запрашиваемой информации. Примерами типов запроса могут служить Identity, MD5-challenge, и т. П. Тип MD5-Challenge близко соответствует протоколу аутентификации CHAP [RFC1994]. Обычно, проверяющая сторона будет передавать начальный запрос Identity, однако этот запрос не является обязательным и может быть пропущен. Например, такой запрос может не потребоваться, когда аутентификация определяется портом, к которому подключен партнер (выделенная линия, выделенное устройство или коммутируемая линия), или аутентификация выполняется иным путем (по отождествления вызывающей станции или MAC-адресу, в поле Name отклика MD5-Challenge и т. П.).

  2. Проверяемая сторона передает пакет отклика (Response) в ответ на пригодный запрос. Как и пакет запроса, отклик имеет поле Type с аналогичным назначением и применением.

  3. Проверяющая сторона передает дополнительный пакет Request, а партнер отвечает на него пакетом Response. Последовательность запросов и откликов повторяется, пока это требуется. Протокол EAP работает в «пошаговом» режиме, поэтому новый запрос не может быть передан до получения пригодного отклика. Проверяющая сторона отвечает за повторную передачу запросов, как описано в параграфе 4.1. После заданного числа повторов передачи проверяющей стороне следует завершить EAP-транзакцию. Проверяющей стороне недопустимо передавать пакет Success или Failure при повторе передачи или отсутствии отклика от партнера.

  4. Транзакция продолжается, пока не станет ясно, что проверяющая сторона не может аутентифицировать партнера (неприемлемые отклики на один или множество запросов) и в результате она должна передать пакет EAP Failure (код 4). Транзакция может также продолжаться, пока проверяющая сторона не решит, что она успешно завершила аутентификацию. В этом случае аутентификатор должен передать пакет EAP Success (код 3).

Преимущества

  • Протокол EAP может поддерживать множество механизмов аутентификации без предварительного согласования используемого механизма.

  • Серверы доступа NAS4 (например, коммутатор с портом доступа) не обязаны понимать каждый метод доступа и могут действовать как проходные агенты для внутреннего сервера аутентификации. Поддержка проходного режима является необязательной. Проверяющая сторона может аутентифицировать локальных партнеров и в то же время работать в проходном режиме для нелокальных партнеров и непонятных методов аутентификации.

  • Разделение проверяющей стороны и внутреннего сервера аутентификации упрощает управление свидетельствами и реализацию политики принятия решений.

Недостатки

  • При использовании с PPP протокол EAP требует добавления нового типа аутентификации в PPP LCP5, что ведет к необходимости обновления реализаций протокола PPP. Это также является отклонением от предыдущей модели аутентификации в PPP с согласованием конкретного механизма аутентификации в процессе LCP. Аналогично, реализациям коммутаторов и точек доступа требуется поддержка [IEEE-802.1X] для использования EAP.

  • Когда проверяющая сторона отделена от внутреннего сервера аутентификации, усложняется анализ защиты и распространение ключей (если оно требуется).

2.1. Поддержка последовательности методов

Транзакция EAP может использовать последовательность методов. Типичным примером является запрос Identity, за которым следует один метод аутентификации EAP (например, MD5-Challenge). Однако проверяющая сторона и ее партнер должны использовать только один метод аутентификации (тип 4 или выше) в транзакции EAP, после чего проверяющая сторона должна передать пакет Success или Failure.

После того, как партнер передал пакет Response того же типа, который был указан в изначальном запросе, проверяющей стороне недопустимо передавать запросы других типов (за исключением Notification-Request) до завершения финального цикла данного метода и недопустимо передавать запрос любого типа для дополнительного метода после завершения работы исходного метода аутентификации. Партнер, получивший такой запрос, должен трактовать его как непригодный и отбрасывать без уведомления. В результате повторные запросы Identity не поддерживаются.

Проверяемой стороне недопустимо передавать пакет Nak (обычный или расширенный) в ответ на запрос после того, как был передан изначальный отклик, отличный от Nak. Поскольку атакующий может предавать обманные пакеты EAP Request, проверяющей стороне при получении неожиданного пакета Nak следует отбрасывать его, делая запись в журнал событий.

Множество методов аутентификации в одной транзакции EAP не поддерживается по причине уязвимости для MITM6-атак (см. Параграф 7.4) и несовместимости с существующими реализациями.

Когда используется один метод аутентификации EAP, но внутри него применяются другие методы («туннелирование» методов), запрет на использование множества методов аутентификации не применим. Такие «туннелированные» методы выглядят с точки зрения EAP, как один метод. Совместимость с ранними версиями может быть обеспечена за счет того, что партнер, не понимающий «туннелированный» метод, может ответить на начальный запрос EAP пакетом Nak (обычным или расширенным). Для предотвращения уязвимостей «туннелированные» методы должны поддерживать защиту от MITM-атак.

2.2. Модель мультиплексирования EAP

Концептуально реализация EAP состоит из перечисленных ниже компонент.

  1. Нижележащий уровень отвечает за передачу кадров EAP между проверяющей стороной и ее партнером. EAP работает на основе множества протоколов, включая PPP, проводные ЛВС IEEE 802 [IEEE-802.1X], беспроводные ЛВС IEEE 802.11 [IEEE-802.11], UDP (L2TP [RFC2661] и IKEv2 [IKEv2]) и TCP [PIC]. Поведение протоколов нижележащего уровня рассматривается в разделе 3.

  2. Уровень EAP получает и передает пакеты EAP через нижележащий уровень, обеспечивает детектирование дубликатов и повторную передачу, а также доставляет и принимает сообщения EAP между уровнями проверяющей и проверяемой сторон EAP.

  3. Уровни проверяющей и проверяемой сторон EAP. На основе поля Code уровень EAP демультиплексирует пакеты EAP на уровень проверяющей и проверяемой сторон EAP. Обычно реализация EAP на данном хосте будет поддерживать функциональность проверяемой или проверяющей стороны, но возможно и совмещение этих функций. В последнем случае в реализации EAP присутствуют уровни проверяющей и проверяемой сторон.

  4. Уровень методов EAP реализует алгоритмы аутентификации, принимает и передает сообщения EAP через уровни проверяющей и проверяемой сторон EAP. Поскольку сам протокол не обеспечивает поддержки фрагментации, эта задача возлагается на методы EAP, как описано в разделе 5.

+-+-+-+-+-+-+-+-+-+-+-+-+  +-+-+-+-+-+-+-+-+-+-+-+-+
|           |           |  |           |           |
| EAP method| EAP method|  | EAP method| EAP method|
| Type = X  | Type = Y  |  | Type = X  | Type = Y  |
|       V   |           |  |       ^   |           |
+-+-+-+-!-+-+-+-+-+-+-+-+  +-+-+-+-!-+-+-+-+-+-+-+-+
|       !               |  |       !               |
|  EAP  ! Peer layer    |  |  EAP  ! Auth. layer   |
|       !               |  |       !               |
+-+-+-+-!-+-+-+-+-+-+-+-+  +-+-+-+-!-+-+-+-+-+-+-+-+
|       !               |  |       !               |
|  EAP  ! layer         |  |  EAP  ! layer         |
|       !               |  |       !               |
+-+-+-+-!-+-+-+-+-+-+-+-+  +-+-+-+-!-+-+-+-+-+-+-+-+
|       !               |  |       !               |
| Lower ! layer         |  | Lower ! layer         |
|       !               |  |       !               |
+-+-+-+-!-+-+-+-+-+-+-+-+  +-+-+-+-!-+-+-+-+-+-+-+-+
        !                          !
        !   Peer                   ! Authenticator
        +------------>-------------+

Рисунок 1. Модель мультиплексирования EAP.


Рисунок 1 иллюстрирует модель мультиплексирования EAP. Отметим, что реализация не обязана строго следовать этой модели — важно, чтобы поведение «в проводе» соответствовало модели.

В EAP поле Code используется подобно номеру протокола в IP. Предполагается, что уровень EAP демультиплексирует входящие пакеты EAP по значению поля Code. Принятые пакеты EAP с кодами 1 (Request), 3 (Success) и 4 (Failure) доставляются уровнем EAP на уровень партнера EAP, если тот реализован. Пакеты EAP с кодом 2 (Response) доставляются уровню проверяющей стороны EAP, если он реализован.

Поле Type используется подобно номеру порта в UDP или TCP. Предполагается, что уровни проверяющей стороны и ее партнера демультиплексируют входящие пакеты EAP по значению типа и доставляют их только методу EAP, соответствующему данному типу. Реализация метода EAP на хосте может регистрировать принятые пакеты от уровня проверяющей стороны или ее партнера, а также от обоих уровней в зависимости от поддерживаемой роли.

Поскольку для методов аутентификации EAP может оказаться желательным доступ к Identity, реализациям следует делать запросы и отклики Identity доступными для методов аутентификации (типа 4 и выше), а не только методу Identity. Тип Identity рассматривается в параграфе 5.1.

Отклик Notification используется только в качестве подтверждения партнером запроса Notification, но не подтверждает его обработку или вывод для пользователя. Не следует предполагать, что содержимое запросов и откликов Notification доступно другим методам. Тип Notification рассмотрен в параграфе 5.2.

Методы Nak (тип 3) и Expanded Nak (тип 254) используются для согласования метода. Партнеры отвечают на начальный запрос EAP для неприемлемого типа откликом Nak (тип 3) или Expanded Nak (тип 254). Не следует предполагать, что содержимое откликов Nak доступно другим методам. Типы Nak рассмотрены в параграфе 5.3.

Пакеты EAP с кодами Success и Failure не включают поля Type и не доставляются методам EAP. Коды Success и Failure рассматриваются в параграфе 4.2.

С учетом сказанного здесь сообщения Success, Failure, отклики Nak Response, запросы и отклики Notification недопустимо использовать для передачи данных, адресованных методам EAP.

2.3. Проходной режим

При работе в проходном режиме7 проверяющая сторона просматривает поля Code, Identifier и Length, как описано в параграфе 4.1. Полученные от партнера пакеты EAP пересылаются уровню аутентификации внутреннего сервера аутентификации, а пакеты от этого сервера, предназначенные партнеру, пересылаются последнему.

Хост, получивший пакет EAP, может выполнить по отношению к пакету только одну из трех операций — обработать, отбросить или переслать пакет. Решение о пересылке обычно принимается по результатам проверки полей Code, Identifier и Length. Работающая в проходном режиме реализация должна быть способна пересылать пакеты, полученные от партнера с кодом 2 (Response), внутреннему серверу аутентификации. Она также должна быть способна принимать пакеты EAP от внутреннего сервера и пересылать партнеру пакеты EAP с кодами 1 (Request), 3 (Success) и 4 (Failure).

Если проверяющая сторона не поддерживает локально один или несколько методов аутентификации, способных проверять подлинность партнера, поля заголовка уровня методов EAP (Type, Type-Data) не проверяются в процессе принятия решения о пересылке. Когда проверяющая сторона поддерживает локальные методы аутентификации, она может проверять поле Type, чтобы определить необходимость обработки или пересылки пакета. Соответствующие этой спецификации реализации проходного режима должны по умолчанию пересылать пакеты EAP любого типа.

     Peer         Pass-through Authenticator   Authentication
                                                   Server
+-+-+-+-+-+-+                                   +-+-+-+-+-+-+
|           |                                   |           |
|EAP method |                                   |EAP method |
|     V     |                                   |     ^     |
+-+-+-!-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-!-+-+-+
|     !     |   |EAP  |  EAP  |             |   |     !     |
|     !     |   |Peer |  Auth.| EAP Auth.   |   |     !     |
|EAP  ! peer|   |     | +-----------+       |   |EAP  !Auth.|
|     !     |   |     | !     |     !       |   |     !     |
+-+-+-!-+-+-+   +-+-+-+-!-+-+-+-+-+-!-+-+-+-+   +-+-+-!-+-+-+
|     !     |   |       !     |     !       |   |     !     |
|EAP  !layer|   |   EAP !layer| EAP !layer  |   |EAP  !layer|
|     !     |   |       !     |     !       |   |     !     |
+-+-+-!-+-+-+   +-+-+-+-!-+-+-+-+-+-!-+-+-+-+   +-+-+-!-+-+-+
|     !     |   |       !     |     !       |   |     !     |
|Lower!layer|   |  Lower!layer| AAA ! /IP   |   | AAA ! /IP |
|     !     |   |       !     |     !       |   |     !     |
+-+-+-!-+-+-+   +-+-+-+-!-+-+-+-+-+-!-+-+-+-+   +-+-+-!-+-+-+
      !                 !           !                 !
      !                 !           !                 !
      +-------->--------+           +--------->-------+

Рисунок 2. Проверяющая сторона в проходном режиме.


Пакеты EAP с кодами 1 (Request), 3 (Success) и 4 (Failure) демультиплексируются уровнем EAP и доставляются уровню партнера. Поэтому если хост не реализует уровень партнера EAP, эти пакеты отбрасываются без уведомления. Аналогично пакеты EAP с кодом 2 (Response) демультиплексируются уровнем EAP и доставляются уровню проверяющей стороны. Если хост не реализует уровень проверяющей стороны EAP, пакеты отбрасываются без уведомления. Поведение проверяемого узла в проходном режиме не рассматривается в спецификации и не поддерживается протоколами AAA типа RADIUS [RFC3579] и Diameter [DIAM-EAP].

Рисунок 2 иллюстрирует модель пересылки.

Для сессий, где проверяющая сторона работает в прозрачном режиме, результат аутентификации должен определяться только на основе индикации Accept/Reject, переданной внутренним сервером аутентификации. Недопустимо определять результат по содержимому пакета EAP, переданного с индикацией Accept/Reject, или отсутствию такой индикации в инкапсулированном пакете EAP.

2.4. Взаимная аутентификация

Поскольку протокол EAP является одноранговым, может возникать независимая и одновременная аутентификация во встречных направлениях (в зависимости от возможностей нижележащего уровня). Обе стороны канала могут действовать, как проверяющие и проверяемые одновременно. В таких случаях обеим сторонам необходимо реализовать уровни проверяющей и проверяемой стороны EAP. Кроме того, метод EAP на обеих сторонах должен поддерживать функциональность проверяющего и проверяемого узла.

Хотя EAP поддерживает взаимную аутентификацию8 сторон, некоторые реализации EAP, методов, протоколов AAA и канального уровня могут не поддерживать такой режим. Некоторые методы EAP могут поддерживать асимметричную аутентификацию с запросом одного типа свидетельств для проверяющей стороны и другого типа для ее партнера. Хосты, поддерживающие взаимную аутентификацию с таким методом, должны быть обеспечены свидетельствами обоих типов.

Например, EAP-TLS [RFC2716] представляет собой протокол «клиент-сервер», в котором для клиента и сервера обычно используются разные профили сертификатов. Это предполагает для хоста, поддерживающего взаимную аутентификацию с использованием EAP-TLS, необходимость реализовать уровни проверяющей и проверяемой стороны EAP, поддерживать роли обеих сторон в реализации EAP-TLS и обеспечивать подходящие сертификаты для каждой роли.

Протоколы AAA типа RADIUS/EAP [RFC3579] и Diameter EAP [DIAM-EAP] поддерживают только работу в режиме проходной проверяющей стороны. Как было отмечено в параграфе 2.6.2 [RFC3579], сервер RADIUS отвечает на Access-Request, инкапсулированный в пакет EAP-Request, Success или Failure откликом Access-Reject. Следовательно, он не поддерживает работы в режиме проходного партнера.

Даже при использовании метода, поддерживающего взаимную аутентификацию сторон и индикацию результата, некоторые аспекты могут потребовать двух аутентификаций EAP (по одной в каждом направлении). Эти аспекты включают перечисленное ниже.

  1. Поддержка двухстороннего создания ключей на нижележащем уровне. Нижележащие уровни типа IEEE 802.11 могут обеспечивать лишь одностороннюю генерацию и доставку временных сеансовых ключей. Например, согласование ключа группы, определенное в [IEEE-802.11i], является односторонним, поскольку в режиме инфраструктуры IEEE 802.11 только точки доступа (AP9) передают групповой и широковещательный трафик. В специальном10 режиме IEEE 802.11, где любой из партнеров может передавать групповой/широковещательный трафик, требуется два односторонних обмена ключами групп. Вследствие присущих архитектуре ограничений это также ведет к необходимости использования индивидуальной адресации при создании ключей и обмена EAP в каждом направлении.

  2. Поддержка «разрубания узлов» на нижележащем уровне. Нижележащие уровни типа IEEE 802.11 ad hoc не поддерживают «разрубания узлов», когда два хоста инициируют аутентификацию друг друга, что приводит в результате лишь к одной аутентификации. Это приводит к тому, что даже при поддержке двухстороннего согласования групповых ключей в 802.11 могут выполняться две аутентификации (по одной для направления).

  3. Политика партнера. Методы EAP могут поддерживать индикацию результата, позволяя партнеру показать серверу EAP в рамках метода, что он успешно аутентифицировал сервер, а серверу выполнить аналогичную индикацию для партнера. Однако проверяющая сторона в проходном режиме не может быть уверена, что партнер принял представленные сервером EAP свидетельства, пока эта информация не будет представлена проверяющей стороне по протоколу AAA. Проверяющей стороне следует интерпретировать получение ключа в пакете Accept, как индикацию успешной аутентификации сервера ее партнером.

Однако возможно, что политика доступа партнера оказалась неподходящей в начальном обмене EAP даже при взаимной аутентификации. Например, проверяющая сторона EAP может не показывать наличие полномочий для работы в роли проверяющей и проверяемой сторон. В результате партнер может потребовать дополнительной аутентификации в обратном направлении, даже если сервер EAP аутентифицирован им.

3. Поведение нижележащего уровня

3.1. Требования к нижележащему уровню

Ниже перечислены допущения EAP о нижележащем уровне.

  1. Транспорт без гарантии доставки. В EAP проверяющая сторона продолжает передавать запросы, пока на них не получено откликов, так что EAP не полагается на гарантию доставки на нижележащем уровне. Поскольку EAP определяет свое поведение для повторов передачи, возможно (хотя и не желательно) повторение передачи на уровне EAP и на нижележащем уровне при обеспечении тем гарантий доставки.

Отметим, что пакеты Success и Failure не передаются повторно. Без гарантий нижележащего уровня и при заметном количестве ошибок эти пакеты могут теряться, что будет приводить к тайм-аутам. Следовательно, для реализаций желательно повысить свою устойчивость к потере пакетов Success и Failure, как описано в параграфе 4.2.

  1. Детектирование ошибок. Хотя EAP не предполагает гарантированной доставки на нижележащем уровне, протокол опирается на детектирование ошибок этого уровня (например, CRC, Checksum, MIC и т. П.). Методы EAP могут не включать MIC или рассчитывать контрольную сумму не для всех полей пакета EAP (таких, как Code, Identifier, Length или Type). В результате без детектирования ошибок на нижележащем уровне незамеченные ошибки могут попадать в поля заголовков уровня EAP или уровня методов EAP, приводя к отказам при аутентификации.

    Например, метод EAP TLS [RFC2716] рассчитывает значение MIC только для поля Type-Data и трактует несовпадение MIC, как критическую ошибку. Без детектирования ошибок на нижележащем уровне этот метод и аналогичные ему методы не смогут работать надежно.

  2. Защита. EAP не требует от нижележащего уровня поддержки услуг защиты типа конфиденциальности пакетов, аутентификации, целостности и защиты от повторного использования пакетов. Однако при доступности таких услуг для динамического получения ключевого материала могут использоваться методы EAP, поддерживающие Key Derivation (см. Параграф 7.2.1). Это позволяет связать аутентификацию EAP с последующими данными и обеспечить защиту от изменения данных, повторного использования пакетов или использования ложных пакетов (spoofing). Более подробное рассмотрение приведено в параграфе 7.1.

  3. Минимальное значение MTU. EAP может работать с нижележащими уровнями, которые обеспечивают размер EAP MTU не менее 1020 октетов.

    EAP не поддерживает определение MTU для пути, а фрагментация и сборка не поддерживаются ни EAP, ни определенными в этой спецификации методами Identity (1), Notification (2), Nak Response (3), MD5-Challenge (4), One Time Password (5), Generic Token Card (6) и расширенным Nak (254).

    Обычно партнер EAP получает информацию о EAP MTU от нижележащего уровня и устанавливает подходящее значение для размера кадров EAP. Когда проверяющая сторона работает в проходном режиме, у сервера аутентификации нет прямого пути определения EAP MTU и поэтому он полагается на получение информации от проверяющей стороны (например, с помощью атрибута Framed-MTU, описанного в параграфе 2.4 [RFC3579]). Тогда как методы типа EAP-TLS [RFC2716] поддерживают фрагментацию и сборку, методы EAP, изначально разработанные для использования с протоколом PPP, где гарантируется поддержка MTU размером 1500 октетов для кадров управления (см. Параграф 6.1 [RFC1661]), могут не поддерживать функций фрагментации и сборки.

    Методы EAP могут предполагать по умолчанию минимальное значение EAP MTU в 1020 октетов. Методам EAP следует включать поддержку фрагментации и сборки, если размер их элементов данных превышает указанное минимальное значение EAP MTU.

    EAP является пошаговым протоколом, что ведет к снижению эффективности при использовании фрагментации. Следовательно, если нижележащий уровень поддерживает фрагментацию и сборку (как в случае работы EAP по протоколу IP), использование фрагментации на этом уровне может оказаться предпочтительней фрагментации в EAP. Этого можно достигнуть путем задания излишне большого значения EAP MTU, что приведет к использованию фрагментации и сборки на нижележащем уровне.

  4. Возможность дублирования пакетов. Нижележащий уровень с гарантированной доставкой будет обеспечивать уровню EAP поток пакетов, не содержащий дубликатов. Отсутствие дубликатов на нижележащем уровне желательно, но не требуется. Поле Identifier позволяет проверяющей стороне и ее партнеру обнаруживать дубликаты пакетов.

  5. Гарантии порядка доставки. EAP не требует монотонного роста значения поля Identifier и для корректной работы ему нужно сохранение порядка доставки на нижележащем уровне. Изначально протокол EAP разрабатывался для использования с протоколом PPP, в спецификации которого [RFC1661] (раздел 1) сказано:

    «Протокол PPP предназначен для простых каналов, передающих пакеты между двумя партнерами. Эти каналы обеспечивают полнодуплексную двухстороннюю передачу и предполагается, что порядок доставки пакетов сохраняется.»

    Нижележащий транспорт для EAP должен сохранять порядок доставки между отправителем и получателем для заданного уровня приоритета (гарантии сохранения порядка в [IEEE-802]).

    Нарушение порядка доставки обычно будет приводить к отказу аутентификации EAP и необходимости повторного запуска процедур аутентификации. В среде, где нарушение порядка является обычным делом, столь же обычными будут и отказы при аутентификации EAP. Рекомендуется использовать EAP только с нижележащими уровнями, обеспечивающими сохранение порядка доставки. Использование EAP с транспортом raw IP или UDP не рекомендуется. Инкапсуляция EAP в RADIUS [RFC3579] удовлетворяет требованиям по сохранению порядка, поскольку протокол RADIUS гарантирует такое сохранение.

3.2. Использование EAP с протоколом PPP

При организации связи через канал PPP каждая из сторон соединения сначала передает пакеты LCP для настройки канала передачи данных в фазе Link Establishment. После того как канал будет организован, PPP может использовать необязательную фазу аутентификации (Authentication) перед переходом в фазу Network-Layer Protocol.

По умолчанию аутентификация не является обязательной. Если аутентификация для соединения желательна, реализация должна задать опцию настройки протокола аутентификации11 в фазе организации соединения.

Если в фазе Authentication проверка подлинности партнера была выполнена, сервер может использовать аутентификационные данные при выборе опций для согласования на сетевом уровне.

При реализации с PPP протокол EAP не выбирает конкретный механизм аутентификации в фазе PPP Link Control, а оставляет этот выбор для фазы Authentication. Это позволяет проверяющей стороне запросить больше информации перед определением конкретного механизма аутентификации. Кроме того, это позволяет использовать «внутренний» сервер, который реально поддерживает различные механизмы, тогда как проверяющая сторона PPP просто передает через себя аутентификационный обмен. Фазы организации канала и аутентификации PPP, а также опция Authentication Protocol Configuration определены в спецификации протокола PPP [RFC1661].

3.2.1. Формат опции настройки протокола аутентификации для PPP

Формат опции PPP Authentication Protocol Configuration для согласования EAP показан на рисунке. Поля опции передаются слева направо.

В поле Information кадра PPP Data Link Layer, где поле протокола имеет шестнадцатеричное значение C227 (PPP EAP), инкапсулируется один пакет EAP.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     |     Authentication Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

3

Length

4

Authentication Protocol

Шестнадцатеричное значение C227 показывает протокол EAP.

3.3. Использование EAP с протоколами IEEE 802

Инкапсуляция EAP в кадры IEEE 802 определена в стандарте [IEEE-802.1X]. Инкапсуляция IEEE 802 для EAP не включает PPP и протокол IEEE 802.1X не поддерживает согласований для канального или сетевого уровня. В результате этого при использовании IEEE 802.1X нет возможности согласования не входящих в EAP механизмов аутентификации типа PAP или CHAP [RFC1994].

3.4. Индикация нижележащего уровня

Надежность и безопасность индикации нижележащего уровня зависит от этого уровня. Поскольку протокол EAP не привязан к определенным средам, наличие защиты на нижележащем уровне не принимается во внимание при обработке сообщений EAP.

Партнер, получивший индикацию успеха от нижележащего уровня (см. Параграф 7.2), в целях повышения надежности может предположить, что пакет Success был потерян и вести себя так, будто этот пакет был получен. Это включает и игнорирование пакета Success в некоторых условиях, как описано в параграфе 4.2.

Обсуждение некоторых вопросов надежности и безопасности индикации нижележащего уровня в PPP, проводных сетях IEEE 802 и беспроводных сетях IEEE 802.11 приведено в параграфе 7.12. Канальный уровень.

После завершения аутентификации EAP проверяемая сторона обычно будет передавать и принимать данные через проверяющую сторону. Желательно обеспечить гарантию того, что элементы этих данных будут совпадать с теми, которые использовались при успешной аутентификации EAP. Для решения этой задачи требуется, чтобы нижележащий уровень обеспечивал на уровне отдельных пакетов защиту целостности, аутентификацию и защиту от повторного использования пакетов. Эти услуги нужно связать с ключами, созданными в процессе аутентификации EAP. В противном случае последующий трафик может быть изменен, подменен или использован повторно.

Когда ключевой материал для шифронабора нижележащего уровня обеспечивается EAP, согласование шифронабора и активация ключей контролируются нижележащим уровнем. Для случая PPP шифронаборы согласуются в ECP так, что ключи, полученные из аутентификации EAP, невозможно использовать до завершения ECP. Поэтому начальный обмен EAP невозможно защитить с использованием шифронабора PPP, хотя повторная аутентификация EAP может быть защищена.

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

4. Формат пакетов EAP

В этом разделе описан формат пакетов EAP. Поля передаются слева направо.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Code      |  Identifier   |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Data ...
+-+-+-+-+


Code

Однооктетное поле Code показывает тип пакета EAP и может принимать значения:

1 Request — запрос;

2 Response — отклик;

3 Success — успех;

4 Failure — отказ.

Поскольку в EAP определены только коды 1-4, пакеты EAP с другими значениями кода должны отбрасываться обеими сторонами без уведомления.

Identifier

Однооктетное поле Identifier используется для обеспечения соответствия между запросами и откликами.

Length

Двухоктетное поле Length показывает размер (в октетах) пакета EAP с учетом полей Code, Identifier, Length и Data. Октеты, выходящие за пределы указанного размера, следует трактовать, как заполнение канального уровня — на приеме эти данные должны игнорироваться. Сообщения, в которых значение поля Length превышает размер полученного пакета, должны отбрасываться без уведомления.

Data

Поле Data не является обязательным, а его формат зависит от типа пакета (значения поля Code).

4.1. Запросы и отклики

Описание

Пакеты Request (запрос, код 1) передаются партнеру проверяющей стороной. Каждый пакет Request имеет поле Type, которое показывает тип запрашиваемой информации. Дополнительные пакеты Request должны передаваться, пока не будет получен пригодный отклик, не завершится отсчет числа попыток или нижележащий уровень не сообщит об отказе.

Повторные запросы должны передаваться с тем же значением поля Identifier, чтобы их можно было отличить от новых запросов. Содержимое поля данных зависит от типа запроса. Партнер должен передавать пакет Response в ответ на корректный запрос. Отклики должны передаваться только в ответ на корректные пакеты Request и никогда не должны повторяться по таймеру.

Если партнер получает корректный дубликат запроса, на который уже передан отклик, он должен повторить передачу исходного пакета Response без обработки полученного дубликата. Запросы должны обрабатываться в порядке их получения, обработка предыдущего запроса должна быть завершена до начала работы с новым пакетом Request.

Ниже приводится описание полей пакетов Request и Response. Поля передаются слева направо.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Code      |  Identifier   |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |  Type-Data ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-


Code

1 для Request;

2 для Response.

Identifier

Поле Identifier занимает 1 октет. Значения идентификатора в передаваемых повторно (по тайм-ауту в ожидании отклика) пакетах запросов должны совпадать со значением поля в исходном пакете Request. В новых (не повторных) запросах значение поля Identifier должно меняться.

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

Для того, чтобы не путались новые запросы с повторами предыдущих, выбираемые для каждого нового пакета Request значения поля Identifier должны отличаться только от идентификатора в исходном запросе — уникальности идентификаторов для всех запросов транзакции не требуется. Одним из путей решения этой задачи является увеличение значения поля Identifier на 1 в каждом новом запросе. Рекомендуется для первого запроса выбирать значение идентификатора случайным образом, а не начинать отсчет с нуля, поскольку такое решение затруднит организацию атак.

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

Примечание для разработчиков. Проверяющая сторона несет ответственность за повторную передачу пакетов Request. Если сообщение Request получено из некого источника (например, от внутреннего сервера аутентификации), проверяющая сторона должна сохранить копию такого запроса на случай возможного повтора передачи. Партнер отвечает за детектирование и обслуживание дубликатов запросов до начала какой-либо их обработки, включая передачу третьей стороне. Проверяющая сторона отвечает также за отбрасывание сообщений Response с непригодным значением поля Identifier до какой-либо их обработки, включая пересылку внутреннему аутентификационному серверу для проверки. Поскольку проверяющая сторона может повторить передачу до получения от партнера отклика, она может получить множество пакетов Response с одним идентификатором. Пока проверяющей стороной не будет принят новый запрос, значение поля Identifier не изменяется, поэтому проверяющая сторона пересылает отклики внутреннему серверу аутентификации по одному.

Length

Двухоктетное поле Length показывает размер пакета EAP с учетом полей Code, Identifier, Length, Type и Type-Data. Октеты, выходящие за пределы указанного размера, следует трактовать, как заполнение канального уровня — на приеме эти данные должны игнорироваться. Сообщения, в которых значение поля Length превышает размер полученного пакета, должны отбрасываться без уведомления.

Type

Поле Type занимает 1 октет и показывает тип запроса или отклика. В каждом пакете EAP Request или Response должно быть указано одно значение Type. Исходные спецификации типов описаны в разделе 5 данного документа.

Поле Type в отклике должно соответствовать полю типа в запросе или обычному/расширенному Nak (см. Параграф 5.3), показывающему неприемлемость типа запроса для партнера. Партнеру недопустимо слать пакет Nak (обычный или расширенный) в ответ на запрос после того, как был передан исходный отклик без Nak. Сервер EAP, получивший пакет Response, который не удовлетворяет перечисленным здесь требованиям, должен отбросить его.

Type-Data

Поле Type-Data зависит от типа запроса и отклика.

4.2. Пакеты Success и Failure

Пакет Success передается проверяющей стороной партнеру после завершения метода EAP (тип 4 или выше) для индикации успешно завершенной аутентификации партнера. Проверяющая сторона должна передать пакет EAP с Code = 3 (Success). Если партнера аутентифицировать не удается (непригодные отклики на один или множество запросов), после неудачного завершения метода EAP реализация должна передать пакет EAP с кодом 4 (Failure). Проверяющая сторона может ввести множество запросов до передачи отклика Failure, чтобы предотвратить влияние ошибок (опечаток) пользователя. В пакеты Success и Failure недопустимо включать дополнительные данные.

Проверяющей стороне недопустимо передавать пакет Failure, если спецификация данного метода не позволяет явно заканчивать работу метода в этой точке. Реализация EAP на проверяемой стороне, получившая пакет Success или Failure, передача которого не разрешена явно, должна отбросить этот пакет без уведомления. По умолчанию проверяемая сторона EAP должна отбрасывать без уведомления «пьяные» пакеты Success (пакеты Success, переданные сразу после соединения). Это предотвращает для некорректно работающих реализаций проверяющей стороны возможность обойти взаимную аутентификацию за счет передачи пакета Success до завершения транзакции метода EAP.

Примечание для разработчиков. Поскольку пакеты Success и Failure не подтверждаются, проверяющая сторона не передает их повторно и возникает риск потери такого пакета. Проверяемая сторона в таких случаях должна вести себя, как описано здесь. Информация по обработке индикации успеха или неудачи от нижележащего уровня была рассмотрена в параграфе 3.4.

Как было отмечено в параграфе 2.1, для транзакции EAP разрешается использовать только один метод аутентификации EAP. Методы EAP могут использовать разные способы индикации. После того, как проверяющая сторона передаст партнеру индикацию отказа, она должна передать вслед пакет Failure, независимо от отклика партнера. После того, как проверяющая сторона передаст партнеру индикацию успеха и получит индикацию успеха от того, она должна передать вслед пакет Success.

Проверяемая сторона после неудачного завершения метода аутентификации (индикация отказа от проверяющей стороны или нежелание партнера продолжать транзакцию — возможно после передачи индикации негативного результата) должна прервать транзакцию и передать индикацию отказа на нижележащий уровень. Проверяемая сторона должна отбрасывать без уведомления пакеты Success и может отбрасывать без уведомления пакеты Failure. В результате потеря пакета Failure не будет приводить к тайм-ауту.

Проверяемая сторона после обмена индикаторами успешного завершения с обеих сторон, должна без уведомления отбрасывать пакеты Failure. Если пакет EAP Success не был получен, проверяемая сторона может предположить потерю пакета.

Если проверяющая сторона не передала индикацию результата и партнер желает продолжать транзакцию, он будет ждать пакета Success или Failure после завершения работы метода и отбрасывать такой пакет без уведомления недопустимо. Если ни одного из этих пакетов не было получено, проверяемой стороне следует прервать транзакцию во избежание длительного ожидания при потере пакета EAP Failure.

Если партнер сталкивается с отказом при попытке аутентифицировать проверяющую сторону, последняя должна передать пакет Failure. Недопустимо в таких случаях предоставлять доступ, передавая пакет Success. Однако проверяющая сторона может опускать аутентификацию партнера в случаях предоставления ограниченного доступа (например, гостевого). В таком случае проверяющая сторона должна передать пакет Success.

Когда партнер аутентифицировал проверяющую сторону, но последняя не передала индикацию результата, она может отвергнуть доступ, передав пакет Failure, если у партнера нет полномочий доступа в сеть.

Ниже показан формат пакетов Success и Failure. Поля передаются слева направо.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Code      |  Identifier   |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Code

3 для Success;

4 для Failure.

Identifier

Поле Identifier занимает 1 октет и служит для сопоставления с откликами. Значение поля Identifier должно соответствовать значению аутентификатора в пакете Response, на который передается ответ.

Length

4

4.3. Поведение при повторе передачи

Поскольку процесс аутентификации часто включает ввод данных пользователем, следует принимать меры предосторожности при выборе стратегии повторной передачи и тайм-аутов. По умолчанию, когда EAP работает с нижележащим уровнем без гарантированной доставки, значение таймера повторной передачи EAP следует оценивать динамически. Предлагается повторять передачу не более 3 — 5 раз.

При работе с нижележащим уровнем, обеспечивающим гарантии доставки (например, EAP на основе ISAKMP/TCP, как описано в [PIC]), для таймера повторной передачи на проверяющей стороне следует устанавливать бесконечное значение, чтобы на уровне EAP повторной передачи не происходило. Партнер может поддерживать свое значение тайм-аута, чтобы предотвратить бесконечное ожидание запроса.

Когда процесс аутентификации требует пользовательского ввода, время кругового обхода определяется скорей действиями пользователя, чем параметрами сети, поэтому динамическое определение RTO может оказаться бесполезным. В таких случаях для таймера повтора следует устанавливать значение, достаточное для действий пользователя с увеличением в некоторых случаях (например при использовании карт-маркеров) значения тайм-аута (параграф 5.6).

Рекомендации по выбору значения тайм-аута для проверяющей стороны может дать внутренний сервер аутентификации (например, через атрибут RADIUS Session-Timeout).

Для динамической оценки таймера повтора передачи в EAP рекомендуется применять алгоритмы оценки SRTT, RTTVAR и RTO, описанные в [RFC2988], включая алгоритм Karn с описанными ниже возможными изменениями.

  1. Для предотвращения одновременной синхронизации множества распределенных систем таймеры повтора передачи задаются с флуктуациями на основе значения RTO с добавлением случайной величины из диапазона -RTOmin/2 — RTOmin/2. Могут использоваться и другие способы задания флуктуаций, однако значения должны быть псевдослучайными. Обсуждение генерации псевдослучайных значений приведено в работе [RFC1750].

  2. При работе EAP по одному каналу (а не через Internet) можно использовать меньшие значения RTOinitial, RTOmin и RTOmax. Рекомендуется задавать значения RTOinitial=1 сек., RTOmin=200 мсек. И RTOmax=20 сек.

  3. При работе EAP по одному каналу (а не через Internet) можно сделать оценки для проверяющей стороны, а не для сессии. Это позволяет при оценке более полно использовать информацию о поведении нижележащего уровня.

  4. 1

    Identity

    2

    Notification

    3

    Nak (только в Response)

    4

    MD5-Challenge

    5

    Однократный пароль (OTP)

    6

    Базовая карточка доступа (GTC)

    254

    Расширенные типы

    255

    Для экспериментов

    Реализация EAP может сбросить значения SRTT и RTTVAR после многократного снижения значения таймера, поскольку очевидно, что эти значения в такой ситуации не отражают реальность. После сброса SRTT и RTTVAR их следует инициализировать следующим значением RTT12, полученным в соответствии с уравнением 2.2 в [RFC2988].

5. Типы начальных запросов и откликов EAP

В этом параграфе определен начальный набор типов EAP, используемых в обменах Request/Response. В будущих документах могут быть определены новые типы. Поле Type занимает 1 октет и определяет структуру пакета с запросом или откликом EAP. Первые три типа имеют специальное значение.

Оставшиеся типы определяют аутентификационные обмены. Типы Nak (3) и Expanded Nak (254) применимы только для откликов и их недопустимо использовать в запросах.

Все реализации EAP должны поддерживать типы 1-4, определенные в данном документе, следует поддерживать также тип 254. Реализации могут поддерживать другие типы, определенные здесь или в будущих RFC.

Методы EAP могут поддерживать аутентификацию на основе общего секрета. Если таким секретом является вводимая пользователем комбинация символов, реализация может поддерживать кодировки символов, отличные от ASCII. В таких случаях обработку ввода следует выполнять с использованием подходящего профиля stringprep [RFC3454] и переводить введенные пользователем данные в строку октетов с использованием кодировки UTF-8 [RFC2279]. Предварительная версия возможного профиля stringprep описана в [SASLPREP].

5.1. Identity

Описание

Тип Identity используется для запроса отождествления партнера. В общем случае проверяющая сторона может ввести запрос этого типа в качестве стартового. В тех случаях, когда предполагается взаимодействие с пользователем на стороне партнера, может включаться дополнительное отображаемое сообщение. В ответ на запрос типа 1 (Identity) следует передавать отклик типа 1 (Identity).

Некоторые реализации EAP включают различные опции в запрос типа Identity после NUL-символа. По умолчанию реализации EAP не следует предполагать, что запрос или отклик типа Identity может быть больше 1020 октетов.

Рекомендуется использовать отклики Identity прежде всего в целях маршрутизации и выбора используемого метода EAP. Методам EAP следует включать механизм получения отождествления, чтобы не возникало необходимости опираться на отклик Identity. Запросы и отклики Identity передаются в открытом виде, поэтому атакующий может увидеть отождествление и даже изменить его. Для предотвращения такой угрозы предпочтительно включать в аутентификационный обмен метод EAP, который поддерживает аутентификацию на уровне пакетов, а также обеспечивает защиту целостности, конфиденциальность и предотвращение повторного использования пакетов. Отклик Identity может оказаться непригодным для такого метода — он может быть усеченным или затуманенным для сохранения тайны, а также «декорированным» для маршрутизации. Когда партнер настроен на восприятие только методов аутентификации, поддерживающих защищенные обмен отождествлениями, этот партнер может предоставлять сокращенный отклик Identity (например без своего имени в NAI [RFC2486]). Дополнительное рассмотрение этого вопроса содержится в параграфе 7.3.

Механизм аутентификации

Нет

Согласование шифронабора

Нет

Взаимная аутентификация

Нет

Защита целостности

Нет

Защита от повторов

Нет

Конфиденциальность

Нет

Создание ключей

Нет

Стойкость ключей

Устойчивость к атакам по словарю

Быстрый повтор соединения

Нет

Криптографическая привязка

Независимость сессий

Фрагментация

Нет

Связывание каналов

Нет

Примечание для разработчиков. Партнер может получать в результате ввода данных пользователем. Проверяющей стороне рекомендуется повторять Identity Request в случаях получения непригодного отождествления или отказа при аутентификации, поскольку пользователи могут ошибаться при вводе. Предлагается повторять Identity Request не менее 3 раз, прежде чем прервать аутентификацию. Для индикации некорректной попытки перед повтором Identity Request может передаваться Notification Request. Возможно также индицировать отказ в сообщении нового запроса Identity.

Type

1

Type-Data

Это поле может содержать отображаемое сообщение, представленное символами ISO 10646 с кодировкой UTF-8 [RFC2279]. Если Request содержит null-символ, выводиться будет только часть этого поля до символа null. Если значение Identity неизвестно, в отклик Identity следует включать поле нулевого размера. В откликах Identity недопустимо завершать поле null-символом. В любом случае размер поля Type-Data определяется из значения поля Length в пакете Request/Response.

Параметры защиты (параграф 7.2) показаны в таблице.

5.2. Notification

Описание

Необязательный тип Notification используется для передачи отображаемых сообщений партнеру от проверяющей стороны. Проверяющая сторона может передать партнеру Notification Request в любой момент, когда нет незавершенных запросов, до окончания метода аутентификации EAP. Партнер должен ответить на запрос Notification пакетом Notification Response, если спецификация метода аутентификации EAP не запрещает использовать сообщения Notification. В любом случае недопустимо передавать пакет Nak Response в ответ на запрос Notification. Отметим, что по умолчанию максимальный размер Notification Request составляет 1020 октетов, что оставляет не более 1015 октетов для выводимого пользователю сообщения.

Метод EAP может запрещать передачу сообщений Notification при работе этого метода. В таких случаях партнер должен отбрасывать запросы Notification без уведомления с момента, когда на начальный запрос для данного типа был передан отклик того же типа.

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

Type

2

Type-Data

Поле Type-Data в запросе содержит непустое отображаемое сообщение из символов ISO 10646 в кодировке UTF-8 [RFC2279]. Размер сообщения определяется значением поля Length в пакете Request. Недопустимо завершать сообщение null-символом. В ответ на запрос с полем типа, имеющим значение 2 (Notification) должен передаваться отклик. Поле Type-Data в отклике является пустым. Отклик следует передавать незамедлительно (независимо от отображения или записи сообщения в системный журнал).

Параметры защиты (см. Параграф 7.2) показаны в таблице.

Механизм аутентификации

Нет

Согласование шифронабора

Нет

Взаимная аутентификация

Нет

Защита целостности

Нет

Защита от повторов

Нет

Конфиденциальность

Нет

Создание ключей

Нет

Стойкость ключей

Устойчивость к атакам по словарю

Быстрый повтор соединения

Нет

Криптографическая привязка

Независимость сессий

Фрагментация

Нет

Связывание каналов

Нет

5.3. Nak

5.3.1. Обычный тип Nak

Описание

Традиционный тип Nak относится только к откликам. Этот тип устанавливается в откликах на запросы, когда желаемый тип аутентификации недоступен. Типы аутентификации могут иметь значение 4 и выше. Пакет Response содержит значение одного или нескольких типов аутентификации, желаемых партнером. Тип 0 используется для индикации отсутствия предлагаемых типов аутентификации, поэтому проверяющей стороне не следует передавать другой запрос после получения отклика Nak, содержащего нулевое значение.

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

Code

2 для Response.

Identifier

Поле Identifier занимает 1 октет и служит для сопоставления откликов с запросами. Значение поля Identifier в обычном отклике Nak должно соответствовать значению Identifier в пакете Request, на который передается отклик.

Length

>=6

Type

3

Type-Data

Когда проверяемая сторона получает запрос для неподходящего типа аутентификации (4-253, 255) или запрос для типа 254 при отсутствии поддержки расширенных типов, должен передаваться пакет Nak Response (тип 3). Поле Type-Data отклика Nak (тип 3) должно содержать один или множество октетов (по одному октету на тип), показывающих желаемые типы аутентификации, или 0 для индикации отсутствия предложений. Партнер, поддерживающий расширенные типы при получении запроса для неподходящего типа аутентификации (4-253, 255), может включить в отклик Nak (тип 3) значение 254 для индикации желания использовать расширенный тип. Если проверяющая сторона может принять это предложение, она будет отвечать на него сообщением Expanded Type Request (тип 254).

Механизм аутентификации

Нет

Согласование шифронабора

Нет

Взаимная аутентификация

Нет

Защита целостности

Нет

Защита от повторов

Нет

Конфиденциальность

Нет

Создание ключей

Нет

Стойкость ключей

Устойчивость к атакам по словарю

Быстрый повтор соединения

Нет

Криптографическая привязка

Независимость сессий

Фрагментация

Нет

Связывание каналов

Нет

Параметры защиты (параграф 7.2) показаны в таблице.

5.3.2. Expanded Nak

Описание

Расширенный тип Nak применим только к откликам. Этот тип должен передаваться только в откликах на запросы типа 254 (Expanded Type), когда тип аутентификации не приемлем. Expanded Nak Type использует формат Expanded Type, а отклик содержит один или множество типов аутентификации, желательных для проверяемой стороны (все в формате Expanded Type). Нулевое значение служит для индикации отсутствия предложений. Общий формат расширенного типа описан в параграфе 5.7. Поскольку тип Expanded Nak пригоден только для откликов и имеет очень ограниченную функциональность, его недопустимо использовать для индикации ошибок общего плана типа передачи сообщений об ошибках или согласования специфических параметров конкретного метода EAP.

Code

2 для Response.

Identifier

Поле Identifier занимает 1 октет и служит для сопоставления откликов с запросами. Значение поля Identifier в отклике Expanded Nak должно соответствовать значению Identifier в пакете Request, на который передается отклик.

Length

>=20

Type

254

Vendor-Id

0 (IETF)

Vendor-Type

3 (Nak)

Vendor-Data

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     2         |  Identifier   |           Length=28           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type=254    |                0 (IETF)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                3 (Nak)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type=254    |                0 (IETF)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                5 (OTP)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type=254    |                20 (MIT)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                6                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Тип Expanded Nak передается только в том случае, когда запрос содержит расширенный тип (254), как определено в параграфе 5.7. Поле Vendor-Data отклика13 Nak должно содержать один или множество типов аутентификации (4 и выше) в расширенном формате (8 октетов на тип) или 0 (также в расширенном формате) для индикации отсутствия предложений. Желаемые типы аутентификации могут включать комбинацию типов Vendor-Specific и IETF. Например, расширенный отклик Nak, показывающий предпочтение для OTP (тип 5) и MIT (Vendor-Id=20) расширенного типа 6 будет иметь вид, приведенный на рисунке.

Отклик Expanded Nak, показывающий отсутствие желаемых типов, приведен на рисунке.

Механизм аутентификации

Нет

Согласование шифронабора

Нет

Взаимная аутентификация

Нет

Защита целостности

Нет

Защита от повторов

Нет

Конфиденциальность

Нет

Создание ключей

Нет

Стойкость ключей

Устойчивость к атакам по словарю

Быстрый повтор соединения

Нет

Криптографическая привязка

Независимость сессий

Фрагментация

Нет

Связывание каналов

Нет

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     2         |  Identifier   |           Length=20           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type=254    |                0 (IETF)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                3 (Nak)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type=254    |                0 (IETF)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                0 (No alternative)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Параметры защиты (см. Параграф 7.2) показаны в таблице.

5.4. MD5-Challenge

Описание

Тип MD5-Challenge аналогичен протоколу PPP CHAP [RFC1994] (с MD5 в качестве алгоритма). Запрос содержит сообщение с «вызовом» партнеру. В ответ на запрос должен передаваться отклик, который может иметь тип 4 (MD5-Challenge), 3 (Nak) или 254 (Expanded Nak). Отклик Nak показывает желаемые партнером типы аутентификации. Реализации проверяемой стороны и сервера должны поддерживать механизм MD5-Challenge. Проверяющая сторона, которая работает только в проходном режиме, должна разрешать обмен информацией с внутренним сервером аутентификации, который поддерживает MD5-Challenge, хотя сама реализация проверяющей стороны EAP не обязана поддерживать MD5-Challenge. Однако, если проверяющая сторона может быть настроена на аутентификацию партнеров локально (например, не работать в проходном режиме), требование поддержки механизма MD5-Challenge становится актуальным.

Отметим, что использование поля Identifier для типа MD5-Challenge отличается от описанного в [RFC1994]. EAP позволяет повторять передачу запросов MD5-Challenge, тогда как в [RFC1994] сказано, что оба поля Identifier и Challenge должны изменяться при каждой передаче Challenge (эквивалент пакета с запросом MD5-Challenge в CHAP14).

Примечание. [RFC1994] трактует разделяемый секрет, как строку октетов и не задает способы ввода этой строки в систему (или управляется пользователем). Реализация EAP MD5-Challenge может поддерживать ввод парольных фраз, содержащих отличные от ASCII символы. Инструкции по обработке ввода и кодированию в октеты приведены в разделе 5.

Type

4

Type-Data

Содержимое поля Type-Data кратко описано ниже. Информацию по использованию этих полей можно найти в спецификации протокола PPP CHAP [RFC1994].

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Value-Size   |  Value ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Name ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Параметры защиты (параграф 7.2) показаны в таблице.

Механизм аутентификации

Пароль или общий ключ

Согласование шифронабора

Нет

Взаимная аутентификация

Нет

Защита целостности

Нет

Защита от повторов

Нет

Конфиденциальность

Нет

Создание ключей

Нет

Стойкость ключей

Устойчивость к атакам по словарю

Нет

Быстрый повтор соединения

Нет

Криптографическая привязка

Независимость сессий

Фрагментация

Нет

Связывание каналов

Нет

5.5. Одноразовый пароль (OTP)

Описание

Система одноразовых паролей (OTP15) определена в документах «A One-Time Password System16» [RFC2289] и «OTP Extended Responses17» [RFC2243]. Запрос содержит вызов OTP в формате, описанном в [RFC2289]. В ответ на запрос должен передаваться отклик, типа 5 (OTP), 3 (Nak) или 254 (Expanded Nak). Отклик Nak показывает желаемые партнером типы аутентификации. Метод EAP OTP предназначен для использования только в системе с одноразовыми паролями и его недопустимо применять для передачи паролей в открытом виде.

Механизм аутентификации

Одноразовый пароль

Согласование шифронабора

Нет

Взаимная аутентификация

Нет

Защита целостности

Нет

Защита от повторов

Да

Конфиденциальность

Нет

Создание ключей

Нет

Стойкость ключей

Устойчивость к атакам по словарю

Нет

Быстрый повтор соединения

Нет

Криптографическая привязка

Независимость сессий

Фрагментация

Нет

Связывание каналов

Нет

Type

5

Type-Data

Поле Type-Data содержит в запросе «вызов» OTP, как отображаемое сообщение. В откликах это поле используется для 6 слов из словаря OTP [RFC2289]. Недопустимо завершать сообщения null-символом. Размер поля определяется из значения поля Length в пакете Request/Reply.

Примечание. [RFC2289] не задает способ ввода пароля пользователем и преобразования пароля в октеты. Реализации EAP OTP могут поддерживать пароли с отличными от ASCII символами. Инструкции по обработке ввода и преобразования в октеты содержатся в разделе 5.

Параметры защиты (параграф 7.2) показаны в таблице.

5.6. Маркерные карты (GTC)

Описание

Тип GTC18 определен для использования с различными реализациями маркерных карточек, которые требуют пользовательского ввода. Запрос содержит отображаемое сообщение, а отклик — информацию Token Card, требуемую для аутентификации. Обычно эта информация считывается пользователем с устройства для работы с картами и вводится в форме текста ASCII. В ответ на запрос должен передаваться отклик. В отклике должен указываться тип 6 (GTC), 3 (Nak) или 254 (Expanded Nak). Отклик Nak показывает желаемые партнером типы аутентификации. Метод EAP GTC предназначен для использования с картами, поддерживающими аутентификацию «запрос — отклик», и его недопустимо использовать с открытыми паролями в отсутствие защищенного туннеля с аутентификацией сервера.

Type

6

Type-Data

Поле Type-Data в запросах содержит непустое отображаемое сообщение (размер определяется значением поля Length в пакете Request). Недопустимо завершать сообщение null-символом. В ответ на запрос должен передаваться отклик типа 6 (GTC). Отклик содержит данные из карты, нужные для аутентификации.

Механизм аутентификации

Аппаратный маркер

Согласование шифронабора

Нет

Взаимная аутентификация

Нет

Защита целостности

Нет

Защита от повторов

Нет

Конфиденциальность

Нет

Создание ключей

Нет

Стойкость ключей

Устойчивость к атакам по словарю

Нет

Быстрый повтор соединения

Нет

Криптографическая привязка

Независимость сессий

Фрагментация

Нет

Связывание каналов

Нет

Реализации EAP GTC могут поддерживать отклики с символами, отличными от ASCII. Инструкции по обработке ввода и преобразованию его в октеты приведены в разделе 5.

Параметры защиты (параграф 7.2) показаны в таблице.

5.7. Расширенные типы

Описание

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

Expanded Type служит также для расширения глобального пространства типов методов за пределы исходных 255 значений. Значение Vendor-Id = 0 отображает исходные 255 возможных типов в пространство из 232-1 возможных типов (тип 0 используется только в отклике Nak для индикации отсутствия предложений).

Поддерживающие атрибут Expanded реализации должны трактовать типы EAP со значением меньше 256 одинаково, независимо от формы их представления — один октет или 32-битовое значение Vendor-Type в Expanded Type с Vendor-Id = 0. Партнеры, не поддерживающие Expanded Type, должны передать отклик Nak, как описано в параграфе 5.3.1 и согласовать более подходящий метод аутентификации.

Формат и описание полей Expanded Type показаны ниже. Поля передаются слева направо.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |               Vendor-Id                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Vendor-Type                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Vendor data...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

254 для Expanded Type

Vendor-Id

Трехоктетное значение Vendor-Id представляет код SMI Network Management Private Enterprise Code для производителя с использованием сетевого порядка байтов (как выделено IANA). Нулевое значение Vendor-Id зарезервировано для использования IETF с целью расширения глобального пространства типов EAP.

Vendor-Type

Четырехоктетное поле Vendor-Type представляет фирменный тип метода от указанного производителя.

Если Vendor-Id = 0, поле Vendor-Type является расширением и надмножеством существующего пространства типов EAP. Первые 256 типов зарезервированы для совместимости с однооктетными типами EAP, которые уже определены или могут быть определены в будущем. Таким образом, типы EAP от 0 до 255 семантически одинаковы при их указании в однооктетных полях EAP Type или в полях Vendor-Type при Vendor-Id = 0. Из этого правила есть одно исключение — обычные и расширенные пакеты Nak относятся к одному типу, но должны трактоваться по-разному, поскольку имеют различные форматы.

Vendor-Data

Поле Vendor-Data определяется производителем. При Vendor-Id = 0 поле Vendor-Data будет использоваться для доставки содержимого методов EAP с определенными IETF типами.

5.8. Experimental

Описание

Тип Experimental не имеет фиксированного формата и содержимого. Этот тип предназначен для экспериментов с новыми типами EAP и тестов. При использовании этого типа нет никаких гарантий взаимодействия, как отмечено в [RFC3692].

Type

255

Type-Data

Не определено.

6. Взаимодействие с IANA

В этом разделе приведено руководство для агентства IANA19 в части регистрации значений, связанных с протоколом EAP, в соответствии с BCP 26 [RFC2434].

В EAP имеется два пространства имен, требующих регистрации — коды пакетов и типы методов.

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

Термины «пространство имен» (name space), «выделенное значение» (assigned value), «регистрация» (registration) трактуются здесь в соответствии с BCP 26.

При выделении значений используются определенные в BCP 26 правила и процедуры: «для частного применения» (Private Use), «обслуживание в порядке очереди» (First Come First Served), «экспертиза» (Expert Review), «требуется спецификация» (Specification Required), «с согласия IETF» (IETF Consensus), «стандартизация» (Standards Action).

Для регистрационных запросов, где следует консультироваться с указанными экспертами, ответственность за выбор таких экспертов ложится на руководителя направления IESG. Смысл заключается в том, что любое выделение значений должно сопровождаться публикацией RFC. Но для выделения значений до публикации RFC может использоваться заключение указанного эксперта, который может одобрить выделение значений, когда станет ясно, что RFC будет публиковаться. Эксперт будет направлять запрос в рассылку рабочей группы EAP (или ее преемника, заданного руководителем направления) для обзора и комментариев, включая Internet-Draft. До истечения 30 дней эксперту следует принять или отвергнуть регистрационный запрос и опубликовать свое решение в рассылке EAP WG20 или ее преемника, а также проинформировать IANA. Отказ должен быть мотивирован и по возможности в него следует включать конкретные предложения по изменению запроса для того, чтобы он был удовлетворен.

6.1. Коды пакетов

Коды пакетов (Packet Codes) имеют диапазон от 1 до 255, из которого уже выделены значения 1 — 4. Поскольку коды оказывают существенное влияние на взаимодействие, для выделения нового кода требуется стандартизация (Standards Action). Начинать выделение новых кодов следует со значения 5.

6.2. Типы методов

Исходное пространство типов методов EAP имеет диапазон от 1 до 255 и является наиболее дефицитным ресурсом EAP, поэтому выделять новые значения следует осторожно. Типы методов 1 — 45 уже распределены, при этом значение 20 доступно для переопределения. Типы 20 и 46 — 191 могут быть выделены с одобрения указанного эксперта при наличии спецификации (Specification Required).

Выделение блоков типов (более одного типа для данной цели) требует согласия IETF (IETF Consensus). Значения типов методов EAP от 192 до 253 зарезервированы и для их распределения требуется стандартизация.

Тип 254 выделен для Expanded Type. Если Vendor-Id = 0, значение Expanded Type служит для специфических целей данной реализации EAP, когда взаимодействие не имеет значения. При использовании с Vendor-Id = 0 тип метода 254 может также служить для поддержки расширенного пространства типов методов. Значения типов в диапазоне от 256 до 4294967295 могут распределяться после того, как будут распределены все типы 1 — 191, с одобрения указанного эксперта при наличии спецификации.

Тип 255 выделен для экспериментов типа тестирования новых методов EAP перед выделением постоянного типа.

7. Вопросы безопасности

В этом разделе описана базовая модель угроз, а также параметры защиты методов EAP, позволяющие смягчить эти угрозы.

Предполагается, что базовая модель угроз и параметры защиты будут применяться для определения требований к методам EAP при использовании в конкретных средах. Пример такого анализа требований имеется в стандарте [IEEE-802.11i-req]. Раздел описания параметров защиты является обязательным в спецификации метода EAP и требования для некоторых методов могут просто совпадать.

7.1. Модель угроз

Протокол EAP был разработан для использования с PPP [RFC1661], а позднее его адаптировали для проводных сетей IEEE 802 [IEEE-802] в стандарте [IEEE-802.1X]. Впоследствии EAP было предложено использовать в беспроводных ЛВС и Internet. Во всех случаях применения протокола атакующий может получить доступ к каналу, по которому передаются пакеты EAP. Например, атаки на телефонную инфраструктуру описаны в работе [DECEPTION].

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

  1. Попытка раскрытия идентификационных данных пользователей путем перлюстрации трафика.

  2. Попытка изменения или подмены пакетов EAP.

  3. Атаки на отказ служб за счет подмены индикации нижележащего уровня или пакетов Success/Failure, повторного использования пакетов EAP или генерации пакетов с перекрывающимися идентификаторами.

  4. Попытка раскрытия паролей с помощью атак по словарю для собранных в канале данных.

  5. Попытка убедить проверяемый узел присоединиться к сети без доверия путем организации MITM-атаки.

  6. Попытка нарушения процесса согласования EAP для принуждения к выбору более слабого метода аутентификации.

  7. Попытка восстановления ключей при использовании недостаточно стойких способов создания ключей в методах EAP.

  8. Попытка воспользоваться слабостью шифронабора после завершения транзакции EAP.

  9. Попытка снизить уровень стойкости при согласовании шифронабора, используемого для аутентификации EAP.

  10. Предоставление некорректной информации партнеру и/или серверу EAP от имени «проверяющей стороны» за счет использования сторонних механизмов (например, через AAA или протокол нижележащего уровня). К таким атакам относятся также «подмена» проверяющей стороны или предоставление противоречивой информации партнеру или серверу EAP.

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

7.2. Параметры защиты

Для четкой формулировки защиты, обеспечиваемой методом EAP, спецификации методов EAP должны включать раздел Security Claims (Параметры защиты), содержащий перечисленные ниже описания.

  1. Механизм — указание технологии аутентификации, сертификатов, общих ключей, паролей, карт и т. п.

  2. Параметры защиты — параметры защиты, обеспечиваемые методом, с использованием терминов, определенных в параграфе 7.2.1 — взаимная аутентификация, защита целостности, предотвращение повторного использования, конфиденциальность, создание ключей, стойкость к атакам по словарю, быстрое повторное соединение, криптографическое связывание. В разделе «Параметры защиты» спецификации метода EAP следует включать описания заявленных параметров. Это может обеспечиваться путем включения обоснования в приложение или указания ссылки на такие обоснования.

  3. Стойкость ключей — если метод создает ключи, должна быть оценена их стойкость. Эта оценка позволяет потенциальным пользователям метода определить достаточна ли стойкость ключей для планируемых приложений.

    Эффективную стойкость ключа следует оценивать числом битов следующим образом — если эффективная стойкость ключа составляет N битов, лучшие современные методы восстановления ключей (с вероятностью, которая не пренебрежимо мала) требуют в среднем усилий, сравнимых с выполнением 2N-1 операций типового блочного шифрования21. Данные о стойкости ключа следует сопроводить кратким обоснованием полученного числа битов. В это объяснение следует включать параметры, требуемые для достижения заявленной стойкости ключа, основанные на текущем понимании алгоритмов.

    Стойкость ключей зависит от используемого для их создания метода. Например, для ключей, созданных на основе общего секрета (пароль или долгосрочный секрет), а также, возможно, некоторой открытой информации (типа nonce), эффективная стойкость ограничена стойкостью долгосрочного секрета (предполагается, что процедура создания ключей проста в плане расчетов). В качестве другого примера отметим, что при использовании алгоритмов с открытым ключом стойкость симметричного ключа зависит от стойкости использованного открытого ключа.

  4. Описание иерархии ключей. Методы EAP, создающие ключи, должны включать ссылку на спецификацию иерархии ключей или описывать создание ключей MSK и EMSK.

  5. Наличие уязвимостей. В дополнение к описываемым параметрам защиты спецификация должна указывать, какие из перечисленных в параграфе 7.2.1 параметров защиты не включены.

7.2.1. Терминология, связанная с параметрами защиты для методов EAP

В этом параграфе даны определения терминов, используемых при описании средств защиты методов EAP.

Protected ciphersuite negotiation — защищенное согласование шифронабора

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

Mutual authentication — взаимная аутентификация

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

Integrity protection — защита целостности

Обеспечение аутентификации источника данных и защита от несанкционированного изменения пакетов EAP (включая запросы и отклики EAP). При поддержке такой защиты спецификация метода должна описывать пакеты и поля EAP, которые будут защищены.

Replay protection — защита от повторного использования пакетов

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

Confidentiality — конфиденциальность

Шифрование сообщений EAP, включая запросы и отклики EAP, индикацию успешного завершения или отказа. При поддержке такой защиты должна также обеспечиваться защита целостности (см. Параграф 7.3).

Key derivation — создание ключей из чего-либо

Способность метода EAP создавать экспортируемый ключевой материал типа MSK и EMSK. MSK служит лишь для создания ключей, но не для защиты транзакции EAP и последующих данных. EMSK пока служат резервом.

Key strength — стойкость ключа

Если эффективная стойкость ключа составляет N битов, лучшие современные методы восстановления ключей (с вероятностью, которая не пренебрежимо мала) требуют в среднем усилий, сравнимых с выполнением 2N-1 операций типового блочного шифрования.

Dictionary attack resistance — устойчивость к атакам по словарю

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

Fast reconnect — быстрое повторное соединение

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

Cryptographic binding — криптографическая связка

Демонстрация серверу EAP того, что один объект действует в качестве проверяемой стороны EAP для всех методов, выполняемых в рамках туннельного метода. Связка может также означать, что сервер EAP демонстрирует партнеру один объект, который действует в качестве сервера EAP для всех методов, выполняемых в рамках туннельного метода. При корректном выполнении связка снижает уязвимость к MITM-атакам.

Session independence — независимость сеансов

Демонстрация того, что пассивные (типа захвата данных транзакции EAP) или активные (включая компрометацию MSK или EMSK) не приводят к компрометации последующих или предшествующих ключей MSK или EMSK.

Fragmentation — фрагментация

Способность метода EAP поддерживать фрагментацию и сборку пакетов. Как отмечено в параграфе 3.1, методам EAP следует поддерживать фрагментацию и сборку, если размер пакетов EAP превышает минимальное значение MTU (1020 октетов).

Channel binding — связывание каналов

Свойство метода EAP, позволяющее сравнить данные, передаваемые по каналу с защитой целостности (например, аутентификаторы конечных точек), со значениями, передаваемыми с использованием иных механизмов (без применения данного канала) типа AAA или протокола нижележащего уровня.

Примечание. Приведенный список не является исчерпывающим. Могут включаться и другие свойства типа дополнительной защиты от атак на службы.

7.3. Защита Identity

Обмен Identity является в транзакции EAP необязательным. Поэтому можно опустить этот обмен целиком или использовать предлагаемый применяемым методом обмен идентификационными данными после организации защищенного канала.

Однако при поддержке роуминга в соответствии с [RFC2607] может потребоваться нахождение подходящего внутреннего сервера аутентификации до выполнения аутентификационной транзакции. Связанная с областью часть NAI22 [RFC2486] обычно включается в отклик EAP Identity, чтобы разрешить маршрутизацию аутентификационного обмена на подходящий внутренний сервер. Поэтому, хотя связанная с партнером часть NAI может быть опущена в отклике EAP Identity при наличии прокси или трансляторов, связанная с областью часть может требоваться.

Возможно, что идентификационные данные в отклике Identity будут отличаться от данных, аутентифицированных методом EAP. Такое отличие может быть преднамеренным для сокрытия идентификационной информации. Методу EAP при решении вопроса о предоставлении доступа следует использовать аутентифицированное отождествление.

7.4. MITM-атаки

При туннелировании EAP с использованием протокола, опускающего аутентификацию партнера, возникает потенциальная уязвимость к MITM-атакам, более подробно описанная в работах [BINDING] и [MITM].

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

Туннелирование EAP с использованием другого протокола открывает возможность для атак с подставным проверяющим узлом, туннелирующим EAP легитимному серверу. Когда протокол туннелирования используется для создания ключей, но не требует аутентификации партнера, атакующий, который убедил легитимного партнера соединиться с ним, сможет туннелировать пакеты EAP легитимному серверу с успешным завершением аутентификации и получением ключа. Это позволяет атакующему организовать MITM-атаку, получая доступ в сеть, а также возможность расшифровывать трафик между легитимным партнером и сервером.

Для ослабления таких атак возможен ряд мер, перечисленных ниже.

  1. Требование взаимной аутентификации в механизмах туннелирования EAP.

  2. Требование криптографического связывания между протоколом туннелирования EAP и туннелируемыми методами EAP. При поддержке криптографической связки требуется также механизм для защиты от атак на снижение уровня, позволяющих обойти такую связку. Дополнительную информацию о криптографических связках можно найти в работе [BINDING].

  3. Ограничение методов EAP, которые разрешено использовать без защиты, на основе политики проверяющей стороны и ее партнера.

  4. Отказ от использования туннелей при доступности одного стойкого метода.

7.5. Атаки с изменением пакетов

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

Поскольку Поле Identifier занимает 1 октет, значение этого поля легко угадать, что дает атакующему возможность инжектировать или повторно использовать пакеты EAP. Атакующий может также изменять заголовки EAP (поля Code, Identifier, Length, Type) в пакетах, где нет защиты заголовков. Это может вести к отбрасыванию пакетов или некорректной их интерпретации.

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

Для обеспечения защиты могут применяться специфические для метода проверки целостности сообщения (MIC). Если метод EAP поддерживает MIC на уровне пакетов, проверяющие узлы в проходном режиме, серверы аутентификации и проверяемые узлы должны проверять MIC. Информацию о непригодных MIC следует протоколировать. Трактовка непригодных MIC (критическая или некритическая ошибка) определяется спецификацией метода EAP.

Для методов, обеспечивающих защиту целостности пакетов EAP, рекомендуется включать в расчет контрольной суммы все поля заголовка EAP (Code, Identifier, Length, Type, Type-Data).

Поскольку сообщения EAP типов Identity, Notification и Nak не включают своего MIC, может оказаться желательным покрытие MIC метода EAP содержащейся в сообщении информации, а также заголовка каждого сообщения EAP.

Для обеспечения защиты EAP можно также инкапсулировать в защищенный канал, созданный протоколами типа ISAKMP [RFC2408], как делается в [IKEv2] или в TLS [RFC2246]. Однако, как было отмечено в параграфе 7.4, туннелирование EAP может приводить к уязвимости для MITM-атак.

Существующие методы EAP определяют проверки целостности сообщений (MIC), охватывающие более одного пакета EAP. Например, EAP-TLS [RFC2716] определяет MIC через запись TLS, которая может быть разделена на множество фрагментов, в сообщении FINISHED контрольная сумма MIC учитывает предыдущие сообщения. В случаях покрытия MIC для множества пакетов EAP негативный результат проверки MIC обычно трактуется как критическая ошибка.

В EAP-TLS [RFC2716] негативный результат проверки MIC считается критической ошибкой в соответствии со спецификацией TLS [RFC2246]. Однако возможна разработка методов EAP, которые будут поддерживать MIC на уровне пакетов и реагировать на негативный результат проверки целостности простым отбрасыванием пакетов.

В этом документе при описании обработки сообщений EAP предполагается, что проверка MIC на уровне пакетов (если она используется) выполняется до передачи каких-либо откликов и смены состояния хоста, принявшего пакет.

7.6. Атаки по словарю

Парольные механизмы аутентификации типа EAP-MD5, MS-CHAPv1 [RFC2433] и Kerberos V [RFC1510] известны уязвимостями к атакам по словарю. Уязвимости MS-CHAPv1 описаны в [PPTPv1], MS-CHAPv2 — в [PPTPv2], Kerberos — в [KRBATTACK], [KRBLIM] и [KERB4WEAK].

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

Если известно, что используемый алгоритм аутентификации уязвим к атакам по словарю, транзакцию можно туннелировать в защищенный канал. Однако туннелирование EAP может приводить к уязвимости для MITM-атак (см. параграф 7.4) и поэтому предпочтительно использовать методы, устойчивые к атакам по словарю.

7.7. Подключение к сети без доверия

В методах EAP, использующих одностороннюю аутентификацию (например, EAP-MD5), партнер не проверяет другую сторону, что делает этого партнера уязвимым для атак с использованием подставных проверяющих узлов. Для устранения этой уязвимости служат методы, поддерживающие взаимную аутентификацию (см. определение в параграфе 7.2.1).

В EAP не требуется выполнения аутентификации в полнодуплексном режиме или использования одного протокола для обоих направлений. Использование своего протокола для каждого направления является совершенно нормальной ситуацией и будет зависеть от согласованного протокола. Однако в общем случае выполнение одной взаимной аутентификации более предпочтительно, нежели проведение двух односторонних проверок (для каждого направления). Это связано с тем, что процедуры односторонней аутентификации, которые не связаны криптографически так, что указывается их принадлежность к одной сессии, могут быть объектом MITM-атак, как описано в параграфе 7.4.

7.8. Атаки на согласование

В таких атаках злоумышленник пытается принудить проверяющую сторону и ее партнера к согласованию менее защищенного метода EAP. Протокол EAP не обеспечивает защиты для откликов Nak, хотя методы могут включать отклики Nak в свои проверки MIC.

На проверяющей стороне (или в связи с ней) не предполагается, что отдельный именованный партнер будет поддерживать выбор методов. Это делает партнера уязвимым к атакам, в результате которых согласуется использование наименее защищенного метода из числа доступных. Поэтому следует указывать ровно один метод данного именованного партнера. Если партнеру потребуются другие методы аутентификации при изменившихся обстоятельствах, следует использовать иные свидетельства, для каждого из которых предлагается единственный метод аутентификации.

7.9. Поведение при отказе в аутентификации

Взаимодействие EAP с нижележащим уровнем типа PPP и IEEE 802 сильно зависит от реализации.

Например, при отказе в процессе аутентификации некоторые реализации PPP не разрывают соединение, ограничивая вместо этого трафик на сетевом уровне некоторым фильтруемым подмножеством, что дает партнеру возможность предложить обновление секретов или отправить сетевому администратору почтовое сообщение о возникших проблемах. Подобно этому, в случаях, когда аутентификация не прошла и доступ к контролируемому порту не может быть предоставлен, в [IEEE-802.1X] может разрешаться ограниченный трафик через контролируемый порт.

В EAP не предусматривается попыток повтора аутентификации. Однако в PPP машина состояний LCP может заново согласовать протокол аутентификации в любой момент, что позволяет повторить попытку. Аналогично, в IEEE 802.1X проверяемая (Supplicant) или проверяющая (Authenticator) сторона могут повторить аутентификацию в любой момент. Рекомендуется не сбрасывать значения счетчиков неудачных попыток, пока аутентификация не завершится успешно или в результате отказа канала.

7.10. Создание ключей

Для сервера EAP и его партнера возможна взаимная аутентификация и создание ключей. Для обеспечения ключевого материала, который будет впоследствии использоваться согласованным шифром, поддерживающий создание ключей метод EAP должен экспортировать основной ключ сеанса (MSK) размером не менее 64 октетов и расширенный основной ключ сеанса (EMSK) размером не менее 64 октетов. Методы EAP, создающие ключи, должны поддерживать взаимную аутентификацию между сервером EAP и его партнером.

Ключи MSK и EMSK недопустимо использовать напрямую для защиты данных их размер достаточен для создания ключа AAA, который впоследствии служит для создания временных сеансовых ключей (TSK23), используемых с выбранным шифронабором. Каждый шифр отвечает за спецификацию создания ключей TSK по ключу AAA.

Ключ AAA создается из материала, экспортируемого методом EAP (MSK и EMSK). Процедура создания ключа выполняется на сервере AAA. Во многих протоколах, использующих EAP, ключи AAA и MSK эквивалентны, но возможны и более сложные механизмы (см. [KEYFRAME]).

Методам EAP следует поддерживать «свежесть» ключей MSK и EMSK даже в тех случаях, когда одна из сторон может не иметь высококачественного генератора случайных чисел. Рекомендуется каждой стороне передавать значение nonce размером не менее 128 битов, используемое для создания ключей MSK и EMSK.

Методы EAP экспортируют ключи MSK и EMSK, но не TSK, чтобы обеспечить независимость методов EAP от шифра и среды. Ключевой материал, экспортируемый методами EAP, должен быть независимым от шифронабора, согласованного для защиты данных.

В зависимости от протокола нижележащего уровня методы EAP могут работать до или после согласования шифронабора, поэтому выбранный шифр может быть не известен методу EAP. За счет предоставления ключевого материала пригодного для любого шифра методы EAP могут использоваться с широким спектром шифров и сред.

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

Стойкость ключей TSK, используемых для защиты данных, в конечном итоге зависит от стойкости ключей, созданных методом EAP. Если этот метод не может обеспечивать достаточно стойкий ключевой материал, ключи TSK могут взломаны методом тупого перебора (Brute force). Для поддержки систем, требующих стойких ключей, поддерживающим генерацию ключей методам EAP следует обеспечивать возможность генерации ключей MSK и EMSK с эффективной стойкостью не менее 128 битов.

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

Не перекрывающиеся подстроки MSK должны быть криптографически отделены одна от другой, как определено в параграфе 7.2.1. Т. е. знание одной подстроки не должно помогать в раскрытии других подстрок без нарушения фундаментальных криптографических допущений. Это требование обусловлено тем, что некоторые шифры создают ключи TSK простым разбиением ключа AAA на части подходящего размера. Подобно этому, не перекрывающиеся подстроки EMSK должны быть криптографически отделены одна от другой, как и подстроки MSK.

Ключи EMSK зарезервированы для использования в будущем и должны сохраняться на сервере и проверяемой стороне EAP, где ключ был создан, эти ключи недопустимо передавать или использовать совместно с другими, а также применять для генерации других ключей24.

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

В данной спецификации не содержится подробного руководства по созданию методами EAP ключей MSK и EMSK, генерации AAA-Key из MSK и/или EMSK и генерации TSK из AAA-Key.

Разработка и проверка алгоритмов генерации ключей сложна, поэтому методам EAP следует пользоваться хорошо известными и проверенными механизмами создания ключей (например, указанными в спецификациях IKE [RFC2409] или TLS [RFC2246]) вместо разработки новых. Методам EAP также следует использовать хорошо известные и проверенные механизмы генерации ключей MSK и EMSK. Дополнительные сведения о генерации ключей EAP приведены в работе [KEYFRAME].

7.11. Слабость шифров

Если после начальной аутентификации EAP пакеты данных передаются без аутентификации, защиты целостности и предотвращения повторного использования на уровне отдельных пакетов, атакующий, у которого есть доступ к среде, может вставлять пакеты, менять биты в существующих пакетах, повторно использовать пакеты и даже полностью захватить сессию. Без обеспечения конфиденциальности на уровне пакетов можно «перлюстрировать» пакеты данных.

Для защиты от изменения данных, подмены и перлюстрации рекомендуется использовать методы EAP, поддерживающие взаимную аутентификацию и создание ключей (как определено в параграфе 7.2.1) в комбинации с нижележащим уровнем, который обеспечивает на уровне отдельных пакетов защиту конфиденциальности и целостности, а также предотвращение повторного использования пакетов.

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

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

7.12. Канальный уровень

Существует ряд вопросов надежности и безопасности индикации нижележащего уровня в PPP, ЛВС IEEE 802 и беспроводных ЛВС IEEE 802.11:

  1. PPP. Индикация канального уровня типа LCP-Terminate (индикация отказа в канале) и NCP (индикация успешного создания канала) не аутентифицируются и не защищаются в плане целостности. Следовательно, атакующий с доступом к каналу может использовать обманную индикацию.

  2. IEEE 802. Кадры IEEE 802.1X EAPOL-Start и EAPOL-Logoff не аутентифицируются и целостность их не защищена. Следовательно, атакующий с доступом к каналу может использовать обманную индикацию.

  3. IEEE 802.11. В IEEE 802.11 индикация канального уровня включает кадры Disassociate и Deauthenticate (индикация отказов в канале), а также первое сообщение 4-этапного согласования (успешная организация канала). Для этих сообщений не обеспечивается аутентификация и защита целостности и хотя они не являются пересылаемыми, атакующий может использовать обманную индикацию, находясь в зоне доступа.

В IEEE 802.11 кадры данных IEEE 802.1X могут передаваться как кадры класса 3 с индивидуальной адресацией, и поэтому такие кадры можно пересылать. Это ведет к тому, что кадры EAPOL-Start и EAPOL-Logoff могут быть подменены аутентифицированным атакующим при включенном режиме предварительной аутентификации, несмотря на использование аутентификации и защиты целостности.

В IEEE 802.11 индикация «падения канала» является ненадежной индикацией наличия проблем в канале, поскольку уровень сигнала может меняться сам по себе и может находится под влиянием интерференции радиоволн, создаваемой атакующим. Для предотвращения ненужных сбросов разумно подавлять такую индикацию вместо ее передачи непосредственно в EAP. Поскольку EAP поддерживает повторную передачу пакетов, этого достаточно для устойчивости к временной потере связи.

7.13. Разделение проверяющей стороны и внутреннего сервера

Для сервера EAP и партнера возможна взаимная аутентификация и создание ключа AAA для шифра, который будет служить для защиты последующего трафика. Это не составляет проблемы для проверяемой стороны, поскольку партнер и клиент EAP находятся на одной машине. Все, что требуется от клиента — это создание ключа AAA из ключей MSK и EMSK, экспортируемых методом EAP и последующая передача сеансового ключа TSK модулю шифра.

Однако при размещении проверяющей стороны и сервера аутентификации в разных местах возникает ряд вопросов.

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

  2. Как обсуждалось в [RFC3579], проверяющая сторона зависит от протокола AAA в плане получения информации о результатах аутентификационной транзакции и не видит инкапсулированный пакет EAP (если он присутствует) для определения результата. На практике это означает, что протокол AAA, используемый для обмена между проверяющей стороной и сервером, должен поддерживать аутентификацию, защиту целостности и предотвращение повторного использования на уровне отдельных пакетов.

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

  4. Ключ AAA созданный на основе MSK и/или EMSK, согласованный между сервером аутентификации и партнером, может быть передан проверяющей стороне. Поэтому требуется механизм передачи ключа AAA от сервера проверяющей стороне, которой этот ключ нужен. Спецификация механизмов создания, транспортировки и «заворачивания25» ключа AAA-key выходит за пределы этого документа. Информация о создании AAA-Key имеется в документе [KEYFRAME].

7.14. Открытые пароли

Данная спецификация не определяет механизм аутентификации открытых (не зашифрованных) паролей. Это сделано преднамеренно. Использование открытых паролей позволит атакующим перехватывать их при наличии доступа к каналу, через который передаются пакеты EAP.

Поскольку инкапсулирующие EAP протоколы (типа RADIUS [RFC3579]) могут не обеспечивать конфиденциальности, пакеты EAP могут быть перехвачены при передаче информации через Internet.

В результате открытые пароли невозможно безопасно использовать в EAP за исключением случаев инкапсуляции в защищенный туннель с аутентификацией сервера. Некоторые из этих рисков относятся и к методам EAP, не обеспечивающим устойчивость к атакам по словарю, как определено в параграфе 7.2.1. Дополнительная информация содержится в параграфе 7.6.

7.15. Связывание каналов

Возможна передача непригодной информации от скомпрометированной или некачественно реализованной проверяющей стороны EAP серверу и/или партнеру EAP. Это позволяет проверяющей стороне представить себя другим проверяющим узлом или передавать некорректную информацию с использованием других протоколов (таких, как AAA или протокол нижележащего уровня).

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

В параграфе 4.3.7 документа [RFC3579] описано, как может быть обнаружена проверяющая сторона EAP в проходном режиме, которая, действуя в качестве клиента AAA, пытается представить себя другим проверяющим узлом (например, путем передач некорректных атрибутов NAS-Identifier [RFC2865], NAS-IP-Address [RFC2865] или NAS-IPv6-Address [RFC3162] через протокол AAA). Однако проходная проверяющая сторона, действуя в качестве клиента AAA, может может предоставлять корректную информацию серверу AAA и в то же время передавать искаженные данные партнеру EAP по протоколу нижележащего уровня.

Например, скомпрометированная проверяющая сторона может использовать значения Called-Station-Id или NAS-Identifier другой проверяющей стороны при обмене с партнером EAP по протоколу нижележащего уровня или проходной проверяющий узел, действующий в качестве клиента AAA, может передать некорректное значение Calling-Station-Id партнера [RFC2865][RFC3580] серверу AAA по протоколу AAA.

Для устранения этой уязвимости методы EAP могут поддерживать защищенный обмен параметрами канала типа идентификаторов конечных точек, включая (но не ограничиваясь) Called-Station-Id [RFC2865][RFC3580], Calling-Station-Id [RFC2865][RFC3580], NAS-Identifier [RFC2865], NAS-IP-Address [RFC2865], NAS-IPv6-Address [RFC3162].

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

7.16. Защищенная индикация результатов

В EAP пакеты Success и Failure не подтверждаются и целостность их не защищена. Индикация результатов повышает устойчивость к потере пакетов Success и Failure при работе EAP с протоколами нижележащего уровня, которые не поддерживают повторной передачи или синхронизации состояния аутентификации. В средах типа IEEE 802.11, которые поддерживают повтор передачи и синхронизацию состояния аутентификации за счет 4-этапного согласования, определенного в стандарте [IEEE-802.11i], дополнительная устойчивость обычно не дает заметного преимущества.

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

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

Однако атакующий может подделать пакет Success после того, как сервер был аутентифицирован со стороны партнера, но до аутентификации партнера сервером. Если партнер примет обманный пакет Success и попытается получить доступ в сеть до завершения его аутентификации сервером, по отношению к этому партнеру может быть организована атака на отказ служб. После такой атаки, если нижележащий уровень поддерживает индикацию отказов, проверяющая сторона может синхронизировать состояние с партнером, предоставляя индикацию отказа от нижележащего уровня. Дополнительная информация содержится в параграфе 7.12.

Когда сервер аутентифицировал партнера и передал пакет Success до проверки аутентификации этого партнера проверяющей стороной, может возникать простой, если партнер еще не аутентифицировал проверяющую сторону. При поддержке нижележащего уровня, проверяющая сторона, чувствуя отсутствие партнера, может высвободить ресурсы.

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

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

Хотя индикация результата может позволять синхронизацию результата аутентификации между сервером и партнером, это не гарантирует того, что проверяющая сторона и партнер также будут синхронизированы, поскольку могут возникать вопросы с полномочиями и тайм-ауты. Например, сервер EAP может не знать о решении вопроса предоставления доступа AAA-прокси, сервер AAA может проверить полномочия только после успешной аутентификации и обнаружить отсутствие полномочий или сервер AAA может предоставить доступ, а проверяющая сторона не сможет его обеспечить по причине временной нехватки ресурсов. В таких случаях синхронизация может быть достигнута только с помощью индикации результатов нижележащего уровня.

Индикация успеха может быть явной или неявной. Например, если метод поддерживает сообщения об ошибках, неявная индикация успеха может быть определена, как получение конкретного сообщения без предшествующего сообщения об ошибке. Отказы обычно указываются явно. Как описано в параграфе 4.2, партнер отбрасывает без уведомления пакет Failure, полученный в тот момент, когда метод не разрешает явно делать это. Например, метод, поддерживающий свои сообщения об ошибках, может требовать от партнера получения сообщения об ошибке перед восприятием пакета Failure.

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

Защищенная индикация результатов устраняет некоторые уязвимости к атакам на службы с использованием обманных пакетов Success и Failure. Обычно методы EAP могут обеспечивать защищенную индикацию результатов лишь в некоторых случаях. Например, ошибка может произойти до создания ключа, поэтому такую индикацию защитить не удастся. Возможны случаи, когда индикация результатов не может поддерживаться в обоих направлениях или синхронизация возможна не во всех режимах работы.

Например, в EAP-TLS [RFC2716] при согласовании аутентификации клиента сервер аутентифицирует партнера, но не получает защищенной индикации от него в части аутентификации тем сервера. Напротив, партнер аутентифицирует сервер и знает, что сервер аутентифицировал его. При согласовании восстановления сессии партнер аутентифицирует сервер, но не получает защищенной индикации того, что сервер аутентифицировал его. В этом режиме сервер аутентифицирует партнера и знает, что тот аутентифицировал его.

8. Благодарности

В этом протоколе много заимствований из документа AHA (Dave Carrel), а также из протокола PPP CHAP [RFC1994]. Значимые отклики прислали Yoshihiro Ohba из Toshiba America Research, Jari Arkko из Ericsson, Sachin Seth из Microsoft, Glen Zorn из Cisco Systems, Jesse Walker из Intel, Bill Arbaugh, Nick Petroni и Bryan Payne из университета штата Мэриленд, Steve Bellovin из AT&T Research, Paul Funk из Funk Software, Pasi Eronen из Nokia, Joseph Salowey из Cisco, Paul Congdon из HP, а также члены рабочей группы EAP.

Использование для методов EAP раздела «Параметры защиты», как требует параграф 7.2 и задано для каждого описанного здесь метода EAP, было предложено Glen Zorn в [EAP-EVAL].

9. Литература

9.1. Нормативные документы

[RFC1661] Simpson, W., «The Point-to-Point Protocol (PPP)», STD 51, RFC 1661, July 1994.

[RFC1994] Simpson, W., «PPP Challenge Handshake Authentication Protocol (CHAP)», RFC 1994, August 1996.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC2243] Metz, C., «OTP Extended Responses», RFC 2243, November 1997.

[RFC2279] Yergeau, F., «UTF-8, a transformation format of ISO 10646», RFC 2279, January 1998.

[RFC2289] Haller, N., Metz, C., Nesser, P. and M. Straw, «A One-Time Password System», RFC 2289, February 1998.

[RFC2434] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

[RFC2988] Paxson, V. and M. Allman, «Computing TCP’s Retransmission Timer», RFC 2988, November 2000.

[IEEE-802] Institute of Electrical and Electronics Engineers, «Local and Metropolitan Area Networks: Overview and Architecture», IEEE Standard 80226, 1990.

[IEEE-802.1X] Institute of Electrical and Electronics Engineers, «Local and Metropolitan Area Networks: Port-Based Network Access Control», IEEE Standard 802.1X1, September 2001.

9.2. Дополнительная литература

[RFC793] Postel, J., «Transmission Control Protocol», STD 7, RFC 793, September 1981.

[RFC1510] Kohl, J. and B. Neuman, «The Kerberos Network Authentication Service (V5)», RFC 1510, September 1993.

[RFC1750] Eastlake, D., Crocker, S. and J. Schiller, «Randomness Recommendations for Security», RFC 175027, December 1994.

[RFC2246] Dierks, T., Allen, C., Treese, W., Karlton, P., Freier, A. and P. Kocher, «The TLS Protocol Version 1.0», RFC 2246, January 1999.

[RFC2284] Blunk, L. and J. Vollbrecht, «PPP Extensible Authentication Protocol (EAP)», RFC 2284, March 1998.

[RFC2486] Aboba, B. and M. Beadles, «The Network Access Identifier», RFC 2486, January 1999.

[RFC2408] Maughan, D., Schneider, M. and M. Schertler, «Internet Security Association and Key Management Protocol (ISAKMP)», RFC 2408, November 1998.

[RFC2409] Harkins, D. and D. Carrel, «The Internet Key Exchange (IKE)», RFC 240928, November 1998.

[RFC2433] Zorn, G. and S. Cobb, «Microsoft PPP CHAP Extensions», RFC 2433, October 1998.

[RFC2607] Aboba, B. and J. Vollbrecht, «Proxy Chaining and Policy Implementation in Roaming», RFC 2607, June 1999.

[RFC2661] Townsley, W., Valencia, A., Rubens, A., Pall, G., Zorn, G. and B. Palter, «Layer Two Tunneling Protocol «L2TP»», RFC 2661, August 1999.

[RFC2716] Aboba, B. and D. Simon, «PPP EAP TLS Authentication Protocol», RFC 2716, October 1999.

[RFC2865] Rigney, C., Willens, S., Rubens, A. and W. Simpson, «Remote Authentication Dial In User Service (RADIUS)», RFC 2865, June 2000.

[RFC2960] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M., Zhang, L. and V. Paxson, «Stream Control Transmission Protocol», RFC 296029, October 2000.

[RFC3162] Aboba, B., Zorn, G. and D. Mitton, «RADIUS and IPv6», RFC 3162, August 2001.

[RFC3454] Hoffman, P. and M. Blanchet, «Preparation of Internationalized Strings («stringprep»)», RFC 3454, December 2002.

[RFC3579] Aboba, B. and P. Calhoun, «RADIUS (Remote Authentication Dial In User Service) Support For Extensible Authentication Protocol (EAP)», RFC 3579, September 2003.

[RFC3580] Congdon, P., Aboba, B., Smith, A., Zorn, G. and J. Roese, «IEEE 802.1X Remote Authentication Dial In User Service (RADIUS) Usage Guidelines», RFC 3580, September 2003.

[RFC3692] Narten, T., «Assigning Experimental and Testing Numbers Considered Useful», BCP 82, RFC 3692, January 2004.

[DECEPTION] Slatalla, M. and J. Quittner, «Masters of Deception», Harper-Collins, New York, 1995.

[KRBATTACK] Wu, T., «A Real-World Analysis of Kerberos Password Security», Proceedings of the 1999 ISOC Network and Distributed System Security Symposium, http://www.isoc.org/isoc/conferences/ndss/99/proceedings/papers/wu.pdf.

[KRBLIM] Bellovin, S. and M. Merrit, «Limitations of the Kerberos authentication system», Proceedings of the 1991 Winter USENIX Conference, pp. 253-267, 1991.

[KERB4WEAK] Dole, B., Lodin, S. and E. Spafford, «Misplaced trust: Kerberos 4 session keys», Proceedings of the Internet Society Network and Distributed System Security Symposium, pp. 60-70, March 1997.

[PIC] Aboba, B., Krawczyk, H. and Y. Sheffer, «PIC, A Pre-IKE Credential Provisioning Protocol», Work in Progress, October 2002.

[IKEv2] Kaufman, C., «Internet Key Exchange (IKEv2) Protocol», Work in Progress30, January 2004.

[PPTPv1] Schneier, B. and Mudge, «Cryptanalysis of Microsoft’s Point-to- Point Tunneling Protocol», Proceedings of the 5th ACM Conference on Communications and Computer Security, ACM Press, November 1998.

[IEEE-802.11] Institute of Electrical and Electronics Engineers, «Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications», IEEE Standard 802.1131, 1999.

[SILVERMAN] Silverman, Robert D., «A Cost-Based Security Analysis of Symmetric and Asymmetric Key Lengths», RSA Laboratories Bulletin 13, April 2000 (Revised November 2001), http://www.rsasecurity.com/rsalabs/bulletins/bulletin13.html.

[KEYFRAME] Aboba, B., «EAP Key Management Framework», Work in Progress32, October 2003.

[SASLPREP] Zeilenga, K., «SASLprep: Stringprep profile for user names and passwords», Work in Progress33, March 2004.

[IEEE-802.11i] Institute of Electrical and Electronics Engineers, «Unapproved Draft Supplement to Standard for Telecommunications and Information Exchange Between Systems — LAN/MAN Specific Requirements — Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications: Specification for Enhanced Security», IEEE Draft 802.11i (work in progress)34, 2003.

[DIAM-EAP] Eronen, P., Hiller, T. and G. Zorn, «Diameter Extensible Authentication Protocol (EAP) Application», Work in Progress35, February 2004.

[EAP-EVAL] Zorn, G., «Specifying Security Claims for EAP Authentication Types», Work in Progress, October 2002.

[BINDING] Puthenkulam, J., «The Compound Authentication Binding Problem», Work in Progress, October 2003.

[MITM] Asokan, N., Niemi, V. and K. Nyberg, «Man-in-the-Middle in Tunneled Authentication Protocols», IACR ePrint Archive Report 2002/163, October 2002, <http://eprint.iacr.org/2002/163>.

[IEEE-802.11i-req] Stanley, D., «EAP Method Requirements for Wireless LANs», Work in Progress36, February 2004.

[PPTPv2] Schneier, B. and Mudge, «Cryptanalysis of Microsoft’s PPTP Authentication Extensions (MS-CHAPv2)», CQRE 99, Springer-Verlag, 1999, pp. 192-20337.

Приложения A. Отличия от RFC 2284

В этом разделе перечислены основные различия между [RFC2284] и данным документом. Мелкие отличия, включая стили, грамматику, опечатки и редакторские правки не упомянуты в списке.

  • Раздел, посвященный терминологии (параграф 1.2) был расширен, определены концепции и даны более точные определения.

  • Введены и рассмотрены в документе концепции взаимной аутентификации (Mutual Authentication), создания ключей (Key Derivation) и индикации результатов (Result Indication).

  • В разделе 2 явно указано что в аутентификационном обмене EAP может происходить множество обменов пакетами Request и Response. Возможности использования этого подробно описаны в параграфе 2.1.

  • В разделе 2 явно приведены некоторые требования к проверяющей стороне в проходном режиме.

  • Добавлена модель мультиплексирования EAP (параграф 2.2) для иллюстрации типового применения EAP. Реализации не обязаны точно следовать этой модели, достаточно совместимого с ней поведения.

  • Описана работа EAP с различными протоколами нижележащего уровня в дополнение к протоколу PPP, для которого разрабатывался EAP. Добавлен раздел 3, посвященный поведению нижележащего уровня.

  • При описании взаимодействия запросов и откликов EAP (параграф 4.1) более точно описано поведение в случае получения дубликатов запроса и отбрасывание пакетов без уведомления.

  • В параграфе 4.2 разъяснено, что пакеты Success и Failure не должны содержать дополнительных данных и расширены примечания для разработчиков. Добавлен параграф с требованиями по обработке пакетов Success и Failure.

  • В разделе 5 описаны два новых типа EAP — Expanded (параграф 5.7), который используется для расширения пространства типов, и Experimental. В пространстве Expanded Type добавлен новый тип Expanded Nak (параграф 5.3.2). Приведены дополнительные разъяснения для большинства существующих типов. Добавлены описания параметров защиты для методов аутентификации.

  • В параграфах 5, 5.1 и 5.2 добавлены требования к отображаемым полям по использованию символов ISO 10646 в кодировке UTF-8.

  • В параграфе 5.1 сказано, что при наличии в поле Type-Data запроса Identity символа NUL отображается только часть сообщения до этого символа. RFC 2284 запрещает использование null-символов в поле Type-Data сообщений Identity. Это правило смягчает требования к запросам Identity и поле Type-Data в них может включать null-символы.

  • В параграфе 5.5 добавлена поддержка откликов OTP Extended [RFC2243] в EAP OTP.

  • Добавлен раздел «6. Взаимодействие с IANA» с правилами регистрации имен для EAP.

  • Раздел «7. Вопросы безопасности» был существенно расширен и включает в настоящем документе более полное описание возможных угроз и других вопросов безопасности.

  • В параграф 7.5 был добавлен текст, описывающий конкретное поведение методов EAP в плане проверки целостности. При наличии возможности желательно рассчитывать специфическое для метода значение MIC с покрытием всего пакета EAP, включая заголовок уровня EAP (поля Code, Identifier, Length) и заголовок уровня метода EAP (поля Type, Type-Data).

  • В параграфе 7.14 описаны риски, связанные с использованием открытых паролей в EAP.

  • В параграф 7.15 добавлен текст, посвященный детектированию подставных NAS.

Адреса авторов

Bernard Aboba

Microsoft Corporation

One Microsoft Way

Redmond, WA 98052

USA

Phone: +1 425 706 6605

Fax: +1 425 936 6605

EMail: bernarda@microsoft.com

Larry J. Blunk

Merit Network, Inc

4251 Plymouth Rd., Suite 2000

Ann Arbor, MI 48105-2785

USA

Phone: +1 734-647-9563

Fax: +1 734-647-3185

EMail: ljb@merit.edu

John R. Vollbrecht

Vollbrecht Consulting LLC

9682 Alice Hill Drive

Dexter, MI 48130

USA

EMail: jrv@umich.edu

James Carlson

Sun Microsystems, Inc

1 Network Drive

Burlington, MA 01803-2757

USA

Phone: +1 781 442 2084

Fax: +1 781 442 1677

EMail: james.d.carlson@sun.com

Henrik Levkowetz

ipUnplugged AB

Arenavagen 33

Stockholm S-121 28

SWEDEN

Phone: +46 708 32 16 08

EMail: henrik@levkowetz.com

Перевод на русский язык

Николай Малых

nmalykh@gmail.com

Полное заявление авторских прав

Copyright (C) The Internet Society (2004). К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.


1Extensible Authentication Protocol

2Point-to-Point Protocol

3Message Authentication Code — код аутентификации сообщения.

4Network Access Server — сервер доступа в сеть.

5Link Control Protocol — протокол управления каналом. Прим. Перев.

6Man-in-the-Middle – перехват и изменение пакетов с участием человека в точке перехвата. Прим. Перев.

7Pass-through authenticator.

8В оригинале используется термин «peer-to-peer operation». Прим. Перев.

9Access Point.

10Ad hoc.

11Authentication Protocol Configuration Option

12Round-Trip Time время кругового обхода. Прим. Перев.

13Расширенного отклика. Прим. Перев.

14Challenge Handshake Authentication Protocol.

15One-Time Password.

16Система с однократным паролем.

17Расширенные отклики OTP.

18Generic Token Card — маркерные карты базового типа.

19Internet Assigned Numbers Authority.

20Working Group – рабочая группа. Прим. Перев.

21Понятия «сравнимых усилий» и «типового блочного шифрования» сложно определить точно, однако здесь достаточно разумных предположений. Дополнительную информацию можно найти в работе [SILVERMAN].

22Network Access Identifier — аутентификатор доступа в сеть.

23Transient Session Key.

24Это ограничение будет смягчено в новых документах, определяющих использование EMSK.

25Wrapping.

26Этот стандарт доступен на сайте http://standards.ieee.org. Прим. перев.

27Документ заменен RFC 4086. Прим. перев.

28Этот документ заменен RFC 4306. Прим. перев.

29Этот документ заменен RFC 4960. Прим. перев.

30Эта работа завершена и опубликована в RFC 4306. Прим. перев.

31Этот стандарт доступен на сайте http://standards.ieee.org. Прим. перев.

32Эта работа завершена и опубликована в RFC 5247. Прим. перев.

33Эта работа завершена и опубликована в RFC 4013. Прим. перев.

34Этот стандарт завершен и доступен на сайте http://standards.ieee.org. Прим. перев.

35Эта работа завершена и опубликована в RFC 4072. Прим. перев.

36Эта работа завершена и опубликована в RFC 4017. Прим. перев.

37Эта статья доступна на сайте http://www.schneier.com/paper-pptpv2.html. Прим. перев.

 

Рубрика: RFC | Оставить комментарий