RFC 4202 Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)

Network Working Group                                   K. Kompella, Ed.
Request for Comments: 4202                              Y. Rekhter,  Ed.
Category: Standards Track                               Juniper Networks
                                                            October 2005

 

Расширение маршрутизации для поддержки GMPLS

Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

В этом документе приведена спецификация расширения для поддержки передачи информации о состоянии канала для GMPLS1. Этот документ является дальнейшим развитием маршрутного расширения для поддержки MPLS TE2.

1. Введение

В этом документе приведена спецификация расширения для поддержки передачи информации о состоянии канала для обобщенной многопротокольной коммутации по меткам (GMPLS). Документ является дальнейшим развитием [ISIS-TE], [OSPF-TE], которое потребовалось для поддержки MPLS TE.

Традиционно соединения TE анонсируются, как «обычные» каналы, т. е. они создают маршрутную смежность и свойства активных соединений используются при расчетах кратчайших путей (SPF3) (прежде всего, метрики SPF), после чего свойства TE для соединения анонсируются.

GMPLS отказывается от такого подхода по трем причинам. Во-первых, канала, не способные принимать и передавать данные попакетно (packet-by-packet) могут, тем не менее, иметь свойства TE, однако маршрутной смежности от таких соединений не возникает. Во-вторых, путь с коммутацией по меткам (LSP4) может анонсироваться, как соединение TE типа «точка-точка» (см. [LSP-HIER]) и, таким образом, анонсируемое соединение TE может существовать между парой узлов, не имеющих маршрутной смежности между собой. В-третьих, множество соединений может анонсироваться, как один канал TE (например, в целях масштабирования) и здесь снова не возникает связи между обычной маршрутной смежностью и соединениями TE.

Таким образом, мы имеем более общее понятие канала TE, как «логического» соединения, имеющего свойства TE. Соединение является логическим в том смысле, что оно представляет способ группировки/отображения информации о неких физических ресурсах (и их свойствах) в данные, используемые Constrained SPF5 для расчета пути, а также для сигнализации GMPLS. Такое отображения/группировка должно выполняться согласованно на обеих сторонах соединения. Для проверки согласованности может использоваться протокол LMP [LMP].

В зависимости от природы ресурсов, формирующих конкретное соединение TE, для целей сигнализации GMPLS в некоторых случаях комбинации <идентификатор соединения TE, метка> достаточно для однозначного указания ресурсов, используемых LSP. В других случаях этой комбинации может оказаться недостаточно и для них используются связки каналов [LINK-BUNDLE], позволяющие идентифицировать ресурс с помощью набора <идентификатор соединения TE, идентификатор компонентного канала, метка>.

Некоторые свойства соединений TE могут быть заданы в конфигурации анонсирующих маршрутизаторов LSR6, а остальные могут быть получены от других LSR с помощью некого протокола, а также могут быть выведены из свойств компонентных соединений TE.

Соединение TE между парой LSR не предполагает наличия между этими маршрутизаторами маршрутной смежности (например, IGP). Как было отмечено выше, в некоторых случаях канал TE между парой LSR может анонсироваться даже при отсутствии маршрутной смежности между этими LSR (например, когда соединение TE организует смежность по пересылке — Forwarding Adjacency, как описано в [LSP-HIER]).

Канал TE должен иметь некоторые средства, с помощью которых анонсирующий LSR может узнать о «живости» соединения (это могут быть сообщения hello или иные средства). Когда LSR знает, что канал TE активен и может определить свойства TE для этого соединения, LSR может анонсировать такое соединение своим (обычным) соседям.

В этом документе интерфейсы, через которые организуются обычные отношения маршрутной смежности, будут называться «управляющими каналами» (control channel).

В документах [ISIS-TE] и [OSPF-TE] определены канонические свойства TE и описано, как связать свойства TE с обычными (коммутация пакетов) соединениями. Данный документ расширяет набор свойств TE и описывает, как связать свойства TE с каналами, не использующими коммутацию пакетов (non-packet-switched), — например, соединениями между оптическими кросс-коннекторами (OXC7). В [LSP-HIER] описано, как связать свойства TE с каналами, формируемыми LSP.

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

1.1. Требования к специфическим для уровня атрибутам TE

При обобщении каналов TE для включения традиционных транспортных средств имеются дополнительные факторы, влияющие на набор требуемой информации о канале TE. Эти факторы обусловлены существующей архитектурой транспортного уровня (например, рекомендации ITU-T G.805 и G.806) и связанными с ней службами. Некоторые из факторов перечислены ниже.

  1. Потребность в LSP для конкретного применения, а не просто обеспечения пропускной способности. Клиенты оптических сетей получают услуги для конкретных приложений, например, устройств VC-3. Это не только предполагает определенную пропускную способность, но и способ структурирования передаваемой информации. Клиента VC-3 не устроит никакой LSP, которые предлагает скорость, отличную от 48,384 Мбит/с, или иное структурирование потока данных. Следствием этого является необходимость поиска маршрута, который обеспечить соединение с требуемыми для конкретного применения свойствами.

  2. Различные варианты применения. Ресурсы между двумя OXC (в частности, трасса G.805) могут иной раз поддерживать одновременно разные варианты применения (адаптации) — пример этого описан в параграфе 2.4.8. В таких случаях факт поддержки двух вариантов применения на одной трассе весьма важен, поскольку два уровня являются зависимыми, а также по причине необходимости обеспечить возможность отображения отношений на данном уровне на маршрутизацию, особенно с учетом недостаточной гибкости транспортных уровней по сравнению с пакетными.

  3. Наследуемые атрибуты. Когда вся иерархия мультиплексирования поддерживается каналом TE, атрибут нижележащего уровня может оказаться применимым для вышележащих уровней. Примером этого могут служить атрибуты защиты. Если канал OC-192 использует защиту 1+1 (дублирующий канал OC-192 для защиты), то STS-3c в этом OC-192 (вышележащий уровень) будет наследовать такие же свойства защиты.

  4. Расширяемость уровней. В дополнение к имеющимся транспортным уровням в будущем могут быть определены новые уровни и приложения (адаптации).

  5. Неоднородные сети, где не все OXC поддерживают одинаковый набор уровней. В сети GMPLS не все элементы транспортной сети уровня могут поддерживать один набор уровней. Например, могут присутствовать коммутаторы, способные поддерживать только VC-11, VC-12 и VC-3, а также коммутаторы, поддерживающие лишь VC-3 и VC-4. Даже если элемент сети не поддерживает конкретный уровень, ему следует иметь возможность узнать, имеются ли где-либо в сети элементы, которые поддерживают адаптацию, позволяющую использовать этот не поддерживаемый уровень. Например, коммутатор VC-11 может использовать поддерживающий VC-3 коммутатор, если знает, что путь VC-11 может быть организован через канал VC-3.

С учетом перечисленных выше факторов при разработке специфических для определенного уровня документов по маршрутизации GMPLS следует использовать для атрибутов каналов TE перечисленные ниже требования.

  1. Разделение атрибутов. Атрибуты одного уровня отделяются от атрибутов других уровней.

  2. Поддержка внутриуровневых атрибутов (например, связи между применениями). Между клиентским и серверным уровнем существует общий механизм описания отношений. Например, «4 клиентских канала типа X могут поддерживаться данным серверным канальным уровнем». Другим примером служит возможность идентификации случаев использования двумя уровнями общего серверного уровня.

  3. Поддержка наследуемых атрибутов. Следует идентифицировать атрибуты, которые могут наследоваться.

  4. Расширяемость уровней. Атрибуты следует представлять в маршрутизации так, чтобы можно было приспособить в будущем новые уровни. Это похоже на обобщение понятия метки.

  5. Явное задание области действия атрибутов. Например, в каких случаях данный атрибут применим ко множеству каналов одного уровня.

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

1.2. Исключение трафика данных из каналов управления

Каналы управления между узлами сети GMPLS (такими, как кросс-коннекторы и/или маршрутизаторы OXC и SDH) обычно служат для передачи трафика управления и администрирования. Эти каналы анонсируются в систему маршрутизации в качестве обычных каналов, как отмечено в предыдущем параграфе, что позволяет маршрутизировать в них, например, сообщения RSVP и сессии telnet. Однако, если маршрутизаторы на краю оптической сети попытаются передавать обычные данные через такие каналы, возможности этих каналов будут полностью исчерпаны.

Для предотвращения анонсирования каналов управления на уровень передачи пользовательских данных имеется множество методов.

Если предположить, что трафик данных передается получателям BGP, а управляющий — получателям IGP, можно исключить передачу трафика данных на уровень управления, ограничивая выбор следующего интервала BGP (предполагается, что OXC не являются узлами BGP). Предположим, что маршрутизатор R пытается организовать маршрут к BGP-адресату D. R ищет следующий интервал BGP для D в своей таблице маршрутизации IGP. Предположим, что R находит путь к следующему интервалу через интерфейс I. Тогда R проверяет наличие в своей базе данных о состоянии каналов (Link State) записи, связанной с интерфейсом I. Если такая запись имеется и канал не поддерживает коммутацию пакетов (см. [LSP-HIER]), R отбрасывает этот маршрут к получателю D. В противном случае R организует (как обычно) маршрут к получателю D со следующим интервалом I. Отметим, что маршрутизатору R такая проверка нужна лишь в случае наличия у него каналов, не поддерживающих коммутацию пакетов, в случае поддержки коммутации пакетов на всех каналах такая проверка явно становится избыточной.

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

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

2. Развитие маршрутизации GMPLS

В этом разделе определяются усовершенствованные свойства TE каналов GMPLS TE. Представление этой информации в протоколе IS-IS задано в [GMPLS-ISIS], в протоколе OSPF — в [GMPLS-OSPF].

2.1. Поддержка безадресных соединений

Безадресными соединениями являются каналы типа «точка-точка». LSR на каждой стороне безадресного соединения присваивают такому каналу свой идентификатор. Эти идентификаторы представляют собой 32-битовые целые числа, отличные от 0 и уникальные в масштабе маршрутизатора LSR, который выделил значение идентификатора.

Рассмотрим (безадресное) соединение между маршрутизаторами A и B. LSR A выбирает идентификатор для канала и LSR B делает то же самое. С точки зрения A мы называем выделенное этим маршрутизатором значение «идентификатором локального канала» или просто «локальным идентификатором» (link local identifier или local identifier), а значение, выделенное маршрутизатором B — «идентификатором удаленного канала» или «удаленным идентификатором» (link remote identifier или remote identifier). С точки зрения B выделенный этим маршрутизатором идентификатор будет локальным, а выделенный маршрутизатором A — удаленным.

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

2.2. Тип защиты канала

Тип защиты канала (Link Protection Type) представляет имеющиеся возможности защиты этого соединения. Желательно передавать эту информацию так, чтобы она могла использоваться алгоритмом расчета пути для организации LSP с подходящими характеристиками защиты. Эта информация организуется иерархически и при организации пути обычно задается минимально приемлемый уровень защиты, а метод выбора пути служит для поиска пути, обеспечивающего защиту с уровнем не ниже указанного минимума.

Определяемые в данном документе схемы защиты представлены ниже в порядке роста уровня защиты.

Extra Traffic — дополнительный трафик

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

Unprotected — без защиты

Тип Unprotected означает отсутствие других каналов, обеспечивающих защиту данного соединения. LSP на канале этого типа будет теряться при отказе канала.

Shared — общая защита

Тип Shared говорит о наличии одного или множества несвязанных (disjoint) каналов типа Extra Traffic, защищающих данный канал. Эти каналы типа Extra Traffic используются одним или множеством каналов типа Shared.

Dedicated 1:1 — выделенный канал для защиты

Тип защиты Dedicated 1:1 говорит о наличии одного выделенного, несвязанного (disjoint) канала типа Extra Traffic, защищающего данный канал.

Dedicated 1+1 — выделенный, неанонсируемый канал для защиты

Тип защиты Dedicated 1+1 говорит о наличии выделенного, несвязанного (disjoint) канала, служащего для защиты данного соединения. Однако защитный канал не анонсируется в базе данных о состоянии каналов и, следовательно, не доступен для маршрутизации LSP.

Enhanced — улучшенная защита

Тип защиты Enhanced говорит о наличии схемы, более надежной по сравнению с Dedicated 1+1 (например, 4 волокна BLSR/MS-SPRING), которая используется для защиты данного канала.

Тип защиты канала является необязательным и при его отсутствии в анонсах состояния канала (Link State Advertisement) остается неизвестным.

2.3. Информация SRLG

Множество каналов может создать «группу общего риска» (SRLG8), если они используют общий ресурс, отказ которого будет воздействовать на все каналы группы. Например, два волокна одного кабеля могут быть в одной группе SRLG. Канал может входить во множество групп SRLG. Таким образом, информация SRLG описывает набор групп SRLG, в которые входит данный канал. SRLG идентифицируется 32-битовым целым числом, которое уникально в рамках домена IGP. Информация SRLG представляет собой неупорядоченный список групп SRLG, в которые входит канал.

SRLG для пути LSP представляет собой объединение групп SRLG каналов, образующих LSP. SRLG группы каналов (bundled link) является объединением SRLG всех каналов-компонент.

Если маршрутизатору LSR требуется множество LSP с разной маршрутизацией к другому LSR, при расчете пути следует попытаться маршрутизировать пути так, чтобы они не включали общих каналов и группы SRLG для пути не были связанными.

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

Информация SRLG является необязательной и при ее отсутствии в анонсе состояния канала SRLG для канала остается неизвестной.

2.4. Дескриптор коммутации для интерфейса

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

Дескриптор коммутационных возможностей (дескриптор коммутации) интерфейса (Interface Switching Capability Descriptor) описывает поддерживаемые этим интерфейсом возможности коммутации. Для двухсторонних каналов коммутационные возможности интерфейсов определяются одинаково для обоих направлений.

Анонс Link State Advertisement для канала передает дескриптор(ы) коммутационных возможностей на ближней стороне канала (на стороне LSR, передающего анонс).

Маршрутизатор LSR, выполняющий расчет пути, использует базу данных о состояниях каналов (Link State Database) для определения двухстороннего или одностороннего характера каналов.

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

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

Ниже перечислены определенные в этом документе режимы коммутации интерфейсов (Interface Switching Capability).

Коммутация пакетов-1 (PSC-1)

Коммутация пакетов-2 (PSC-2)

Коммутация пакетов-3 (PSC-3)

Коммутация пакетов-4 (PSC-4)

Коммутация кадров (L2SC10)

Мультиплексирование TDM (TDM11)

Коммутация по длине волны (LSC12)

Коммутация волокон (FSC13)

При отсутствии дескриптора коммутации для интерфейса предполагается дескриптор PSC-1.

Дескрипторы коммутационных возможностей интерфейсов служат новым ограничением при расчете путей LSP.

Безотносительно к коммутационным возможностям конкретного интерфейса значение Interface Switching Capability Descriptor всегда включает информацию о поддерживаемом интерфейсом кодировании. Определенные варианты кодирования совпадают с LSP Encoding из [GMPLS-SIG].

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

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

2.4.1. Коммутация кадров или ячеек (L2)

Если интерфейс имеет тип L2SC, это означает, что узел, принимающий данные через этот интерфейс, может коммутировать принятые кадры на основе адресов канального уровня (layer 2). Например, интерфейс, связанный с каналом, который заканчивается на коммутаторе ATM, может рассматриваться, как L2SC.

2.4.2. Коммутация пакетов

Если интерфейс имеет тип PSC-1 — PSC-4, это означает, что узел, получающий данные через такой интерфейс может коммутировать полученные данные на уровне пакетов (packet-by-packet), используя метки, передаваемые в shim-заголовках [RFC3032]. Разные уровни PSC образуют иерархию LSP, туннелируемых через другие LSP.

Для интерфейсов PSC дополнительная информация включает максимальную и минимальную пропускную способность LSP (Maximum LSP Bandwidth, Minimum LSP Bandwidth) и значение MTU на интерфейсе.

Для простого (unbundled) канала Maximum LSP Bandwidth для приоритета p определяется значением меньше незарезервированной пропускной способности для уровня p и параметром Maximum LSP Size, который задается в локальной конфигурации канала и по умолчанию совпадает с Max Link Bandwidth. Максимальная пропускная способность для композитного (bundled) канала определена в [LINK-BUNDLE].

Maximum LSP Bandwidth занимает место параметра Maximum Link Bandwidth ([ISIS-TE], [OSPF-TE]). Однако Maximum Link Bandwidth представляет собой одно фиксированное значение (обычно просто полоса канала), Maximum LSP Bandwidth передается по уровням приоритета и может изменяться по мере организации и разрыва LSP.

Хотя параметр Maximum Link Bandwidth отменяется, для совместимости со старыми версиями можно устанавливать для него значение Maximum LSP Bandwidth для приоритета 7.

Параметр Minimum LSP Bandwidth указывает максимальную пропускную способность, которая может быть зарезервирована для LSP.

Типовые значения Minimum LSP Bandwidth и Maximum LSP Bandwidth приведены в документе [GMPLS-SIG].

На интерфейсе PSC, поддерживающем кодирование Standard SDH, LSP с приоритетом p может зарезервировать любую пропускную способность, разрешаемую иерархией ветви SDH, при этом листья и корень ветви будут определяться значениями Minimum LSP Bandwidth и Maximum LSP Bandwidth для приоритета p.

На интерфейсе PSC, поддерживающем кодирование Arbitrary SDH, LSP с приоритетом p может зарезервировать любую пропускную способность из диапазона от Minimum LSP Bandwidth до Maximum LSP Bandwidth для приоритета p, с учетом того, что резервируемая LSP пропускная способность кратна значению Minimum LSP Bandwidth.

Параметр Interface MTU определяет максимальный размер пакета, который может быть передан этим интерфейсом без фрагментирования.

2.4.3. Мультиплексирование TDM

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

Для интерфейсов TDM дополнительная информация включает Maximum LSP Bandwidth, сведения о поддержке Standard или Arbitrary SDH, а также Minimum LSP Bandwidth.

Для простого (unbundled) канала Maximum LSP Bandwidth для приоритета p определяется, как максимальная пропускная способность, которую может зарезервировать LSP с приоритетом p. Максимальная пропускная способность для композитного (bundled) канала определена в [LINK-BUNDLE].

Параметр Minimum LSP Bandwidth указывает минимальную пропускную способность, которую может резервировать LSP.

Типовые значения Minimum LSP Bandwidth и Maximum LSP Bandwidth приведены в документе [GMPLS-SIG].

На интерфейсе с мультиплексированием Standard SDH путь LSP с приоритетом p может зарезервировать любую пропускную способность, разрешаемую иерархией ветви SDH, при этом листья и корень ветви будут определяться значениями Minimum LSP Bandwidth и Maximum LSP Bandwidth для приоритета p.

На интерфейсе с мультиплексированием Arbitrary SDH путь LSP с приоритетом p может зарезервировать любую пропускную способность из диапазона от Minimum LSP Bandwidth до Maximum LSP Bandwidth для приоритета p, с учетом того, что резервируемая LSP пропускная способность кратна значению Minimum LSP Bandwidth.

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

На интерфейсе, поддерживающем множество ветвей иерархии мультиплексирования SDH, может анонсироваться множество дескрипторов коммутации (по одному на каждую ветвь). Например, для интерфейса, поддерживающего VC-11 и VC-12 (которые не является частью той же ветви иерархии SDH), будет анонсироваться два дескриптора.

2.4.4. Коммутация по длинам волн (Lambda)

Если интерфейс относится к типу LSC, это означает, что получающий данные через этот интерфейс узел может распознавать и коммутировать отдельные длины волн (lambda) на этом интерфейсе. Интерфейсы, поддерживающие единственную длину волны и коммутирующие только ее, относятся к типу LSC.

Дополнительная информация включает резервируемую полосу (Reservable Bandwidth) по уровням приоритета, которая задает пропускную способность LSP, которая может поддерживаться интерфейсом для данного уровня приоритета.

В случае поддержки множества скоростей передачи или вариантов кодирования в одном канале TE для интерфейса может анонсироваться множество дескрипторов коммутации (по одному на каждую комбинацию скорости кодирования). Например, интерфейс LSC может поддерживать организацию LSC LSP при скоростях STM-16 и STM-64.

2.4.5. Коммутация волокон

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

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

Интерфейс, подключающий канал к маршрутизатору LSR, может поддерживать множество режимов коммутации (Interface Switching Capability). В качестве примера рассмотрим оптический канал, поддерживающий диапазон длин волн, который завершается на интерфейсе маршрутизатора LSR, способного коммутировать одну из длин волн в другой исходящий оптический канал, служить терминальным устройством для той или иной длины волны и демультиплексировать (извлекать) данные для определенной длины волны, используя TDM и коммутируя выделенные каналы TDM в другие исходящие каналы TDM. Для поддержки такого интерфейса анонсы состояния канала (Link State Advertisement) могут включать множество дескрипторов коммутации (Interface Switching Capabilities Descriptor).

2.4.7. Возможности коммутации и метки

Если обозначить канал TE дескрипторами коммутации на обеих сторонах соединения, примеры каналов могут иметь вид:

[PSC, PSC] — канал между двумя пакетными LSR;

[TDM, TDM] — канал между двумя цифровыми кросс-коннекторами;

[LSC, LSC] — канал между двумя OXC;

[PSC, TDM] — канал между пакетным LSR и цифровым кросс-коннектором;

[PSC, LSC] — канал между пакетным LSR и OXC;

[TDM, LSC] — канал между цифровым кросс-коннектором и OXC.

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

[PSC, PSC] — метка передается в shim-заголовке [RFC3032];

[TDM, TDM] — метка представляет временной интервал TDM [GMPLS-SONET-SDH];

[LSC, LSC] — метка представляет длину волны;

[FSC, FSC] — метка представляет порт OXC;

[PSC, TDM] — метка представляет временной интервал TDM [GMPLS-SONET-SDH];

[PSC, LSC] — метка представляет длину волны;

[PSC, FSC] — метка представляет порт;

[TDM, LSC] — метка представляет длину волны;

[TDM, FSC] — метка представляет порт;

[LSC, FSC] — метка представляет порт.

2.4.8. Прочие вопросы

Вполне возможно с течением времени изменение дескриптора коммутации, отражающее создание и удаление LSP. Например, LSP-пути VC-3, VC-4, VC-4-4c, VC-4-16c и VC-4-64c могут быть организованы на интерфейсе STM-64 с кодированием SDH. Изначально в дескрипторе коммутации будут установлены значения Minimum LSP Bandwidth = VC-3 и Maximum LSP Bandwidth = STM-64 для всех уровней приоритета. После организации на интерфейсе пути LSP размера VC-3 с приоритетом 1 он уже не будет поддерживать VC-4-64c для всех LSP, кроме тех, у кого задан приоритет 0. Следовательно, узел будет анонсировать дескриптор коммутации, показывающий, что максимальная пропускная способность LSP составляет уже не STM-64, а STM-16 для всех уровней приоритет, кроме 0 (для приоритета 0 сохранится Maximum LSP Bandwidth = STM-64). Если позднее будет организован другой VC-3 LSP, дескриптор коммутации не изменится. Этот дескриптор будет сохраняться, до того момент, когда узел уже не сможет организовать через этот интерфейс VC-4-16c LSP (это означает, что на интерфейсе уже занято более 144 временных интервалов для организации LSP). После этого дескриптор коммутации снова будет изменен и узел анонсирует новый дескриптор другим узлам.

2.5. Представление пропускной способности

Для представления незарезервированной (Unreserved), а также максимальной (Maximum LSP) и минимальной (Minimum LSP) полосы LSP используются действительные числа с плавающей запятой в формате IEEE [IEEE], как описано в параграфе 3.1.2 of [GMPLS-SIG].

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

3.1. Интерфейс STM-16 POS в LSR

Дескриптор коммутации:

Режим коммутации = PSC-1

Кодирование = SDH

Максимальная пропускная способность LSP [p] = 2,5 Гбит/с для всех p

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

3.2. Интерфейс GigE Packet в LSR

Дескриптор коммутации:

Режим коммутации = PSC-1

Кодирование = Ethernet 802.3

Максимальная пропускная способность LSP [p] = 1,0 Гбит/с для всех p

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

3.3. Интерфейс STM-64 SDH в цифровом кросс-коннекторе с Standard SDH

Рассмотрим ветвь дерева иерархии мультиплексирования SDH — VC-3, VC-4, VC-4-4c, VC-4-16c, VC-4-64c. Если возможна организация всех этих соединений на интерфейсе STM-64, анонсируемый дескриптор коммутации для такого интерфейса будет иметь вид:

Дескриптор коммутации:

Режим коммутации = TDM [Standard SDH]

Кодирование = SDH

Минимальная пропускная способность LSP = VC-3

Максимальная пропускная способность LSP [p] = STM-64 для всех p

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

3.4. Интерфейс STM-64 SDH в кросс-коннекторе с 2 типами иерархии

Дескриптор коммутации 1:

Режим коммутации = TDM [Standard SDH]

Кодирование = SDH

Минимальная пропускная способность LSP = VC-3

Максимальная пропускная способность LSP [p] = STM-64 для всех p

Дескриптор коммутации 2:

Режим коммутации = TDM [Arbitrary SDH]

Кодирование = SDH

Минимальная пропускная способность LSP = VC-4

Максимальная пропускная способность LSP [p] = STM-64 для всех p

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

3.5. Интерфейс Opaque OXC (SDH) с поддержкой 1 длины волны на порт

«Непрозрачным» (opaque) OXC называется режим работы OXC, при котором весь поток одной длины волны (переносящий поток данных SDH) переключается без дополнительного мультиплексирования-демультиплексирования и служебные биты SDH не меняются совсем (или, по крайней мере, не меняются важные).

Интерфейс непрозрачного OXC работает с одной длиной волны и не может коммутировать множество длин волн, как одно целое. Таким образом, интерфейс непрозрачного OXC всегда имеет тип LSC, а не FSC, независимо от применения DWDM вне этого интерфейса.

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

Канал TE представляет собой группу из одного или множества интерфейсов на кросс-коннекторе OXC. Все интерфейсы одного OXC должны иметь уникальные в рамках этого OXC идентификаторы, которые используются в качестве меток (см. параграф 3.2.1.1 в [GMPLS-SIG]).

Ниже приведен пример дескриптора коммутации для непрозрачного OXC с кадрированием SDH.

Дескриптор коммутации:

Режим коммутации = LSC

Кодирование = SDH

Резервируемая полоса = определяется кадрированием SDH (например, STM-64)

3.6. Интерфейс Transparent OXC (PXC) с внешней DWDM и кадрированием SDH

Этот пример предполагает соединение устройств DWDM и PXC так, чтобы каждый интерфейс (порт) PXC обслуживал просто одну длину волны. Таким образом, несмотря на возможность интерфейса PXC коммутировать группы из нескольких длин волн, в рассматриваемом случае интерфейс PXC относится к типы LSC, а не FSC.

                     _______
                    |       |
               /|___|       |
              | |___|  PXC  |
      ========| |___|       |
              | |___|       |
               \|   |_______|
             DWDM
         (кадрирование SDH)

 

Канал TE представляет собой группу из одного или множества интерфейсов на кросс-коннекторе PXC. Все интерфейсы одного PXC должны иметь уникальные в рамках этого PXC идентификаторы, которые используются в качестве меток (см. параграф 3.2.1.1 в [GMPLS-SIG]).

Ниже приведен пример дескриптора коммутации для непрозрачного OXC (PXC) с внешним мультиплексированием DWDM, которое понимает кадрирование SDH.

Дескриптор коммутации:

Режим коммутации = LSC

Кодирование = SDH (приходит от DWDM)

Максимальная пропускная способность LSP = определяется DWDM (например, STM-64)

3.7. Интерфейс Transparent OXC (PXC) с внешней DWDM, прозрачный для скорости и кадрирования

Этот пример предполагает соединение устройств DWDM и PXC так, чтобы каждый интерфейс (порт) PXC обслуживал просто одну длину волны. Таким образом, несмотря на возможность интерфейса PXC коммутировать группы из нескольких длин волн, в рассматриваемом случае интерфейс PXC относится к типы LSC, а не FSC.

                        _______
                       |       |
                  /|___|       |
                 | |___|  PXC  |
         ========| |___|       |
                 | |___|       |
                  \|   |_______|
                DWDM (прозрачно для битовой скорости и кадрирования)

 

Канал TE представляет собой группу из одного или множества интерфейсов на кросс-коннекторе PXC. Все интерфейсы одного PXC должны иметь уникальные в рамках этого PXC идентификаторы, которые используются в качестве меток (см. параграф 3.2.1.1 в [GMPLS-SIG]).

Ниже приведен пример дескриптора коммутации для непрозрачного OXC (PXC) с внешним мультиплексированием DWDM, которое прозрачно для битовой скорости и кадрирования.

Дескриптор коммутации:

Режим коммутации = LSC

Кодирование = Lambda (оптическое)

Резервируемая полоса = Определяется ограничениями оптической технологии

3.8. Интерфейс PXC без внешней DWDM

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

Канал TE представляет собой группу из одного или множества интерфейсов на кросс-коннекторе PXC. Все интерфейсы одного PXC должны иметь уникальные в рамках этого PXC идентификаторы, которые используются в качестве меток (см. параграф 3.2.1.1 в [GMPLS-SIG]).

Дескриптор коммутации:

Режим коммутации = FSC

Кодирование = Lambda (оптическое)

Резервируемая полоса = Определяется ограничениями оптической технологии

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

3.9. Интерфейс OXC с внутренней DWDM, понимающий кадрирование SDH

В этом примере предполагается, что соединение между устройствами DWDM и OXC организовано так, что каждый интерфейс кросс-коннектора OXC может индивидуально обрабатывать множество длин волн. В этом случае интерфейс OXC относится к типу LSC, а не FSC.

                  _______
                 |       |
               /||       ||\
              | ||  OXC  || |
      ========| ||       || |====
              | ||       || |
               \||_______||/
             DWDM
         (кадрирование SDH)

 

Канал TE представляет собой группу из одного или множества интерфейсов на кросс-коннекторе OXC. Все длины волн на одном интерфейсе OXC должны иметь уникальные в рамках этого интерфейса идентификаторы, которые используются в качестве меток (см. параграф 3.2.1.1 в [GMPLS-SIG]).

Ниже приведен дескриптор коммутации интерфейса OXC с внутренним мультиплексированием DWDM, который понимает кадрирование SDH и поддерживает фиксированные значения пропускной способности.

Дескриптор коммутации:

Режим коммутации = LSC

Кодирование = SDH (приходит от DWDM)

Максимальная пропускная способность LSP = определяется DWDM (например, STM-16)

Режим коммутации = LSC

Кодирование = SDH (приходит от DWDM)

Максимальная пропускная способность LSP = определяется DWDM (например, STM-64)

3.10. Интерфейс OXC с внутренней DWDM, прозрачный для скорости и кадрирования

В этом примере предполагается, что соединение между устройствами DWDM и OXC организовано так, что каждый интерфейс кросс-коннектора OXC может индивидуально обрабатывать множество длин волн. В этом случае интерфейс OXC относится к типу LSC, а не FSC.

                         _______
                        |       |
                      /||       ||\
                     | ||  OXC  || |
             ========| ||       || |====
                     | ||       || |
                      \||_______||/
                    DWDM (прозрачно для битовой скорости и кадрирования)

 

Канал TE представляет собой группу из одного или множества интерфейсов на кросс-коннекторе OXC. Все длины волн на одном интерфейсе OXC должны иметь уникальные в рамках этого интерфейса идентификаторы, которые используются в качестве меток (см. параграф 3.2.1.1 в [GMPLS-SIG]).

Ниже приведен дескриптор коммутации интерфейса OXC с внутренним мультиплексированием DWDM, который прозрачен для битовой скорости и кадрирования.

Дескриптор коммутации:

Режим коммутации = LSC

Кодирование = Lambda (оптическое)

Резервируемая полоса = Определяется ограничениями оптической технологии

4. Примеры интерфейсов, поддерживающих MSC15

Ниже описаны некоторые из множества возможных комбинаций.

4.1. Интерфейс на устройстве PXC+TDM с внешним DWDM

Как было указано выше, использование внешнего мультиплексирования DWDM позволяет обслуживать на порту PXC только одну длину волны. На таком порту подключенное устройство PXC+TDM может организовать для длины волны кросс-соединение с другим исходящим оптическим каналом или служить терминальным устройством с интерфейсом SDH и коммутацией каналов SDH.

С точки зрения GMPLS функциональность PXC+TDM рассматривается, как один интерфейс, который описывается двумя дескрипторами коммутации (один для LSC, другой для TDM) с соответствующими параметрами. Например,

Дескриптор коммутации:

Режим коммутации = LSC

Кодирование = SDH (приходит от WDM)

Резервируемая полоса = STM-64

и

Дескриптор коммутации:

Режим коммутации = TDM [Standard SDH]

Кодирование = SDH

Минимальная пропускная способность LSP = VC-3

Максимальная пропускная способность LSP [p] = STM-64 для всех p

4.2. Интерфейс на устройстве Opaque OXC+TDM с внешним DWDM

Интерфейс устройства «непрозрачный OXC+TDM» будет анонсироваться, как LSC+TDM (см. выше).

4.3. Интерфейс на устройстве PXC+LSR с внешним DWDM

Как было указано выше, использование внешнего мультиплексирования DWDM позволяет обслуживать на порту PXC только одну длину волны. На таком порту подключенное устройство PXC+LSR может организовать для длины волны кросс-соединение с другим исходящим оптическим каналом или служить терминальным устройством с пакетным интерфейсом и коммутацией пакетов.

С точки зрения GMPLS функциональность PXC+LSR рассматривается, как один интерфейс, который описывается двумя дескрипторами коммутации (один для LSC, другой для PSC) с соответствующими параметрами. Например,

Дескриптор коммутации:

Режим коммутации = LSC

Кодирование = SDH (приходит от WDM)

Резервируемая полоса = STM-64

и

Дескриптор коммутации:

Режим коммутации = PSC-1

Кодирование = SDH

Максимальная пропускная способность LSP [p] = 10 Гбит/с для всех p

4.4. Интерфейс на устройстве TDM+LSR

На устройстве TDM+LSR с канализованным интерфейсом SDH может быть возможно перечисленное ниже.

  • Некоторые каналы SDH могут быть незавершенными (т. е. они не используются и доступны для выделения).

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

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

С точки зрения GMPLS функциональность TDM+PSC рассматривается, как один интерфейс, который описывается двумя дескрипторами коммутации (один для TDM, другой для PSC) с соответствующими параметрами. Например,

Дескриптор коммутации:

Режим коммутации = TDM [Standard SDH]

Кодирование = SDH

Минимальная пропускная способность LSP = VC-3

Максимальная пропускная способность LSP [p] = STM-64 для всех p

и

Дескриптор коммутации:

Режим коммутации = PSC-1

Кодирование = SDH

Максимальная пропускная способность LSP [p] = 10 Гбит/с для всех p

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

Авторы выражают благодарность Suresh Katukam, Jonathan Lang, Zhi-Wei Lin и Quaizar Vohra за комментарии и вклад в подготовку документа. Спасибо также Stephen Shew за текст, относящийся к представлению возможностей канала TE.

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

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

Хотя весь документ посвящен расширениям, он не задает реализации этих расширений в протоколах маршрутизации (типа OSPF или IS-IS). В документах, посвященных реализации этих расширений в протоколах маршрутизации [GMPLS-OSPF, GMPLS-ISIS], должны описываться также способы и средства защиты информации.

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

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

[GMPLS-OSPF] Kompella, K., Ed. and Y. Rekhter, Ed., «OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)», RFC 4203, October 2005.

[GMPLS-SIG] Berger, L., «Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description», RFC 3471, January 2003.

[GMPLS-SONET-SDH] Mannie, E. and D. Papadimitriou, «Generalized Multi-Protocol Label Switching (GMPLS) Extensions for Synchronous Optical Network (SONET) and Synchronous Digital Hierarchy (SDH) Control», RFC 3946, October 2004.

[IEEE] IEEE, «IEEE Standard for Binary Floating-Point Arithmetic», Standard 754-1985, 1985 (ISBN 1-5593- 7653-8).

[LINK-BUNDLE] Kompella, K., Rekhter, Y., and L. Berger, «Link Bundling in MPLS Traffic Engineering (TE)», RFC 4201, October 2005.

[LMP] Lang, J., Ed., «Link Management Protocol (LMP)», RFC 4204, October 2005.

[LSP-HIER] Kompella, K. and Y. Rekhter, «Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE))», RFC 4206, October 2005.

[OSPF-TE] Katz, D., Kompella, K., and D. Yeung, «Traffic Engineering (TE) Extensions to OSPF Version 2», RFC 3630, September 2003.

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

[RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, «MPLS Label Stack Encoding», RFC 3032, January 2001.

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

[GMPLS-ISIS] Kompella, K., Ed. and Y. Rekhter, Ed., «Intermediate System to Intermediate System (IS-IS) Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)», RFC 4205, October 2005.

[ISIS-TE] Smit, H. and T. Li, «Intermediate System to Intermediate System (IS-IS) Extensions for Traffic Engineering (TE)», RFC 3784, June 2004.

8. Участники работы

Ayan Banerjee

Calient Networks

5853 Rue Ferrari

San Jose, CA 95138

Phone: +1.408.972.3645

EMail: abanerjee@calient.net

John Drake

Calient Networks

5853 Rue Ferrari

San Jose, CA 95138

Phone: (408) 972-3720

EMail: jdrake@calient.net

Greg Bernstein

Ciena Corporation

10480 Ridgeview Court

Cupertino, CA 94014

Phone: (408) 366-4713

EMail: greg@ciena.com

Don Fedyk

Nortel Networks Corp.

600 Technology Park Drive

Billerica, MA 01821

Phone: +1-978-288-4506

EMail: dwfedyk@nortelnetworks.com

Eric Mannie

Libre Exaministe

EMail: eric_mannie@hotmail.com

Debanjan Saha

Tellium Optical Systems

2 Crescent Place

P.O. Box 901

Ocean Port, NJ 07757

Phone: (732) 923-4264

EMail: dsaha@tellium.com

Vishal Sharma

Metanoia, Inc.

335 Elan Village Lane, Unit 203

San Jose, CA 95134-2539

Phone: +1 408-943-1794

EMail: v.sharma@ieee.org

Debashis Basak

AcceLight Networks,

70 Abele Rd, Bldg 1200

Bridgeville PA 15017

EMail: dbasak@accelight.com

Lou Berger

Movaz Networks, Inc.

7926 Jones Branch Drive

Suite 615

McLean VA, 22102

EMail: lberger@movaz.com

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

Kireeti Kompella

Juniper Networks, Inc.

1194 N. Mathilda Ave

Sunnyvale, CA 94089

EMail: kireeti@juniper.net

Yakov Rekhter

Juniper Networks, Inc.

1194 N. Mathilda Ave

Sunnyvale, CA 94089

EMail: yakov@juniper.net

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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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.


1Generalized Multi-Protocol Label Switching — обобщенная многопротокольная коммутация по меткам.

2Traffic Engineering — построение трафика.

3Shortest Path First — сначала кратчайший путь.

4Label Switched Path — путь с коммутацией по меткам.

5Выбор кратчайшего пути с учетом ограничений.

6Label Switching Router — маршрутизатор с коммутацией по меткам.

7Optical Cross-Connect — оптический кросс-коннектор.

8Shared risk link group — группа общего риска, связанного с соединениями.

9Packet-Switch Capable — поддержка коммутации пакетов

10Layer-2 Switch Capable — поддержка коммутации на уровне 2 (логический канал).

11Time-Division-Multiplex Capable — поддержка мультиплексирования с разделением по времени.

12Lambda-Switch Capable — поддержка коммутации по длине волны.

13Fiber-Switch Capable — поддержка коммутации оптических волокон.

14Максимальная пропускная способность LSP.

15Множество вариантов коммутации.

Рубрика: RFC | Комментарии к записи RFC 4202 Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS) отключены

RFC 4211 Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)

Network Working Group                                      J. Schaad
Request for Comments: 4211                   Soaring Hawk Consulting
Obsoletes: 2511                                       September 2005
Category: Standards Track

Формат сообщений запроса сертификата (CRMF) для инфраструктуры открытых ключей Internet X.509

Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

В этом документе описаны синтаксис и семантика CRMF1. Этот синтаксис служит для передачи запросов сертификата в удостоверяющий центр (CA2), возможно через центр регистрации (RA3), с целью создания сертификата X.509. Запрос обычно включает открытый ключ и связанные с ним регистрационные данные. Документ не определяет протокол запроса сертификата.

Оглавление

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

 

1. Введение и терминология

Этот документ описывает формат сообщений CRMF. Объекты CRM4 используются в протоколах для передачи запросов удостоверяющим центрам (CA) и, возможно, регистрационным агентствам (RA) на создание сертификатов X.509. Запрос обычно включает открытый ключ и связанную с ним регистрационную информацию.

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

Запросы сертификатов могут подаваться агентствами RA, запрашивающими сертификаты от имени субъектов (Subject), удостоверяющими центрами CA, запрашивающими кросс-сертификаты у других CA, или непосредственно конечными объектами (EE6).

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

2. Обзор

Создание запроса сертификации включает перечисленные ниже этапы.

  1. Создается объект CertRequest, который может включать открытый ключ, часть или все имя субъекта, другие запрашиваемые поля сертификата и иную управляющую информацию, относящуюся к процессу регистрации. В зависимости от протокола CRP, эта информация может быть задана субъектом (Subject) и потенциально изменена агентством RA, а также может быть задана агентством RA на основе Subject или представленной субъектом документации.

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

  3. Дополнительная регистрационная информация может объединяться со значением proof-of-possession и структурой CertRequest для формирования CertReqMessage. Дополнительная регистрационная информация может быть добавлена как субъектом, так и регистратором RA.

  4. Сообщение CertReqMessage передается с использованием защиты в удостоверяющий центр CA. Конкретные меры транспортной защиты определяются каждым протоколом CRP, соответствующим этому документу.

2.1. Отличия от RFC 2511

  1. Добавлен вводный раздел.

  2. Добавлена концепция CRP и языка, относящегося к протоколам CRP.

  3. В параграфе 6.2 обозначение regToken заменено на authenticator.

  4. Добавлено описание содержимого структуры EncryptedValue.

  5. Изменено имя и содержимое OID {id-regInfo 1}.

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

  7. Заменено Приложение A со ссылкой на [RFC2875]. Единственное отличие состоит в том, прежний текст указывал использование дополнительного имени (alt name) субъекта при пустом основном имени. Такое поведение невозможно для сертификатов CA, введенных с использованием PKIX. Однако будет полезно обновить RFC 2875 с учетом этого обстоятельства.

  8. Добавлено Приложение C, описывающее необходимость POP и возможные атаки на POP.8

  9. Поле pop в структуре CertReqMsg переименовано в popo для предотвращения путаницы между POP и pop.

  10. Использование структуры EncryptedValue отменено в пользу структуры EnvelopedData.

  11. Более подробно описано структурирование секретных ключей при их шифровании.

  12. Для POP в алгоритмах согласования ключей разрешено использование алгоритмов, отличных от DH.

3. Синтаксис CertReqMessage

Сообщение запроса сертификата состоит из запроса сертификата, необязательного поля доказательства обладания (proof-of-possession) и необязательного поля регистрационной информации.

   CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg

   CertReqMsg ::= SEQUENCE {
      certReq   CertRequest,
      popo      ProofOfPossession  OPTIONAL,
      -- содержимое зависит от типа ключа
      regInfo   SEQUENCE SIZE(1..MAX) of AttributeTypeAndValue OPTIONAL
   }

Смысл полей CertReqMsg описан ниже.

certReq содержит шаблон запрашиваемого сертификата. Шаблон заполняется субъектом или от его имени. Не все поля шаблона обязательны для заполнения, более подробное описание приведено в разделе 5.

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

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

Информацию, относящуюся непосредственно к содержимому сертификата, следует включать в содержимое certReq. Однако включение в certReq дополнительного содержимого агентствами RA может привести к утрате корректности поля popo (в зависимости от используемого метода POP). Следовательно, данные, предназначенные для содержимого сертификата, можно включать в поле regInfo.

Упомянутые выше протоколы CRP отвечают за определение деталей, которые могут быть заданы в поле regInfo. Этот документ описывает один способ представления информации в этом поле, подробно описанный в Приложении A.

4. Доказательство обладания (POP)

Для того, чтобы предотвратить возможность некоторых атак (см. Приложение C) и позволить CA/RA проверять приемлемость привязки между субъектом и парой ключей, заданные здесь структуры управления PKI предоставляют субъекту возможность подтвердить свое владение (и возможность использования) секретным ключом, соответствующим открытому ключу, для которого запрашивается сертификат. Данный CRP свободен в выборе способа реализации POP (например, процедурные меры за пределами основного канала против сообщений CRMF в основной полосе) в своих сертификационных обменах. В данном CRP, агентства CA и RA свободны в выборе между обеспечиваемыми методами POP (т. е., это вопрос локальной политики RA/CA). CRP следует определить требуемые методы POP или указать механизм, с помощью которого клиенты могут определить поддерживаемые методы POP.

Любой протокол CRP, соответствующий данному документу, должен обеспечивать исполнение POP тем или иным способом. В настоящее время применяется множество протоколов без PKIX (например, различные протоколы электронной почты), которые явно не проверяют привязку между субъектом и секретным ключом. Пока нет работающих протоколов, которые проверяют такую привязку (для ключевых пар подписи, шифрования и согласования ключей) и существуют неоднозначности, нельзя полагаться на то, что привязка подтверждена CA/RA. Следовательно, нельзя достоверно узнать, является ли привязка открытого ключа в сертификате действительно корректной.

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

Данная спецификация разрешает случаи, когда POP подтверждается агентством CA, RA или обоими. Некоторые политики требуют от CA проверки POP на момент эмиссии сертификата, а таких случаях агентство RA должно пересылать поля CertRequest и ProofOfPossession от конечного элемента в CA без изменений (в такой ситуации RA может проверить POP и отвергнуть запрос сертификата вместо его пересылки в CA). Если использование CA не требуется политикой для проверки POP, агентству RA следует переслать запрос конечного элемента и представленные подтверждения без каких-либо изменений в CA, как указано выше. Если это невозможно (например, если RA проверяет POP с использованием специальных каналов), RA использует элемент raVerified для подтверждения агентству CA факта проверки требуемого подтверждения. Если CA/RA использует отдельный канал (out-of-band) для проверки POP (например, физическое представление созданных CA/RA секретных ключей), поле ProofOfPossession опускается.

   ProofOfPossession ::= CHOICE {
       raVerified        [0] NULL,
       signature         [1] POPOSigningKey,
       keyEncipherment   [2] POPOPrivKey,
       keyAgreement      [3] POPOPrivKey }

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

raVerified показывает, что агентство RA выполнило процедуру POP, требуемую для запроса сертификата. Это поле используется, если 1) CA не требует подключения себя к проверке POP и 2) RA требуется изменить содержимое поля certReq. Протоколы CRP должны обеспечивать для RA метод подписывания ProofOfPossession. Запрашивающему недопустимо устанавливать это поле, а RA/CA недопустимо воспринимать ProofOfPossession, если запрашивающий установил это поле.

signature служит для выполнения процедуры POP с ключами подписи. Более подробное описание приведено в параграфе 4.1.

keyEncipherment служит для выполнения процедуры POP с ключами шифрования ключей (например, RSA). Более подробное описание приведено в параграфе 4.2.

keyAgreement служит для выполнения процедуры POP с ключами согласования ключей (например, DH). Более подробное описание приведено в параграфе 4.3.

4.1. POP для ключа подписи

POP для ключа подписи выполняется путем подписывания части данных, содержащих отождествление (identity), для которого нужен сертификат.

При выполнении процедуры POP для ключа подписи следует рассмотреть три указанных ниже случая.

  1. Субъект сертификата еще не организовал аутентифицированного отождествления в CA/RA, но имеет пароль и строку отождествления от CA/RA. В этом случае структура POPOSigningKeyInput будет заполняться с использованием publicKeyMAC для authInfo, а пароль и отождествление будут использоваться для расчета publicKeyMAC. Открытый ключ для запрашиваемого сертификата будет помещен в обе структуры POPOSigningKeyInput и Certificate Template. Поле подписи рассчитывается для DER-представления структуры POPOSigningKeyInput.

  2. CA/RA имеет аутентифицированное отождествление для субъекта сертификата, но запрашивающая сертификат сторона не указала это отождествление в запросе. В этом случае структура POPOSigningKeyInput заполняется с использованием sender для authInfo. Открытый ключ для запрашиваемого сертификата будет помещен в обе структуры POPOSigningKeyInput и Certificate Template. Поле подписи рассчитывается для DER-представления структуры POPOSigningKeyInput.

  3. Субъект сертификата поместил свое имя в структуру Certificate Template вместе с открытым ключом. В этом случае поле poposkInput структуры POPOSigningKey опускается. Поле подписи рассчитывается для DER-представления certReq9.

   POPOSigningKey ::= SEQUENCE {
       poposkInput         [0] POPOSigningKeyInput OPTIONAL,
       algorithmIdentifier     AlgorithmIdentifier,
       signature               BIT STRING }

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

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

algorithmIdentifier указывает алгоритм подписи и связанные с ним параметры, используемые для создания значения POP.

signature содержит создаваемое значение POP10. При наличии poposkInput подпись рассчитывается для DER-представления poposkInput., а при отсутствии для расчета используется DER-представления certReq.

   POPOSigningKeyInput ::= SEQUENCE {
       authInfo            CHOICE {
           sender              [0] GeneralName,
           -- используется только при наличии аутентифицированного отождествления
           -- для отправителя (например, DN из выданного ранее и действительного сертификата)
           publicKeyMAC        PKMACValue },
           -- используется при отсутствии для отправителя аутентифицированного GeneralName;
           -- publicKeyMAC содержит основанное на пароле значение MAC
           -- для DER-представления publicKey
       publicKey           SubjectPublicKeyInfo }  -- from CertTemplate

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

sender указывает аутентифицированное отождествление, которое заранее было организовано для субъекта.

publicKeyMAC содержит значение, рассчитываемое с помощью общего для CA/RA и запрашивающей стороны ключа.

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

   PKMACValue ::= SEQUENCE {
      algId  AlgorithmIdentifier,
      value  BIT STRING }

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

algId указывает алгоритм, применяемый для расчета значения MAC. Все реализации должны поддерживать алгоритм id-PasswordBasedMAC, более подробно описанных в параграфе 4.4.

value содержит рассчитанное значение MAC, которое вычисляется для DER-представления открытого ключа субъекта сертификата.

Агентство CA/RA идентифицирует общий секрет для использования путем просмотра 1) поля имени в запросе сертификата или 2) любого из значений regToken (параграф 6.1) и authToken (параграф 6.2).

4.2. POP ключа шифрования ключей

Процедура POP для ключа шифрования ключей выполняется одним из трех различающихся методов. Можно представить секретный (private) ключ в CA/RA, расшифровать зашифрованный вызов от CA/RA (прямой метод) или создать сертификат, который может быть возвращен в зашифрованном виде и возвращен в качестве отклика на вызов (непрямой метод).

   POPOPrivKey ::= CHOICE {
       thisMessage       [0] BIT STRING,   -- устарело
       subsequentMessage [1] SubsequentMessage,
       dhMAC             [2] BIT STRING,   -- устарело
       agreeMAC          [3] PKMACValue,
       encryptedKey      [4] EnvelopedData }
     -- для keyAgreement (исключительно) владение подтверждается в этом сообщении
     -- (которое содержит MAC (для DER-представления параметра certReq в
     -- CertReqMsg, который может включать subject и publicKey) на основе ключа,
     -- созданного из секретного ключа DH конечного элемента и открытого ключа DH
     -- агентства CA); значение dhMAC ДОЛЖНО рассчитываться в соответствии с RFC 2875 
     -- для статического подтверждения владения.

   SubsequentMessage ::= INTEGER {
       encrCert (0),
       challengeResp (1) }

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

thisMessage содержит зашифрованный секретный ключ, для которого выдается сертификат. Владение секретным ключом подтверждается его предоставлением в CA/RA. При подготовке первой спецификации это поле было описано некорректно. Правильным назначением этого поля является создание структуры EncryptedValue, в которой зашифрованное содержимое является секретным ключом, а сама структура EncryptedValue затем «оборачивается» (wrapped) в тип BIT STRING. От этого поля отказались в пользу encryptedKey.

subsequentMessage используется для индикации выполнения POP путем расшифровки сообщения от CA/RA и возврата результат. Тип сообщения для расшифровки указывается использованным значением (value).

encrCert указывает, что выданный сертификат будет возвращен в зашифрованном виде. Запрашивающий должен будет расшифровать сертификат и предъявить результат агентству CA/RA. Детали обеспечиваются протоколом CRP.

challengeResponse указывает, что от CA/RA запрашивающему было отправлено сообщение с вызовом. Детали этого сообщения и ответа на вызов обеспечиваются протоколом CRP.

dhMAC используется для ключей при согласовании Diffie-Hellman и содержит рассчитанное значение MAC, которое получается с использованием секретного ключа запрашивающего и открытого ключа CA/RA. От применения этого поля отказались в пользу agreeMAC (см. параграф 4.3).

agreeMAC используется для ключей согласования ключа и содержит рассчитанное значение MAC, которое получается с использованием секретного ключа запрашивающего и открытого ключа CA/RA (см. параграф 4.3).

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

macValue содержит рассчитанное значение MAC.

encryptedKey содержит зашифрованный секретный ключ, соответствующий открытому ключу, для которого выдается сертификат, а также идентификационное значение для указания факта создания стороной, запрашивающей сертификат. Зашифрованное содержимое должно иметь тип id-ct-encKeyWithID.

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

4.2.1. Тип содержимого Private Key Info

Этот тип содержимого служит для 1) подтверждения владения секретными ключами и 2) депонирования секретных ключей (с использованием элемента управления options control, как описано в параграфе 6.4). Эта структура основана на структуре информации о секретном ключе из [PKCS8], но имеет одно преднамеренное отличие. Возможны атаки на агентов депонирования, если те расшифровывают секретные ключи, но не знают, кому принадлежит зашифрованный ключ. Атакующие может перехватить зашифрованный секретный ключ, создать на его основе запрос сертификата и затем запросить операцию восстановления секретного ключа.

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

      id-ct-encKeyWithID OBJECT IDENTIFIER ::= {id-ct 21}

      EncKeyWithID ::= SEQUENCE {
        privateKey           PrivateKeyInfo,
        identifier CHOICE {
          string               UTF8String,
          generalName          GeneralName
        } OPTIONAL
      }

      PrivateKeyInfo ::= SEQUENCE {
         version                   INTEGER,
         privateKeyAlgorithm       AlgorithmIdentifier,
         privateKey                OCTET STRING,
         attributes                [0] IMPLICIT Attributes OPTIONAL
      }

   Attributes ::= SET OF Attribute

Ниже описаны поля структуры EncKeyWithID.

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

identifier содержит имя, которое агентство CA/RA может связать с запрашивающим. Обычно это часть любого имени субъекта, его дополнительное имя (из имеющегося сертификата или запроса сертификата) или текстовый маркер, известный запрашивающему и CA/RA11. Это поле должно присутствовать, если цель заключается в подтверждении владения секретным ключом. Поле следует включать, если предполагается архивирование ключа и его расшифровка агентом архивирования.

Ниже описаны поля структуры PrivatekeyInfo.

version должно иметь значение 0.

privateKeyAlgorithm содержит идентификатор объекта для секретного ключа.

privateKey строка октетов, содержащая секретный ключ в формате, определяемом значением privateKeyAlgorithm.

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

4.2.2. Структуры секретных ключей

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

4.2.2.1. Ключи D-H

При создании структуры PrivateKeyInfo для ключа D-H применяются приведенные ниже правила.

  1. Поле privateKeyAlgorithm должно иметь значение id-dh-private-number. Параметр id-dh-private-number представляет собой значение DomainParameters (импорт из [PKIXALG]).

  2. Структура ASN для privateKey должна иметь форму

            DH-PrivateKey ::= INTEGER
  3. Поле attributes должно быть опущено.

4.2.2.2. Ключи DSA

При создании структуры PrivateKeyInfo для ключа DSA применяются приведенные ниже правила.

  1. Поле privateKeyAlgorithm должно иметь значение id-dsa. Параметрами id-dsa являются Dss-Parms (импорт из [PKIXALG]).

  2. Структура ASN для privateKey должна иметь форму

            DSA-PrivateKey ::= INTEGER
  3. Поле attributes должно быть опущено.

4.2.2.3. Ключи RSA

При создании структуры PrivateKeyInfo для ключа RSA применяются приведенные ниже правила.

  1. Поле privateKeyAlgorithm должно иметь значение rsaEncryption.

  2. Структура ASN для privateKey MUST должна быть RSAPrivateKey (определено в [PKCS1]).

  3. Поле attributes должно быть опущено.

4.2.3. Рекомендации для вызовов-откликов

Ниже приводятся рекомендации для разработчиков протоколов регистрации в части ожиданий по работе непрямого подтверждения владения (indirect proof-of-possession0 и о некоторых «подводных камнях» при создании сообщений для реализации этого метода POP.

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

  2. Отклик от сервера включает зашифрованное значение того или иного типа данных. Получение этого значения от сервера нужно аутентифицировать каким-либо способом. Спецификация должна включать детальное описание способа возврата этого значения для разных типов ключей. Для ключей RSA значение может быть указано, как шифруемое непосредственно с открытым ключом RSA, но такой подход не будет работать с ключом D-H, где требуется указать опосредованный механизм шифрования значения.

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

При выполнении непрямой процедуры POP настоятельно рекомендуется требовать идентификаторы транзакций и одноразовые значения nonce, что позволит 1) связать между собой разные сообщения процесса и 2) внести каждому элементу некоторые случайные элементы в процесс подтверждения идентификации.

4.3. POP для ключа согласования ключей

POP для ключа согласования ключей выполняется одним из 4 разных способов. Три первых способа идентичны представленным выше для ключа шифрования ключей. Преимуществом четвертого метода является создание общего секрета и возможность его использования для информации MAC.

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

Конечный объект может запросить MAC сертификата (используя полученный расчетным путем общий секрет) в качестве четвертого варианта выполнения POP. Этот вариант может использоваться только в тех случаях, когда CA/RA уже имеет сертификат, который относится к конечному объекту и субъект (Subject) сертификата может использовать параметры CA/RA.

Для алгоритма согласования ключей DH все реализации должны поддерживать статический механизм DH Proof-of-Possession. Подробное описание этого алгоритма приведено в разделе 3 of [RFC2875]. Следует подчеркнуть, что при пустом значении субъекта или эмитента сертификата взамен следует использовать его дополнительное имя.

4.4. Использование MAC на базе паролей

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

Идентификатор алгоритма и структура параметров для Password-Based MAC приведены ниже.

      id-PasswordBasedMAC OBJECT IDENTIFIER ::= { 1 2 840 113533 7 66 13}

      PBMParameter ::= SEQUENCE {
         salt                OCTET STRING,
         owf                 AlgorithmIdentifier,
         iterationCount      INTEGER,
         mac                 AlgorithmIdentifier
         }12

Назначение полей PBMParameter13 описано ниже.

salt содержит случайное значение, используемое для расчета ключа в процессе MAC. Следует применять значения salt размером не менее 8 октетов (64 бита).

owf указывает алгоритм и связанные с ним параметры, используемые для расчета ключа в процессе MAC. Все реализации должны поддерживать алгоритм SHA-1.

iterationCount указывает число итераций хэширования в процессе расчета ключа и должно иметь значение не менее 100 (многие предлагают использовать не менее 1000 итераций). Компромисс здесь заключается в выборе между обеспечиваемым уровнем защиты от атак и временем, затрачиваемым сервером на обработку всех итераций при расчете паролей. Хэширование обычно считается «недорогой» операцией, но это допущение может стать ошибочным с новыми вариантами хэш-функций.

mac указывает алгоритм и связанные с ним параметры функции MAC. Все реализации должны поддерживать алгоритм HMAC-SHA1 [HMAC]. Всем реализациям следует также поддерживать DES-MAC и Triple-DES-MAC [PKCS11].

Ниже приведен псевдокод алгоритма.

Входные данные:

pw — строка октетов, содержащая пользовательский пароль;

data — строка октетов, содержащая значение, для которого рассчитывается MAC;

Iter — счетчик итераций.

Выход:

MAC — строка октетов, содержащая полученное в результате значение MAC.

  1. создается случайное значение salt = S;

  2. salt добавляется в конец pw — K = pw || salt;

  3. вычисляется хэш от K — K = HASH(K);

  4. если Iter > 0, выполняется декрементирование (Iter = Iter — 1) и возврат к п. 3;

  5. Рассчитывается HMAC в соответствии с [HMAC]

    MAC = HASH( K XOR opad, HASH( K XOR ipad, data) )

    значения opad и ipad определены в [HMAC].

5. Синтаксис CertRequest

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

   CertRequest ::= SEQUENCE {
      certReqId     INTEGER,            -- ID для сопоставления запросов с откликами
      certTemplate  CertTemplate,       -- выбранные поля выпускаемого сертификата
      controls      Controls OPTIONAL } -- атрибуты, влияющие на выпуск сертификата

   CertTemplate ::= SEQUENCE {
      version      [0] Version               OPTIONAL,
      serialNumber [1] INTEGER               OPTIONAL,
      signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
      issuer       [3] Name                  OPTIONAL,
      validity     [4] OptionalValidity      OPTIONAL,
      subject      [5] Name                  OPTIONAL,
      publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
      issuerUID    [7] UniqueIdentifier      OPTIONAL,
      subjectUID   [8] UniqueIdentifier      OPTIONAL,
      extensions   [9] Extensions            OPTIONAL }

   OptionalValidity ::= SEQUENCE {
      notBefore  [0] Time OPTIONAL,
      notAfter   [1] Time OPTIONAL } -– требуется наличие хотя бы одного

   Time ::= CHOICE {
      utcTime        UTCTime,
      generalTime    GeneralizedTime }

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

certReqId содержит целочисленное значение, используемое запросившей сертификат стороной для сопоставления запроса с откликом.

certTemplate содержит шаблон сертификата X.509. Запрашивающий указывает в этих полях конкретные желаемые значения. Более подробное описание полей приведено ниже.

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

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

version должно иметь значение 2, если версия указана; следует опускать это поле.

serialNumber должно опускаться; это значение выделяется агентством CA при создании сертификата.

signingAlg должно опускаться; это значение выделяется агентством CA при создании сертификата.

issuer обычно опускается; поле заполняется агентством CA, в котором запрашивающий желает выпустить сертификат, в ситуации когда RA обслуживается несколькими CA.

validity обычно опускается, но может применяться для запроса конкретных будущих дат начала и завершения срока действия сертификата. Наиболее часто это поле будет использоваться при кросс-сертификации для CA. В таких случаях в этом поле может выть указан срок действия имеющегося сертификата и тогда новый сертификат будет иметь такой же срок действия. Если поле validity присутствует, в нем должно быть задано хотя бы одно из двух следующих субполей:

notBefore указывает время начала действия сертификата, заданное по тем же правилам, которые применяются для notBefore в [PROFILE];

notAfter указывает время завершения действия сертификата, заданное по тем же правилам, которые применяются для notAfter в [PROFILE].

subject содержит предложенное имя для запрашивающего, в качестве которого обычно указывается то имя, которое ранее было присвоено запрашивающему агентством CA.

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

issuerUID должно быть опущено; это поле отменено в [PROFILE].

subjectUID должно быть опущено; это поле отменено в [PROFILE].

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

Агентству CA/RA разрешено менять значения любого поля, за исключением publicKey. Возвращенный сертификат должен быть проверен запрашивающим на предмет приемлемости установленных значений полей. Агентствам CA/RA следует по возможности применять шаблоны.

В некоторых случаях все поля шаблона могут быть опущены. Если генерация ключа происходила в CA/RA и отождествление было помещено в другое место (например, как в описанном ниже id-regCtrl-regToken), запрашивающему не требуется задавать какое-либо поля.

6. Синтаксис элементов управления

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

   Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue

В этом документе определено несколько элементов управления — regToken (параграф 6.1), authenticator (параграф 6.2), pkiPublicationInfo (параграф 6.3), pkiArchiveOptions (параграф 6.4), oldCertID (параграф 6.5), protocolEncrKey (параграф 6.6). Каждый протокол CRP должен определять набор поддерживаемых им элементов управления. Дополнительные элементы могут определяться в других RFC или в самом протоколе CRP.

6.1. Элемент regToken

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

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

Элемент regToken используется только для инициализации конечного элемента в PKI, тогда как элемент authenticator (см. параграф 6.214) может применяться как для начального, так и для последующих запросов.

В некоторых вариантах применения элемент regToken может содержать символьную строку или численное значения (типа случайной величины). В последнем случае значение представляется в форме строки символов, соответствующей двоичному значению. В качестве кодировки для regToken нужно применять UTF8String.

   id-regCtrl-regToken OBJECT IDENTIFIER ::= { id-regCtrl 1 }

Без предварительного согласования между подписчиком и CA это значение будет содержать текстовое представление некого общего секрета. Если вместо этого используется значения, рассчитанное на основе общего секрета, предполагается, что протокол CRP определяет новый элемент управления для этого конкретного расчета.

6.2. Элемент authenticator

Элемент управления authenticator содержит информацию, используемую на постоянной основе для организации некриптографической проверки отождествления при коммуникациях с CA. Примерами могут служить девичья фамилия матери, последние четыре цифры номера социального страхования или другая информация, доступная подписчику и CA, хэш-значение такой информации или иные данные, созданные специально для этой цели. Значение для элемента authenticator может создаваться подписчиком или агентством CA.

В некоторых вариантах применения элемент authenticator может содержать символьную строку или численное значения (типа случайной величины). В последнем случае значение представляется в форме строки символов, соответствующей двоичному значению. В качестве кодировки для authenticator нужно применять UTF8String.

   id-regCtrl-authenticator OBJECT IDENTIFIER ::= { id-regCtrl 2 }

При выборе между использованием элемента authenticator или regToken следует использовать приведенные ниже рекомендации. Если используется однократное значение, следует выбирать элемент regToken. Если значение предназначено для долговременного использования, следует выбирать элемент authenticator.

6.3. Элемент pkiPublicationInfo

Элемент pkiPublicationInfo обеспечивает подписчикам возможность влиять на публикацию сертификата агентством CA/RA. Этот элемент считается рекомендацией и CA/RA могут игнорировать его. Элемент определяется приведенным ниже OID и синтаксисом.

   id-regCtrl-pkiPublicationInfo  OBJECT IDENTIFIER ::= { id-regCtrl 3 }

   PKIPublicationInfo ::= SEQUENCE {
        action     INTEGER {
                     dontPublish (0),
                     pleasePublish (1) },
        pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }

   SinglePubInfo ::= SEQUENCE {
         pubMethod    INTEGER {
             dontCare    (0),
             x500        (1),
             web         (2),
             ldap        (3) },
         pubLocation  GeneralName OPTIONAL }

Ниже описано назначение полей структуры PKIPublicationInfo.

action показывает желание или нежелание запрашивающей стороны публикации сертификата агентством CA/RA. Возможны значения приведены ниже15:

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

pleasePublish говорит о желании запрашивающего опубликовать сертификат через агентство CA/RA.

pubInfos указывает место, где запрашивающий желает опубликовать сертификат с помощью CA/RA. Это поле опускается при выборе запрашивающим опции dontPublish. Если запрашивающий хочет задать некие места публикации сертификата и позволяет CA/RA публиковать его в других местах, он будет указывать в структуре SinglePubInfo множество значений, одним из которых является dontCare.

Ниже описано назначение полей структуры SinglePubInfo.

pubMethod указывает тип адреса места, куда запрашивающий желает поместить сертификат с участием CA/RA.

dontCare показывает, что CA/RA может публиковать сертификат в любом месте по своему выбору. При указании dontCare поле pubLocation16 должно быть опущено.

x500 показывает желание запрашивающего опубликовать сертификат с помощью CA/RA в указанном месте. Место публикации задается полем x500 в структуре pubLocation.

ldap показывает желание запрашивающего опубликовать сертификат с помощью CA/RA в указанном месте. Место публикации задается полем ldap в структуре pubLocation.

web показывает желание запрашивающего опубликовать сертификат с помощью CA/RA в указанном месте. Место публикации задается полем http в структуре pubLocation.

pubLocation содержит адрес, по которому будет публиковаться сертификат. Выбор значения поля GeneralName определяется значением pubMethod в этой структуре.

Места для публикации могут указываться в любом порядке. Все указанные места обрабатываются CA в целях публикации.

6.4. Элемент pkiArchiveOptions

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

   id-regCtrl-pkiArchiveOptions   OBJECT IDENTIFIER ::= { id-regCtrl 4 }

   PKIArchiveOptions ::= CHOICE {
      encryptedPrivKey     [0] EncryptedKey,
      -- актуальное значение секретного ключа
      keyGenParameters     [1] KeyGenParameters,
      -- параметры, позволяющие заново сгенерировать секретный ключ
      archiveRemGenPrivKey [2] BOOLEAN }
      -- устанавливается значение TRUE, если отправитель хочет, чтобы получатель
      -- архивировал секретный ключ пары, которую он генерирует в ответ на данный запрос;
      -- FALSE, если архивирование нежелательно.

   EncryptedKey ::= CHOICE {
      encryptedValue        EncryptedValue, -- deprecated
      envelopedData     [0] EnvelopedData }
      -- зашифрованный секретный ключ ДОЛЖЕН помещаться в строку октетов
      -- envelopedData encryptedContentInfo encryptedContent.

   EncryptedValue ::= SEQUENCE {
      intendedAlg   [0] AlgorithmIdentifier  OPTIONAL,
      -- предусмотренный алгоритм, с которым будет использоваться значение
      symmAlg       [1] AlgorithmIdentifier  OPTIONAL,
      -- симметричный алгоритм шифрования значения
      encSymmKey    [2] BIT STRING           OPTIONAL,
      -- (зашифрованный) симметричный ключ шифрования значения
      keyAlg        [3] AlgorithmIdentifier  OPTIONAL,
      -- алгоритм для шифрования симметричного ключа
      valueHint     [4] OCTET STRING         OPTIONAL,
      -- краткое описание или идентификатор содержимого encValue 
      -- (может быть осмысленным только для передающей стороны и применяться лишь
      -- в тех случаях, когда EncryptedValue можно перепроверить в будущем 
      -- на передающей стороне)
      encValue       BIT STRING }
   -- От применения поля EncryptedValue отказались в пользу структуры EnvelopedData.
   --
   -- При использовании EncryptedValue для передачи секретного ключа (в отличие от
   -- сертификата), реализация ДОЛЖНА поддерживать поле encValue, содержащее
   -- зашифрованное значение PrivateKeyInfo как указано в параграфе 12.11 [PKCS11].
   -- Если encValue содержит иной формат/кодирование секретного ключа, первый октет
   -- valueHint МОЖЕТ применяться для индикации этого формата/кодирования (отметим,
   -- что возможные значения этого октета в настоящее время не заданы). В любом случае
   -- поле intendedAlg ДОЛЖНО использоваться для индикации хотя бы идентификатора OID
   -- предусмотренного алгоритма секретного ключа, если он не известен заранее отправителю
   -- и получателю.

   KeyGenParameters ::= OCTET STRING

Ниже описано назначение полей структуры PKIArchiveOptions.

encryptedPrivKey содержит зашифрованную версию секретного ключа.

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

archiveRemGenPrivKey показывает желание запрашивающего архивировать ключ, создаваемый агентством CA/RA от имени запрашивающего.

Ниже описано назначение полей структуры EncryptedKey.

encryptedValue больше не применяется17. Это поле было отменено вместе со структурой EncryptedValue.

envelopedData содержит зашифрованное значение секретного ключа. Использующие эту структуру протоколы CPR должны определять элемент(ы), для которого данные шифруются (EE, агенты депонирования, УЦ), и способ определения ключа или набора ключей. Подробное описание структуры EnvelopedData приведено в [CMS]. Зашифрованное содержимое должно представлять собой id-ct-encKeyWithID. Идентификатор может быть опущен, если эта структура не используется также для доказательства владения.

6.5. Элемент OldCertID

При наличии элемента OldCertID он указывает сертификат, обновляемый текущим запросом. Идентификатор OID и синтаксис приведены ниже.

   id-regCtrl-oldCertID           OBJECT IDENTIFIER ::= { id-regCtrl 5 }

   CertId ::= SEQUENCE {
         issuer           GeneralName,
         serialNumber     INTEGER
     }

6.6. Элемент protocolEncrKey

При наличии элемента protocolEncrKey он указывает ключ, который CA использует для шифрования откликов на сообщения CertReqMessage. В качестве OID для этого элемента используется id-regCtrl-protocolEncrKey. В качестве структуры параметра для этого поля применяется SubjectPublicKeyInfo (определена в [PROFILE]).

   id-regCtrl-protocolEncrKey     OBJECT IDENTIFIER ::= { id-regCtrl 6 }

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

7. Элементы RegInfo

В этом разделе описаны элементы управления, которые помещаются в поле regInfo структуры CertReqMsg.

7.1. utf8Pairs

Этот элемент управления служит для передачи текстовой информации из Subject агентству RA или CA, выпускающему сертификат. Для этой структуры используется OID id-regInfo-utf8Paris и тип UTF8String.

      id-regInfo-utf8Pairs    OBJECT IDENTIFIER ::= { id-regInfo 1 }

Имя завершается знаком вопроса (?), а значение символом процента (%). Пары «имя-значение» могут повторяться. Таким образом, синтаксис имеет вид

      Name?Value%[Name?Value%]*

Механизм %xx, описанный в разделе 2 STD 66 [RFC3986]18 позволяет представлять символы ? (%3f) и % (%25) при их использовании не в качестве разделителей. Недопустимо использовать имена, начинающиеся с цифры.

Этот элемент может неоднократно включаться в структуру regInfo. При возникновении информационных конфликтов они должны устраняться в соответствии с локальной политикой RA/CA.

В Приложении A приведен список общепринятых имен и форматы данных, соответствующие наиболее часто встречающимся в сертификатах и каталогах полям.

7.2. certReq

Этот элемент управления предназначен для решения проблемы, возникающей в случаях, когда RA требуется изменить шаблон сертификата, предложенный Subject, но этот шаблон используется в Subject при расчете POP. В таких случаях RA может поместить новый шаблон сертификата в regInfo.

Этот элемент имеет OID id-regInfo-certReq и структуру CertRequest. В regInfo может помещаться только один экземпляр данного атрибута. При наличии этого элемента управления в структуре regInfo шаблон сертификата из запроса игнорируется. Агентство RA должно скопировать все данные из основного шаблона в этот атрибут.

      id-regInfo-certReq       OBJECT IDENTIFIER ::= { id-regInfo 2 }

8. Идентификаторы объектов

OID id-pkix имеет значение

   id-pkix  OBJECT IDENTIFIER  ::= { iso(1) identified-organization(3)
   dod(6) internet(1) security(5) mechanisms(5) pkix(7) }

   -- arc для протоколов Internet X.509 PKI и их компонент
   id-pkip  OBJECT IDENTIFIER :: { id-pkix pkip(5) }

   -- arc для элементов управления Registration в CRMF
   id-regCtrl  OBJECT IDENTIFIER ::= { id-pkip regCtrl(1) }

   -- arc для Registration Info в CRMF
   id-regInfo       OBJECT IDENTIFIER ::= { id-pkip id-regInfo(2) }

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

Протоколы регистрации по своей природе включают большой объем персональных (приватных) данных. Это могут быть ключи, идентификационные номера, номера кредитных карт и т. п. Безопасность любого протокола CRP основана на механизмах защиты протокола и/или процессов, используемый при коммуникациях между CA, RA и EE. Все протоколы должны обеспечивать маскировку (например, с помощью шифрования или отдельной (off-line) обработки) всей «деликатной» пользовательской информации.

Многие протоколы поддерживают проверку первоначального отождествления между CA/RA и EE с помощью маркеров (token). Обычно такой маркер доставляется с использованием отдельных каналов и средств (out-of-band) типа государственной почтовой системы. Защита каналов доставки в этом случае должна соразмеряться с риском перехвата маркера посторонними лицами.

Реализации должны поддерживать значения POP в процессе регистрации сертификатов. Нужен хороший алгоритм POP для доказательства того, что 1) ключ связан с конкретным пользователем и 2) пользователь применяет ключ, о котором идет речь. Отказ от реализации POP позволяет создавать сертификаты без корректной привязки между открытым ключом и именем. Это делает возможной подмену владельца ключа и перехват шифрованных сообщений.

Реализации должны применять генератор случайных чисел с высоким уровнем энтропии при создании секретных ключей. Реализации должны генерировать случайные ключи шифрования содержимого, ключи аутентификации сообщений, векторы инициализации (IV), «затравки» (salt) и заполнение. Применение низкокачественных генераторов псевдослучайных чисел (PRNG19) для создания криптографических ключей может привести к недостаточной защите или ее отсутствию. Для атакующего может оказаться проще воспроизвести среду PRNG, использованную для создания ключей, и провести поиск среди сравнительно небольшого числа вариантов, нежели пытаться подобрать нужное значение из всего пространства ключей. Создание качественных случайных чисел является трудной задачей. В RFC 4086 [RANDOM] приведены важные рекомендации по этим вопросам, а Приложение 3 в FIPS Pub 186 [DSS] описывает один из качественных методов PRNG.

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

Одной из особенностью синтаксиса запросов сертификата является то, что генерация ключей происходит удаленно по отношению к месту создания запроса сертификата. Это свойство никогда не следует применять для запросов генерации ключей подписи. Если ключи подписи создаются для пользователя, вступает в силу элемент отказа (repudiation). Пользователь может заявить, что объект был подписан создавшей ключ стороной или любой другой стороной, которая могла видеть ключ в процессе его передачи от места создания до EE20. Следует принимать меры по защите ключей шифрования удаленным генератором ключей для предотвращения возможности перехвата ключа посторонними. Это означает, что применяемые алгоритмы шифрования должны быть защищены, и должен применяться ключ шифрования содержимого или других ключей для маскировки секретного ключа в процессе его возврата пользователю. Протоколы CRP никогда не должны предполагать, что ключ подписи, созданный пользователем, может применяться для расшифровки пакета, в котором передается секретный ключ шифрования.

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

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

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

[PKCS1] Jonsson, J. and B. Kaliski, «Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1», RFC 3447, February 2003.

[HMAC] Krawczyk, H., Bellare, M., and R. Canetti, «HMAC: Keyed-Hashing for Message Authentication», RFC 2104, February 1997.

[PKCS11] RSA Laboratories, The Public-Key Cryptography Standards — «PKCS #11 v2.11: Cryptographic Token Interface Standard», RSA Security Inc., June 2001.

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

[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.

[PKIXALG] Bassham, L., Polk, W., and R. Housley, «Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 3279, April 2002.

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

[RFC2875] Prafullchandra, H. and J. Schaad, «Diffie-Hellman Proof-of-Possession Algorithms», RFC 2875, July 2000.

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

[DSS] National Institute of Standards and Technology, FIPS Pub 186: Digital Signature Standard, May 1994.

[PKCS8] RSA Laboratories, «PKCS #8: Private-Key Information Syntax Standard», PKCS #8 v1.2, November 1993.

[RANDOM] Eastlake, D., 3rd, Schiller, J., and S. Crocker, «Randomness Requirements for Security», BCP 106, RFC 4086, June 2005.

[RFC2202] Cheng, P. and R. Glenn, «Test Cases for HMAC-MD5 and HMAC-SHA-1», RFC 2202, September 1997.

[RFC3986]21 T. Berners-Lee, R. Fielding, L. Masinter «Uniform Resource Identifier (URI): Generic Syntax», RFC 3986, January 2005.

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

Рабочая группа благодарит Michael Myers, Carlisle Adams, Dave Solo и David Kemp, создавших исходный вариант этого документа.

Рабочая группа выражает свою признательность участникам Barbara Fox, Warwick Ford, Russ Housley и John Pawling, чьи рецензии и комментарии сделали эту спецификацию значительно яснее и полезней. Спасибо также участникам почтовой конференции ca-talk за их полезные предложения в части тестирования взаимодействия.

Текст Приложения C (Зачем использовать POP) был взят из почтового сообщения Al Arsenault и изначально являлся частью документа PKIX Roadmap.

Приложение A. Использование RegInfo для пар Name-Value

Поле value строки id-regInfo-utf8Pairs (с полем tag = 12 и подходящим полем length) будет содержать последовательность пар «имя-значение» в формате UTF-8.

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

A.1. Определенные имена

В таблице приведен рекомендуемый набор именованных элементов. Значения в колонке «Имя» содержат именно те строки, которые будут появляться в regInfo.

Имя

Описание

version

Версия данной вариации, которую использует regInfo.

corp_company

Компания подписчика.

org_unit

Подразделение организации.

mail_firstName

Компонента персонального имени.

mail_middleName

Компонента персонального имени.

mail_lastName

Компонента персонального имени.

mail_email

Адрес электронной почты подписчика.

jobTitle

Должность подписчика.

employeeID

Числовой или текстовый идентификатор сотрудника.

mailStop

issuerName

Название УЦ.

subjectName

Название субъекта.

validity

Срок действия.

Например,

      version?1%corp_company?Example, Inc.%org_unit?Engineering%
      mail_firstName?John%mail_lastName?Smith%jobTitle?Team Leader%
      mail_email?john@example.com%

A.2. Представление IssuerName, SubjectName и Validity

При включении в id-regInfo-utf8Pairs в качестве именованных элементов для кодирования значений issuerName, subjectName и validity нужно использовать описанный ниже синтаксис. Символы [] указывают необязательные поля, ::= и | применяются в обычном для BNF смысле, а все остальные символы (за исключением незначимых пробелов) вне имен являются завершающими (terminal). Регистр символов принимается во внимание.

      issuerName  ::= <names>
      subjectName ::= <names>
      <names>     ::= <name> | <names>:<name>

      <validity>  ::= validity ? [<notbefore>]-[<notafter>]

      <notbefore> ::= <time>
      <notafter>  ::= <time>

<time> указывает время UTC в формате YYYYMMDD[HH[MM[SS]]]. Компоненты HH, MM и SS по умолчанию имеют значения 00 и опускаются, если за ними нет отличных от 00 символов.

Примером представления validity может служить

      validity?-19991231%

где начало действия (notBefore) не задано, а заканчивается срок действия 31 декабря 1999 года (notAfter).

Каждое имя содержит один символ идентификатора формы, за которым следует значение имени из одного или множества символов UTF-8. Внутри значения имени для устранения неоднозначностей при наличии символов форматирования внешнего уровня нужно использовать escape-последовательности вида %xx, где xx указывает шестнадцатеричный код символа. Сам символ процента представляется последовательностью %%.

      <name> ::= X<xname>|O<oname>|E<ename>|D<dname>|U<uname>|I<iname>

Форматы имен описаны ниже.

Форма имени каталога X.500 (идентификатор X)

      <xname> ::= <rdns>
      <rdns>  ::= <rdn> | <rdns> , <rdn>
      <rdn>   ::= <avas>
      <avas>  ::= <ava> | <avas> + <ava>
      <ava>   ::= <attyp> = <avalue>
      <attyp> ::= OID.<oid> | <stdat>

Стандартный тип атрибута <stdat> представляет собой символьный идентификатор типа атрибута из числа приведенных ниже.

C (страна)

L (населенный пункт)

ST (штат или провинция)

O (организация)

OU (подразделение организации)

CN (имя)

STREET (адрес)

E (адрес электронной почты).

Компонента имени <avalue> представляет собой строку UTF-8 размером от 1 до 64 символов с ограничением использования в подмножестве IA5 кодировки UTF — только символов ASN.1 PrintableString.

Другая форма имени (идентификатор O)

      <oname> ::= <oid> , <utf8string>

Адрес электронной почты (rfc822name) (идентификатор E)

      <ename> ::= <ia5string>

Имя DNS (идентификатор D)

      <dname> ::= <ia5string>

Идентификатор URI (идентификатор U)

      <uname> ::= <ia5string>

Адрес IP (идентификатор I)

      <iname> ::= <oid>

Например,

      issuerName?XOU=Our CA,O=Example,C=US% subjectName?XCN=John Smith,
      O=Example, C=US, E=john@example.com%

Приложение B. Структуры и идентификаторы ASN.1

PKIXCRMF-2005 {iso(1) identified-organization(3) dod(6) internet(1)
security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-crmf2005(36)}

DEFINITIONS IMPLICIT TAGS ::=
BEGIN
IMPORTS
  -- Схема проверки подлинности каталога (X.509)
     Version, AlgorithmIdentifier, Name, Time,
     SubjectPublicKeyInfo, Extensions, UniqueIdentifier, Attribute
        FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6)
            internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
            id-pkix1-explicit(18)} -- найдено в [PROFILE]

  -- Расширения сертификата (X.509)
     GeneralName
        FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6)
               internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
               id-pkix1-implicit(19)}  -- найдено в [PROFILE]

  -- Синтаксис криптографических сообщений
     EnvelopedData
        FROM CryptographicMessageSyntax2004 { iso(1) member-body(2)
             us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16)
             modules(0) cms-2004(24) };  -- найдено в [CMS]

-- Комментарий для приведенного ниже определения можно удалить при использовании
-- компиляторов ASN.1, не понимающих UTF8String.

-- UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
       -- содержимое этого типа соответствует RFC 362922.

id-pkix  OBJECT IDENTIFIER  ::= { iso(1) identified-organization(3)
dod(6) internet(1) security(5) mechanisms(5) 7 }

-- arc для протоколов Internet X.509 PKI и их компонент

id-pkip  OBJECT IDENTIFIER ::= { id-pkix 5 }

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

id-ct   OBJECT IDENTIFIER ::= { id-smime  1 }  -- типы содержимого

-- Основные определения для этого модуля

CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg

CertReqMsg ::= SEQUENCE {
 certReq   CertRequest,
 popo       ProofOfPossession  OPTIONAL,
 -- содержимое зависит от типа ключа
 regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }

CertRequest ::= SEQUENCE {
 certReqId     INTEGER,            -- ID для сопоставления запроса и отклика
 certTemplate  CertTemplate,       -- выбранные поля для выпускаемого сертификата
 controls      Controls OPTIONAL } -- атрибуты, влияющие на эмиссию сертификата

CertTemplate ::= SEQUENCE {
 version      [0] Version               OPTIONAL,
 serialNumber [1] INTEGER               OPTIONAL,
 signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
 issuer       [3] Name                  OPTIONAL,
 validity     [4] OptionalValidity      OPTIONAL,
 subject      [5] Name                  OPTIONAL,
 publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
 issuerUID    [7] UniqueIdentifier      OPTIONAL,
 subjectUID   [8] UniqueIdentifier      OPTIONAL,
 extensions   [9] Extensions            OPTIONAL }

OptionalValidity ::= SEQUENCE {
 notBefore  [0] Time OPTIONAL,
 notAfter   [1] Time OPTIONAL } -- ДОЛЖЕН присутствовать хотя бы один

Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
 type         OBJECT IDENTIFIER,
 value        ANY DEFINED BY type }
ProofOfPossession ::= CHOICE {
 raVerified        [0] NULL,
 -- используется в тех случаях, когда агентство RA уже убедилось в том, что
 -- запрашивающий владеет секретным ключом
 signature         [1] POPOSigningKey,
 keyEncipherment   [2] POPOPrivKey,
 keyAgreement      [3] POPOPrivKey }

POPOSigningKey ::= SEQUENCE {
 poposkInput           [0] POPOSigningKeyInput OPTIONAL,
 algorithmIdentifier   AlgorithmIdentifier,
 signature             BIT STRING }

 -- Подпись (использует algorithmIdentifier) является DER-представлением 
 -- poposkInput. Отметим, что при наличии в CertReqMsg certReq CertTemplate
 -- значений subject и publicKey поле poposkInput ДОЛЖНО опускаться, а 
 -- подпись ДОЛЖНА рассчитываться для DER-представления CertReqMsg certReq. 
 -- Если CertReqMsg certReq CertTemplate не включает открытого ключа и
 -- подписи (т. е., включает только одно или не содержит обоих), ДОЛЖНО
 -- быть представлено и подписано поле poposkInput.

POPOSigningKeyInput ::= SEQUENCE {
 authInfo            CHOICE {
     sender              [0] GeneralName,
     -- Используется только в тех случаях, когда для отправителя имеется
     -- аутентифицированное отождествление (например, DN из выпущенного
     -- ранее и действительного сейчас сертификата)
     publicKeyMAC        PKMACValue },
     -- Используется в тех случаях, когда для отправителя нет аутентифицированного
     -- GeneralName; publicKeyMAC содержит основанный на пароле код MAC для
     -- DER-представления publicKey
 publicKey           SubjectPublicKeyInfo }  -- из CertTemplate

PKMACValue ::= SEQUENCE {
algId  AlgorithmIdentifier,
-- Значение алгоритма должно быть PasswordBasedMac {1 2 840 113533 7 66 13}
-- Значение параметра - PBMParameter
value  BIT STRING }

PBMParameter ::= SEQUENCE {
   salt                OCTET STRING,
   owf                 AlgorithmIdentifier,
   -- AlgId для необратимой функции (рекомендуется SHA-1)
   iterationCount      INTEGER,
   -- Число итераций применения OWF
   mac                 AlgorithmIdentifier
   -- MAC AlgId (например, DES-MAC, Triple-DES-MAC [PKCS11] или
}  -- HMAC [HMAC, RFC2202])

POPOPrivKey ::= CHOICE {
 thisMessage       [0] BIT STRING,         -- Отменено
 -- Владение подтверждено в этом сообщении (которое содержит 
 -- секретный ключ, зашифрованный для )
 subsequentMessage [1] SubsequentMessage,
 -- Владение будет подтверждено в следующем сообщении
 dhMAC             [2] BIT STRING,         -- Отменено
 agreeMAC          [3] PKMACValue,
 encryptedKey      [4] EnvelopedData }

 -- Для keyAgreement (и только для него) владение подтверждено в этом сообщении
 -- (оно содержит MAC (для DER-представления параметра certReq в
 -- CertReqMsg, который ДОЛЖЕН включать subject и publicKey)
 -- на основе ключа, полученного из секретного ключа DH конечного объекта 
 -- и открытого ключа DH агентства CA);

SubsequentMessage ::= INTEGER {
 encrCert (0),
 -- Запрос, который приводит к шифрованию сертификата для конечного объекта
 -- (POP будет представлено в подтверждающем сообщении)
 challengeResp (1) }
 -- Запрашивает у CA обмен «запрос-отклик» (challenge-response) с конечным объектом
 -- для подтверждения обладания секретным ключом.

-- Выделение идентификаторов объектов --

-- Регистрационные элементы в CRMF
id-regCtrl OBJECT IDENTIFIER ::= { id-pkip 1 }

id-regCtrl-regToken OBJECT IDENTIFIER ::= { id-regCtrl 1 }
-- с синтаксисом
RegToken ::= UTF8String

id-regCtrl-authenticator OBJECT IDENTIFIER ::= { id-regCtrl 2 }
-- с синтаксисом
Authenticator ::= UTF8String

id-regCtrl-pkiPublicationInfo OBJECT IDENTIFIER ::= { id-regCtrl 3 }
-- с синтаксисом
PKIPublicationInfo ::= SEQUENCE {
action     INTEGER {
             dontPublish (0),
             pleasePublish (1) },
pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
  -- НЕДОПУСТИМО наличие pubInfos для действия dontPublish
  -- (если указано действие pleasePublish и pubInfos отсутствует,
  -- предполагается dontCare)

SinglePubInfo ::= SEQUENCE {
 pubMethod    INTEGER {
     dontCare    (0),
     x500        (1),
     web         (2),
     ldap        (3) },
 pubLocation  GeneralName OPTIONAL }

id-regCtrl-pkiArchiveOptions     OBJECT IDENTIFIER ::= { id-regCtrl 4 }
-- с синтаксисом
PKIArchiveOptions ::= CHOICE {
 encryptedPrivKey     [0] EncryptedKey,
 -- актуальное значение секретного ключа
 keyGenParameters     [1] KeyGenParameters,
 -- параметры, позволяющие заново создать секретный ключ
 archiveRemGenPrivKey [2] BOOLEAN }
 -- Устанавливается TRUE, если отправитель хочет, чтобы получатель архивировал
 -- секретный ключ пары, которую получатель создал в ответ на этот запрос;
 -- FALSE указывает нежелательность архивирования.

EncryptedKey ::= CHOICE {
 encryptedValue        EncryptedValue,   -- Deprecated
 envelopedData     [0] EnvelopedData }
 -- Зашифрованный секретный ключ ДОЛЖЕН помещаться в строку октетов 
 -- envelopedData encryptedContentInfo encryptedContent.

EncryptedValue ::= SEQUENCE {
 intendedAlg   [0] AlgorithmIdentifier  OPTIONAL,
 -- Алгоритм, для которого значение будет использоваться
 symmAlg       [1] AlgorithmIdentifier  OPTIONAL,
 -- Симметричный алгоритм, используемый для шифрования значения
 encSymmKey    [2] BIT STRING           OPTIONAL,
 -- (Зашифрованный) симметричный ключ, который будет использоваться для шифрования значения
 keyAlg        [3] AlgorithmIdentifier  OPTIONAL,
 -- Алгоритм, используемый для шифрования симметричного ключа
 valueHint     [4] OCTET STRING         OPTIONAL,
 -- Краткое описание или идентификатор содержимого encValue
 -- (может быть осмысленным только для передающей стороны и применяется лишь 
 -- в тех случаях, когда EncryptedValue может быть в будущем перепроверено 
 -- передающей стороной)
 encValue       BIT STRING }
 -- Зашифрованное значение
-- При использовании EncryptedValue для передачи секретного ключа (в отличие от 
-- сертификата) реализации ДОЛЖНЫ поддерживать поле encValue, содержащее зашифрованное
-- значение PrivateKeyInfo, как указано в параграфе 12.11 [PKCS11]. Если encValue
-- содержит какой-либо иной формат или кодирование секретного ключа, первый октет
-- valueHint МОЖЕТ служить для указания этого формата или представления (отметим, 
-- что возможные значения этого октета еще не определены). Во всех случаях поле 
-- intendedAlg ДОЛЖНО использоваться для указания хотя бы OID предусмотренного алгоритма
-- секретного ключа, если такая информация не известна заранее обеим сторонам.

KeyGenParameters ::= OCTET STRING

id-regCtrl-oldCertID          OBJECT IDENTIFIER ::= { id-regCtrl 5 }
-- с синтаксисом
OldCertId ::= CertId
CertId ::= SEQUENCE {
 issuer           GeneralName,
 serialNumber     INTEGER }

id-regCtrl-protocolEncrKey    OBJECT IDENTIFIER ::= { id-regCtrl 6 }
-- с синтаксисом
ProtocolEncrKey ::= SubjectPublicKeyInfo

-- Регистрационная информация в CRMF
id-regInfo OBJECT IDENTIFIER ::= { id-pkip 2 }

id-regInfo-utf8Pairs    OBJECT IDENTIFIER ::= { id-regInfo 1 }
-- с синтаксисом
UTF8Pairs ::= UTF8String

id-regInfo-certReq       OBJECT IDENTIFIER ::= { id-regInfo 2 }
-- с синтаксисом
CertReq ::= CertRequest

-- id-ct-encKeyWithID является новым типом содержимого для объектов CMS
-- и содержит секретный ключ вместе с идентификатором для агентов депонирования
-- ключей, обеспечивающих возможность проверки при запросах на восстановление.

id-ct-encKeyWithID OBJECT IDENTIFIER ::= {id-ct 21}

EncKeyWithID ::= SEQUENCE {
  privateKey           PrivateKeyInfo,
  identifier CHOICE {
    string             UTF8String,
    generalName        GeneralName
  } OPTIONAL
}

PrivateKeyInfo ::= SEQUENCE {
   version                   INTEGER,
   privateKeyAlgorithm       AlgorithmIdentifier,
   privateKey                OCTET STRING,
   attributes                [0] IMPLICIT Attributes OPTIONAL
}

Attributes ::= SET OF Attribute

END

Приложение C. Зачем использовать POP

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

Важность процедуры POP обусловлена тем, что она обеспечивает надлежащий уровень уверенности в корректности работы PKI в целом. На самом низком уровне POP противостоит «самонавязанному отказу в обслуживании» (self-inflicted denial of service), т. е., запрашивающий сам получает сертификат, который не может использоваться для шифрования/расшифровки информации. Однако, как показано в двух примерах ниже, POP препятствует также менее прямым, но более серьезным угрозам.

POP для ключей подписи. Важно обеспечить POP для ключей, используемых с целью подписывания документов, чтобы обеспечить невозможность отказа от выполненной транзакции. Предположим, например, что Алиса правомерно владеет секретным ключом X, которому соответствует открытый ключ Y. Алиса имеет сертификат от Чарли — УЦ, хранящего Y. Алиса использует ключ X для подписи транзакции T. При отсутствии POP некто Мэл также может получить от Чарли сертификат, содержащий открытый ключ Y. В этом случае возможны две угрозы — Мэл может заявить, что она на самом деле подписала транзакцию T, а Алиса может отказаться от своей подписи T, заявив, что это сделала Мэл. Поскольку нет возможности убедительно доказать или опровергнуть обладание Мэл ключом X, ни одно из указанных выше заявлений не может быть опровергнуто и, следовательно, доверие к PKI теряется (естественно, что при реальном обладании Мэл секретным ключом Алисы Х, никакой механизм POP не поможет, но это уже другая проблема).

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

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

POP для ключей управления ключами. Аналогично, POP для ключей управления ключами (т. е., согласования или обмена ключами) может помочь в предотвращении подрыва доверия к PKI. Предположим, что Эл является новым преподавателем в местном компьютерном университете и создал предварительный вариант экзамена по курсу «Введение в сети», который он читает. Эл хочет передать копию документа декану факультета Дороти для одобрения. Документ зашифрован, поскольку некоторые студенты имеют доступ к компьютерной системе. Однако быстрый поиск в репозитории сертификатов (например, поиск всех записей, где поле subjectPublicKey содержит значение Дороти) показывает, что некоторые студенты пользуются таким же открытом ключом для управления ключами, какой применяет Дороти. В этом случае, если УЦ не использует процедуру POP, Эл не будет иметь возможности узнать, кто из студентов просто создал эти сертификаты, не зная секретного ключа Дороти (это позволяет безопасно передать документ), а кто действительно завладел им (это ставит передачу документа под угрозу расшифровки). Таким образом, услуги PKI, обеспечивающие пользователям уверенность в том, что они общаются именно с тем человеком, который представился, полностью утрачивают доверие. Если УЦ поддерживает процедуру POP, ни у кого из студентов такого сертификата быть не может и это позволяет Элу передать документ Дороти, будучи уверенным в его недоступности студентам.

Адрес автора

Jim Schaad

Soaring Hawk Consulting

PO Box 675

Gold Bar, WA 98251

EMail: jimsch@exmsft.com

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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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.


1Certificate Request Message Format — формат сообщения запроса сертификата.

2Certification Authority — удостоверяющий центр.

3Registration Authority — регистрационное агентство, регистратор.

4Certificate Request Message — сообщение запроса сертификата.

5Certificate Request Protocol — протокол запроса сертификата.

6End Entity — конечный объект.

7Proof-of-possession (POP) — доказательство обладания.

8В оригинале нумерация после п. 7 ошибочна. См. https://www.rfc-editor.org/errata_search.php?eid=2595. Прим. перев.

9В оригинале ошибочно сказано «шаблона сертификата». См. https://www.rfc-editor.org/errata_search.php?eid=4797. Прим. перев.

10В оригинале допущена ошибка. См. https://www.rfc-editor.org/errata_search.php?eid=166. Прим. перев.

11В исходном документе здесь допущена ошибка. См. https://www.rfc-editor.org/errata_search.php?eid=2340. Прим. перев.

12В оригинале опечатка — ). См. https://www.rfc-editor.org/errata_search.php?eid=2341. Прим. перев.

13В оригинале опечатка — PEMParameter. См. https://www.rfc-editor.org/errata_search.php?eid=2342. Прим. перев.

14В оригинале ошибочно сказано 7.2. См. https://www.rfc-editor.org/errata_search.php?eid=2343. Прим. перев.

15В оригинале опечатка. См. https://www.rfc-editor.org/errata_search.php?eid=2344. Прим. перев.

16В оригинале опечатка — pubInfos. См. https://www.rfc-editor.org/errata_search.php?eid=2345. Прим. перев.

17В оригинале опечатка. См. https://www.rfc-editor.org/errata_search.php?eid=2346. Прим. перев.

18В оригинале ошибочно указан RFC 1738. См. https://www.rfc-editor.org/errata_search.php?eid=2347. Прим. перев.

19Pseudo-random number generator.

20В оригинале опечатка. См. https://www.rfc-editor.org/errata_search.php?eid=2348. Прим. перев.

21В оригинале ошибочно указан RFC 1738. См. https://www.rfc-editor.org/errata_search.php?eid=2349. Прим. перев.

22В оригинале ошибочно сказано RFC 2279. См. https://www.rfc-editor.org/errata_search.php?eid=2339. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 4211 Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF) отключены

RFC 4210 Internet X.509 Public Key Infrastructure Certificate Management Protocol (CMP)

Network Working Group                                       C. Adams
Request for Comments: 4210                      University of Ottawa
Obsoletes: 2510                                           S. Farrell
Category: Standards Track                     Trinity College Dublin
                                                            T. Kause
                                                                 SSH
                                                          T. Mononen
                                                             SafeNet
                                                      September 2005

Протокол управления сертификатами в инфраструктуре открытых ключей Internet X.509

Internet X.509 Public Key Infrastructure

Certificate Management Protocol (CMP)

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

В этом документе описан протокол управления сертификатами (CMP1) в инфраструктуре открытых ключей (PKI2) Internet X.509. Определены протокольные сообщения для создания сертификатов X.509v3 и управления ими. Протокол CMP обеспечивает интерактивное взаимодействие между компонентами PKI, включая обмен данными между агентами сертификации (CA3) и клиентскими системами.

1. Введение

В этом документе описан протокол управления сертификатами (CMP4) в инфраструктуре открытых ключей (PKI5) Internet X.509. Определены протокольные сообщения для создания сертификатов X.509v3 и управления ими. Термин «сертификат» в данном документе обозначает сертификат X.509v3 в соответствии с определением [X509].

Данная спецификация отменяет документ RFC 2510 и имеет ряд отличий от RFC 2510:

  • Раздел описания профиля управления PKI разделен на два приложения — обязательный профиль и дополнительный профиль. Некоторые из обязательных прежде функций перенесены в опциональный профиль.
  • Существенно изменен механизм подтверждения сообщений.
  • Введен новый механизм опроса, запрещающий старый метод опроса на транспортном уровне CMP.
  • Транспортный протокол CMP вынесен в отдельный документ [CMPtrans] и соответствующий раздел удален из данной спецификации.
  • Введен новый метод явного подтверждения для снижения числа сообщений в одной транзакции..
  • В новой спецификации в протокол внесены незначительные усовершенствования, а также прояснены некоторые детали описания.

2. Уровни требований

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

3. Обзор управления PKI

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

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

3.1. Модель управления PKI

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

3.1.1. Определения элементов PKI

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

3.1.1.1. Субъекты и конечные элементы

Термин «субъект» в этом документе обозначает элементы, для которых выдаются (вводятся) сертификаты. Обычно имя этого элемента указывается в поле сертификата subject или subjectAltName. Когда нужно различать инструменты и/или программы, используемые субъектом (например, локальный модуль управления сертификатами), будем называть их «оборудованием субъекта». В общем случае вместо термина «субъект» предпочтительно использовать термин «конечный элемент» (EE6), во избежание путаницы с именем поля. Важно отметить, что в данном случае к конечному элементу относится не только человек, использующий программные приложения, но и сами такие приложения (например, средства защиты IP). Это оказывает влияние на протокол, используемый для работы управления PKI, — например, прикладные программы обычно знают более точно, чем пользователь-человек, какие расширения сертификатов нужны. Элементы управления PKI являются также конечными элементами в том смысле, что они иногда указываются в полях subject или subjectAltName сертификатов или кросс-сертификатов. Там, где это возможно, термин «конечный элемент» будет относиться к элементам, не являющимся элементами управления PKI.

Все конечные элементы требуют локальной защиты доступа к той или иной информации — по крайней мере, имя и секретный ключ элемента, имя CA, которому данный элемент доверяет напрямую, а также открытый ключ этого CA (или оттиск открытого ключа в тех случаях, когда доступна самосертифицированная версия). Разработчики могут использовать защищенное локальное хранилище, обеспечивающее хранение дополнительных данных (например, сертификат владельца конечного элемента или специфические данные приложения). Форма защищенного хранилища может меняться от обычных файлов до защищенных от копирования маркеров (брелоков). Информацию, находящуюся в таких защищенных локальных хранилищах, будем называть персональной средой защиты (PSE7) конечного элемента.

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

3.1.1.2. Агент сертификации

Агент сертификации (CA) с точки зрения конечного элемента может быть (или не быть) «третьей стороной». Достаточно часто на практике CA относится к той же организации, которой принадлежат поддерживаемые агентом конечные элементы.

Термин «CA» будет использоваться для обозначения элементов, указываемых в поле эмитента (issuer) сертификата. Говоря о программах или аппаратных компонентах, используемых CA, будем применять термин «оборудование CA».

Оборудование CA зачастую будет включать «подключаемые» (off-line) и «постоянно включенные» (on-line) компоненты. Секретный ключ CA может размещаться только на подключаемых компонентах. Этот вопрос относится к компетенции разработчиков (хотя он связан также в политикой безопасности).

Термин «корневой CA8» (корневой агент сертификации будет использоваться применительно к CA, которым конечный элемент доверяет напрямую — для безопасной доставки открытого ключа корневого CA требуется использование отдельного «канала» (пути доставки). Это не означает, что корневой агент CA обязательно должен размещаться на вершине иерархии CA — это лишь агент, которому верят без дополнительных подтверждений (непосредственно).

«Второстепенными9» (подчиненными) агентами CA будем называть агенты, которые не являются корневыми CA для рассматриваемого конечного элемента. Зачастую второстепенные CA не являются корневыми агентами ни для какого элемента, но это не обязательно.

3.1.1.3. Агент регистрации

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

В этом документе RA считаются опциональными компонентами. При отсутствии агента регистрации предполагается, что все функции RA выполняет CA, поэтому протоколы управления PKI совпадают с точки зрения конечного элемента.

Используемые агентами регистрации средства будем называть «оборудованием RA».

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

При некоторых условиях конечные элементы будут напрямую взаимодействовать с CA даже при наличии RA. Например, для начальной регистрации и/или сертификации субъект может использовать RA, но напрямую взаимодействовать с CA для обновления своего сертификата.

3.1.2. Требования к управлению PKI

Описанный здесь протокол соответствует перечисленным ниже требованиям по управлению PKI.

  1. Управление PKI должно соответствовать стандартам ISO/IEC 9594-8/ITU-T X.509.
  2. Должна обеспечиваться возможность регулярного обновления любой пары ключей без воздействия на другие ключевые пары.
  3. Защита конфиденциальности в протоколе управления PKI должна быть сведена к минимуму для того, чтобы упростить использование в средах, где строгая защита конфиденциальности может вызывать юридические проблемы.
  4. Протоколы управления PKI должны позволять использование различных стандартизованных алгоритмов шифрования (в частности, RSA, DSA, MD5, SHA-1). Это значит, что любой CA, RA или конечный элемент в принципе может выбирать алгоритмы для своих ключевых пар.
  5. Протоколам управления PKI недопустимо препятствовать генерации ключевых пар конечными элементами, вовлеченными в процесс, а также агентами RA или CA. Генерация ключей может выполняться в разных местах, но для целей управления PKI можно считать, что генерация выполняется там, где ключ впервые появляется на конечном элементе, RA или CA.
  6. Протоколы управления PKI должны поддерживать публикацию сертификатов вовлеченными в процесс конечными элементами, а также агентами RA или CA. В разных реализациях и средах могут выбираться любые из перечисленных вариантов.
  7. Протоколы управления PKI должны поддерживать создание списков отозванных сертификатов (CRL11), позволяя конечным элементам делать запросы на отзыв сертификатов. Это должно осуществляться таким способом, который не позволял бы простыми средствами организовать атаку на отказ служб (DoS12).
  8. Протоколы управления PKI должны обеспечивать возможность работы на основе различных «транспортных» механизмов, включая, в частности, электронную почту http, TCP/IP и ftp.
  9. Окончательное решение о создании сертификата остается за агентом CA. Ни RA, ни конечный элемент не могут предполагать, что выпущенный агентом CA сертификат будет в точности содержать запрошенные значения — CA может менять значения полей сертификата, добавлять, удалять или менять расширения в соответствии с правилами работы. Иными словами, все элементы PKI (конечные элементы, RA и CA) должны быть способны обрабатывать отклики на запросы сертификатов, в которых выдаваемые сертификаты отличаются от запрашиваемых (например, агент CA может сократить срок действия сертификата). Отметим, что правила могут запрещать агенту CA публиковать или иным способом распространять сертификат, пока запросившая сторона не рассмотрит и не примет созданный сертификат (обычно с помощью сообщения certConf).
  10. Должен поддерживаться аккуратный, планируемый переход от одной пары ключей нескомпрометированного13 агента CA к следующей паре (обновление ключа CA). Конечный элемент, среда PSE которого содержит новый открытый ключ CA (в результате обновления ключа CA), должен также быть способен проверить верифицируемость сертификатов с помощью старого открытого ключа. Конечные элементы, которые доверяют старой паре ключей CA непосредственно, должны быть способны также проверить сертификаты, подписанные с использованием нового секретного ключа CA (это требуется в ситуациях, когда старый открытый ключ CA являлся «аппаратной» частью криптографического оборудования элемента).
  11. В некоторых реализациях и средах функции агента регистрации RA могут выполняться непосредственно агентом CA. Протоколы должны быть устроены так, чтобы конечные элементы взаимодействовали с агентами RA и CA в таких ситуациях по одному протоколу. Естественно, что конечный элемент для защиты при обмене данными должен использовать в таких случаях корректный открытый ключ RA для агента CA.
  12. Когда конечный элемент запрашивает сертификат, содержащий заданное значение открытого ключа, этот конечный элемент должен быть готов продемонстрировать владение соответствующим закрытым ключом. Это можно реализовать разными способами в зависимости от типа запроса сертификата. В параграфе 4.3 описаны методы обмена данными по основному каналу (in-band), определенные для сообщений PKIX-CMP14.

3.1.3. Операции управления PKI

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

+---+  публикация сертификата  +------------+      j
|   |  <---------------------  |конеч. элем.| <-------
| Р |             g            +------------+     загрузка
| е |                            | ^        «по отдельному каналу»
| п |                            | |      начальная
| о |                          a | | b    регистрация/
| з |                            | |      сертификация
| и |                            | |      восстанов. ключевой пары
| т |                            | |      обновление ключевой пары
| о |                            | |      обновление сертификата
| и |  «Пользователи» PKI        V |      запрос на отзыв
| й | -------------------+-+-----+-+------+-+-------------------
|   |  Элементы          | ^              | ^
| с |  управл. PKI     a | | b          a | | b
| е |                    V |              | |
| р |             g   +------+    d       | |
| т |   <------------ |  RA  | <-----+    | |
| и |     публикация  |      | ----+ |    | |
| ф |     сертификата +------+   c | |    | |
| . |                              | |    | |
| / |                              V |    V |
| C |          g                 +------------+   i
| L |   <------------------------|     CA     |------->
| R |          h                 +------------+  публикация
|   |    публикация сертификата       | ^   «по отдельному каналу»
|   |    публикация CRL publish       | |
+---+                                 | |    кросс-сертификация
                                    e | | f  обновление
                                      | |    кросс-сертификации
                                      V |
                                    +------+
                                    | CA-2 |
                                    +------+

Рисунок 1: Элементы PKI

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

  1. Организация CA. При организации нового агента CA некоторые этапы (например. Создание начальных CRL, экспорт открытого ключа CA) являются обязательными.
  2. Инициализация конечного элемента включает импорт открытого ключа корневого CA и запрос информации об опциях, поддерживаемых элементом управления PKI.
  3. Сертификация. Различные операции, приводящие к созданию новых сертификатов:
    1. Начальная регистрация/сертификация. Это процесс, в котором конечный элемент впервые представляет себя агенту CA или RA до эмиссии агентом CA сертификата или сертификатов для данного конечного элемента. Результа-том этого процесса (при успешном за-вершении) является эмиссия агентом CA открытого ключа для конечного элемента, возврат сертификата и/или отправка этого сертификата в публичное хранилище (репозиторий). Процесс может (и, как правило, будет) состоять из множества «этапов», которые могут включать инициализацию оборудования конечного элемента. Например, оборудование конечного элемента должно быть безопасно инициализировано с помощью открытого ключа CA, который будет использоваться при проверке путей сертификатов. Кроме того, конечные элементы обычно требуется инициализировать с использованием их собственных ключевых пар.
    2. Обновление ключевой пары. Каждую пару ключей требуется регулярно обновлять (т. е., заменять новой парой ключей) и выпускать новый сертификат.
    3. Обновление сертификата. При завершении срока действия сертификата он может быть «обновлен», если в среде не произошло связанных с этим сертификатом изменений.
    4. Обновление пары ключей CA. Как и для конечных элементов ключевые пары агентов CA требуется регулярно менять. Однако при такой замене требуются иные механизмы.
    5. Запрос кросс-сертификации. Агент CA запрашивает эмиссию кросс-сертификата у другого CA. В данном стандарте «кросс-сертификатом» называется сертификат, в котором CA-субъект и CA-эмитент различаются, а поле SubjectPublicKeyInfo содержит ключ верификации (т. е., сертификат, выданный для пары ключей, используемой CA-субъектом в подписях). В некоторых случаях, когда требуется более тонкое различие, кросс-сертификат называется «междоменным» (участвующие в процессе агенты CA относятся к разным административным доменам) или «внутридоменным» (в остальных случаях).
    6. Обновление кросс-сертификата. Похоже на обновление сертификата, но включает кросс-сертификацию.
    Примечание 1. Приведенное выше определение «кросс-сертификата» соответствует определению «сертификата CA» в стандарте X.509. Не следует путать этот термин с типом атрибута «cACertificate» в стандарте X.500.
    Примечание 2. Во многих средах термин «кросс-сертификат» трактуется, как синоним термина «междоменный кросс-сертификат», если явно не указано иное.
    Примечание 3. Эмиссия кросс-сертификатов может (но не обязана) быть взаимной, когда оба агента CA выпускают кросс-сертификаты один для другого.
  4. Операции обнаружения сертификата/CRL. Некоторые операции управления PKI, приводящие к публикации сертификатов или CRL:
    1. Публикация сертификата. После решения проблем, связанных с созданием сертификата, требуются некоторые меры по его публикации. «Меры», определенные в PKIX могут включать сообщения, определенные в параграфах 5.3.13 — 5.3.16, или иные методы (например, LDAP), описанные в [RFC2559] и [RFC2585] (документы «Operational Protocols» в серии спецификаций PKIX).
    2. Публикация CRL. Аналогичная публикации сертификата.
  5. Операции восстановления. Некоторые операции управления PKI, используемые при «потере» конечным элементом своей среды PSE:
    1. Восстановление ключевой пары. Опционально пользовательский ключевой материал (например, секретный ключ пользователя, используемый для расшифровки) могут сохраняться (резервная копия) агентами CA и RA или системой резервного копирования ключей, связанной с CA или RA. Если клиенту требуется восстановить сохраненный в резервной копии ключевой материал (например, в случае забытого пароля или утраченного файла цепочки ключей15), для такого восстановления может потребоваться обмен протокольными сообщениями.
  6. Операции отзыва. Операции управления PKI. приводящие к созданию новых записей CRL и/или новых CRL:
    1. Запрос на отзыв. Уполномоченное лицо может уведомить CA об аномальной ситуации, требующей отзыва сертификата.
  7. Операции PSE. Хотя определение операций PSE (например, перемещение PSE, смена PIN и т. п.) выходит за пределы данной спецификации, мы определяем сообщение PKIMessage (CertRepMessage) которое может стать основой для таких операций.

Отметим, что интерактивные протоколы не являются единственным способом выполнения перечисленных выше операций. Для всех операций возможны автономные (off-line) методы достижения того же результата и данная спецификация не требует использования протоколов on-line. Например, при использовании аппаратных маркеров, многие операции могут быть выполнены в процессе физической доставки маркеров.

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

4. Допущения и ограничения

4.1. Инициализация конечного элемента

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

4.2. Начальная регистрация/сертификация

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

Однако можно классифицировать схемы начальной регистрации/сертификации, которые поддерживаются данной спецификацией. Отметим, что слово «начальная» в предыдущем предложении играет важную роль — мы имеем дело с ситуацией, когда рассматриваемый конечный элемент ранее не имел контактов с PKI. Когда конечный элемент уже владеет ключами сертификации, возможно некоторое упрощение/изменение процедуры.

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

Далее приводится классификация схем начальной регистрации/сертификации.

4.2.1. Используемые критерии

4.2.1.1. Инициирование регистрации/сертификации

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

К числу возможных мест относятся конечный элемент, RA или CA.

4.2.1.2. Идентификация источника сообщения от конечного элемента

Интерактивные (on-line) сообщение, создаваемые конечным элементом, которому нужен сертификат, могут быть или не быть идентифицированными. Требование заключается в проверке подлинности источника любых сообщений от конечного элемента к PKI (CA/RA).

В данной спецификации такая проверка осуществляется PKI (CA/RA), вводящим конечный элемент с секретным значением (начальный ключ аутентификации) и эталонным значением (служит для идентификации секретного значения) с использованием неких иных каналов передачи информации (out-of-band). После этого можно использовать начальный ключ аутентификации для защиты соответствующих сообщений PKI.

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

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

Примечание 2. Процедура начальной регистрации/сертификации может быть защищена за счет аутентификации сообщений от конечного элемента с использованием тех или иных «автономных» (out-of-band) мер (например, передача «из рук в руки»).

4.2.1.3. Место генерации ключа

В данной спецификации говорят о месте «генерации ключа», как о точке, где открытый или закрытый ключ пары впервые появляется в сообщении PKIMessage. Отметим, что это не исключает использования услуг централизованной генерации ключей — на практике пара ключей может генерироваться в любом месте и доставляться конечному элементу RA или CA с использованием (фирменного или стандартизованного) протокола запросов/откликов для генерации ключей16.

Таким образом, местом генерации ключа может являться конечный элемент, RA или CA.

4.2.1.4. Подтверждение успешной сертификации

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

Возможны два варианта — использовать или не использовать подтверждения.

4.2.2. Обязательные схемы

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

4.2.2.1. Централизованная схема

В терминах приведенной выше классификации эта схема в некоторых случаях является простейшей из возможных:

  • инициирование выполняется на сертифицирующем CA;
  • не требуется интерактивных сообщений для аутентификации;
  • «генерация ключей» происходит на сертифицирующем CA (см. параграф 4.2.1.3);
  • не требуется подтверждающих сообщений.

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

4.2.2.2. Базовая схема аутентификации

В терминах приведенной выше классификации эта схема включает:

  • инициирование, выполняемое на стороне конечного элемента;
  • требуется аутентификация сообщения;
  • «генерация ключей» происходит на стороне конечного элемента (см. параграф 4.2.1.3);
  • требуется подтверждающее сообщение.

В терминах потока сообщений базовая схема имеет вид:

Конечный элемент

RA/CA

«Автономное» распространение начального ключа аутентификации (IAK17) и эталонного значения (RA/CA -> EE)

Генерация ключа
Запрос на создание сертификата
Защита запроса с помощью IAK

—>>— запрос сертификации —>>—

Проверка запроса
Обработка запроса
Создание отклика

—<<— сертификационный отклик —<<—

Обработка отклика
Создание подтверждения

—>>— сообщение cert conf —>>—

Проверка подтверждения
Создание отклика

—<<— conf ack (необязательно) —<<—

Обработка отклика

(В тех случаях, когда верификация с использованием подтверждения сертификата не удается, агент RA/CA должен отозвать этот сертификат, если он был опубликован или иным путем сделан доступным).

4.3. Подтверждение владения (POP18) секретным ключом

Для предотвращения некоторых типов атак и обеспечения агентам CA/RA возможности проверить корректность связки между конечным элементом и парой ключей здесь заданы операции управления PKI, которые позволяют конечной точке подтвердить, что ее владение секретным ключом (т. е., возможность использования ключа) соответствует открытому ключу, для которого запрашивается сертификат. Агент CA/RA свободен в выборе способа реализации POP (например, автономные пути или сообщения PKIX-CMP по основному каналу) в своем сертификационном обмене (например, выбор может определяться принятой политикой защиты). Однако от агентов CA/RA требуется выполнение POP тем или иным способом, поскольку в настоящее время используется множество протоколов, не относящихся к PKIX (например, протоколы обмена электронной почтой), которые не проверяют в явной форме привязку секретного ключа к конечному элементу. Пока повсеместно не используется протокол, выполняющий проверку привязки (для ключевых пар подписи, шифрования и согласования ключей), приходиться полагаться на то, что такая привязка проверяется агентом CA/RA. Следовательно, если привязка не проверяется агентом CA/RA, сертификаты в инфраструктуре Internet PKI, по сути, утрачивают свое значение.

POP обеспечивается разными способами в зависимости от типа ключа, для которого запрашивается сертификат. Если ключ может использоваться с разными целями (например, ключ RSA), может применяться любой подходящий метод (например, ключ, который может служить для подписи, а также для других целей, не следует отправлять агенту CA/RA с целью подтверждения владения).

Эта спецификация явно разрешает случаи, когда конечная точка представляет приемлемое подтверждение агенту RA, а тот сообщает агенту CA, что требуемые подтверждения получены (и проверены!). Например, конечный элемент, желающий хранить сертифицированный ключ подписи, может отправить подходящую подпись агенту RA, который просто уведомит соответствующий CA о том, что конечный элемент предоставил требуемое подтверждение. Естественно, что некоторые варианты политики могут запрещать такой подход (например, проверка POP в процессе сертификации может быть разрешена только агентам CA).

4.3.1. Ключи подписи

Применительно к ключам подписи конечный элемент может подписать значение для подтверждения владения секретным ключом.

4.3.2. Ключи шифрования

В случае ключей шифрования конечный элемент может предоставлять агенту CA/RA секретный ключ или расшифровывать данные в качестве подтверждения обладания секретным ключом (см. параграф 5.2.8). Расшифровка данных может осуществляться с использованием прямого или косвенного метода.

Метод прямой расшифровки требует от агента RA/CA ввода случайного запроса, на который конечный элемент должен ответить незамедлительно.

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

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

4.3.3. Ключи согласования ключей

Для ключей согласования ключей конечный элемент и элемент управления PKI (т. е., CA или RA) должны организовать разделяемый секретный ключ для подтверждения того, что конечный элемент владеет секретным ключом.

Отметим, что это не вносит каких-либо ограничений на ключи, которые могут быть сертифицированы данным CA. В частности, для ключей Diffie-Hellman конечный элемент может свободно выбирать параметры алгоритма, обеспечивающие агенту CA возможность генерации краткосрочных (или одноразовых) ключевых пар с подходящими параметрами, когда это требуется.

4.4. Обновление ключа корневого CA

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

Описанная здесь процедура основана на том, что CA защищает свой новый открытый ключ с помощью предыдущего секретного ключа и наоборот. Таким образом, при обновлении агентом CA пары ключей он должен генерировать два избыточных атрибута cACertificate, если сертификаты делаются доступными с использованием каталогов X.500 (всего генерируется 4 атрибута — OldWithOld, OldWithNew, NewWithOld и NewWithNew).

Когда CA меняет ключевую пару, те элементы, которые обладают старым открытым ключом CA, полученным по автономным каналам (out-of-band), сильнее «страдают» от такой замены. Это будут те конечные элементы, которым требуется доступ к новому открытому ключу CA, защищенному старым секретным ключом CA. Однако эта сложность будет возникать только на ограниченный период (пока конечному элементу не будет доставлен новый открытый ключ CA с использованием «автономного» механизма). Обычно это происходит при истечении срока действия сертификатов данного конечного элемента.

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

Примечание 1. В этой схеме не используется расширений X.509 v3, поэтому она позволяет работать даже с сертификатами версии 1. Использование расширения KeyIdentifier будет повышать эффективность.

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

Примечание 3. Эта схема гарантирует, что конечные элементы будут получать (по «автономным» каналам) новый открытый ключ CA не позднее завершения срока действия имеющегося у конечного элемента сертификата, подписанного старым секретным ключом CA. В других случаях операции обновления ключей и/или сертификата не обязательно будут требовать доставки ключей по «автономным» каналам (это зависит от оборудования конечного элемента).

4.4.1. Действия оператора CA

Для смены ключа CA оператор CA должен выполнить перечисленные ниже операции.

  1. Генерация новой пары ключей;
  2. создание сертификата со старым открытым ключом CA, подписанного новым секретным ключом (сертификат «старый с новым»);
  3. создание сертификата с новым открытым ключом CA, подписанного старым секретным ключом (сертификат «новый со старым»);
  4. создание сертификата с новым открытым ключом CA, подписанного новым секретным ключом (сертификат «новый с новым»);
  5. публикация созданных сертификатов через репозиторий и/или иными способами (например, с использованием сообщений CAKeyUpdAnn);
  6. экспорт нового открытого ключа CA, позволяющий конечным элементам получать этот ключ с использованием «автономных» механизмов (если это нужно).

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

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

Сертификат «новый со старым» должен иметь срок действия с момента генерации новой пары ключей до момента завершения процессов получения нового открытого ключа CA всеми конечными элементами этого агента CA (но не позднее момента завершения срока действия старого открытого ключа).

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

4.4.2. Проверка сертификатов

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

Репозиторий содержит новый и старый открытый ключ

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

PSE содержит новый открытый ключ

PSE содержит старый открытый ключ

PSE содержит новый открытый ключ

PSE содержит старый открытый ключ

Сертификат подписывающей стороны защищен новым открытым ключом

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

Случай 3
В этом случае проверяющая сторона должна обратиться к репозиторию для получения нового открытого ключа

Случай 5
Хотя оператор CA не обновил репозиторий, проверяющая сторона может верифицировать сертификат напрямую (как в случае 1)

Случай 7
Оператор CA не обновил репозиторий и проверка приведет к отказу

Сертификат подписывающей стороны защищен старым открытым ключом

Случай 2
В этом случае проверяющая сторона должна обратиться к репозиторию для получения старого открытого ключа

Случай 4
В этом случае проверяющая сторона может напрямую верифицировать сертификат без использования репозитория

Случай 6
Проверяющая сторона будет воспринимать эту ситуацию, как случай 2, и обращаться к репозиторию; верификация приведет в отказу

Случай 8
Хотя оператор CA не обновил репозиторий, проверяющая сторона может верифицировать сертификат напрямую (как в случае 4)

4.4.2.1. Верификация для случаев 1, 4, 5, 8

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

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

4.4.2.2. Верификация для случая 2

В случае 2 проверяющая сторона должна иметь старый открытый ключ CA. Порядок действий проверяющего:

  1. просмотр атрибута caCertificate в репозитории и получение сертификата OldWithNew (определяется на основе срока действия; отметим, что поля субъекта и эмитента должны совпадать);
  2. проверка корректности с использованием нового ключа CA (имеется на проверяющей стороне);
  3. при позитивном результате проверки проверяется сертификат подписавшей стороны с использованием старого ключа CA.

Случай 2 возникает, когда оператор CA эмиттировал сертификат подписавшей стороны, потом сменил ключ и после этого эмиттировал сертификат проверяющей стороны — такая ситуация вполне типична.

4.4.2.3. Верификация для случая 3

В случае 3 проверяющая сторона должна иметь доступ к новому открытому ключу CA. Порядок действий проверяющего:

  1. просмотр атрибута caCertificate в репозитории и получение сертификата NewWithOld (определяется на основе срока действия; отметим, что поля субъекта и эмитента должны совпадать);
  2. проверка корректности с использованием старого ключа CA (имеется на проверяющей стороне);
  3. при позитивном результате проверки проверяется сертификат подписавшей стороны с использованием нового ключа CA.

Случай 2 возникает, когда оператор CA эмиттировал сертификат проверяющей стороны, потом сменил ключ и после этого эмиттировал сертификат подписавшей стороны — такая ситуация вполне типична.

4.4.2.4. Отказ при верификации для случая 6

В этом случае CA эмиттирует среду PSE проверяющей стороны, которая содержит новый ключ без обновления атрибутов в репозитории. Это означает, что проверяющий не может надежным путем получить старую версию ключа CA и верификация завершается отказом.

Отметим, что отказ возникает по вине оператора CA.

4.4.2.5. Отказ при верификации для случая 7

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

Отметим, что отказ возникает по вине оператора CA.

4.4.3. Отзыв — смена ключа CA

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

Анализ вариантов для отзыва совпадает с анализом вариантов при проверке сертификата.

5. Структуры данных

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

5.1. Сообщение PKI в целом

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

      PKIMessage ::= SEQUENCE {
         header           PKIHeader,
         body             PKIBody,
         protection   [0] PKIProtection OPTIONAL,
         extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
                          OPTIONAL
     }
     PKIMessages ::= SEQUENCE SIZE (1..MAX) OF PKIMessage

Поле PKIHeader для многих типов сообщений PKI содержит однотипную информацию.

Поле PKIBody содержит специфическую для данного сообщения информацию.

Если используется поле PKIProtection, оно содержит биты, служащие для защиты сообщения PKI.

Поле extraCerts может содержать сертификаты, которые могут быть полезны для получателя. Например, это поле может использоваться агентом CA или RA для информирования конечного элемента о сертификатах, которые тому потребуются для верификации нового сертификата агента (например, в случае, когда эмиттирующий сертификат конечного элемента агент CA не является коревым CA для данного конечного элемента). Отметим, что это поле не обязательно содержит путь к сертификату — получатель может сортировать это поле, делать из него выборку и т. п.

5.1.1. Заголовок сообщения PKI

Для всех сообщений PKI требуется некоторая информация в заголовке, служащая для адресации и идентификации транзакций. Часть такой информации будет присутствовать также в зависящем от транспорта «конверте». Однако, если сообщение PKI защищено, эта информация также будет защищена (т. е., мы не можем строить предположений о защищенном транспорте).

Для заголовков используется показанная ниже структура данных:

     PKIHeader ::= SEQUENCE {
         pvno                INTEGER     { cmp1999(1), cmp2000(2) },
         sender              GeneralName,
         recipient           GeneralName,
         messageTime     [0] GeneralizedTime         OPTIONAL,
         protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
         senderKID       [2] KeyIdentifier           OPTIONAL,
         recipKID        [3] KeyIdentifier           OPTIONAL,
         transactionID   [4] OCTET STRING            OPTIONAL,
         senderNonce     [5] OCTET STRING            OPTIONAL,
         recipNonce      [6] OCTET STRING            OPTIONAL,
         freeText        [7] PKIFreeText             OPTIONAL,
         generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
                             InfoTypeAndValue     OPTIONAL
     }
     PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String

Значение поля pvno = 2 соответствует для данной версии спецификации.

Поле sender содержит имя отправителя сообщения PKIMessage. Этого имени (вместе со значениям поля senderKID, если оно присутствует) должно быть достаточно для индикации ключа, который следует использовать для верификации защиты сообщения. Если передающая сторона ничего не знает об отправителе (например, начальное сообщение, когда конечный элемент еще не знает своего отличительного имени DN19, адреса электронной почты, адреса IP и т. д.), в поле sender должно помещаться значение NULL (т. е., SEQUENCE OF для отличительных имен имеет нулевой размер). В таких случаях поле senderKID должно содержать идентификатор (например, номер), показывающий получателю подходящий разделяемый секрет, который можно использовать для верификации этого сообщения.

Поле recipient содержит имя получателя PKIMessage. Это имя (вкупе со значением поля recipKID, если оно присутствует) должно обеспечивать возможность использования для верификации защиты сообщения.

Поле protectionAlg задает алгоритм, используемый для защиты сообщения. Если биты защиты не заданы (отметим, что защита PKIProtection является опциональной), это поле должно быть опущено. При наличии битов защиты это поле должно присутствовать.

Поля senderKID и recipKID служат для индикации ключей, которые используются для защиты сообщения (recipKID обычно требуется лишь в случаях использования для защиты ключей DH20.

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

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

Для транзакций, которые включают что-либо сверх одной пары «запрос-отклик» клиенту следует генерировать transactionID для первого запроса. Если сервер получает запрос с установленным полем transactionID, он должен установить в поле transactionID передаваемого отклика то же значение. Если сервер получает запрос без поля transactionID, он должен заполнить в отклике поле transactionID самостоятельно созданным значением идентификатора. Во всех последующих запросах и откликах должно использоваться это значение transactionID. Во всех случаях использования transactionID для клиента недопустимо иметь более одной обрабатываемой в данный момент транзакции с одинаковым значением transactionID (для данного сервера). Серверы по своему усмотрению могут требовать (или не требовать) уникальности значений transactionID для корректной привязки сообщений к соответствующей транзакции. Обычно это означает, что сервер будет требовать уникальности пары {client, transactionID} или даже уникальности transactionID, если он не может различать клиентов на основе информации транспортного уровня. Сервер, получивший в транзакции, требующей более, чем одна пара сообщений «запрос-отклик», первое сообщение, которое содержит значение transactionID, не позволяющее выполнить приведенные выше требования (обычно в результате того, что такое значение transactionID уже используется) должен вернуть клиенту ErrorMsgContent с полем PKIFailureInfo, имеющим значение transactionIdInUse. Клиентам рекомендуется помещать в поле transactionID 128-битовое (псевдо)случайное значение, связанное с началом транзакции, чтобы снизить вероятность совпадения с уже используемым сервером значением transactionID.

Поля senderNonce и recipNonce служат для защиты сообщения PKIMessage от атак с повторным использованием21. Поле senderNonce обычно содержит 128 битов (псевдо) случайных данных, генерируемых отправителем, а поле recipNonce является копией поля senderNonce из предыдущего сообщения в данной транзакции.

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

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

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

5.1.1.1. ImplicitConfirm

Используется EE для информирования агента CA о нежелании передавать подтверждения для эмиттированных сертификатов.

         implicitConfirm OBJECT IDENTIFIER ::= {id-it 13}
         ImplicitConfirmValue ::= NULL

Если CA принимает запрос EE, он должен включить такое же расширение в заголовок PKIHeader своего отклика. Если EE не находит в отклике расширения, он должен передать подтверждение сертификата.

5.1.1.2. ConfirmWaitTime

Используется агентом CA для информирования EE о сроке ожидания подтверждения сертификата перед отзывом того и удалением транзакции.

         confirmWaitTime OBJECT IDENTIFIER ::= {id-it 14}
         ConfirmWaitTimeValue ::= GeneralizedTime
5.1.2. Тело сообщения PK
PKIBody ::= CHOICE {
    ir       [0]  CertReqMessages,       --Запрос инициализации
    ip       [1]  CertRepMessage,        --Инициализационный отклик
    cr       [2]  CertReqMessages,       --Запрос сертификации
    cp       [3]  CertRepMessage,        --Сертификационный отклик
    p10cr    [4]  CertificationRequest,  --Запрос сертификата PKCS #10
    popdecc  [5]  POPODecKeyChallContent --Запрос pop
    popdecr  [6]  POPODecKeyRespContent, --Отклик pop
    kur      [7]  CertReqMessages,       --Запрос на обновление ключа
    kup      [8]  CertRepMessage,        --Отклик при обновлении ключа
    krr      [9]  CertReqMessages,       --Запрос на восстановление ключа
    krp      [10] KeyRecRepContent,      --Отклик при восстановлении ключа
    rr       [11] RevReqContent,         --Запрос на отзыв
    rp       [12] RevRepContent,         --Отклик при отзыве
    ccr      [13] CertReqMessages,       --Запрос кросс-сертификации
    ccp      [14] CertRepMessage,        --Отклик при кросс-сертификации
    ckuann   [15] CAKeyUpdAnnContent,    --Анонс обновления ключа CA
    cann     [16] CertAnnContent,        --Анонс сертификата
    rann     [17] RevAnnContent,         --Анонс отзыва
    crlann   [18] CRLAnnContent,         --Анонс CRL
    pkiconf  [19] PKIConfirmContent,     --Подтверждение
    nested   [20] NestedMessageContent,  --Вложенное сообщение
    genm     [21] GenMsgContent,         --Сообщение общего назначения
    genp     [22] GenRepContent,         --Отклик общего назначения
    error    [23] ErrorMsgContent,       --Сообщение об ошибке
    certConf [24] CertConfirmContent,    --Подтверждение сертификата
    pollReq  [25] PollReqContent,        --Запрос опроса
    pollRep  [26] PollRepContent         --Отклик при опросе
}

 

Эти типы описаны ниже в параграфе 5.3.

5.1.3. Защита сообщений PKI

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

Для защиты используется структура

PKIProtection ::= BIT STRING

Входной информацией для расчета PKIProtection является DER-представление структуры данных

        ProtectedPart ::= SEQUENCE {
            header    PKIHeader,
            body      PKIBody
        }

Могут возникать ситуации, когда строка битов PKIProtection осознанно не используется в целях защиты сообщения (т. е., это необязательное поле опускается), поскольку для защиты сообщения будут применяться иные средства (внешние по отношению к PKIX). Данная спецификация явно разрешает такое поведение. Примеры внешней защиты включают инкапсуляцию PKCS #7 [PKCS7] и Security Multiparts [RFC1847] для сообщений PKIMessage (или просто PKIBody без тега CHOICE, если для данных заголовка PKIHeader обеспечивается внешний механизм защиты). Отметим, однако, что для большинства таких внешних механизмов требуется наличие у конечной точки сертификата открытого ключа и/или уникального отличительного имени DN, и/или другой информации, связанной с инфраструктурой. В результате такой подход может оказаться неприемлемым для начальной регистрации, восстановления ключей или других процессов с характеристиками «самозагрузки». Для таких случаев может оказаться необходимым использование параметра PKIProtection. В будущем, когда/если внешние механизмы изменятся и смогут поддерживать самозагрузку, использование PKIProtection может стать редким или прекратиться совсем.

В зависимости от ситуации биты PKIProtection могут содержать код идентификации сообщения (MAC22) или цифровую подпись. Ниже перечислены все возможные варианты.

5.1.3.1. Разделяемый секрет

В этом случае отправитель и получатель совместно владеют некой секретной информацией (для получения секрета используются автономные механизмы или предшествующие операции управления PKI). Поле PKIProtection будет содержать значение MAC, а protectionAlg будет иметь вид (см. также Приложение D.2):

  id-PasswordBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 13}
  PBMParameter ::= SEQUENCE {
    salt                OCTET STRING,
    owf                 AlgorithmIdentifier,
    iterationCount      INTEGER,
    mac                 AlgorithmIdentifier
  }

В приведенном выше protectionAlg значение поля salt (затравка) добавляется в конце ввода разделяемого секрета. После этого алгоритм OWF применяется iterationCount раз, секретное значение с добавленной в конце затравкой служит входными данными для первой итерации, а результат каждой итерации используется в качестве входных данных для следующей итерации. Результат последней итерации (для краткости его называют BASEKEY), размером «H» используется для формирования симметричного ключа. Если алгоритм MAC требует ключа размером K битов и K <= H, будут использоваться K старших битов BASEKEY. Если K > H, все биты BASEKEY используются в качестве H старших битов ключа, OWF(«1» || BASEKEY) образуют следующую группу из H битов ключа, OWF(«2» || BASEKEY) — третью группу и т. д., пока не будет достигнут размер K («N» означает ASCII-представление числа N, а «||» — конкатенацию).

Примечание. Рекомендуется сохранять значения полей параметра PBMParameter неизменными на протяжении одной транзакции (например, ir/ip/certConf/pkiConf) для снижения издержек, связанных с вычислением PasswordBasedMac.

5.1.3.2. Пары ключей DH

Когда отправитель и получатель обладают сертификатами Diffie-Hellman с совместимыми параметрами DH, для защиты сообщения конечный элемент должен генерировать симметричный ключ на основе значений своего секретного ключа DH и открытого DH-ключа получателя сообщения PKI. Поле PKIProtection будет содержать значение MAC, полученное с помощью этого симметричного ключа, а protectionAlg будет иметь вид:

id-DHBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 30}

DHBMParameter ::= SEQUENCE {
	owf                 AlgorithmIdentifier,
	-- Идентификатор алгоритма для необратимой функции (рекомендуется SHA-1)
	mac                 AlgorithmIdentifier
	-- Идентификатор алгоритма MAC (например, DES-MAC, Triple-DES-MAC [PKCS11],
}   	-- или HMAC [RFC2104, RFC2202])

В приведенном выше protectionAlg алгоритм OWF применяется к результату расчета по методу Diffie-Hellman. результат OWF (для краткости называется BASEKEY) размером «H» используется для формирования симметричного ключа. Если алгоритм MAC требует ключа размером K битов и K <= H, будут использоваться K старших битов BASEKEY. Если K > H, все биты BASEKEY используются в качестве H старших битов ключа, OWF(«1» || BASEKEY) образуют следующую группу из H битов ключа, OWF(«2» || BASEKEY) — третью группу и т. д., пока не будет достигнут размер K («N» означает ASCII-представление числа N, а «||» — конкатенацию).

5.1.3.3. Подпись

В этом случае отправитель владеет парой ключей цифровой подписи и просто подписывает сообщение PKI. Поле PKIProtection будет содержать значение подписи, а protectionAlg будет содержать идентификатор алгоритма AlgorithmIdentifier для цифровой подписи (например, md5WithRSAEncryption или dsaWithSha-1).

5.1.3.4. Комплексная защита

В случаях, когда конечный элемент передает защищенное сообщение PKI агенту RA, последний может переслать это сообщение агенту CA, добавив к сообщению свою защиту (которая может представлять собой MAC или подпись в зависимости от сертификатов, согласованных между RA и CA). Это осуществляется путем вложения сообщения от конечного элемента целиком в новое сообщение PKI. Используемая для этого структура показана ниже.

NestedMessageContent ::= PKIMessages

(использование сообщений PKIMessage в форме SEQUENCE OF PKIMessage позволяет агенту RA обрабатывать в пакетном режиме запросы нескольких EE в форме одного нового сообщения; для простоты все сообщения такого пакета должны быть однотипными — например, ir). Если RA хочет изменить сообщение (сообщения) тем или иным способом (например, добавить новые значения полей или расширения), он может создать свою желаемую структуру PKIBody. Исходное сообщение PKIMessage от EE может быть включено в поле generalInfo заголовка PKIHeader (например, для случаев, когда CA пожелает проверить POP или другие данные из исходного сообщения). Поле infoType, используемое в таких ситуациях имеет форму {id-it 15} (см. параграф 5.3.19, где описаны значения id-it), а infoValue представляет собой сообщения PKIMessage (содержимое должно быть представлено в том же порядке, как располагаются запросы в PKIBody).

5.2. Структуры данных общего назначения

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

5.2.1. Содержимое запрашиваемого сертификата

Различные управляющие сообщения PKI требуют, чтобы инициатор сообщения указывал некоторые поля, присутствие которых в сертификате обязательно. Структура данных CertTemplate позволяет конечному элементу или агенту RA задавать свои требования к сертификату. Структура CertTemplate идентична структуре Certificate, но некоторые поля не являются обязательными.

Отметим, что даже при полном задании инициатором требований к сертификату, агент CA может менять поля в эмиттируемом сертификате. Если измененный сертификат неприемлем для запрашивающей стороны, та должна вернуть сообщение certConf, не включающее данный сертификат (через CertHash) или включающее его (через CertHash) со статусом rejected. Определение и описание применения CertHash и certConf дано в параграфе 5.3.18.

См. Приложение C и [CRMF], где описан синтаксис CertTemplate.

5.2.2. Зашифрованные значения

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

Синтаксис EncryptedValue описан в [CRMF].

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

Если получатель сообщения PKIMessage уже владеет секретным ключом, используемым для дешифровки, поле encSymmKey может содержать сеансовый ключ, зашифрованный с использованием открытого ключа получателя.

5.2.3. Коды состояний и информация об отказах для сообщений PKI

Все сообщения-отклики будут включать ту или иную информацию о состоянии. Ниже перечислены коды состояний.

PKIStatus ::= INTEGER {
    accepted               (0), -- воспринято
    grantedWithMods        (1), -- представлено с Mods
    rejection              (2), -- отвергнуто
    waiting                (3), -- ожидание
    revocationWarning      (4), -- предупреждение об отзыве
    revocationNotification (5), -- уведомление об отзыве
    keyUpdateWarning       (6)  -- предупреждение о обновлении ключа
}

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

.

        PKIFailureInfo ::= BIT STRING {
            badAlg              (0),
            badMessageCheck     (1),
            badRequest          (2),
            badTime             (3),
            badCertId           (4),
            badDataFormat       (5),
            wrongAuthority      (6),
            incorrectData       (7),
            missingTimeStamp    (8),
            badPOP              (9),
            certRevoked         (10),
            certConfirmed       (11),
            wrongIntegrity      (12),
            badRecipientNonce   (13),
            timeNotAvailable    (14),
            unacceptedPolicy    (15),
            unacceptedExtension (16),
            addInfoNotAvailable (17),
            badSenderNonce      (18),
            badCertTemplate     (19),
            signerNotTrusted    (20),
            transactionIdInUse  (21),
            unsupportedVersion  (22),
            notAuthorized       (23),
            systemUnavail       (24),
            systemFailure       (25),
            duplicateCertReq    (26)
        }

        PKIStatusInfo ::= SEQUENCE {
            status        PKIStatus,
            statusString  PKIFreeText     OPTIONAL,
            failInfo      PKIFailureInfo  OPTIONAL
        }

 

5.2.4. Идентификация сертификата

Для идентификации отдельного сертификата служит структура данных CertId.

Синтаксис CertId описан в [CRMF].

5.2.5. «Автономный» открытый ключ корневого CA

Каждый корневой агент CA должен быть способен опубликовать свой текущий открытый ключ с помощью того или иного «автономного» (out-of-band) механизма. Хотя рассмотрение таких механизмов выходит за пределы данного документа, здесь определены структуры данных, которые могут поддерживать такие механизмы.

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

OOBCert ::= Certificate

Для полей этого сертификата вводится ряд ограничений:

  • сертификат должен быть самоподписанным (т. е., подпись должна быть проверяемой с использованием поля SubjectPublicKeyInfo);
  • поля subject и issuer должны быть идентичны;
  • если subject = NULL, должны присутствовать оба расширения subjectAltNames и issuerAltNames, а их значения должны совпадать;
  • значения всех остальных расширений должны быть применимыми к самоподписанным сертификатам (например, идентификаторы ключей для subject и issuer должны совпадать).
        OOBCertHash ::= SEQUENCE {
            hashAlg     [0] AlgorithmIdentifier     OPTIONAL,
            certId      [1] CertId                  OPTIONAL,
            hashVal         BIT STRING
        }

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

5.2.6. Опции архивирования

Запрашивающая сторона может указывать свое пожелание к PKI об архивировании секретного ключа с использованием структуры PKIArchiveOptions.

Синтаксис PKIArchiveOptions описан в [CRMF].

5.2.7. Публикация данных

Запрашивающая сторона может указывать свое пожелание к PKI о публикации сертификата с использованием структуры PKIPublicationInfo.

Синтаксис PKIPublicationInfo описан в [CRMF].

5.2.8. Структуры PoP

Если запрос сертификата сделан для пары ключей, используемой при подписи (т. е., запрашивается сертификат для верификации) владение секретным ключом подписи демонстрируется с помощью структуры POPOSigningKey.

Синтаксис POPOSigningKey описан в Приложении C и [CRMF], но следует отметить, что данная спецификация накладывает некоторые условия на семантику POPOSigningKeyInput.

        POPOSigningKeyInput ::= SEQUENCE {
            authInfo            CHOICE {
                sender              [0] GeneralName,
                publicKeyMAC            PKMACValue
            },
            publicKey           SubjectPublicKeyInfo
        }

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

5.2.8.1. Включение секретного ключа

Включение секретного ключа (в зашифрованном виде) в сообщение CertRequest (в поле thisMessage структуры POPOPrivKey (см. Приложение C) или PKIArchiveOptions в зависимости от того, требуется ли также архивирование секретного ключа).

5.2.8.2. Косвенный метод

Агент CA возвращает зашифрованный сертификат взамен обычного (т. е., сертификат шифруется со случайным значением симметричного ключа, а этот ключ шифруется с использованием открытого ключа, для которого сделан запрос сертификата) — этот метод ранее в параграфе 4.3.2 назван косвенным. Конечный элемент подтверждает агенту CA свое знание секретного ключа дешифровки путем включения корректного значения CertHash для данного сертификата в сообщение certConf. Это служит демонстрацией POP, поскольку EE может корректно рассчитать значение CertHash только в том случае, когда имеется возможность восстановить сертификат, а для этого требуется расшифровать симметричный ключ, используя соответствующий секретный ключ. Очевидно, что для того, чтобы такой механизм работал, агенту CA недопустимо публиковать сертификат, пока не будет получено сообщение certConf (в случае использования certHash для демонстрации POP). Более подробная информация приведена в параграфе 5.3.18.

5.2.8.3. Протокол «вызов-отклик»

Конечный элемент использует протокол «вызов-отклик23» (на основе описанных ниже сообщений POPODecKeyChall и POPODecKeyResp) между структурами данных CertReqMessages и CertRepMessage — этот метод в параграфе 4.3.2 назван прямым24. Полная схема взаимодействия показана на рисунке справа (отметим, что сообщение req’ не всегда инкапсулирует req, как вложенное сообщение.

                   EE            RA            CA
                    ---- req ---->
                    <--- chall ---
                    ---- resp --->
                                  ---- req' --->
                                  <--- rep -----
                                  ---- conf --->
                                  <--- ack -----
                    <--- rep -----
                    ---- conf --->
                    <--- ack -----

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

                   EE            RA            CA
                    ---- req ---->
                    <--- chall ---
                    ---- resp --->
                                  ---- req' --->
                                  <--- rep -----
                    <--- rep -----
                    ---- conf --->
                                  ---- conf --->
                                  <--- ack -----
                    <--- ack -----

Если сертификат запрашивается для пары ключей KAK25, в процедуре POP может использоваться любой из трех описанных выше способов для пары ключей шифрования с некоторыми изменениями: (1) текст в скобках для параграфа 5.2.8.2 меняется на «(т. е., сертификат шифруется симметричным ключом, полученным из секретного ключа KAK агента CA и открытого ключа, для которого делается запрос сертификата)»; (2) текст в первых скобках приведенного ниже описания поля challenge26 меняется на «(с использованием PreferredSymmAlg (см. параграф 5.3.19.4 и Приложение E.5) и симметричного ключа, полученного из секретного ключа KAK агента CA и открытого ключа, для которого делается запрос сертификата)». В дополнение к этому для POP можно использовать структуру POPOSigningKey, описанную в [CRMF] (поле alg имеет значение DHBasedMAC, а поле signature — MAC), в качестве четвертого варианта, если CA уже имеет сертификат D-H, известный EE.

Сообщения «вызов-отклик» процедуры POP для секретного ключа дешифровки описаны ниже (см. также стр. 404 документа [MvOV97]). Отметим, что этот обмен «вызов-отклик» связан с предшествующим сообщением для запроса сертификата (а также последующим откликом на такой запрос и подтверждением) через идентификатор transactionID в заголовке PKIHeader и защиту (MAC или подпись), применяемую к сообщению PKIMessage.

        POPODecKeyChallContent ::= SEQUENCE OF Challenge
        Challenge ::= SEQUENCE {
            owf                 AlgorithmIdentifier  OPTIONAL,
            witness             OCTET STRING,
            challenge           OCTET STRING
        }

Отметим, что размер Rand должен соответствовать требованиям шифрования с открытым ключом запрашивающей стороны. С учетом того, что размер int обычно не превышает 64 битов, остается более 100 байтов для поля sender, при использовании модуля в 1024 бита. Если в той или иной среде имена слишком велики и не могут поместиться (например, слишком длинные имена DN), следует использовать вмещающуюся часть (она должна обеспечивать получателю возможность однозначной трактовки сокращения).

POPODecKeyRespContent ::= SEQUENCE OF INTEGER

5.2.8.4. Обзор опций PoP

В этом параграфе описано несколько опций, связанных с методами POP. Список методов (сокращение SK27 означает ключ подписи, EK28 — ключ шифрования, KAK — ключ согласования ключей) приведен ниже.

         RAVerified;
         SKPOP;
         EKPOPThisMessage;
         KAKPOPThisMessage;
         KAKPOPThisMessageDHMAC;
         EKPOPEncryptedCert;
         KAKPOPEncryptedCert;
         EKPOPChallengeResp; 
         KAKPOPChallengeResp.

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

RAVerified. Выбор этой опции не определяется EE — агент RA использует эту опцию тогда и только тогда, когда он проверяет POP перед пересылкой запроса агенту CA, следовательно, EE не может выбирать этот метод.

SKPOP. Если EE имеет пару ключей подписи, этот вариант является единственным методом POP, заданным данной спецификацией для использования при запросе соответствующего сертификата.

EKPOPThisMessage и KAKPOPThisMessage. Конечный элемент сам принимает решение о предоставлении своего секретного ключа агенту CA/RA. Если EE считает нужным открыть свой ключ, этот вариант является единственным методом POP, заданным данной спецификацией для решения этой задачи (выбор одного из двух методов будет определяться типом ключевой пары).

KAKPOPThisMessageDHMAC. EE может использовать этот метод только при выполнении двух условий — (1) агент CA имеет сертификат DH, подходящий для этой цели, и (2) EE уже имеет копию этого сертификата. При выполнении обоих условий этот метод поддерживается явно и может быть использован конечным элементом.

EKPOPEncryptedCert, KAKPOPEncryptedCert, EKPOPChallengeResp, KAKPOPChallengeResp. EE помещает одну из этих опций (в зависимости от предпочтений и типа ключа) в поле subsequentMessage запросного сообщения. Тем самым, EE не выполняет процедуры POP, а просто указывает желаемый метод. Следовательно, если CA/RA возвращает сообщение об ошибке badPOP, конечный элемент повторяет запрос с использованием другого метода POP в сообщении subsequentMessage. Отметим, однако, что данная спецификация поощряет использование методов EncryptedCert и, более того, говорит, что «вызов-отклик» будет применяться обычно при вовлечении RA в верификацию POP. Таким образом, EE следует поддерживать возможность принятия интеллектуального решения о выборе одного из этих методов POP в сообщении-запросе.

5.3. Структуры данных, связанные с операциями

5.3.1. Запрос инициализации

Запрос Initialization содержит в качестве PKIBody структуру данных CertReqMessages, которая задает запрашиваемый(е) сертификат(ы). Обычно поля SubjectPublicKeyInfo, KeyId и Validity являются шаблонами, которые могут быть применены к каждому сертификату (см. профили в Приложении D). Этот тип сообщений предназначен для использования при первичной инициализации в PKI.

Синтаксис CertReqMessages описан в Приложении C и документе [CRMF].

5.3.2. Отклик при инициализации

Отклик Initialization содержит в качестве PKIBody структуру данных CertRepMessage, которая включает поле PKIStatusInfo для каждого из запрошенных сертификатов, а также может включать секретный ключ (обычно он шифруется сеансовым ключом, который, в свою очередь, шифруется ключом protocolEncrKey).

Синтаксис CertRepMessage описан в параграфе 5.3.4. Отметим, что при использовании для защиты сообщений PKI разделяемого секрета (см. параграф 5.1.3) любому сертификату, передаваемому в поле caPubs, инициатор может доверять непосредственно, как сертификату корневого CA.

5.3.3. Запрос сертификации

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

Синтаксис CertReqMessages описан в Приложении C и документе [CRMF].

В дополнение к этому PKIBody может представлять собой структуру данных CertificationRequest (эта структура полностью в формате ASN.1 в документе [PKCS10]). Данная структура может потребоваться при запросах сертификатов для ключей подписи при необходимости организации взаимодействия с унаследованными системами, но использовать ее без крайней необходимости настоятельно не рекомендуется.

5.3.4. Отклик при сертификации

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

     CertRepMessage ::= SEQUENCE {
         caPubs          [1] SEQUENCE SIZE (1..MAX) OF Certificate
                             OPTIONAL,
         response            SEQUENCE OF CertResponse
     }

     CertResponse ::= SEQUENCE {
         certReqId           INTEGER,
         status              PKIStatusInfo,
         certifiedKeyPair    CertifiedKeyPair    OPTIONAL,
         rspInfo             OCTET STRING        OPTIONAL
         -- analogous to the id-regInfo-utf8Pairs string defined
         -- for regInfo in CertReqMsg [CRMF]
     }

     CertifiedKeyPair ::= SEQUENCE {
         certOrEncCert       CertOrEncCert,
         privateKey      [0] EncryptedValue      OPTIONAL,
         -- see [CRMF] for comment on encoding
         publicationInfo [1] PKIPublicationInfo  OPTIONAL
     }

     CertOrEncCert ::= CHOICE {
         certificate     [0] Certificate,
         encryptedCert   [1] EncryptedValue
     }

В каждой структуре CertResponse может присутствовать только одно из полей (в зависимости от статуса результата) — failInfo (в PKIStatusInfo) или certificate (в CertifiedKeyPair). Для некоторых значений статуса (например, waiting — ожидание) не будет присутствовать ни одного из этих полей.

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

5.3.5. Содержимое запроса на обновление ключа

Для запросов на обновление ключей используется синтаксис CertReqMessages. Обычно SubjectPublicKeyInfo, KeyId и Validity являются шаблонами полей, которые могут быть представлены для каждого обновляемого ключа. Этот тип сообщений предназначен для запроса на обновление действующих (не отозванных и не просроченных) сертификатов (поэтому иногда его называют обновлением сертификатов — Certificate Update). Обновление является заменой сертификата, содержащей новый новый или текущий открытый ключ субъекта (второй вариант может быть неприемлемым для некоторых сред).

Синтаксис CertReqMessages описан в Приложении C и документе [CRMF].

5.3.6. Содержимое отклика при обновлении ключа

Для откликов на запрос обновления ключей используется синтаксис CertRepMessage. Отклик идентичен отклику при инициализации.

Синтаксис CertRepMessage описан в параграфе 5.3.4.

5.3.7. Содержимое запроса на восстановление ключа

Для запросов на восстановление ключей используется синтаксис, аналогичный инициализационному запросу CertReqMessages. Обычно поля SubjectPublicKeyInfo и KeyId являются шаблонами, которые могут быть использованы для открытого ключа подписи, для которого запрашивается сертификат (см. также Приложение D).

Синтаксис CertReqMessages описан в Приложении C и документе [CRMF]. Отметим, что при наличии необходимости в истории ключа запрашивающая сторона должна включить в сообщение элемент управления Protocol Encryption Key.

5.3.8. Содержимое отклика при восстановлении ключа

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

    KeyRecRepContent ::= SEQUENCE {
        status          PKIStatusInfo,
        newSigCert  [0] Certificate                   OPTIONAL,
        caCerts     [1] SEQUENCE SIZE (1..MAX) OF
                                     Certificate      OPTIONAL,
        keyPairHist [2] SEQUENCE SIZE (1..MAX) OF
                                     CertifiedKeyPair OPTIONAL
    }

 

5.3.9. Содержимое запроса на отзыв

При запросе на отзыв сертификата (или нескольких сертификатов) используется приведенная ниже структура данных. Имя запрашивающей стороны присутствует в структуре PKIHeader.

    RevReqContent ::= SEQUENCE OF RevDetails

    RevDetails ::= SEQUENCE {
        certDetails         CertTemplate,
        crlEntryDetails     Extensions       OPTIONAL
    }

5.3.10. Содержимое отклика при отзыве

Отклик при отзыве является ответом на описанное выше сообщение. Если такой отклик создается, он направляется стороне, запросившей отзыв (отдельное сообщение, анонсирующее отзыв сертификата может быть передано субъекту, для которого запрошен отзыв сертификата).

     RevRepContent ::= SEQUENCE {
         status        SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
         revCerts  [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL,
         crls      [1] SEQUENCE SIZE (1..MAX) OF CertificateList
                       OPTIONAL
     }

5.3.11. Содержимое запроса кросс-сертификата

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

Синтаксис CertReqMessages описан в Приложении C и документе [CRMF].

5.3.12. Содержимое отклика при кросс-сертификации

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

Синтаксис CertRepMessage описан в параграфе 5.3.4.

5.3.13. Содержимое анонса обновления ключа CA

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

    CAKeyUpdAnnContent ::= SEQUENCE {
       oldWithNew         Certificate,
       newWithOld         Certificate,
       newWithNew         Certificate
    }

5.3.14. Анонсирование сертификата

Описанная здесь структура может применяться для анонсирования существования сертификатов.

Отметим, что это сообщение предназначено для использования в тех случаях (если они возникают), когда нет заранее созданного метода публикации сертификатов, и не предназначено для применения в тех случаях, когда имеется метод публикации сертификатов (например, X.500).

CertAnnContent ::= Certificate

5.3.15. Анонсирование отзыва

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

        RevAnnContent ::= SEQUENCE {
            status              PKIStatus,
            certId              CertId,
            willBeRevokedAt     GeneralizedTime,
            badSinceDate        GeneralizedTime,
            crlDetails          Extensions  OPTIONAL
        }

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

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

5.3.16. Анонсирование CRL

Когда агент CA создает новый список CRL (или набор CRL) для анонсирования этого события может использоваться приведенная ниже структура.

CRLAnnContent ::= SEQUENCE OF CertificateList

5.3.17. Содержимое подтверждения PKI

Эта структура данных используется в протокольном обмене, как финальное сообщение PKIMessage. Содержимое этого сообщения одинаково для всех случаев — реально никакого содержимого нет, поскольку вся требуемая информация содержится в заголовке PKIHeader.

PKIConfirmContent ::= NULL

Использовать эти сообщения для подтверждения сертификатов не рекомендуется, следует вместо этого применять certConf. При получении PKIConfirm в отклике для сертификата получатель может трактовать его, как certConf для подтверждения восприятия всех сертификатов.

5.3.18. Содержимое подтверждения сертификата

Эта структура данных используется клиентом для передачи агенту CA/RA подтверждения о восприятии или отказе от сертификата.

         CertConfirmContent ::= SEQUENCE OF CertStatus

         CertStatus ::= SEQUENCE {
            certHash    OCTET STRING,
            certReqId   INTEGER,
            statusInfo  PKIStatusInfo OPTIONAL
         }

 

Для любого конкретного значения CertStatus опущенное поле statusInfo показывает восприятие указанного сертификата. Кроме того, могут явно указываться (как для восприятия, так и для отказа) в поле statusInfo дополнительные сведения о результате (например, для системы аудита агента CA/RA).

Внутри CertConfirmContent отсутствие структуру CertStatus, соответствующей сертификату, представленному в предшествующем отклике, говорит о том, что сертификат отвергнут. Поэтому может использоваться пустое значение CertConfirmContent (SEQUENCE нулевого размера) для индикации отказа от всех представленных сертификатов. В параграфе 5.2.8 (п. 2) приведено обсуждение поля certHash применительно к подтверждению владения.

5.3.19. Содержимое сообщений PKI общего назначения

     InfoTypeAndValue ::= SEQUENCE {
         infoType               OBJECT IDENTIFIER,
         infoValue              ANY DEFINED BY infoType  OPTIONAL
     }
     -- where {id-it} = {id-pkix 4} = {1 3 6 1 5 5 7 4}
     GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
5.3.19.1. Сертификат шифрования протокола CA

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

      GenMsg:    {id-it 1}, < absent >
      GenRep:    {id-it 1}, Certificate | < absent >

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

5.3.19.2. Типы ключевых пар для подписи

Может использоваться конечным элементом для получения списка алгоритмов цифровой подписи (например, RSA, DSA), для которых агент CA будет сертифицировать значения открытых ключей субъекта. Отметим, что для целей обмена сообщениями значения rsaEncryption и rsaWithSHA1, например, рассматриваются, как эквивалентные; вопрос можно сформулировать так: «Желает ли CA сертифицировать открытый ключ RSA?»

      GenMsg:    {id-it 2}, < absent >
      GenRep:    {id-it 2}, SEQUENCE SIZE (1..MAX) OF
5.3.19.3. Типы ключевых пар для шифрования/согласования ключей

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

      GenMsg:    {id-it 3}, < absent >
      GenRep:    {id-it 3}, SEQUENCE SIZE (1..MAX) OF
                            AlgorithmIdentifier
5.3.19.4. Предпочтительный симметричный алгоритм

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

      GenMsg:    {id-it 4}, < absent >
      GenRep:    {id-it 4}, AlgorithmIdentifier
5.3.19.5. Обновление ключевой пары CA

Может использоваться агентом CA для анонсирования обновления ключа.

GenMsg: {id-it 5}, CAKeyUpdAnnContent
5.3.19.6. CRL

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

GenMsg: {id-it 6}, < absent >
GenRep: {id-it 6}, CertificateList
5.3.19.7. Неподдерживаемые идентификаторы объекта

Используется сервером для возврата списка идентификаторов объектов, которые не распознаны или не поддерживаются, но включены в представленный клиентом список.

GenRep: {id-it 7}, SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER
5.3.19.8. Параметры ключевой пары

Может использоваться конечным элементом для запроса параметров домена, применяемых при генерации ключевых пар для некоторых алгоритмов с открытым ключом. Может служить, например, для запроса подходящих значений P, Q и G при генерации ключа DH/DSA или для запроса общеизвестных эллиптических кривых.

GenMsg: {id-it 10}, OBJECT IDENTIFIER -- (идентификатор объекта в алгоритме)
GenRep: {id-it 11}, AlgorithmIdentifier | < absent >

Отсутствие infoValue в GenRep показывает, что заданный в GenMsg алгоритм не поддерживается.

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

5.3.19.9. Пароль для отзыва

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

GenMsg: {id-it 12}, EncryptedValue
GenRep: {id-it 12}, < absent >
5.3.19.10. ImplicitConfirm

Определение и описание применения {id-it 13} дано в параграфе 5.1.1.1.

5.3.19.11. ConfirmWaitTime

Определение и описание применения {id-it 14} дано в параграфе 5.1.1.2.

5.3.19.12 Исходное сообщение PKIMessage

Определение и описание применения {id-it 15} дано в параграфе 5.1.3.

5.3.19.13. Поддерживаемые теги языка

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

GenMsg: {id-it 16}, SEQUENCE SIZE (1..MAX) OF UTF8String
GenRep: {id-it 16}, SEQUENCE SIZE (1) OF UTF8String

5.3.20. Содержимое отклика PKI общего назначения

GenRepContent ::= SEQUENCE OF InfoTypeAndValue

Примеры GenRep, которые могут поддерживаться, включают те, что перечислены в подпараграфах параграфа 5.3.19.

5.3.21. Содержимое сообщений об ошибках

Эта структура данных может использоваться EE, CA и RA для передачи информации об ошибке.

    ErrorMsgContent ::= SEQUENCE {
        pKIStatusInfo          PKIStatusInfo,
        errorCode              INTEGER           OPTIONAL,
        errorDetails           PKIFreeText       OPTIONAL
    }

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

Если для сообщения нужна защита, клиент должен использовать для этого тот же метод (например, подпись или MAC), что применялся для стартового сообщения данной транзакции. Агент CA всегда должен подписывать сообщение своим ключом подписи.

5.3.22. Запрос и отклик при опросе

Эта пара сообщений предназначена для обслуживания ситуаций, когда клиенту нужно опросить сервер для определения статуса незавершенных транзакций ir, cr или kur (т. е., при «ожидании» получения PKIStatus).

    PollReqContent ::= SEQUENCE OF SEQUENCE {
        certReqId    INTEGER }

    PollRepContent ::= SEQUENCE OF SEQUENCE {
        certReqId    INTEGER,
        checkAfter   INTEGER,  -- time in seconds
        reason       PKIFreeText OPTIONAL }

Ниже перечислены ситуации, когда используется опрос и способы применения. Предполагается, что во время транзакции может быть передано множество сообщений certConf. Одно такое сообщение будет передаваться в ответ на каждое сообщение ip, cp или kup, содержащее CertStatus для эмиттированного сертификата.

                           СТАРТ
                             |
                             v
                        Передача ir
                             | ip
                             v
                      Проверка статуса
                        возвращенных <-----------------------+
                        сертификатов                         |
                             |                               |
   +------------------------>|<------------------+           |
   |                         |                   |           |
   |        (issued)         v       (waiting)   |           |
Добавл. <--------- Проверка CertResponse -----> Добавление в |
в список          для каждого сертификата          список    |
подтвержд.                   /                    ожидания   |
                            /                                |
           (список подтв.) /     (пустой список подтв.)      |
                          /                     ip           |
                         /                 +----------------+
(пустой список ожидания)/                  |    pRep
  ФИНИШ <---- Передача certConf    Передача pReq----->Ожидание
                     |                 ^   ^               |
                     |                 |   |               |
                     +-----------------+   +---------------+
                      (список ожидания)
  1. В ответ на сообщение ip, cp или kup конечный элемент будет передавать certConf для всех эмиттированных сертификатов и, вслед за этим, pollReq для всех ожидаемых сертификатов.
  2. В ответ на pollReq агент CA/RA будет возвращать ip, cp или kup, если один или несколько ожидаемых сертификатов уже готовы; в противном случае будет возвращаться pollRep.
  3. Если EE получает pollRep, он будет ждать в течение времени не менее заданного полем checkAfter перед отправкой другого pollReq.
  4. Если сообщение ip, cp или kup получено в ответ на pollReq, оно трактуется так же, как при начальном отклике.

В приведенном ниже примере конечный элемент включает для сертификата в один запрос.

Этап

Конечный элемент

PKI

1

Форматирование ir

2

->

ir

->

3

Обработка ir

4

При необходимости участие оператора для обоих сертификатов

5

<-

ip

<-

6

Обработка ip

7

Форматирование pReq

8

->

pReq

->

9

Проверка статуса запросов на сертификаты

10

Сертификаты не готовы

11

Форматирование pRep

12

<-

pRep

<-

13

Ожидание

14

Форматирование pReq

15

->

pReq

->

16

Проверка статуса запросов на сертификаты

17

Один сертификат готов

18

Форматирование ip

19

<-

ip

<-

20

Обработка ip

21

Форматирование certConf

22

->

certConf

->

23

Обработка certConf

24

Форматирование ack

25

<-

pkiConf

<-

26

Форматирование pReq

->

pReq

->

27

Проверка статуса запросов на сертификаты

28

Сертификат готов

29

Форматирование ip

30

<-

ip

<-

31

Обработка ip

32

Форматирование certConf

33

->

certConf

->

34

Обработка certConf

35

Форматирование ack

36

<-

pkiConf

<-

6. Обязательные функции управления PKI

Некоторые из функций управления PKI, обозначенные в параграфе 3.1, более подробно описываются здесь.

В этом разделе рассматриваются функции, которые являются обязательными в том смысле, что каждая реализация конечного элемента и агента CA/RA должна обеспечивать соответствующую функциональность. Этот раздел, по сути, является профилем функциональности управления PKI, который должен поддерживаться. Отметим, однако, что функции управления, описанные в этом разделе, не требуется реализовывать с использованием описанных в разделе 5 сообщений PKI, если в данной среде доступны другие варианты (см. Приложение D, где описаны профили сообщений PKIMessage, которые должны поддерживаться).

6.1. Инициализация корневого CA

[Определение корневого CA приведено в параграфе 3.1.1.2 этого документа.]

Вновь созданный корневой агент CA должен выполнить «само-сертификацию», которая обеспечивается структурой Certificate с профилем, определенным для сертификата newWithNew, эмиттируемого вслед за обновлением ключа корневого CA.

Для того, чтобы самосертификация CA была доступна конечным элементам, которые не получают этот сертификат по «автономным» каналам, агент CA должен также создавать оттиск этого сертификата. Конечные элементы, которые получают сертификат защищенными «автономными» способами, смогут верифицировать самосертификацию CA и, следовательно, другие атрибуты.

Для передачи оттиска используется структура данных OOBCertHash.

6.2. Обновление ключа корневого CA

Ключи CA (как и все другие ключи) имеют конечное время жизни и должны периодически обновляться. Агент CA может эмиттировать сертификаты NewWithNew, NewWithOld и OldWithNew (см. параграф 4.4.1), чтобы помочь существующим конечным элементам, которые используют текущий самоподписанный сертификат CA (OldWithOld), в защищенном переходе к новому самоподписанному сертификату CA (NewWithNew), а также новым конечным элементам, которые будут владеть сертификатом NewWithNew, в защищенном получении сертификата OldWithOld для верификации существующих данных.

6.3. Инициализация второстепенного CA

[Определение термина «второстепенный агент CA» приведено выше в параграфе 3.1.1.2.]

С точки зрения протоколов управления PKI инициализация второстепенного агента CA не отличается от инициализации конечного элемента. Единственное различие заключается в том, что второстепенный агент CA должен также создавать начальный список отзыва.

6.4. Создание CRL

Перед выпуском любого сертификата вновь созданный агент CA (который эмиттирует CRL) должен создать «пустые» версии каждого списка, который он будет периодически создавать.

6.5. Запрос информации PKI

Когда элемент PKI (CA, RA или EE) хочет получить информацию о текущем статусе CA, он может передать агенту CA запрос на такую информацию.

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

Если для запроса и предоставления информации PKI используются сообщения PKIMessage, запрос должен представлять собой сообщение GenMsg, отклик должен быть сообщением GenRep, а информация об ошибке должна быть сообщением Error. Эти сообщения защищают с использованием MAC на основе разделяемого секрета (т. е., PasswordBasedMAC) или иных заверенных механизмов (если конечный элемент имеет действующий сертификат).

6.6. Кросс-сертификация

Запрашивающий CA — это агент CA, который является субъектом кросс-сертификата; отвечающим CA будет агент, эмиттирующий кросс-сертификат.

Запрашивающий агент CA должен находиться в рабочем состоянии на момент запроса кросс-сертификации.

6.6.1. Односторонняя схема «запрос-отклик»

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

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

Описание.

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

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

Запрашивающий агент CA инициирует обмен путем генерации запроса на кросс-сертификат (ccr29) со «свежим» случайным значением (случайное значение запрашивающей стороны). Сообщение ccr передается отвечающему агенту CA. Поля этого сообщения защищают от изменения с помощью кода авторизации на основе MAC.

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

При получении сообщения ccp запрашивающий агент CA проверяет это сообщение (включая полученное в нем случайное число) и MAC. После этого запрашивающий CA отвечает сообщением certConf. Поля этого сообщения защищаются от изменения с помощью кода авторизации на основе MAC. Запрашивающий агент CA может записать полученный сертификат в репозиторий (Repository) для использования в последствии при создании пути для сертификата.

При получении сообщения certConf отвечающий агент CA проверяет это сообщение и MAC, а потом возвращает подтверждение, используя для этого сообщение PKIConfirm. Он может также опубликовать сертификат запрашивающей стороны, чтобы упростить в будущем создание пути.

Примечания.

  1. Сообщение ccr должно содержать «полный» запрос сертификата, т. е., запрашивающим агентом должны быть заданы все поля за исключением порядкового номера (включая, например, расширение BasicConstraints).
  2. В сообщение ccp следует включать сертификат верификации отвечающего CA; при наличии такого сертификата запрашивающий агент CA должен проверить его (например, с помощью «автономного» механизма).

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

6.7. Инициализация конечного элемента

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

  • получение информации PKI;
  • автономная верификация открытого ключа корневого агента CA.

(к возможным этапам инициализации относятся также получение информации об условиях доверия и/или автономная верификация открытых ключей других агентов CA).

6.7.1. Получение информации PKI

Требуемая информация включает:

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

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

Требуемая информация может быть получена в соответствии с описанием в параграфе 6.5.

6.7.2. «Автономная» верификация ключа корневого CA

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

Дополнительная информация приведена в параграфе 6.1.

6.8. Запрос сертификата

Инициализированный конечный элемент может запросить дополнительный сертификат в любой момент (и с любой целью). Такой запрос осуществляется с использованием сообщения cr31. Если конечный элемент уже владеет ключевой парой для подписи (с соответствующим сертификатом верификации), сообщение cr обычно защищается с использованием цифровой подписи. Агент CA возвращает новый сертификат (при успешном выполнении запроса) в сообщении CertRepMessage.

6.9. Обновление ключа

Когда срок действия ключевой пары близок к завершению, соответствующий конечный элемент может запросить обновление ключей — т. е., он может запросить у агента CA выпуск нового сертификата для новой ключевой пары (или, в некоторых ситуациях, нового сертификата для прежней пары ключей). Запрос выполняется с помощью сообщения kur32 (в некоторых средах это называют операцией обновления сертификата — Certificate Update). Если конечный элемент уже владеет ключевой парой для подписи (с соответствующим сертификатом верификации), сообщение kur обычно защищается с использованием цифровой подписи. Агент CA возвращает новый сертификат (при успешном выполнении запроса) в сообщении kup33, синтаксически идентичном сообщению CertRepMessage.

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

В этом разделе определено согласование версий между клиентом и серверов в целях поддержки ранних протоколов.

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

Если сервер получает сообщение поддерживаемой им версии, версия отклика должна совпадать с версией полученного сообщения. Если сервер получает сообщение, номер версии которого выше или ниже номера версии, поддерживаемого сервером, он должен возвратить сообщение ErrorMsg с установленным битом unsupportedVersion (в поле failureInfo структуры pKIStatusInfo). Если версия полученного сообщения выше старшей версии, поддерживаемой сервером, указываемая в сообщении об ошибке версия должна совпадать с максимальной версией, поддерживаемой сервером; если версия полученного сообщения ниже минимальной версии, поддерживаемой сервером, в сообщении об ошибке должна указываться минимальная версия из числа поддерживаемых сервером.

Если клиент получает сообщение ErrorMsgContent с установленным битом unsupportedVersion и поддерживаемым клиентом номером версии, он может повторить запрос с использованием указанной в сообщении об ошибке версии.

7.1. Поддержка реализаций RFC 2510

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

7.1.1. Взаимодействие клиентов с серверами RFC 2510

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

Если клиент получает не связанное с ошибкой сообщение PKIMessage версии cmp1999, он может принять решение о продолжении транзакции (если она еще не закончена) с использованием семантики RFC 2510. Если клиент не хочет продолжать, а транзакция еще не завершена, клиент должен прервать транзакцию и передать сообщение ErrorMsgContent с версией cmp1999.

7.1.2. Сервер, получающий сообщения cmp1999

Если сервер получает сообщение версии cmp1999, он может вернуться к поведению в стиле RFC 2510 и отвечать сообщениями версии cmp1999. Если сервер не пожелает снижать используемую версию, он должен возвратить сообщение ErrorMsgContent, как описано выше в параграфе 7.

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

8.1. Подтверждение владения ключом дешифровки

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

8.2. Подтверждение владения путем раскрытия секретного ключа

Отметим также, что раскрытие секретного ключа агенту CA/RA, как способ подтверждения владения, может приводить к возникновению угроз (в зависимости от того, насколько можно доверять CA/RA в плане корректного обслуживания такой информации). Разработчикам рекомендуется:

соблюдать осторожность при выборе и использовании этого метода POP;

по возможности получать от пользователей приложения явное подтверждение того, что они доверяют CA/RA иметь копию своего секретного ключа, прежде, чем раскрывать этот ключ.

8.3. Атаки на обмен ключами по методу Diffie-Hellman

В процессе обмена ключами по методу D-H возможна незначительная группа атак, описанных ниже. Враждебный конечный элемент преднамеренно выбирает параметры D-H, позволяющие ему получить секретный ключ D-H (или достаточно большую его часть) для агента CA при операциях архивирования и восстановления ключей. На основе этой информации EE сможет восстановить секретный ключ расшифровки другого конечного элемента (ничего не подозревающего об этом) EE2, в процессе легитимной операции по архивированию ключа EE2 на данном CA. Для предотвращения такой возможности есть два варианта. (1) CA может генерировать свежую пару ключей D-H для использования в качестве протокольной пары ключей шифрования каждому EE, с которым он взаимодействует. (2) CA может использовать протокол валидации ключей (не описан в этом документе) для каждого запрашивающего конечного элемента, чтобы гарантировать защищенность протокольной пары ключей шифрования EE от таких атак. Вариант(1) явно проще (не требует дополнительного протокольного обмена от какой-либо из сторон) и, следовательно, рекомендован к применению.

9. Взаимодействие с IANA

Типы сообщений PKI общего назначения различаются по идентификаторам объекта (OID). Значения OID для PKI General Message (сообщения общего назначения), определенные в этом документе, были выделены из сегмента, переданного IANA рабочей группе PKIX.

Упоминаемые в документе криптографические алгоритмы различаются по идентификаторам объектов (OID). Значения OID для криптографических алгоритмов были выделены из нескольких сегментов, принадлежащих разным организациям, включая RSA Security, Entrust Technologies, IANA и IETF.

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

От IANA не требуется выполнения каких-либо действий или внесения изменений в связи с данной спецификацией.

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

[X509] International Organization for Standardization and International Telecommunications Union, «Information technology — Open Systems Interconnection — The Directory: Public-key and attribute certificate frameworks», ISO Standard 9594-8:2001, ITU-T Recommendation X.50934, March 2000.

[MvOV97] Menezes, A., van Oorschot, P. and S. Vanstone, «Handbook of Applied Cryptography», CRC Press ISBN 0-8493-8523-7, 1996.

[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, «HMAC: Keyed-Hashing for Message Authentication», RFC 2104, February 1997.

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

[RFC2202] Cheng, P. and R. Glenn, «Test Cases for HMAC-MD5 and HMAC-SHA-1», RFC 2202, September 1997.

[RFC3629] Yergeau, F., «UTF-8, a transformation format of ISO 10646», STD 63, RFC 3629, November 2003.

[RFC2482] Whistler, K. and G. Adams, «Language Tagging in Unicode Plain Text», RFC 2482, January 1999.

[CRMF] Schaad, J., «Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)», RFC 4211, September 2005.

[RFC3066] Alvestrand, H., «Tags for the Identification of Languages», BCP 47, RFC 3066, January 2001.

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

[CMPtrans] Kapoor, A., Tschalar, R. and T. Kause, «Internet X.509 Public Key Infrastructure — Transport Protocols for CMP», Work in Progress. 2004.

[PKCS7] RSA Laboratories, «The Public-Key Cryptography Standards — Cryptographic Message Syntax Standard. Version 1.5», PKCS 7, November 1993.

[PKCS10] Nystrom, M., and B. Kaliski, «The Public-Key Cryptography Standards — Certification Request Syntax Standard, Version 1.7», RFC 2986, May 2000.

[PKCS11] RSA Laboratories, «The Public-Key Cryptography Standards — Cryptographic Token Interface Standard. Version 2.10», PKCS 11, December 1999.

[RFC1847] Galvin, J., Murphy, S., Crocker, S., and N. Freed, «Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted», RFC 1847, October 1995.

[RFC2559] Boeyen, S., Howes, T. and P. Richard, «Internet X.509 Public Key Infrastructure Operational Protocols — LDAPv2», RFC 2559, April 1999.

[RFC2585] Housley, R. and P. Hoffman, «Internet X.509 Public Key Infrastructure Operational Protocols: FTP and HTTP», RFC 2585, May 1999.

[FIPS-180] National Institute of Standards and Technology, «Secure Hash Standard», FIPS PUB 180-1, May 1994.

[FIPS-186] National Institute of Standards and Technology, «Digital Signature Standard», FIPS PUB 186, May 1994.

[ANSI-X9.42] American National Standards Institute, «Public Key Cryptography for The Financial Services Industry: Agreement of Symmetric Keys Using Discrete Logarithm Cryptography», ANSI X9.42, February 2000.

Приложение A. Основания для присутствия RA

Причины присутствия агентов RA можно разделить на технические и организационные. Технические причины перечислены ниже.

  • используются аппаратные маркеры, но не все конечные элементы имеют оборудование для их инициализации — оборудование RA может обеспечивать требуемую функциональность (это может быть также связано с политикой);
  • некоторые конечные элементы не могут публиковать сертификаты — агент RA может делать это за них;
  • RA имеет возможность эмиттировать подписанные запросы на отзыв от имени связанных с ним конечных элементов, тогда как конечные элементы могут не иметь такой возможности (если ключевая пара полностью потеряна).Ниже перечислены некоторые причины организационного характера, обуславливающие присутствие RA.
  • Концентрация функциональности в оборудовании RA может оказаться более экономичной по сравнению с реализацией тех же функций на всех конечных элементах (особенно при использовании специального оборудования для работы с аппаратными маркерами);
  • организация RA может снизить число требуемых для работы агентов CA, что в некоторых случаях весьма желательно;
  • RA может обеспечивать больше возможностей сопоставления людей с их «электронными» именами, особенно для случаев физической удаленности CA от конечного элемента;
  • для многих приложений уже имеются те или иные административные структуры, поэтому кандидата на роль RA найти достаточно просто (для CA это может оказаться сложнее).

Приложение B. Использование пароля для отзыва

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

В некоторых средах используется механизм «отзыва по паролю» (revocation passphrase), в котором значение с достаточной энтропией (т. е., достаточно длинный пароль) совместно используется конечным элементом и CA/RA (и неизвестно другим) до запроса на отзыв — это значение может служить для заверения запроса на отзыв.

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

  • OID и значение, заданное в параграфе 5.3.19.9, могут в любое время быть переданы в сообщении GenMsg или в поле generalInfo заголовка PKIHeader любого сообщения PKIMessage (в частности, значение EncryptedValue может быть передано в сообщении certConf, которое подтверждает приемлемость сертификатов, запрошенных в сообщении с запросом инициализации или сертификата). Они передают пароль на отзыв, выбранный элементом (т. е., зашифрованные байты поля encValue) соответствующему агенту CA/RA; более того, передача выполняется с использованием соответствующих параметров защиты конфиденциальности (поскольку пароль шифруется с помощью ключа protocolEncryptionKey агента CA/RA).
  • Если агент CA/RA получает пароль для отзыва (OID и значение, заданное в параграфе 5.3.19.9) в сообщении GenMsg, он должен создать и передать сообщение GenRep, которое включает OID (без значения), как указано в параграфе 5.3.19.9. Если агент CA/RA получает пароль на отзыв в поле generalInfo заголовка PKIHeader в любом сообщении PKIMessage, он должен включить OID (без значения) в поле generalInfo заголовка PKIHeader соответствующего отклика PKIMessage. Если агент CA/RA не может возвратить требуемый отклик по той или иной причине, он должен передать сообщение об ошибке со статусом «отказ» (rejection), в которое может включить поле failInfo с описанием причины.
  • Поле valueHint в EncryptedValue может содержать идентификатор ключа (выбирается элементом вместе с паролем), который будет помогать при последующем поиске корректного пароля (например, при создании запроса на отзыв элементом или при получении такого запроса агентом CA/RA).
  • Сообщение с запросом на отзыв защищается с помощью PasswordBasedMAC, где пароль на отзыв служит ключом. В тех случаях, когда это приемлемо, поле senderKID в заголовке PKIHeader может содержать значение, переданное ранее в valueHint.

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

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

Приложение C. Разъяснение поведения для запросов

При наличии расхождений с [CRMF], которые будут вызывать проблемы интерпретации или взаимодействия, [CRMF] следует трактовать, как нормативный документ.

Приведенные ниже определения заимствованы из [CRMF]. Эти определения включены для того, чтобы разъяснить поведенческие характеристики запросов; в остальных случаях синтаксис и семантика идентичны [CRMF].

   CertRequest ::= SEQUENCE {
       certReqId     INTEGER,
       certTemplate  CertTemplate,
       controls      Controls OPTIONAL }

   -- Если certTemplate представляет собой пустую последовательность SEQUENCE (т. е., все
   -- поля опущены), поле controls МОЖЕТ содержать значение id-regCtrl-altCertTemplate,
   -- задающее шаблон для сертификата, отличного от сертификата открытого ключа X.509v3
   -- И наоборот, если значение certTemplate не пусто (т. е., заполнено хотя бы одно поле),
   -- в поле НЕДОПУСТИМО включать значение id-regCtrl-altCertTemplate. Новый элемент 
   -- управления определяется следующим образом:

   id-regCtrl-altCertTemplate OBJECT IDENTIFIER ::= {id-regCtrl 7}
   AltCertTemplate ::= AttributeTypeAndValue

   POPOSigningKey ::= SEQUENCE {
       poposkInput           [0] POPOSigningKeyInput OPTIONAL,
       algorithmIdentifier   AlgorithmIdentifier,
       signature             BIT STRING }

   -- **********
   -- * Для данной спецификации комментарий ASN.1, данный в [CRMF], относится не только к     
   -- * certTemplate, но и к altCertTemplate.
   -- **********
   -- * Подпись (с использованием algorithmIdentifier) является DER-представлением 
   -- * poposkInput (т. е., «значением» OCTETsof для POPOSigningKeyInput DER). 
   -- * Примечание: Если CertReqMsgcertReq certTemplate (или altCertTemplate) содержит
   -- * значения subject и publicKey, поле poposkInput ДОЛЖНО быть опущено и подпись ДОЛЖНА
   -- * рассчитываться для DER-представления значения CertReqMsg certReq (или 
   -- * AltCertTemplate). Если certTemplate/altCertTemplate не содержит значений субъекта
   -- * и открытого ключа (т. е., содержится одно из этих значений или отсутствуют оба),
   -- * поле poposkInput ДОЛЖНО присутствовать и ДОЛЖНО быть подписано.
   -- **********

   POPOPrivKey ::= CHOICE {
       thisMessage       [0] BIT STRING,

   -- **********
   -- * Тип thisMessage в [CRMF] указан, как строка битов (BIT STRING); следует использовать
   -- * тип EncryptedValue (в соответствии с параграфом 5.2.2. Зашифрованные значения данной
   -- * спецификации). Следовательно, данный документ разъясняет поведение, указывая, что
   -- * содержимое поля thisMessage ДОЛЖНО кодироваться, как  EncryptedValue и после этого
   -- * «преобразовываться» в BIT STRING. Такой подход обеспечивает требуемую транспортировку 
   -- * и защиту секретного ключа и совместимость на уровне битового представления с
   -- * требованиями [CRMF].
   -- **********

       subsequentMessage [1] SubsequentMessage,
       dhMAC             [2] BIT STRING }

 

Приложение D. Профили управляющих сообщений PKI (обязательные)

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

Представлены профили для сообщений PKIMessage, используемых в операциях управления PKI:

  • начальная регистрация/сертификация;
  • схема с базовой идентификацией;
  • запрос сертификата;
  • обновление ключа.

D.1. Общие правила интерпретации профилей

  1. Когда поле типа OPTIONAL или DEFAULT не упомянуто в индивидуальном профиле, его не следует включать в соответствующее сообщение (иначе получатель может отбросить такое сообщение, как синтаксически некорректное). Обязательные не указываются, если они имеют обычное значение (например, в данной версии спецификации pvno всегда принимает значение 2).
  2. Когда структуры встречаются более, чем в одном сообщении, они по мере возможности указываются в профиле раздельно.
  3. Идентификаторы алгоритмов из структуры PKIMessage указываются в профиле раздельно.
  4. «Специальное» отличительное имя X.500 DN называется NULL-DN — это обозначает DN с последовательностью SEQUENCE OF RelativeDistinguishedNames нулевого размера (ее DER-представление — 3000 в шестнадцатеричном формате).
  5. В тех случаях, когда для поля требуется GeneralName, а подходящее значение недоступно (например, конечный элемент создает запрос до того, как станет известно его имя), для GeneralName используется значение X.500 NULL-DN (т. е., поле Name в CHOICE содержит NULL-DN). Этот специальный случай называют NULL-GeneralName.
  6. Когда в профиле не указано значение GeneralName, в соответствующем поле сообщения PKIMessage указывается NULL-GeneralName. В частности, это относится к полю sender заголовка PKIHeader некоторых сообщений.
  7. Там где может возникать неоднозначность в результате именования полей, в именах профилей используется нотация с точками (например, certTemplate.subject означает поле subject в поле с именем certTemplate).
  8. Там, где SEQUENCE OF type является частью сообщения, используется нотация на основе массива с нулевой базой для описания полей в последовательности SEQUENCE OF (например, crm[0].certReq.certTemplate.subject указывает на субполе первого CertReqMsg, содержащегося в запросе).
  9. Весь обмен сообщениями PKI, описанными в параграфах D.4 — D.6, требует передачи сообщений certConf элементом-инициатором и сообщений PKIConfirm с отвечающей стороны. Сообщения PKIConfirm не включены в некоторые профили, поскольку тело этих сообщений имеет значение NULL, а содержимое заголовка не включает контекста. Для protectionAlg могут использоваться любые идентифицированные способы (например, MAC на базе пароля, если известен разделяемый секрет, или цифровая подпись).

D.2. Алгоритм использования профиля

В приведенной ниже таблице даны определения алгоритмов, используемых в протоколах управления PKI. Таблица включает 4 колонки:

Имя: идентификатор, используемый для профилей сообщений;

Применение: описание цели и места использования алгоритма;

Обязательные: значения AlgorithmIdentifier, которые должны поддерживаться реализациями;

Прочие: дополнения к обязательным алгоритмам AlgorithmIdentifier.

Имя Применение Обязательные Прочие
MSG_SIG_ALG Защита сообщений PKI с использованием подписи DSA/SHA-1 RSA/MD5, ECDSA, …
MSG_MAC_ALG Защита сообщений PKI с использованием MAC PasswordBasedMac HMAC, X9.9…
SYM_PENC_ALG Симметричное шифрование секретного ключа конечного элемента в тех случаях, когда ключ симметричного шифрования распространяется автономно 3-DES (3-key-EDE, режим CBC) AES, RC5, CAST-128…
PROT_ENC_ALG Для шифрования (симметричных ключей, используемых для шифрования) секретных ключей, передаваемых в сообщениях PKIMessage, применяется асимметричный алгоритм D-H RSA, ECDH, …
PROT_SYM_ALG Для шифрования битов секретного ключа (ключи этого типа шифруются с помощью PROT_ENC_ALG) используется симметричный алгоритм 3-DES (3-key-EDE, режим CBC) AES, RC5, CAST-128…

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

DSA/SHA-1:

AlgId: {1 2 840 10040 4 3};

Стандарт цифровой подписи [FIPS-186]

Размер открытого модуля: 1024 бита.

PasswordBasedMac:

AlgId: {1 2 840 113533 7 66 13} с SHA-1 {1 3 14 3 2 26} в качестве параметра owf и HMAC-SHA1 {1 3 6 1 5 5 8 1 2} в качестве параметра mac;

(данная спецификация) вместе с

Стандарт защищенного хэширования [FIPS-180] и [RFC2104]

Размер ключа HMAC: 160 битов (т. е., «K» = «H» в параграфе 5.1.3.1. Разделяемый секрет)

3-DES:

AlgId: {1 2 840 113549 3 7}; (используется в BSAFE алгоритма RSA и в S/MIME).

D-H:

AlgId: {1 2 840 10046 2 1};

[ANSI-X9.42]

Размер открытого модуля: 1024 бита.

 DomainParameters ::= SEQUENCE {
    p       INTEGER, -- нечетный первичный, p=jq +1
    g       INTEGER, -- генератор, g^q = 1 mod p
    q       INTEGER, -- первичный множитель p-1
    j       INTEGER OPTIONAL, -- сомножитель, j>=2
    validationParms  ValidationParms OPTIONAL
 }
 ValidationParms ::= SEQUENCE {
    seed          BIT STRING, -- «затравка» для генерации первичного
    pGenCounter   INTEGER     -- верификация параметра
 }

D.3. Подтверждение владения профилем

Ниже показаны поля POP для использования (в поле signature поля pop структуры ProofOfPossession) в случаях подтверждения владения секретным ключом подписи, соответствующим открытому ключу верификации, для которого был запрошен сертификат.

Поле Значение Комментарий
algorithmIdentifier MSG_SIG_ALG Для этого подтверждения разрешена только защита цифровой подписью.
signature присутствует Биты, рассчитанные с использованием MSG_SIG_ALG.

Для подтверждения владения секретным ключом дешифровки, соответствующим открытому ключу шифрования, для которого был запрошен сертификат, этот профиль не используется — взамен его применяется поле CertHash в сообщении certConf.

Не каждый агент CA/RA будет выполнять POP (для ключа подписи, ключа дешифровки или ключа согласования ключей) с использованием протокола запроса сертификатов по основному каналу PKIX-CMP (способ выполнения POP может, в конечном счете, определяться политикой для любого заданного CA в его публикуемом Policy OID36 и Certification Practice Statement37). Однако данная спецификация требует, чтобы агенты CA/RA выполняли POP (тем или иным способом), как часть процесса сертификации. Все конечные элементы должны быть готовы обеспечить POP (т. е., эти компоненты протокола PKIX-CMP должны поддерживаться).

D.4. Начальная регистрация/сертификация (базовая схема)

(Инициализированный) конечный элемент запрашивает (первый) сертификат у агента CA. Когда CA отвечает сообщением, содержащим сертификат, конечный элемент отвечает подтверждением приема сертификата. Агент CA возвращает сообщение PKIConfirm конечному элементу и завершает транзакцию. Все сообщения заверяются.

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

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

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

Предпосылки:

  1. конечный элемент может заверять подпись CA на основе автономных механизмов;
  2. конечный элемент и CA совместно используют симметричный ключ MACing.

Поток сообщений:

этапа

Конечный элемент

PKI

1

Форматирование ir

2

->

ir

->

3

Обработка ir

4

Форматирование ip

5

<-

ip

<-

6

Обработка ip

7

Форматирование certConf

8

->

certConf

->

9

Обработка certConf

10

Форматирование PKIConf

11

<-

PKIConf

<-

12

Обработка PKIConf

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

Конечный элемент осуществляет также взаимодействие с агентом CA/RA по отдельному каналу (автономно). Эта транзакция создает разделяемый секрет, ссылочный номер referenceNumber и, опционально, отличительное имя, используемые для имен отправителя и субъекта в шаблоне сертификата. Рекомендуется использовать разделяемый секрет размером не менее 12 символов.

Запрос инициализации — ir

   Поле                 Значение
   recipient            имя CA
     -- имя агента CA, у которого будет запрашиваться эмиссия сертификата
   protectionAlg        MSG_MAC_ALG
     -- для этого запроса разрешена только защита MAC на основе ключа начальной идентификации
   senderKID            referenceNum
     -- ссылочный номер, который ранее агент CA выдал для конечного элемента (вместе с ключом
     -- MACing)
   transactionID        присутствует
     -- зависящее от реализации значение, не имеющее смысла для конечного элемента.
     -- [если идентификатор уже используется на CA, агент CA ДОЛЖЕН генерировать сообщение об
     -- отказе]
   senderNonce          присутствует
     -- 128 (pseudo-)random bits
   freeText             любое корректное значение
   body                 ir (CertReqMessages)
                        допускается только 1 или 2 сообщения CertReqMsg
     -- если требуется большее число сертификатов, запросы ДОЛЖНЫ помещаться в отдельные 
     -- сообщения PKIMessages

   CertReqMsg           присутствует одно или два
     -- более подробное описание приведено ниже
     -- crm[0] обозначает первое (которое ДОЛЖНО присутствовать), а crm[1] — второе (которое
     -- является ОПЦИОНАЛЬНЫМ и служит для запроса централизованно генерируемого ключа)

   crm[0].certReq.      Фиксированное значение 0
      certReqId
     -- индекс шаблона в сообщении
   crm[0].certReq       присутствует
      certTemplate
     -- ДОЛЖНО включать значение открытого ключа субъекта, других ограничений нет
   crm[0].pop...        присутствует опционально, если открытый ключ
      POPOSigningKey    из crm[0].certReq.certTemplate является ключом подписи
     -- в этом обмене МОЖЕТ потребоваться подтверждение владения (см. Приложение D.3)
   crm[0].certReq.      присутствует опционально
      controls.archiveOptions
     -- конечный элемент МОЖЕТ запросить архивирование локально сгенерированного секретного
     -- ключа
   crm[0].certReq.      присутствует опционально
      controls.publicationInfo
     -- конечный элемент МОЖЕТ запросить публикацию полученного в результате сертификата
   crm[1].certReq       Фиксированное значение 1
      certReqId
     -- индекс шаблона в сообщении
   crm[1].certReq       присутствует
      certTemplate
      -- НЕДОПУСТИМО включение реальных битов открытого ключа, других ограничений нет 
      -- (например, имена не обязаны совпадать с именами в crm[0]).
      -- Отметим, что поле subjectPublicKeyInfo МОЖЕТ присутствовать и содержать
      -- AlgorithmIdentifier, за которым следует  BIT STRING нулевого размера для
      -- subjectPublicKey, если желательно информировать CA/RA об алгоритме и параметрах, 
      -- которые являются предпочтительными для генерируемой пары ключей.
   crm[1].certReq.      присутствует [идентификатор объекта ДОЛЖЕН быть PROT_ENC_ALG]
      controls.protocolEncrKey
     -- если централизованная генерация ключей поддерживается данным агентом CA, этот
     -- краткосрочный асимметричный ключ шифрования (генерируемый конечным элементом) будет
     -- использоваться CA для шифрования (симметричного ключа, используемого для шифрования)
     -- секретного ключа, генерируемого CA от имени конечного элемента
   crm[1].certReq.      присутствует опционально
      controls.archiveOptions
   crm[1].certReq.      присутствует опционально
      controls.publicationInfo
   protection           присутствует
     -- bits calculated using MSG_MAC_ALG

Отклик при инициализации — ip

   Поле                 Значение
   sender               имя CA
     -- имя агента CA, создавшего сообщение
   messageTime          присутствует
     -- время создания сообщения агентом CA
   protectionAlg        MS_MAC_ALG
     -- для этого отклика разрешена только MAC-защита
   senderKID            referenceNum
     -- ссылочный номер, который CA ранее эмиттировал для конечного элемента (вместе с ключом
     -- MACing)
   transactionID        присутствует
     -- значение из соответствующего сообщения ir
   senderNonce          присутствует
     -- 128 (псевдо-)случайных битов
   recipNonce           присутствует
     -- значение из senderNonce соответствующего сообщения ir
   freeText             любое допустимое значение
   body                 ip (CertRepMessage)
                        содержит в точности один отклик для каждого запроса

     -- PKI (CA) отвечает на один или два запроса подобающим образом. crc[0] обозначает
     -- первое (присутствует всегда); crc[1] - второе (присутствует лишь в случаях, когда
     -- сообщение ir содержит два запроса и CA поддерживает централизованную генерацию ключей)
   crc[0].              фиксированное значение 0
      certReqId
     -- ДОЛЖНО содержать отклик на первый запрос в соответствующем сообщении ir

   crc[0].status.       присутствует, разрешены позитивные значения
      status               "accepted", "grantedWithMods"
                        и негативное значение "rejection"
   crc[0].status.       присутствует тогда и только тогда, когда 
      failInfo          crc[0].status.status = "rejection"
   crc[0].              присутствует  тогда и только тогда, когда
      certifiedKeyPair  crc[0].status.status имеет значение "accepted" или "grantedWithMods"
   certificate          присутствует, если открытый ключ конечного элемента не является ключом
                        шифрования и POP не выполняется в этом обмене сообщениями
   encryptedCert        присутствует  тогда и только тогда, когда открытый ключ является
                        ключом шифрования и POP осуществляется в этом обмене сообщениями
   publicationInfo      присутствует опционально

     -- показывает, где будет публиковаться сертификат (включается по усмотрению CA)

   crc[1].              фиксированное значение 1
      certReqId
     -- ДОЛЖНО содержать отклик на второй запрос в соответствующем сообщении ir
   crc[1].status.       присутствует, разрешены позитивные значения 
      status               "accepted", "grantedWithMods"
                        и негативное значение "rejection"
   crc[1].status.       присутствует тогда и только тогда, когда
      failInfo          crc[0].status.status = "rejection"
   crc[1].              присутствует  тогда и только тогда, когда
      certifiedKeyPair  crc[0].status.status имеет значение "accepted" или "grantedWithMods"
   certificate          присутствует

   privateKey           присутствует
     -- см. Приложение Приложение C. Разъяснение поведения для запросов
   publicationInfo      присутствует опционально
     -- показывает, где будет публиковаться сертификат (включается по усмотрению CA)

   protection           присутствует
     -- биты, рассчитанные с использованием MSG_MAC_ALG
   extraCerts           присутствует опционально
     -- агент CA МОЖЕТ обеспечить конечному элементу дополнительные сертификаты

Подтверждение сертификата — certConf

   Поле                 Значение
   sender               присутствует
     -- как для сообщений ir
   recipient            имя CA
     -- имя агента CA, у которого запрошен выпуск сертификата
   transactionID        присутствует
     -- значение из соответствующих сообщений ir и ip
   senderNonce          присутствует
     -- 128 (псевдо-)случайных битов
   recipNonce           присутствует
     -- значение из senderNonce соответствующего сообщения ip
   protectionAlg        MSG_MAC_ALG
     -- для этого сообщения разрешена только MAC-защита. Значение MAC создается на базе 
     -- начального ключа идентификации, совместно используемого EE и CA.

   senderKID            referenceNum
     -- ссылочный номер, который CA ранее эмиттировал для конечного элемента (вместе с ключом
     -- MACing)

   body                 certConf
     -- см. параграф 5.3.18. Содержимое подтверждения сертификата, где описано содержимое 
     -- полей certConf. Примечание: две структуры CertStatus требуются в случаях, когда  
     -- передаются оба сертификата (для шифрования и подписи).

   protection           присутствует
     -- биты, рассчитанные с использованием MSG_MAC_ALG

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

   Поле                 Значение
   sender               присутствует
     -- как для сообщений ip
   recipient            присутствует
     -- имя отправителя из certConf
   transactionID        присутствует
     -- значение из сообщения certConf
   senderNonce          присутствует
     -- 128 (псевдо-)случайных битов
   recipNonce           присутствует
     -- значение из поля senderNonce сообщения certConf
   protectionAlg        MSG_MAC_ALG
     -- для этого сообщения разрешена только MAC-защита
   senderKID            referenceNum
   body                 PKIConf
   protection           присутствует
     -- биты, рассчитанные с использованием MSG_MAC_ALG

 

D.5. Запрос сертификата

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

Профиль для этого обмена идентичен профилю, описанному в Приложении D.4 с некоторыми исключениями:

  • следует включать имя отправителя;
  • должно поддерживаться поле protectionAlg в MSG_SIG_ALG (может поддерживаться также MSG_MAC_ALG) для сообщений запроса, отклика certConfirm и PKIConfirm;
  • поля senderKID и recipKID присутствуют только в тех случаях, когда они требуются для верификации сообщения;
  • тело сообщения представляет собой cr или cp;
  • тело сообщения может содержать одну или две структуры CertReqMsg — любая из них может использоваться для запроса сертификации локально сгенерированного открытого ключа или сгенерированного централизованно открытого ключа (т. е., требование по размещению этих структур, приведенное в Приложении D.4, в данном случае снимается);
  • биты защиты рассчитываются в соответствии с полем protectionAlg.

D.6. Запрос обновления ключа

(Инициализированный) конечный элемент запрашивает сертификат у агента CA (для обновления ключевой пары и/или соответствующего сертификата, которым он уже владеет). Когда CA отвечает сообщением, содержащим сертификат, конечный элемент отвечает на это сообщение подтверждением сертификата. CA тогда передает сообщение PKIConfirm для завершения транзакции. Все сообщения заверяются.

Профиль для этого обмена идентичен профилю, описанному в Приложении D.4 с некоторыми исключениями:

  1. следует включать имя отправителя;
  2. должно поддерживаться поле protectionAlg в MSG_SIG_ALG (может поддерживаться также MSG_MAC_ALG) для сообщений запроса, отклика certConfirm и PKIConfirm;
  3. поля senderKID и recipKID присутствуют только в тех случаях, когда они требуются для верификации сообщения;
  4. тело представляет собой kur или kup;
  5. тело сообщения может содержать одну или две структуры CertReqMsg — любая из них может использоваться для запроса сертификации локально сгенерированного открытого ключа или сгенерированного централизованно открытого ключа (т. е., требование по размещению этих структур, приведенное в Приложении D.4, в данном случае снимается);
  6. биты защиты рассчитываются в соответствии с полем protectionAlg;
  7. следует использовать regCtrl OldCertId (пока для отправителя и получателя с помощью не задаваемых этой спецификацией мер не становится очевидной ненужность этого).

Приложение E. Профили управляющих сообщений PKI (опция).

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

Представлены профили сообщений PKIMessage для следующих операций управления PKI:

  • обновление ключа корневого CA;
  • информационный запрос/отклик;
  • запрос/отклик при кросс-сертификации (1-сторонний)
  • инициализация по основному каналу с использованием внешнего сертификата тождественности.

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

  • запрос отзыва;
  • публикация сертификата;
  • публикация CRL.

E.1. Общие правила интерпретации профилей

Идентично Приложению D.1.

E.2. Алгоритм использования профиля

Идентично Приложению D.2.

E.3. Самоподписанные сертификаты

Профиль показывает, как структура Certificate может быть «самоподписана». Такие структуры используются для распространения открытых ключей агентов CA. Процесс может выполняться одним из трех способов (см. параграф 4.4, где дано описание этих структур.

Тип Назначение

newWithNew

Корректный «самоподписанный» сертификат; содержащийся открытый ключ должен быть пригоден для верификации подписи (хотя при этом обеспечивается только проверка целостность и не проверяется идентификация).

oldWithNew

Прежний открытый ключ корневого CA с новым секретным ключом.

newWithOld

Новый открытый ключ корневого CA с прежним секретным ключом.

Такие сертификаты (включая подходящие расширения) должны содержать «разумные» значения для всех полей. Например, поле subjectAltName (при его наличии) должно быть идентично полю issuerAltName, а поле keyIdentifier (при его наличии) должно содержать приемлемое значение и т. п.

E.4. Обновление ключа корневого CA

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

Сообщение ckuann

Поле Значение Комментарий

sender

имя CA имя CA

body

ckuann(CAKeyUpdAnnContent)

oldWithNew

присутствует см. Приложение E.3

newWithOld

присутствует см. Приложение E.3

newWithNew

присутствует см. Приложение E.3

extraCerts

присутствует опционально

может использоваться для «публикации» сертификатов (например, сертификатов, подписанных с использованием нового секретного ключа

E.5. Информационный запрос/отклик PKI

Конечный элемент передает сообщение общего назначения PKI, запрашивая детальную информацию, которая может потребоваться для последующих операций управления PKI. Агент RA/CA дает отклик общего назначения. Если отклик генерирует агент RA, это будет просто пересылка соответствующего сообщения, полученного ранее от CA, с возможным добавлением сертификатов в поля extraCerts сообщения PKIMessage. Подтверждения от конечного элемента не требуется.

Поток сообщений

Этап Конечный элемент

PKI

1

Форматирование genm

2

->

genm

->

3

Обработка genm

4

Создание genp

5

<-

genp

<-

6

Обработка genp

genM

   Поле                Значение
   recipient           имя CA
     -- имя агента CA, как оно указано в расширениях issuerAltName или полях 
     -- issuer сертификатов
   protectionAlg       MSG_MAC_ALG или MSG_SIG_ALG
     -- любой заверенный алгоритм защиты
   SenderKID           присутствует при необходимости
     -- должно присутствовать, если требуется для верификации защиты сообщения
   freeText            любое корректное значение
   body                genr (GenReqContent)
   GenMsgContent       пустая SEQUENCE
     -- вся запрошенная информация, имеющая отношение к делу
   protection           присутствует
     -- биты, рассчитанные с использованием MSG_MAC_ALG или MSG_SIG_ALG

genP

   Поле                 Значение
   sender               имя CA
     -- имя агента CA, создавшего сообщение
   protectionAlg        MSG_MAC_ALG или MSG_SIG_ALG
     -- любой заверенный алгоритм защиты
   senderKID            присутствует при необходимости
     -- должно присутствовать, если требуется для верификации защиты сообщения
   body                 genp (GenRepContent)
   CAProtEncCert        присутствует (идентификатор объекта одного из PROT_ENC_ALG), с  
                        соответствующим значением
     -- будет использоваться, если конечному элементу необходимо зашифровать информацию для 
     -- CA (например, секретный ключ для восстановления)

   SignKeyPairTypes     присутствует с соответствующим значением
     -- набор идентификаторов алгоритмов защиты, которые данный CA будет сертифицировать
     -- для открытых ключей субъекта
   EncKeyPairTypes      присутствует с соответствующим значением
     -- набор алгоритмов шифрования/согласования ключей, которые данный CA будет 
     -- сертифицировать для открытых ключей субъекта
   PreferredSymmAlg     присутствует (идентификатор объекта одного из PROT_ENC_ALG), с  
                        соответствующим значением
     -- симметричный алгоритм, который данный CA предполагает использовать в последующих 
     -- сообщениях PKI (для шифрования)
   CAKeyUpdateInfo      опционально присутствует с соответствующим значением
     -- CA МОЖЕТ предоставлять информацию о соответствующей паре ключей корневого CA
     -- с использованием этого поля (отметим, что это не предполагает того, что отвечающий 
     -- агент CA является корневым CA, о котором идет речь)
   CurrentCRL           опционально присутствует с соответствующим значением
     -- CA МОЖЕТ предоставлять копию полного списка CRL (т. е., максимально заполненную)
   protection           присутствует
     -- биты, рассчитанные с использованием MSG_MAC_ALG или MSG_SIG_ALG
   extraCerts           опционально присутствует
     -- может использоваться для передачи некоторых сертификатов конечному элементу; 
     -- RA МОЖЕТ добавить сюда свой сертификат.

 

E.6. Запрос/отклик кросс-сертификации (односторонний)

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

Предпосылки.

  1. отвечающий CA может проверить источник запроса (возможно, это потребует «автономных» мер) перед обработкой запроса;
  2. отвечающий CA может заверить подлинность источника запроса (возможно, это потребует «автономных» мер) перед обработкой запроса.

Использование подтверждения сертификата и подтверждения соответствующего сервера определяется полем generalInfo в заголовке PKIHeader (параграф 5.1.1). Приведенный профиль не требует каких-либо подтверждений.

Поток сообщений

Этап Запрашивающий CA

Отвечающий CA

1

Форматирование ccr

2

->

ccr

->

3

Обработка ccr

4

Создание ccp

5

<-

ccp

<-

6

Обработка ccp

ccr

   Поле                 Значение
   sender               имя запрашивающего CA
     -- имя агента CA, создавшего сообщение
   recipient            имя отвечающего CA
     -- имя агента CA, у которого запрашивается создание кросс-сертификата
   messageTime          время создания сообщения
     -- текущее время запрашивающего CA
   protectionAlg        MSG_SIG_ALG
     -- для этого запроса допустима только защита цифровой подписью
   senderKID            присутствует при необходимости
     -- должно присутствовать, если требуется верификация защиты сообщения
   recipKID             присутствует при необходимости
     -- должно присутствовать, если требуется верификация защиты сообщения
   transactionID        присутствует
     -- зависящее от реализации значение, понятное запрашивающему CA (если такой идентификатор 
     -- уже используется на отвечающем CA, им ДОЛЖНО генерироваться сообщение об отказе)
   senderNonce          присутствует
     -- 128 (псевдо-)случайных битов
   freeText             любое допустимое значение
   body                 ccr (CertReqMessages)
                        разрешается только одно поле CertReqMsg
     -- если требуется множество кросс-сертификатов, они ДОЛЖНЫ помещаться в отдельные 
     -- сообщения PKIMessage
   certTemplate         присутствует
     -- Детали приведены ниже
   version              v1 или v3
     -- НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ v3
   signingAlg           присутствует
     -- запрашивающий CA должен знать заранее с каким алгоритмом он хочет получить
     -- подпись в сертификате

   subject              присутствует
     -- может принимать значение NULL-DN только при наличии расширения subjectAltNames 
   validity             присутствует
     -- ДОЛЖНО быть задано полностью (т. е., оба поля должны присутствовать)
   issuer               присутствует
     -- может принимать значение NULL-DN только при наличии расширения issuerAltNames 
   publicKey            присутствует
     -- ключ, который будет сертифицирован (должен быть ключом алгоритма подписи)
   extensions           присутствует опционально
     -- запрашивающий CA должен предложить значения для всех расширений, которые требуются 
     -- в кросс-сертификате
   POPOSigningKey       присутствует
     -- см. Приложение D.3. Подтверждение владения профилем
   protection           присутствует
     -- биты, рассчитанные с использованием MSG_SIG_ALG
   extraCerts           присутствует опционально
     -- МОЖЕТ содержать любые дополнительные сертификаты, которые запрашивающая сторона
     -- желает включить

ccp

   Поле                  Значение
   sender                имя отвечающего CA
     -- имя агента CA, создавшего сообщение
   recipient             имя запрашивающего CA
     -- имя агента CA, который запросил выпуск сертификата
   messageTime           время создания сообщения
     -- текущее время отвечающего CA
   protectionAlg         MSG_SIG_ALG
     -- для защиты этого сообщения может использоваться только цифровая подпись
   senderKID             присутствует при необходимости
     -- должно присутствовать, если требуется верификация защиты сообщения
   recipKID              присутствует при необходимости
   transactionID         присутствует
     -- значение из соответствующего сообщения ccr
   senderNonce           присутствует
     -- 128 (псевдо-)случайных битов
   recipNonce            присутствует
   -- senderNonce из соответствующего сообщения ccr
   freeText              любое допустимое значение
   body                  ccp (CertRepMessage)
                         допустимо только одно поле CertResponse
     -- если требуется множество кросс-сертификатов, они ДОЛЖНЫ помещаться в отдельные 
     -- сообщения PKIMessage
   response              присутствует
   status                присутствует

   PKIStatusInfo.status  присутствует
     -- если PKIStatusInfo.status имеет значение accepted или grantedWithMods, поле
     -- certifiedKeyPair ДОЛЖНО присутствовать, а failInfo ДОЛЖНО отсутствовать

   failInfo              присутствует в зависимости от PKIStatusInfo.status
     -- если PKIStatusInfo.status = rejection, поле certifiedKeyPair ДОЛЖНО отсутствовать, 
     -- а failInfo ДОЛЖНО присутствовать и содержать подходящие установки битов

   certifiedKeyPair      присутствует в зависимости от PKIStatusInfo.status
   certificate           присутствует в зависимости от  certifiedKeyPair

     -- содержимое актуального сертификата должно проверяться запрашивающим CA до публикации
   protection            присутствует
     -- биты, рассчитанные с использованием MSG_SIG_ALG
   extraCerts            присутствует опционально
     -- МОЖЕТ содержать любые дополнительные сертификаты, которые отвечающая сторона
     -- желает включить

 

E.7. Инициализация по основному каналу с использованием внешнего сертификата тождественности

(Неинициализированный) конечный элемент желает инициализировать себя в PKI с использованием агента CA-1. Он использует для заверения существующий сертификат, эмиттированный агентом CA-X. Между CA-1 и CA-X уже должны быть установлены доверительные отношения, поэтому CA-1 может подтвердить сертификат тождественности EE, подписанный агентом CA-X. Кроме того, требуется организация неких механизмов в среде персональной защиты (PSE38) элемента EE, позволяющие заверить и проверить сообщения PKIMessage, подписанные CA-1 (например, PSE может включать сертификат, выпущенный для открытого ключа CA-1, подписанный другим CA, которому EE доверяет на основе автономных механизмов заверения).

EE передает инициализационный запрос для начала транзакции. Когда CA-1 ответит сообщением, содержащим новый сертификат, конечный элемент ответит на это сообщение подтверждением сертификата. CA-1 ответит сообщением PKIConfirm для завершения транзакции. Все сообщения подписываются (сообщения EE подписываются с использованием секретного ключа, который соответствует открытому ключу внешнего сертификата тождественности; сообщения CA-1 подписываются с использованием секретного ключа, соответствующего открытому ключу в сертификате, который связан с доверенной привязкой в среде PSE конечного элемента).

Профиль для этого обмена идентичен профилю, описанному в приложении D.4, с некоторыми исключениями:

  • EE и CA-1 не имеют разделяемого симметричного ключа MACing (т. е., здесь не организуется разделяемая с помощью автономных мер между элементами секретная информация);
  • имя отправителя в ir должно присутствовать (и совпадать с именем субъекта во внешнем сертификате тождественности);
  • поле protectionAlg MSG_SIG_ALG должно использоваться во всех сообщениях;
  • внешний сертификат тождественности должен передаваться в поле extraCerts сообщения ir;
  • senderKID и recipKID не используются;
  • телом сообщения является ir или ip;
  • биты защиты рассчитываются в соответствии с полем protectionAlg.

Приложение F. Компилируемые определения ASN.1

PKIXCMP {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) 
           pkix(7) id-mod(0) id-mod-cmp2000(16)}

     DEFINITIONS EXPLICIT TAGS ::=

     BEGIN
     -- Экспортировать все --
     IMPORTS
         Certificate, CertificateList, Extensions, AlgorithmIdentifier,
         UTF8String -- если требуется; в противном случае «закомментировать»
                FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6) internet(1)
                security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit-88(1)}

         GeneralName, KeyIdentifier
                FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1) 
                security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)}

         CertTemplate, PKIPublicationInfo, EncryptedValue, CertId, CertReqMessages
                FROM PKIXCRMF-2005 {iso(1) identified-organization(3) dod(6) internet(1)
                security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-crmf2005(36)}

         -- см. также характеристики поведения CRMF в Приложении C к данной спецификации

         CertificationRequest
                FROM PKCS-10 {iso(1) member-body(2) us(840) rsadsi(113549)
                              pkcs(1) pkcs-10(10) modules(1) pkcs-10(1)}

         -- (задано в RFC 2986 с синтаксисом 1993 ASN.1 и ЯВНЫМИ тегами); в дополнение к этому
         -- разработчики могут напрямую включить в этот модуль синтаксис [PKCS10]
         ;

   -- остальная часть модуля содержит локально определяемые идентификаторы OID и конструкции

      CMPCertificate ::= CHOICE {
         x509v3PKCert        Certificate
      }
   -- Этот синтаксис, будучи совместимым на уровне битового представления сигналов в проводе, 
   -- с определением Certificate в стандарте X.509, обеспечивает возможность введения новых
   -- типов сертификатов (таких, как сертификаты атрибутов X.509, сертификаты WAP WTLS и др.) 
   -- в рамках данного протокола управления сертификатами, не требуя ничего для поддержки
   -- такой общности. Реализации, которые не видят необходимости поддерживать сертификаты 
   -- других типов, МОГУТ, при желании, «закомментировать» приведенную выше структуру и 
   -- «раскомментировать» приведенную ниже структуру до компиляции модуля ASN.1 (отметим, 
   -- что это не оказывает влияния на взаимодействие с реализациями, не делающими так)

   -- CMPCertificate ::= Certificate

      PKIMessage ::= SEQUENCE {
         header           PKIHeader,
         body             PKIBody,
         protection   [0] PKIProtection OPTIONAL,
         extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate    OPTIONAL
     }

     PKIMessages ::= SEQUENCE SIZE (1..MAX) OF PKIMessage

     PKIHeader ::= SEQUENCE {
         pvno                INTEGER     { cmp1999(1), cmp2000(2) },
         sender              GeneralName,
         -- идентифицирует отправителя
         recipient           GeneralName,
         -- идентифицирует адресата
         messageTime     [0] GeneralizedTime         OPTIONAL,
         -- время создания сообщения (используется, когда отправитель предполагает, что
         -- транспорт будет «подходящим» (т. е., значение будет иметь смысл и при получении)
         protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
         -- алгоритм, используемый для расчета битов защиты
         senderKID       [2] KeyIdentifier           OPTIONAL,
         recipKID        [3] KeyIdentifier           OPTIONAL,
         -- идентификация конкретных ключей, используемых для защиты
         transactionID   [4] OCTET STRING            OPTIONAL,
         -- идентифицирует транзакцию (т. е., будет совпадать в соответствующих сообщениях 
         -- запроса, отклика, certConf и PKIConf
         senderNonce     [5] OCTET STRING            OPTIONAL,
         recipNonce      [6] OCTET STRING            OPTIONAL,
         -- временные маркеры, служащие для защиты от повторного использования; значение 
         -- senderNonce помещается создателем сообщения, а recipNonce является маркером,
         -- ранее помещенным в соответствующее сообщение адресатом данного сообщения
         freeText        [7] PKIFreeText             OPTIONAL,
         -- может использоваться для передачи контекстно-зависимых инструкций
         -- (предназначено для чтения людьми)
         generalInfo     [8] SEQUENCE SIZE (1..MAX) OF InfoTypeAndValue     OPTIONAL
         -- может использоваться для передачи контекстно-зависимой информации
         -- (предназначено для чтения людьми)
     }

     PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
         -- текст представляется в форме UTF-8 String [RFC3629] (каждая строка UTF8String
         -- МОЖЕТ включать язык тегов [RFC3066] для индикации языка содержащегося в
         -- поле текста; подробное описание содержится в [RFC2482])

     PKIBody ::= CHOICE {       -- специфичные для сообщения элементы тела сообщения
         ir       [0]  CertReqMessages,        --Запрос инициализации
         ip       [1]  CertRepMessage,         --Отклик при инициализации
         cr       [2]  CertReqMessages,        --Запрос сертификации
         cp       [3]  CertRepMessage,         --Отклик при сертификации
         p10cr    [4]  CertificationRequest,   --импортировано из [PKCS10]
         popdecc  [5]  POPODecKeyChallContent, --Вызов pop
         popdecr  [6]  POPODecKeyRespContent,  --Отклик при pop
         kur      [7]  CertReqMessages,        --Запрос на обновление ключа
         kup      [8]  CertRepMessage,         --Отклик при обновлении ключа
         krr      [9]  CertReqMessages,        --Запрос на восстановление ключа
         krp      [10] KeyRecRepContent,       --Отклик при восстановлении ключа
         rr       [11] RevReqContent,          --Запрос на отзыв
         rp       [12] RevRepContent,          --Отклик при отзыве
         ccr      [13] CertReqMessages,        --Запрос кросс-сертификации
         ccp      [14] CertRepMessage,         --Отклик при кросс-сертификации
         ckuann   [15] CAKeyUpdAnnContent,     --Анонс обновления ключа CA
         cann     [16] CertAnnContent,         --Анонс сертификата
         rann     [17] RevAnnContent,          --Анонс отзыва
         crlann   [18] CRLAnnContent,          --Анонс CRL
         pkiconf  [19] PKIConfirmContent,      --Подтверждение
         nested   [20] NestedMessageContent,   --Вложенное сообщение
         genm     [21] GenMsgContent,          --Сообщение общего назначения
         genp     [22] GenRepContent,          --Отклик общего назначения
         error    [23] ErrorMsgContent,        --Сообщение об ошибке
         certConf [24] CertConfirmContent,     --Подтверждение сертификата
         pollReq  [25] PollReqContent,         --Запрос опроса
         pollRep  [26] PollRepContent          --Отклик при опросе
     }

     PKIProtection ::= BIT STRING

     ProtectedPart ::= SEQUENCE {
         header    PKIHeader,
         body      PKIBody
     }

     id-PasswordBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 13}
     PBMParameter ::= SEQUENCE {
         salt                OCTET STRING,
         -- Примечание: реализация МОЖЕТ ограничивать допустимый размер строки для снижения 
         -- риска атак на службы
         owf                 AlgorithmIdentifier,
         -- AlgId для необратимой функции (рекомендуется SHA-1)
         iterationCount      INTEGER,
         -- число итераций OWF
         -- Примечание: реализация МОЖЕТ ограничивать допустимый размер строки для снижения 
         -- риска атак на службы
         mac                 AlgorithmIdentifier
         -- MAC AlgId (например, DES-MAC, Triple-DES-MAC [PKCS11] или HMAC [RFC2104, RFC2202])
     }   

     id-DHBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 30}
     DHBMParameter ::= SEQUENCE {
         owf                 AlgorithmIdentifier,
         -- для необратимой функции (рекомендуется SHA-1)
         mac                 AlgorithmIdentifier
         -- MAC AlgId (например, DES-MAC, Triple-DES-MAC [PKCS11] или HMAC [RFC2104, RFC2202])
     }   

     NestedMessageContent ::= PKIMessages

     PKIStatus ::= INTEGER {
         accepted               (0),
         -- получено именно то, что запрашивалось
         grantedWithMods        (1),
         -- получено что-то похожее на запрошенную информацию; запрашивающая сторона 
         -- принимает на себя ответственность за нахождение различий
         rejection              (2),
         -- не получено, дополнительная информация в сообщении
         waiting                (3),
         -- тело запроса еще не обработано, отклик будет позднее (примечание: при корректной
         -- обработке такого отклика МОГУТ использоваться опросные сообщения «запрос-отклик», 
         -- описанные в параграфе 5.3.22; другим вариантом является опрос нижележащего 
         -- транспортного уровня, который МОЖЕТ оказаться полезным)
         revocationWarning      (4),
         -- сообщение содержит предупреждение о неминуемости отзыва
         revocationNotification (5),
         -- уведомление о произошедшем отзыве
         keyUpdateWarning       (6)
         -- обновление уже выполнено для oldCertId, заданного в CertReqMsg
     }

     PKIFailureInfo ::= BIT STRING {
     -- Поскольку возможно множество причин отказов, в будущем могут быть добавлены новые коды
         badAlg              (0),
         -- нераспознанный или неподдерживаемый идентификатор алгоритма
         badMessageCheck     (1),
         -- отказ при проверке целостности (например, подпись не соответствует)
         badRequest          (2),
         -- транзакция не разрешена или не поддерживается
         badTime             (3),
         -- значение messageTime отличается от системного времени более, чем позволяет 
         -- локальная политика
         badCertId           (4),
         -- не найдено сертификата, соответствующего представленным критериям
         badDataFormat       (5),
         -- данные представлены в некорректном формате
         wrongAuthority      (6),
         -- агентство, указанное в запросе отличается от создавшего маркер отклика
         incorrectData       (7),
         -- данные запрашивающей стороны некорректны (для нотариальных услуг)
         missingTimeStamp    (8),
         -- временная метка отсутствует, но требуется (политикой)
         badPOP              (9),
         -- отказ при проверке pop
         certRevoked         (10),
            -- сертификат уже отозван
         certConfirmed       (11),
            -- сертификат уже подтвержден
         wrongIntegrity      (12),
            -- некорректный контроль целостности — на базе пароля взамен подписи или наоборот           
         badRecipientNonce   (13),
            -- некорректный временный маркер получателя (значение отсутствует или некорректно)          
         timeNotAvailable    (14),
            -- данные о времени TSA недоступны
         unacceptedPolicy    (15),
            -- запрошенная политика TSA не поддерживается TSA
         unacceptedExtension (16),
            -- запрошенное расширение не поддерживается TSA
         addInfoNotAvailable (17),
            -- запрошенная дополнительная информация непонятна или недоступна
         badSenderNonce      (18),
            -- некорректный временный маркер отправителя (значение отсутствует или некорректно)
         badCertTemplate     (19),
            -- некорректный шаблон сертификата или отсутствует обязательная информация
         signerNotTrusted    (20),
            -- подписавшая сторона неизвестна или не пользуется доверием
         transactionIdInUse  (21),
            -- идентификатор транзакции уже используется
         unsupportedVersion  (22),
            -- версия сообщения не поддерживается
         notAuthorized       (23),
            -- отправитель не уполномочен выполнять предшествующий запрос или действие
         systemUnavail       (24),
         -- запрос не может быть обработан по причине системной недоступности
         systemFailure       (25),
         -- запрос не может быть обработан по причине системно отказа
         duplicateCertReq    (26)
         -- сертификат не может быть выпущен, поскольку уже существует дубликат сертификата
     }

     PKIStatusInfo ::= SEQUENCE {
         status        PKIStatus,
         statusString  PKIFreeText     OPTIONAL,
         failInfo      PKIFailureInfo  OPTIONAL
     }

     OOBCert ::= CMPCertificate

     OOBCertHash ::= SEQUENCE {
         hashAlg     [0] AlgorithmIdentifier     OPTIONAL,
         certId      [1] CertId                  OPTIONAL,
         hashVal         BIT STRING
         -- hashVal рассчитывается для DER-представления самоподписанного сертификата с
         -- идентификатором certID.
     }

     POPODecKeyChallContent ::= SEQUENCE OF Challenge
     -- Используется один запрос Challenge на запрос сертификации ключа шифрования (в том же 
     -- порядке, как эти запросы указаны в сообщениях CertReqMessage).

     Challenge ::= SEQUENCE {
         owf                 AlgorithmIdentifier  OPTIONAL,
         -- ДОЛЖНО присутствовать в первом Challenge; МОЖЕТ быть опущено в последующих 
         -- Challenge в POPODecKeyChallContent (если опущено, будет использоваться owf из 
         -- непосредственно предшествующего Challenge).

         witness             OCTET STRING,
         -- результат применения необратимой функции (owf) к случайному числу INTEGER, A.  
         -- (отметим, что для каждого Challenge ДОЛЖНЫ использоваться разные значения INTEGER)
         challenge           OCTET STRING
         -- зашифрованное (с использованием открытого ключа, для которого запрашивается
         -- сертификат) значение Rand, где Rand задано, как показано ниже
         --   Rand ::= SEQUENCE {
         --      int      INTEGER,
         --       - случайное значение INTEGER A (см. выше)
         --      sender   GeneralName
         --       - имя отправителя (как в заголовке PKIHeader)
         --   }
     }

     POPODecKeyRespContent ::= SEQUENCE OF INTEGER
     -- Одно значение INTEGER на запрос сертификации ключа шифрования (в том же порядке, 
     -- который используется в сообщениях CertReqMessage). Восстановленное значение INTEGER A 
     -- (см. выше) возвращается отправителю соответствующего Challenge.

     CertRepMessage ::= SEQUENCE {
         caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate    OPTIONAL,
         response         SEQUENCE OF CertResponse
     }

     CertResponse ::= SEQUENCE {
         certReqId           INTEGER,
         -- для сопоставления этого отклика с соответствующим запросом (значение -1 
         -- используется в том случае, когда значение certReqId не задано в запросе)

         status              PKIStatusInfo,
         certifiedKeyPair    CertifiedKeyPair    OPTIONAL,
         rspInfo             OCTET STRING        OPTIONAL
         -- аналогично строке id-regInfo-utf8Pairs, определенной для regInfo в CertReqMsg 
         -- [CRMF]
     }

     CertifiedKeyPair ::= SEQUENCE {
         certOrEncCert       CertOrEncCert,
         privateKey      [0] EncryptedValue      OPTIONAL,
         -- см. комментарии по представлению в [CRMF]
         publicationInfo [1] PKIPublicationInfo  OPTIONAL
     }

     CertOrEncCert ::= CHOICE {
         certificate     [0] CMPCertificate,
         encryptedCert   [1] EncryptedValue
     }

     KeyRecRepContent ::= SEQUENCE {
         status                  PKIStatusInfo,
         newSigCert          [0] CMPCertificate OPTIONAL,
         caCerts             [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate OPTIONAL,
         keyPairHist         [2] SEQUENCE SIZE (1..MAX) OF CertifiedKeyPair OPTIONAL
     }

     RevReqContent ::= SEQUENCE OF RevDetails

     RevDetails ::= SEQUENCE {
         certDetails         CertTemplate,
         -- позволяет запрашивающему подробно описать сертификат, для которого запрашивается 
         -- отзыв (например, для случаев, когда значение serialNumber недоступно)
         crlEntryDetails     Extensions       OPTIONAL
         -- запрошенные расширения crlEntryExtensions
     }

     RevRepContent ::= SEQUENCE {
         status       SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
         -- в том же порядке, как передано в RevReqContent
         revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId    OPTIONAL,
         -- значения ID для каждого запрошенного отзыва (в том же порядке, как статус)
         crls     [1] SEQUENCE SIZE (1..MAX) OF CertificateList    OPTIONAL
         -- результирующие списки CRL (может быть несколько)
     }

     CAKeyUpdAnnContent ::= SEQUENCE {
         oldWithNew   CMPCertificate, -- старый открытый ключ, подписанный новым секретным
         newWithOld   CMPCertificate, -- новый открытый ключ, подписанный старым секретным
         newWithNew   CMPCertificate  -- новый открытый ключ, подписанный новым секретным
     }

     CertAnnContent ::= CMPCertificate

     RevAnnContent ::= SEQUENCE {
         status              PKIStatus,
         certId              CertId,
         willBeRevokedAt     GeneralizedTime,
         badSinceDate        GeneralizedTime,
         crlDetails          Extensions  OPTIONAL
         -- дополнительные детали CRL (например, номер, причина, местоположение и т. п.)
     }

     CRLAnnContent ::= SEQUENCE OF CertificateList

     CertConfirmContent ::= SEQUENCE OF CertStatus

     CertStatus ::= SEQUENCE {
        certHash    OCTET STRING,
        -- хэш-сумма для сертификата, вычисленная с использованием того же алгоритма, 
        -- который применяется для создания и проверки сертификата подписи
        certReqId   INTEGER,
        -- для сопоставления данного подтверждения с соответствующим «запросом-откликом»
        statusInfo  PKIStatusInfo OPTIONAL
     }

     PKIConfirmContent ::= NULL

     InfoTypeAndValue ::= SEQUENCE {
         infoType               OBJECT IDENTIFIER,
         infoValue              ANY DEFINED BY infoType  OPTIONAL
     }
     -- Пример содержимого InfoTypeAndValue включает, но не ограничивается приведенным ниже
     -- («раскомментируйте» в этом модуле ASN.1 и используйте подходящее для вашей среды:
     --
     --   id-it-caProtEncCert    OBJECT IDENTIFIER ::= {id-it 1}
     --      CAProtEncCertValue      ::= CMPCertificate
     --   id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2}
     --      SignKeyPairTypesValue   ::= SEQUENCE OF AlgorithmIdentifier
     --   id-it-encKeyPairTypes  OBJECT IDENTIFIER ::= {id-it 3}
     --      EncKeyPairTypesValue    ::= SEQUENCE OF AlgorithmIdentifier
     --   id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4}
     --      PreferredSymmAlgValue   ::= AlgorithmIdentifier
     --   id-it-caKeyUpdateInfo  OBJECT IDENTIFIER ::= {id-it 5}
     --      CAKeyUpdateInfoValue    ::= CAKeyUpdAnnContent
     --   id-it-currentCRL       OBJECT IDENTIFIER ::= {id-it 6}
     --      CurrentCRLValue         ::= CertificateList
     --   id-it-unsupportedOIDs  OBJECT IDENTIFIER ::= {id-it 7}
     --      UnsupportedOIDsValue    ::= SEQUENCE OF OBJECT IDENTIFIER
     --   id-it-keyPairParamReq  OBJECT IDENTIFIER ::= {id-it 10}
     --      KeyPairParamReqValue    ::= OBJECT IDENTIFIER
     --   id-it-keyPairParamRep  OBJECT IDENTIFIER ::= {id-it 11}
     --      KeyPairParamRepValue    ::= AlgorithmIdentifer
     --   id-it-revPassphrase    OBJECT IDENTIFIER ::= {id-it 12}
     --      RevPassphraseValue      ::= EncryptedValue
     --   id-it-implicitConfirm  OBJECT IDENTIFIER ::= {id-it 13}
     --      ImplicitConfirmValue    ::= NULL
     --   id-it-confirmWaitTime  OBJECT IDENTIFIER ::= {id-it 14}
     --      ConfirmWaitTimeValue    ::= GeneralizedTime
     --   id-it-origPKIMessage   OBJECT IDENTIFIER ::= {id-it 15}
     --      OrigPKIMessageValue     ::= PKIMessages
     --   id-it-suppLangTags     OBJECT IDENTIFIER ::= {id-it 16}
     --      SuppLangTagsValue       ::= SEQUENCE OF UTF8String
     --
     -- где
     --   id-pkix OBJECT IDENTIFIER ::= {
     --      iso(1) identified-organization(3)
     --      dod(6) internet(1) security(5) mechanisms(5) pkix(7)}
     -- и
     --   id-it   OBJECT IDENTIFIER ::= {id-pkix 4}
     --
     -- Эта конструкция МОЖЕТ использоваться также для определения новых запросов и откликов  
     -- PKIX CMP или сообщения общего назначения (например, анонсов) в соответствии с 
     -- будущими потребностями конкретных сред.

     GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
     -- Может передаваться элементом EE, RA или CA (в зависимости от содержимого). 
     -- ОПЦИОНАЛЬНЫЙ параметр infoValue в InfoTypeAndValue обычно был опущен в приведенных
     -- выше примерах. Получатель волен игнорировать все включенные идентификаторы объектов,
     -- которые он не распознал. При передаче от EE к CA пустой набор показывает, что CA 
     -- может передать любую (всю) информацию, которую он захочет.

     GenRepContent ::= SEQUENCE OF InfoTypeAndValue
     -- Получатель МОЖЕТ игнорировать все нераспознанные значения OID.

     ErrorMsgContent ::= SEQUENCE {
         pKIStatusInfo          PKIStatusInfo,
         errorCode              INTEGER           OPTIONAL,
         -- определяемые реализацией коды ошибок
         errorDetails           PKIFreeText       OPTIONAL
         -- определяемая реализацией информация об ошибке
     }

     PollReqContent ::= SEQUENCE OF SEQUENCE {
         certReqId              INTEGER
     }

     PollRepContent ::= SEQUENCE OF SEQUENCE {
         certReqId              INTEGER,
         checkAfter             INTEGER,  -- время в секундах
         reason                 PKIFreeText OPTIONAL
     }

     END — завершение модуля CMP

Приложение G. Благодарности

Авторы с благодарностью отмечают вклад членов рабочей группы IETF PKIX и почтовой конференции ICSA CA-talk (созданной для обсуждения вопросов взаимодействия CMP). Усилия этих людей позволили уточнить и сделать более удобной данную спецификацию. Tomi Kause благодарит Vesa Suontama и Toni Tammisalo за их обзор и комментарии.

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

Carlisle Adams

University of Ottawa

800 King Edward Avenue

P.O.Box 450, Station A

Ottawa, Ontario K1N 6N5

CA

Phone: (613) 562-5800 ext. 2345

Fax: (613) 562-5664

EMail: cadams@site.uottawa.ca

Stephen Farrell

Trinity College Dublin

Distributed Systems Group

Computer Science Department

Dublin

IE

Phone: +353-1-608-2945

EMail: stephen.farrell@cs.tcd.ie

Tomi Kause

SSH Communications Security Corp

Valimotie 17

Helsinki 00380

FI

Phone: +358 20 500 7415

EMail: toka@ssh.com

Tero Mononen

SafeNet, Inc.

Fredrikinkatu 47

Helsinki 00100

FI

Phone: +358 20 500 7814

EMail: tmononen@safenet-inc.com


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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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.


1Certificate Management Protocol.

2Public Key Infrastructure.

3Certification Authority.

4Certificate Management Protocol.

5Public Key Infrastructure.

6End entity.

7Personal Security Environment.

8Root CA.

9Subordinate CA.

10Registration Authority.

11Certificate Revocation List.

12Denial-of-service attack.

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

14Certificate Management Protocol — протокол управления сертификатами.

15Key chain file.

16Рассмотрение таких протоколов выходит за пределы данной спецификации.

17Initial Authentication Key.

18Proof-of-Possession.

19Distinguished Name.

20Diffie-Hellman.

21Replay attack — атака с повторным использованием переданных ранее сообщений.

22Message Authentication Code.

23Challenge-response.

24Прямой метод обычно используется в средах, где агент RA верифицирует POP и после этого запрашивает сертификат у CA от имени конечного элемента. В таком сценарии CA доверяет RA в плане корректности проверки POP перед запросом агентом RA сертификата для конечного элемента.

25Key agreement key — ключ согласования ключей.

26Текст исходного документа не позволяет однозначно определить, в каком месте заменяется текст. Прим. перев.

27Signing key.

28Encryption key.

29Cross-certification request.

30Cross-certification response.

31Certification request — запрос сертификации.

32Key update request — запрос на обновление ключей.

33Key update response — отклик на запрос обновления ключей.

34Этот стандарт на русском языке доступен по ссылке. Прим. перев.

36Идентификатор политики.

37Заявление о практике сертификации.

38Personal Security Environment.

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

RFC 4188 Definitions of Managed Objects for Bridges

Network Working Group                                    K. Norseth, Ed.
Request for Comments: 4188                            L-3 Communications
Obsoletes: 1493                                             E. Bell, Ed.
Category: Standards Track                            3Com Europe Limited
                                                          September 2005

Определения управляемых объектов для мостов

Definitions of Managed Objects for Bridges

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

Документ определяет часть MIB1 для использования с протоколами сетевого управления в сетях TCP/IP. В частности, определены объекты для управления мостами MAC на основе стандарта IEEE 802.1D-1998 между сегментами локальных сетей (ЛВС или LAN). Обеспечивается поддержка прозрачных мостов, а также применимость этих объектов к мостам, соединенным подсетями, которые на являются сегментами ЛВС.

Модуль MIB, представленный в этом документе, является трансляцией в синтаксис SMIv2 модуля BRIDGE-MIB, определенного в RFC 1493.

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

1. Стандартная схема управления Internet

Подробный обзор документов, описывающих стандартную схему управления Internet приведен в разделе 7 RFC 3410 [RFC3410].

Доступ к объектам управления осуществляется через виртуальное хранилище, называемое MIB. Для работы с объектами MIB обычно используется простой протокол сетевого управления (SNMP2). Объекты MIB определяются с использованием механизмов, описанных в SMI3. Этот документ задает модуль MIB, соответствующий спецификации SMIv2, которая описана в STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] и STD 58, RFC 2580 [RFC2580].

2. Уровни требований

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

3. Обзор

Базовым устройством многих сетей является мост (Bridge). Такие устройства используются для соединения ЛВС ниже сетевого уровня и часто их называют коммутаторами уровня 2 (layer 2 switch).

Для этих мостов существует два основных режима — transparent (прозрачный) и source route (маршрут, заданный отправителем). Режим прозрачного моста определен в спецификации IEEE 802.1D [IEEE8021D]. Этот документ определяет объекты, требуемые для управления мостом, работающим в прозрачном режиме, а также некоторые объекты для управления всеми типами мостов.

Для совместимости с директивами IAB и имеющимся инженерным опытом была предпринята явная попытка максимально упростить этот модуль MIB. Это достигнуто путем применения к объектам приведенных ниже требований.

  1. Начинать с небольшого набора объектов и дополнять его лишь по необходимости.

  2. Каждый объект должен быть важен для настройки или контроля отказов.

  3. Учет текущего использования и полезности.

  4. Ограничение общего числа объектов.

  5. Исключение объектов, которые выводятся из других объектов этого или других модулей MIB.

  6. Сокращение числа критических сессий. Рекомендуется использовать один счетчик на критическую секцию уровня.

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

Объекты в этом модуле MIB организованы в субдеревья, каждое из которых является набором связанных объектов. Общая структура и распределение объектов по субдеревьям показаны ниже. В тех случаях, когда это возможно, указаны также соответствующие объекты управления IEEE 802.1D [IEEE8021D].

Имя в Bridge MIB

Имя в IEEE 802.1D

dot1dBridge
  dot1dBase

    BridgeAddress
Bridge.BridgeAddress
    NumPorts
Bridge.NumberOfPorts
    Type
    PortTable

      Port                       
      IfIndex
      Circuit
BridgePort.PortNumber
      DelayExceededDiscards
  .DiscardTransitDelay
      MtuExceededDiscards
  .DiscardOnError
  dot1dStp
    ProtocolSpecification

    Priority
SpanningTreeProtocol
  .BridgePriority
    TimeSinceTopologyChange
  .TimeSinceTopologyChange
    TopChanges
  .TopologyChangeCount
    DesignatedRoot
  .DesignatedRoot
    RootCost
  .RootCost
    RootPort
  .RootPort
    MaxAge
  .MaxAge
    HelloTime
  .HelloTime
    HoldTime
  .HoldTime
    ForwardDelay
  .ForwardDelay
    BridgeMaxAge
  .BridgeMaxAge
    BridgeHelloTime
  .BridgeHelloTime
    BridgeForwardDelay
  .BridgeForwardDelay
    PortTable

      Port
SpanningTreeProtocolPort
  .PortNumber
      Priority
  .PortPriority
      State                         
      Enable
  .SpanningTreeState
      PathCost
  .PortPathCost
      DesignatedRoot
  .DesignatedRoot
      DesignatedCost
  .DesignatedCost
      DesignatedBridge
  .DesignatedBridge
      DesignatedPort                
      ForwardTransitions
  .DesignatedPort
  dot1dTp

    LearnedEntryDiscards
BridgeFilter.DatabaseSize
  .NumDynamic,NumStatic
    AgingTime                     
    FdbTable
      Address
      Port
      Status
    PortTable
      Port
      MaxInfo
BridgeFilter.AgingTime
      InFrames
BridgePort.FramesReceived
      OutFrames
  .ForwardOutbound
      InDiscards                    
  dot1dStatic
    StaticTable
      Address
      ReceivePort
      AllowedToGoTo
      Status
  .DiscardInbound

Ниже перечислены объекты управления IEEE 802.1D, которые не были включены в BRIDGE-MIB, в указанием причин.

Объект IEEE 802.1D

Причина исключения

Bridge.BridgeName

Совпадает с sysDescr (SNMPv2-MIB).

Bridge.BridgeUpTime

Совпадает с sysUpTime (SNMPv2-MIB).

Bridge.PortAddresses

Совпадает с ifPhysAddress (IF-MIB).

BridgePort.PortName

Совпадает с ifDescr (IF-MIB).

BridgePort.PortType

Совпадает с ifType (IF-MIB).

BridgePort.RoutingType

Выводится из реализованных субдеревьев.

SpanningTreeProtocol

.BridgeIdentifier

Комбинация dot1dStpPriority и dot1dBaseBridgeAddress.

.TopologyChange

Не считается полезным по причине временного характера.

SpanningTreeProtocolPort

.Uptime

Совпадает с ifLastChange (IF-MIB).

.PortIdentifier

Комбинация dot1dStpPort и dot1dStpPortPriority.

.TopologyChangeAcknowledged

Не считается полезным по причине временного характера.

.DiscardLackOfBuffers

Избыточно.

Приоритет передачи

.TransmissionPriorityName

Эти объекты не требуются в соответствии с Pics Proforma и не считаются полезными.

.OutboundUserPriority

.OutboundAccessPriority

3.1.1 Субдерево dot1dBase

Это субдерево содержит объекты, применимые для всех типов мостов.

3.1.2 Субдерево dot1dStp

Это субдерево содержит объекты, которые указывают состояние моста применительно к протоколу STP4. Если узел не поддерживает протокол STP, это субдерево не реализуется.

3.1.3 Субдерево dot1dSr

Это субдерево содержит объекты, которые описывают состояние элемента применительно к мосту source route. Это субдерево описано в RFC 1525 [RFC1525] и применимо только к мостам source route.

3.1.4 Субдерево dot1dTp

Это субдерево содержит объекты, которые описывают состояние элемента применительно к прозрачному мосту. Если прозрачный мост не поддерживается, это субдерево не реализуется. Субдерево применимо лишь к прозрачным и мостам и мостам SRT.

3.1.5 Субдерево dot1dStatic

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

3.2 Связи с другими модулями MIB

Как описано выше, некоторые объекты управления IEEE 802.1D не включены в данный модуль MIB, поскольку они перекрываются с другими объектами MIB, которые применимы к мостам, реализующим этот модуль MIB.

3.2.1 Связь с SNMPv2-MIB

Модуль SNMPv2-MIB [RFC3418] определяет объекты, которые в общем случае применимы к управляемым устройствам. Эти объекты применимы к устройству в целом, независимо от того, выполняет ли устройство только функции моста или эти функции являются лишь частью выполняемых устройством задач.

Как разъяснено в параграфе 3.1, полная поддержка управляемых объектов 802.1D требует реализации объектов SNMPv2-MIB sysDescr и sysUpTime. Отметим, что для совместимости с текущим модулем SNMPv2-MIB требуется реализация дополнительных объектов и уведомлений, как указано в RFC 3418 [RFC3418].

3.2.2 Связь с IF-MIB

Модуль IF-MIB [RFC2863] определяет объекты для управления сетевыми интерфейсами. Сетевой интерфейс рассматривается как подключенный к «подсети» (subnetwork). Отметим, что термин «подсеть» в данном случае имеет иное значение, нежели подсеть в смысле схем адресации, используемых в стеке протоколов IP. В этом документе для таких подсетей используется термин «сегмент», независимо от того, является подсеть сегментом Ethernet, кольцом, каналом WAN или виртуальным устройством X.25.

Как разъяснено в параграфе 3.1, полная поддержка управляемых объектов 802.1D требует реализации объектов IF-MIB ifIndex, ifType, ifDescr, ifPhysAddress и ifLastChange. Отметим, что для совместимости с текущим модулем IF-MIB требуется реализация дополнительных объектов и уведомлений, как указано в RFC 2863 [RFC2863].

Неявным в этом модуле BRIDGE-MIB является обозначение портов моста. Каждый порт связывается с одним из интерфейсов в субдереве interfaces и в большинстве случаев каждый порт связан со своим интерфейсом. Однако в некоторых случаях с одним интерфейсом может быть связано множество портов. Примером может служить ситуация, когда несколько портов, связанных взаимно-однозначно с виртуальными устройствами X.25, относятся к одному интерфейсу.

Каждый порт однозначно указывается номером, который не обязательно связан с номером интерфейса, но в простом случае номер порта совпадает с номером соответствующего интерфейса. Номера портов лежат в диапазоне (1..dot1dBaseNumPorts).

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

Таким образом, BRIDGE-MIB (и, в частности, счетчики модуля) применимы лишь к подмножеству данных на интерфейсах устройства, которые принимаются или передаются с использованием функций моста. Все такие данные принимаются и передаются через порты моста.

4. Определения

   BRIDGE-MIB DEFINITIONS ::= BEGIN

   -- ---------------------------------------------------------- --
   -- MIB для устройств IEEE 802.1D 
   -- ---------------------------------------------------------- --
   IMPORTS
       MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
       Counter32, Integer32, TimeTicks, mib-2
           FROM SNMPv2-SMI
       TEXTUAL-CONVENTION, MacAddress
           FROM SNMPv2-TC
       MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
           FROM SNMPv2-CONF
       InterfaceIndex FROM IF-MIB
       ;

   dot1dBridge MODULE-IDENTITY
       LAST-UPDATED "200509190000Z"
       ORGANIZATION "IETF Bridge MIB Working Group"
       CONTACT-INFO
           "Email: bridge-mib@ietf.org
                    K.C. Norseth (Editor)
                    L-3 Communications
               Tel: +1 801-594-2809
             Email: kenyon.c.norseth@L-3com.com
            Postal: 640 N. 2200 West.
                    Salt Lake City, Utah 84116-0850
                    Les Bell (Editor)
                    3Com Europe Limited
             Phone: +44 1442 438025
             Email: elbell@ntlworld.com
            Postal: 3Com Centre, Boundary Way
                    Hemel Hempstead
                    Herts.  HP2 7YU
                    UK
            Send comments to <bridge-mib@ietf.org>"
       DESCRIPTION
           "Модуль Bridge MIB для управления устройствами, 
           поддерживающими IEEE 802.1D.

           Copyright (C) The Internet Society (2005). Эта версия данного
           модуля MIB является частью RFC 4188, где авторские права 
           указаны полностью."
       REVISION     "200509190000Z"
       DESCRIPTION
            "Третий выпуск, опубликованный как часть RFC 4188.

            Модуль MIB был преобразован в формат SMIv2. Было
            добавлено заявление о совместимости, а также обновлено
            описание и ссылки.

            Был добавлен объект dot1dStpPortPathCost32 для поддержки
            IEEE 802.1t и разъяснены допустимые значения 
            dot1dStpPriority и dot1dStpPortPriority для мостов,
            поддерживающих IEEE 802.1t или IEEE 802.1w.

            Разъяснена интерпретация dot1dStpTimeSinceTopologyChange
            для мостов, поддерживающих протокол RSTP5."
       REVISION     "199307310000Z"
       DESCRIPTION
            "Второй выпуск, опубликованный в RFC 1493."
       REVISION     "199112310000Z"
       DESCRIPTION
            "Первоначальный выпуск, опубликованный в RFC 1286."
       ::= { mib-2 17 }

   -- ---------------------------------------------------------- --
   -- Текстовые соглашения
   -- ---------------------------------------------------------- --

   BridgeId ::= TEXTUAL-CONVENTION
       STATUS      current
       DESCRIPTION
           "BridgeId в рамках протокола STP однозначно указывает
           мост. Первые 2 октета (в сетевом порядке байтов)
           содержат значение приоритета, а последние 6 октетов -
           MAC-адрес, используемый для однозначного указания моста
           (обычно это численно меньшее значение из MAC-адресов
           всех портов моста)."
       SYNTAX      OCTET STRING (SIZE (8))

   Timeout ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS      current
       DESCRIPTION
           "Таймер протокола STP в сотых долях секунды. Несколько
           объектов в данном модуле MIB представляют значения
           таймеров, используемых протоколом STP. Все эти таймеры
           в данном модуле MIB указывают время в сотых долях секунды.

           Таймеры в STP BPDU указывают время в 1/256 секунды. Отметим
           однако, что 802.1D-1998 задает настраиваемую дискретность
           (не более 1 сек.) для таких таймеров. Для предотвращения
           неоднозначности ниже определен алгоритм преобразования,
           переводящий из одних единиц в другие.
           Для преобразования значений Timeout в единицы 1/256 сек.
           Используется выражение
               b = floor((n * 256) / 100)
           где
               floor   =  целая часть [остаток игнорируется]
               n — значение в 1/100 сек.
               b — значение в 1/256 сек.

           Для преобразования из 1/256 сек. в сотые доли секунды
           используется выражение
               n = ceiling((b * 100) / 256)
           где
               ceiling = целая часть [если остаток равен 0] или
                         целая часть + 1 [если остаток больше 0]
               n — значение в 1/100 сек.
               b — значение в 1/256 сек.

           Примечание. Важно выполнять арифметические операции в 
           указанном порядке (т. е. сначала умножение, затем деление)."
       SYNTAX      Integer32

   -- ---------------------------------------------------------- --
   -- субдеревья в Bridge MIB
   -- ---------------------------------------------------------- --

   dot1dNotifications  OBJECT IDENTIFIER ::= { dot1dBridge 0 }

   dot1dBase           OBJECT IDENTIFIER ::= { dot1dBridge 1 }
   dot1dStp            OBJECT IDENTIFIER ::= { dot1dBridge 2 }

   dot1dSr             OBJECT IDENTIFIER ::= { dot1dBridge 3 }
   -- документировано в RFC 1525

   dot1dTp             OBJECT IDENTIFIER ::= { dot1dBridge 4 }
   dot1dStatic         OBJECT IDENTIFIER ::= { dot1dBridge 5 }

   -- Субдеревья, используемые расширениями Bridge MIB:
   --      pBridgeMIB  MODULE-IDENTITY   ::= { dot1dBridge 6 }
   --      qBridgeMIB  MODULE-IDENTITY   ::= { dot1dBridge 7 }
   -- Отметим, что от практики регистрации связанных модулей MIB
   -- под dot1dBridge отказались по причине отсутствия надежного
   -- механизма отслеживания таких регистраций.

   dot1dConformance    OBJECT IDENTIFIER ::= { dot1dBridge 8 }

   -- ---------------------------------------------------------- --
   -- субдерево dot1dBase
   -- ---------------------------------------------------------- --
   -- Реализация dot1dBase обязательна для всех мостов
   -- ---------------------------------------------------------- --

   dot1dBaseBridgeAddress OBJECT-TYPE
       SYNTAX      MacAddress
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "MAC-адрес, используемый мостом в тех случаях, когда требуется
           обеспечить однозначность. Рекомендуется использовать для этого
           численно меньшее значение MAC-адреса среди всех портов моста.
           Однако требуется лишь уникальность значения. При конкатенации
           с dot1dStpPriority образуется уникальное значение 
           BridgeIdentifier, используемое в протоколе STP."
       REFERENCE
           "IEEE 802.1D-1998: clauses 14.4.1.1.3 and 7.12.5"
       ::= { dot1dBase 1 }

   dot1dBaseNumPorts OBJECT-TYPE
       SYNTAX      Integer32
       UNITS       "ports"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Число портов, контролируемых данным мостом."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.4.1.1.3"
       ::= { dot1dBase 2 }
   dot1dBaseType OBJECT-TYPE
       SYNTAX      INTEGER {
                       unknown(1),
                       transparent-only(2),
                       sourceroute-only(3),
                       srt(4)
                   }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Indicates what type of bridging this bridge can
           perform.  If a bridge is actually performing a
           certain type of bridging, this will be indicated by
           entries in the port table for the given type."
       ::= { dot1dBase 3 }

   -- ---------------------------------------------------------- --
   -- Базовая таблица портов моста
   -- ---------------------------------------------------------- --
   dot1dBasePortTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF Dot1dBasePortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Таблица с базовой информацией для каждого порта, связанного
           с этим мостом. Включаются прозрачные, source-route и srt-порты."
       ::= { dot1dBase 4 }

   dot1dBasePortEntry OBJECT-TYPE
       SYNTAX      Dot1dBasePortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Список информации для каждого порта этого моста."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.4.2, 14.6.1"
       INDEX  { dot1dBasePort }
       ::= { dot1dBasePortTable 1 }

   Dot1dBasePortEntry ::=
       SEQUENCE {
           dot1dBasePort
               Integer32,
           dot1dBasePortIfIndex
               InterfaceIndex,
           dot1dBasePortCircuit
               OBJECT IDENTIFIER,
           dot1dBasePortDelayExceededDiscards
               Counter32,
           dot1dBasePortMtuExceededDiscards
               Counter32
       }

   dot1dBasePort OBJECT-TYPE
       SYNTAX      Integer32 (1..65535)
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Номер порта, для которого эта запись содержит данные
           управления мостом."
       ::= { dot1dBasePortEntry 1 }

   dot1dBasePortIfIndex OBJECT-TYPE
       SYNTAX      InterfaceIndex
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Значение экземпляра объекта ifIndex, определенного в
           IF-MIB, для соответствующего этому порту интерфейса."
       ::= { dot1dBasePortEntry 2 }

   dot1dBasePortCircuit OBJECT-TYPE
       SYNTAX      OBJECT IDENTIFIER
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Для порта, который (потенциально) имеет такое же значение
           dot1dBasePortIfIndex как у другого порта в том же мосту.
           Этот объект содержит имя экземпляра объекта, уникальное для
           этого порта. Например, в случае когда множество портов,
           взаимно-однозначно соответствует виртуальным устройствам X.25,
           это значение может указывать (например, первый) экземпляр
           объекта, связанного с виртуальным устройством X.25,
           соответствующим этому порту.

           Для порта, имеющего уникальное значение 
           dot1dBasePortIfIndex, этот объект имеет значение { 0 0 }."
       ::= { dot1dBasePortEntry 3 }

   dot1dBasePortDelayExceededDiscards OBJECT-TYPE
       SYNTAX      Counter32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Число кадров, отброшенных этим портом по причине избыточной
           задержки при передаче через мост. Счетчик инкрементируется
           прозрачными и source route мостами."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.6.1.1.3"
       ::= { dot1dBasePortEntry 4 }

   dot1dBasePortMtuExceededDiscards OBJECT-TYPE
       SYNTAX      Counter32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Число кадров, отброшенных этим портом по причине избыточного
           размера. Счетчик инкрементируется прозрачными и source route
           мостами."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.6.1.1.3"
       ::= { dot1dBasePortEntry 5 }

   -- ---------------------------------------------------------- --
   -- субдерево dot1dStp 
   -- ---------------------------------------------------------- --
   -- Реализация dot1dStp не обязательна. Оно реализуется мостами,
   -- поддерживающими протокол STP
   -- ---------------------------------------------------------- --

   dot1dStpProtocolSpecification OBJECT-TYPE
       SYNTAX      INTEGER {
                       unknown(1),
                       decLb100(2),
                       ieee8021d(3)
                   }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Индикация используемой версии протокола STP. Значение decLb100(2)
           указывает протокол DEC LANbridge 100 STP. Реализации IEEE 802.1D
           будут возвращать значение ieee8021d(3). При выпуске в будущем
           новых версий протокола IEEE STP, не совместимых с текущей версией,
           будут определены новые значения."
       ::= { dot1dStp 1 }

   dot1dStpPriority OBJECT-TYPE
       SYNTAX      Integer32 (0..65535)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Значение разрешенной для записи части Bridge ID (т. е.
           первые 2 октета 8-октетного Bridge ID). Последние 6 
           октетов Bridge ID заданы значением dot1dBaseBridgeAddress.
           На мостах, поддерживающих IEEE 802.1t или IEEE 802.1w,
           разрешены значения от 0 до 61440 с шагом 4096."
       REFERENCE
           "IEEE 802.1D-1998 clause 8.10.2, Table 8-4,
           IEEE 802.1t clause 8.10.2, Table 8-4, clause 14.3."
       ::= { dot1dStp 2 }


   dot1dStpTimeSinceTopologyChange OBJECT-TYPE
       SYNTAX      TimeTicks
       UNITS       "centi-seconds"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Время (в сотых долях секунды) с момента последнего
           изменения топологии, обнаруженного мостом.
           Для RSTP с момента, когда таймер tcWhile любого из
           портов этого моста принял ненулевое значение."
       REFERENCE
           "IEEE 802.1D-1998 clause 14.8.1.1.,
           IEEE 802.1w clause 14.8.1.1."
       ::= { dot1dStp 3 }

   dot1dStpTopChanges OBJECT-TYPE
       SYNTAX      Counter32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Общее число изменений топологии, обнаруженных этим
           мостом с момента последнего сброса или инициализации
           элемента управления."
       REFERENCE
           "IEEE 802.1D-1998 clause 14.8.1.1."
       ::= { dot1dStp 4 }

   dot1dStpDesignatedRoot OBJECT-TYPE
       SYNTAX      BridgeId
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Идентификатор моста, служащего корнем остовного дерева,
           определенный протоколом STP, выполняемым на этом узле.
           Это значение служит параметром Root Identifier во всех 
           Configuration Bridge PDU, создаваемых этим узлом."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.1"
       ::= { dot1dStp 5 }

   dot1dStpRootCost OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Стоимость пути к корню с точки зрения этого моста."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.2"
       ::= { dot1dStp 6 }

   dot1dStpRootPort OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Номер порта, который предлагает самый дешевый путь
           от данного моста к корневому мосту."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.3"
       ::= { dot1dStp 7 }

   dot1dStpMaxAge OBJECT-TYPE
       SYNTAX      Timeout
       UNITS       "centi-seconds"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Максимальный возраст информации протокола STP, полученной
           из сети на любом порту, по достижении которого данные 
           отбрасываются (в сотых долях секунды). Это значение,
           используемое мостом в данный момент."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.4"
       ::= { dot1dStp 8 }

   dot1dStpHelloTime OBJECT-TYPE
       SYNTAX      Timeout
       UNITS       "centi-seconds"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Интервал между передачей Configuration bridge PDU через
           любой порт данного моста, когда он является или пытается 
           стать корнем STP (в сотых долях секунды). Это значение,
           используемое мостом в данный момент."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.5"
       ::= { dot1dStp 9 }

   dot1dStpHoldTime OBJECT-TYPE
       SYNTAX      Integer32
       UNITS       "centi-seconds"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Это значение определяет интервал (в сотых долях секунды),
           в течение которого данным узлом должно передаваться не 
           более двух Configuration bridge PDU."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.14"
       ::= { dot1dStp 10 }

   dot1dStpForwardDelay OBJECT-TYPE
       SYNTAX      Timeout
       UNITS       "centi-seconds"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Это значение (в сотых долях секунды) задает как быстро
           порт меняет свое состояние STP при переходе в направлении
           к состоянию Forwarding. Значение определяет время
           пребывания порта в каждом из состояний Listening и
           Learning, предшествующих состоянию Forwarding. Это значение 
           используется также в случае обнаружения происходящей смены
           топологии, чтобы «состарить» все динамические записи в 
           базе данных пересылки. 
           [Отметим, что это значение является одним из тех, которые 
           этот мост использует в настоящий момент в отличие от 
           dot1dStpBridgeForwardDelay, с которым этот и все другие мосты
           начинают работу, когда мост становится корневым.]"
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.6"
       ::= { dot1dStp 11 }

   dot1dStpBridgeMaxAge OBJECT-TYPE
       SYNTAX      Timeout (600..4000)
       UNITS       "centi-seconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Значение, которое все мосты используют в качестве MaxAge,
           когда мост работает в качестве корневого. Отметим, что 802.1D-1998
           задает привязку диапазона для этого параметра к значению параметра
           dot1dStpBridgeHelloTime. Дискретность для этого таймера установлена
           стандартом 802.1D-1998 в 1 сек. Агент может возвращать ошибку
           badValue при попытке установить нецелое число секунд."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.8"
       ::= { dot1dStp 12 }

   dot1dStpBridgeHelloTime OBJECT-TYPE
       SYNTAX      Timeout (100..1000)
       UNITS       "centi-seconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Значение, которое все мосты используют в качестве HelloTime, когда
           мост работает в качестве корневого.  Дискретность для этого таймера
           установлена стандартом 802.1D-1998 в 1 сек. Агент  может возвращать
           ошибку badValue при попытке установить нецелое число секунд."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.9"
       ::= { dot1dStp 13 }
   dot1dStpBridgeForwardDelay OBJECT-TYPE
       SYNTAX      Timeout (400..3000)
       UNITS       "centi-seconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Значение, которое все мосты используют в качестве ForwardDelay,
           когда мост работает в качестве корневого. Отметим, что 802.1D-1998
           задает привязку диапазона для этого параметра к значению параметра
           dot1dStpBridgeMaxAge. Дискретность для этого таймера установлена
           стандартом 802.1D-1998 в 1 сек. Агент может возвращать ошибку
           badValue при попытке установить нецелое число секунд."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.3.10"
       ::= { dot1dStp 14 }

   -- ---------------------------------------------------------- --
   -- Таблица портов STP
   -- ---------------------------------------------------------- --

   dot1dStpPortTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF Dot1dStpPortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Таблица, содержащая специфическую для порта информацию STP."
       ::= { dot1dStp 15 }

   dot1dStpPortEntry OBJECT-TYPE
       SYNTAX      Dot1dStpPortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Список поддерживаемой каждым портом информации о состоянии
           протокола STP для данного порта."
       INDEX   { dot1dStpPort }
       ::= { dot1dStpPortTable 1 }

   Dot1dStpPortEntry ::=
       SEQUENCE {
           dot1dStpPort
               Integer32,
           dot1dStpPortPriority
               Integer32,
           dot1dStpPortState
               INTEGER,
           dot1dStpPortEnable
               INTEGER,
           dot1dStpPortPathCost
               Integer32,
           dot1dStpPortDesignatedRoot
               BridgeId,
           dot1dStpPortDesignatedCost
               Integer32,
           dot1dStpPortDesignatedBridge
               BridgeId,
           dot1dStpPortDesignatedPort
               OCTET STRING,
           dot1dStpPortForwardTransitions
               Counter32,
           dot1dStpPortPathCost32
               Integer32
       }

   dot1dStpPort OBJECT-TYPE
       SYNTAX      Integer32 (1..65535)
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Номер порта, для которого эта запись содержит управляющую
           информацию протокола STP."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.8.2.1.2"
       ::= { dot1dStpPortEntry 1 }

   dot1dStpPortPriority OBJECT-TYPE
       SYNTAX      Integer32 (0..255)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Значение поля приоритета, содержащегося в первых 2 октетах
           Port ID. Остальные октеты Port ID задаются значением
           dot1dStpPort. Для мостов с поддержкой IEEE 802.1t или
           IEEE 802.1w допустимы значения от 0 до 240 с шагом 16."
       REFERENCE
           "IEEE 802.1D-1998 clause 8.10.2, Table 8-4,
           IEEE 802.1t clause 8.10.2, Table 8-4, clause 14.3."
       ::= { dot1dStpPortEntry 2 }

   dot1dStpPortState OBJECT-TYPE
       SYNTAX      INTEGER {
                       disabled(1),
                       blocking(2),
                       listening(3),
                       learning(4),
                       forwarding(5),
                       broken(6)
                   }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Текущее состояние порта, определенное приложением STP.
           Это состояние определяет действия порта при получении
           кадра. При обнаружении неработоспособного порта мост
           устанавливает для него состояние broken(6). Для отключенных
           портов (см. dot1dStpPortEnable), имеет значение disabled(1)."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.5.2"
       ::= { dot1dStpPortEntry 3 }

   dot1dStpPortEnable OBJECT-TYPE
       SYNTAX      INTEGER {
                       enabled(1),
                       disabled(2)
                   }
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Статус порта enabled/disabled (включен/выключен)."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.5.2"
       ::= { dot1dStpPortEntry 4 }

   dot1dStpPortPathCost OBJECT-TYPE
       SYNTAX      Integer32 (1..65535)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Вклад данного порта в стоимость пути к корню STP через
           этот порт. 802.1D-1998 рекомендует по умолчанию использовать 
           значение, обратно пропорциональное скорости подключенной ЛВС.

           Новым реализациям следует поддерживать dot1dStpPortPathCost32.
           Если стоимость пути через порт превосходит  максимальное
           значение для этого объекта, объекту следует возвращать 
           максимальное значение 65535. Если данный объект возвращает 
           максимальное значение, приложению следует попытаться прочитать
           объект dot1dStpPortPathCost32."
       REFERENCE "IEEE 802.1D-1998: clause 8.5.5.3"
           ::= { dot1dStpPortEntry 5 }

   dot1dStpPortDesignatedRoot OBJECT-TYPE
       SYNTAX      BridgeId
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Уникальный идентификатор моста, записанного в качестве Root 
           в Configuration BPDU, передаваемых Designated Bridge для 
           сегмента, к которому порт подключен."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.5.4"
       ::= { dot1dStpPortEntry 6 }
   dot1dStpPortDesignatedCost OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Стоимость пути Designated Port сегмента, подключенного
           к данному порту. Это значение сравнивается с полем
           Root Path Cost в полученных PDU."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.5.5"
       ::= { dot1dStpPortEntry 7 }

   dot1dStpPortDesignatedBridge OBJECT-TYPE
       SYNTAX      BridgeId
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Идентификатор моста, который данный порт считает
           Designated Bridge для своего сегмента."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.5.6"
       ::= { dot1dStpPortEntry 8 }

   dot1dStpPortDesignatedPort OBJECT-TYPE
       SYNTAX      OCTET STRING (SIZE (2))
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Идентификатор порта на Designated Bridge 
           для сегмента данного порта."
       REFERENCE
           "IEEE 802.1D-1998: clause 8.5.5.7"
       ::= { dot1dStpPortEntry 9 }

   dot1dStpPortForwardTransitions OBJECT-TYPE
       SYNTAX      Counter32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Число переходов данного порта из состояния Learning 
           в состояние Forwarding."
       ::= { dot1dStpPortEntry 10 }

   dot1dStpPortPathCost32 OBJECT-TYPE
       SYNTAX      Integer32 (1..200000000)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Вклад данного порта в стоимость пути в направлении
           корня STP через этот порт. 802.1D-1998 рекомендует по
           умолчанию использовать значение, обратно 
           пропорциональное скорости подключенной ЛВС.

           Этот объект заменяет dot1dStpPortPathCost для поддержки
           IEEE 802.1t."
       REFERENCE
           "IEEE 802.1t clause 8.10.2, Table 8-5."
       ::= { dot1dStpPortEntry 11 }

   -- ---------------------------------------------------------- --
   -- субдерево dot1dTp 
   -- ---------------------------------------------------------- --
   -- Реализация dot1dTp не обязательна. Субдерево реализуется
   -- мостами, поддерживающими прозрачный режим, и мостами SRT
   -- ---------------------------------------------------------- --

   dot1dTpLearnedEntryDiscards OBJECT-TYPE
       SYNTAX      Counter32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Общее число записей Forwarding Database, которые были 
           получены путем обучения, но отброшены по причине нехватки
           места в Forwarding Database. Если значение счетчика растет,
           это показывает регулярное переполнение Forwarding Database
           (негативное влияние на работу сети). Если значение счетчика
           достаточно велико, но не растет, это показывает, что
           проблема переполнения была временной."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.7.1.1.3"
       ::= { dot1dTp 1 }

   dot1dTpAgingTime OBJECT-TYPE
       SYNTAX      Integer32 (10..1000000)
       UNITS       "seconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Время (в секундах) старения динамически определенной 
           информации о пересылке. 802.1D-1998 рекомендует 
           использовать по умолчанию 300 секунд."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.7.1.1.3"
       ::= { dot1dTp 2 }

   -- ---------------------------------------------------------- --
   --  База данных пересылки для прозрачных мостов
   -- ---------------------------------------------------------- --

   dot1dTpFdbTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF Dot1dTpFdbEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Таблица с информацией об индивидуальных записях, которые
           мост может использовать для пересылки и/или фильтрации.
           Эта информация применяется функциями прозрачного моста
           для определения действий по отношению к принятому пакету."
       ::= { dot1dTp 3 }

   dot1dTpFdbEntry OBJECT-TYPE
       SYNTAX      Dot1dTpFdbEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Информация о конкретном индивидуальном MAC-адресе, для
           которого мост имеет информацию о пересылке и/или фильтрации."
       INDEX   { dot1dTpFdbAddress }
       ::= { dot1dTpFdbTable 1 }

   Dot1dTpFdbEntry ::=
       SEQUENCE {
           dot1dTpFdbAddress
               MacAddress,
           dot1dTpFdbPort
               Integer32,
           dot1dTpFdbStatus
               INTEGER
       }

   dot1dTpFdbAddress OBJECT-TYPE
       SYNTAX      MacAddress
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Индивидуальный MAC-адрес, для которого мост имеет
           имеет информацию о пересылке и/или фильтрации."
       REFERENCE
           "IEEE 802.1D-1998: clause 7.9.1, 7.9.2"
       ::= { dot1dTpFdbEntry 1 }

   dot1dTpFdbPort OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "0 или номер порта, на котором был обнаружен кадр с адресом
           отправителя, совпадающим со значением соответствующего
           экземпляра dot1dTpFdbAddress. 0 показывает, что номер порта
           не был определен, но у моста имеется некая информация
           о пересылке/фильтрации для этого адреса (например, в
           dot1dStaticTable). Разработчикам рекомендуется
           назначать этому объекту номер порта, когда он определен,
           даже для адресов, у которых соответствующее значение
           dot1dTpFdbStatus не равно learned(3)."
       ::= { dot1dTpFdbEntry 2 }

   dot1dTpFdbStatus OBJECT-TYPE
       SYNTAX      INTEGER {
                       other(1),
                       invalid(2),
                       learned(3),
                       self(4),
                       mgmt(5)
                   }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Статус записи, который может принимать значения:
               other(1) — ни одно из перечисленных ниже. Это включает
                   ситуации, когда некий другой объект MIB (не
                   соответствующий экземпляру dot1dTpFdbPort и не
                   запись в dot1dStaticTable) используется для 
                   определения пересылки кадра, направленного по 
                   адресу из соответствующего dot1dTpFdbAddress.
               invalid(2) — запись больше не пригодна (например,
                   она уже устарела), но еще остается в таблице.
               learned(3) — значение соответствующего экземпляра
                   dot1dTpFdbPort определено и используется.
               self(4) - значение соответствующего экземпляра
                   dot1dTpFdbAddress представляет один из адресов
                   моста. Соответствующий экземпляр dot1dTpFdbPort
                   показывает, какой из портов имеет этот адрес.
               mgmt(5) - значение соответствующего экземпляра
                   dot1dTpFdbAddress является также значением
                   имеющегося экземпляра dot1dStaticAddress."
       ::= { dot1dTpFdbEntry 3 }

   -- ---------------------------------------------------------- --
   --  Таблица портов для прозрачных мостов
   -- ---------------------------------------------------------- --

   dot1dTpPortTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF Dot1dTpPortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Таблица с информацией для каждого порта, связанного 
           с этим прозрачным мостом."
       ::= { dot1dTp 4 }

   dot1dTpPortEntry OBJECT-TYPE
       SYNTAX      Dot1dTpPortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Список информации для каждого порта прозрачного моста."
       INDEX   { dot1dTpPort }
       ::= { dot1dTpPortTable 1 }

   Dot1dTpPortEntry ::=
       SEQUENCE {
           dot1dTpPort
               Integer32,
           dot1dTpPortMaxInfo
               Integer32,
           dot1dTpPortInFrames
               Counter32,
           dot1dTpPortOutFrames
               Counter32,
           dot1dTpPortInDiscards
               Counter32
       }

   dot1dTpPort OBJECT-TYPE
       SYNTAX      Integer32 (1..65535)
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Номер порта, для которого данная строка содержит
           информацию управления прозрачным мостом."
       ::= { dot1dTpPortEntry 1 }

   -- Было бы хорошо использовать ifMtu в качестве максимального
   -- размера поля INFO, но это невозможно, поскольку ifMtu
   -- определяется как размер, который может использовать
   -- (меж)сетевой уровень, а он может отличаться от уровня MAC
   -- (особенно при использовании нескольких уровней инкапсуляции).

   dot1dTpPortMaxInfo OBJECT-TYPE
       SYNTAX      Integer32
       UNITS       "bytes"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Максимальный размер поля INFO (не MAC), который этот 
           порт будет принимать и передавать."
       ::= { dot1dTpPortEntry 2 }

   dot1dTpPortInFrames OBJECT-TYPE
       SYNTAX      Counter32
       UNITS       "frames"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Число кадров, принятых данным портом из своего сегмента.
           Отметим, что кадры, принятые соответствующим порту
           интерфейсом, учитываются тогда и только тогда, когда они
           относятся к протоколу, обрабатываемому локальной функцией
           моста, включая кадры управления мостом."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.6.1.1.3"
       ::= { dot1dTpPortEntry 3 }

   dot1dTpPortOutFrames OBJECT-TYPE
       SYNTAX      Counter32
       UNITS       "frames"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Число кадров, переданных данным портом в свой сегмент.
           Отметим, что кадры, переданные соответствующим порту 
           интерфейсом, учитываются тогда и только тогда, когда они
           относятся к протоколу, обрабатываемому локальной функцией
           моста, включая кадры управления мостом."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.6.1.1.3"
       ::= { dot1dTpPortEntry 4 }

   dot1dTpPortInDiscards OBJECT-TYPE
       SYNTAX      Counter32
       UNITS       "frames"
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Число полученных корректных кадров, которые были отброшены
           (например, отфильтрованы) процессом пересылки."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.6.1.1.3"
       ::= { dot1dTpPortEntry 5 }

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

   dot1dStaticTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF Dot1dStaticEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Таблица, содержащая данные фильтрации, настроенной в
           мосту (локальной или сетевой) системой управления, и 
           задающая набор портов, в которые разрешено пересылать
           кадры из определенных портов, направленные заданным 
           адресатам. Нулевое значение в качестве номера порта в
           этой таблице, из которого приняты кадры для заданного 
           получателя, служит для указания всех портов, которые не 
           имеют специальной записи в этой таблице для данного
           адресата. Записи действуют для индивидуальных, групповых
           и широковещательных адресов."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.7.2"
       ::= { dot1dStatic 1 }

   dot1dStaticEntry OBJECT-TYPE
       SYNTAX      Dot1dStaticEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Данные фильтрации, заданные в мосту (локальной или
           сетевой) системой управления, которые указывают набор
           портов, куда разрешено пересылать кадры, принятые из
           заданного порта и направленные по указанному адресу."
       REFERENCE
           "IEEE 802.1D-1998: clause 14.7.2"
       INDEX   { dot1dStaticAddress, dot1dStaticReceivePort }
       ::= { dot1dStaticTable 1 }

   Dot1dStaticEntry ::=
       SEQUENCE {
           dot1dStaticAddress       MacAddress,
           dot1dStaticReceivePort   Integer32,
           dot1dStaticAllowedToGoTo OCTET STRING,
           dot1dStaticStatus        INTEGER
       }

   dot1dStaticAddress OBJECT-TYPE
       SYNTAX      MacAddress
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "MAC-адрес получателя  в кадре, к которому относится
           данная запись фильтра. Адрес может быть групповым,
           широковещательным или индивидуальным."
       REFERENCE
           "IEEE 802.1D-1998: clause 7.9.1, 7.9.2"
       ::= { dot1dStaticEntry 1 }

   dot1dStaticReceivePort OBJECT-TYPE
       SYNTAX      Integer32 (0..65535)
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "0 или номер порта, из которого должен быть принят кадр,
           чтобы к нему применялась данная запись фильтра. Нулевое 
           значение указывает все порты моста, для которых нет 
           других применимых записей."
       ::= { dot1dStaticEntry 2 }

   dot1dStaticAllowedToGoTo OBJECT-TYPE
       SYNTAX      OCTET STRING (SIZE (0..512))
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Набор портов, в которые разрешено пересылать кадры,
           принятые из заданного порта и направленные по указанному
           MAC-адресу. Каждый октет значения этого объекта задает
           набор из 8 портов — первому октету соответствуют порты 
           1 — 8, второму 9 — 16 и т. д. В каждом октете старший бит 
           представляет порт с меньшим номером, младший — с большим.
           Таким образом, каждый порт моста представлен одним битом
           в значении этого объекта. Установленный бит (1) говорит
           о включении порта в число разрешенных, сброшенный (0)
           исключает пересылку в порт. Отметим, что значение для порта
           из которого принят кадр не принимается во внимание. По
           умолчанию значением этого объекта является строка
           установленных (1) битов соответствующего размера.

           Значение этого поля может выходить за пределы требуемого 
           минимума максимального размера сообщения для 
           некоторых видов транспорта SNMP (484 байтов для UDP, см.
           параграф 3.2 в RFC 3417). Машины SNMP на мостах с 
           большим числом портов должны поддерживать подходящий
           максимальный размер сообщений."
       ::= { dot1dStaticEntry 3 }

   dot1dStaticStatus OBJECT-TYPE
       SYNTAX      INTEGER {
                       other(1),
                       invalid(2),
                       permanent(3),
                       deleteOnReset(4),
                       deleteOnTimeout(5)
                   }
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Объект показывает статус записи. По умолчанию permanent(3).
               other(1) — запись используется в настоящее время, но 
                   условия, при которых она будет сохраняться,
                   отличаются от перечисленных ниже значений.
               invalid(2) — запись этого значения в объект удалит
                   соответствующий элемент.
               permanent(3) - запись используется в настоящее время и
                   сохраниться после следующего сброса (перезапуска) моста.
               deleteOnReset(4) - запись используется в настоящее время и
                   будет сохраняться до сброса (перезапуска) моста.
               deleteOnTimeout(5) - запись используется в настоящее время и
                   будет сохраняться, пока не устареет.
       ::= { dot1dStaticEntry 4 }

   -- ---------------------------------------------------------- --
   -- Уведомления, используемые мостами
   -- ---------------------------------------------------------- --
   -- Уведомления для протокола STP
   -- ---------------------------------------------------------- --

   newRoot NOTIFICATION-TYPE
       -- OBJECTS     { }
       STATUS      current
       DESCRIPTION
           "Уведомление (trap) newRoot указывает, что передающий агент
           стал новым корнем STP. Уведомление передается мостом сразу
           после его выбора новым корнем (например, после завершения
           отсчета таймера Topology Change непосредственно после его
           выбора). Реализация этого уведомления не обязательна."
       ::= { dot1dNotifications 1 }

   topologyChange NOTIFICATION-TYPE
       -- OBJECTS     { }
       STATUS      current
       DESCRIPTION
           "Уведомление topologyChange передается мостом, когда любой 
           из его настроенных портов переходит из состояния Learning в
           состояние Forwarding или из состояния Forwarding в состояние
           Blocking. Уведомление не передается, если для того же перехода
           было передано прерывание newRoot. Реализация этого уведомления
           не обязательна."
       ::= { dot1dNotifications 2 }

   -- ---------------------------------------------------------- --
   -- IEEE 802.1D MIB — информация о соответствии
   -- ---------------------------------------------------------- --

   dot1dGroups         OBJECT IDENTIFIER ::= { dot1dConformance 1 }
   dot1dCompliances    OBJECT IDENTIFIER ::= { dot1dConformance 2 }

   -- ---------------------------------------------------------- --
   -- блоки соответствия
   -- ---------------------------------------------------------- --

   -- ---------------------------------------------------------- --
   -- группа dot1dBase
   -- ---------------------------------------------------------- --

   dot1dBaseBridgeGroup OBJECT-GROUP
       OBJECTS {
           dot1dBaseBridgeAddress,
           dot1dBaseNumPorts,
           dot1dBaseType
       }
       STATUS      current
       DESCRIPTION
           "Информация для моста в целом."
       ::= { dot1dGroups 1 }

   dot1dBasePortGroup OBJECT-GROUP
       OBJECTS {
           dot1dBasePort,
           dot1dBasePortIfIndex,
           dot1dBasePortCircuit,
           dot1dBasePortDelayExceededDiscards,
           dot1dBasePortMtuExceededDiscards
       }
       STATUS      current
       DESCRIPTION
           "Информация для каждого порта устройства."
       ::= { dot1dGroups 2 }

   -- ---------------------------------------------------------- --
   -- группа dot1dStp 
   -- ---------------------------------------------------------- --

   dot1dStpBridgeGroup OBJECT-GROUP
       OBJECTS {
           dot1dStpProtocolSpecification,
           dot1dStpPriority,
           dot1dStpTimeSinceTopologyChange,
           dot1dStpTopChanges,
           dot1dStpDesignatedRoot,
           dot1dStpRootCost,
           dot1dStpRootPort,
           dot1dStpMaxAge,
           dot1dStpHelloTime,
           dot1dStpHoldTime,
           dot1dStpForwardDelay,
           dot1dStpBridgeMaxAge,
           dot1dStpBridgeHelloTime,
           dot1dStpBridgeForwardDelay
       }
       STATUS      current
       DESCRIPTION
           "Данные STP для устройства в целом."
       ::= { dot1dGroups 3 }

   dot1dStpPortGroup OBJECT-GROUP
       OBJECTS {
           dot1dStpPort,
           dot1dStpPortPriority,
           dot1dStpPortState,
           dot1dStpPortEnable,
           dot1dStpPortPathCost,
           dot1dStpPortDesignatedRoot,
           dot1dStpPortDesignatedCost,
           dot1dStpPortDesignatedBridge,
           dot1dStpPortDesignatedPort,
           dot1dStpPortForwardTransitions
       }
       STATUS      current
       DESCRIPTION
           "Данные STP для каждого порта устройства."
       ::= { dot1dGroups 4 }

   dot1dStpPortGroup2 OBJECT-GROUP
       OBJECTS {
           dot1dStpPort,
           dot1dStpPortPriority,
           dot1dStpPortState,
           dot1dStpPortEnable,
           dot1dStpPortDesignatedRoot,
           dot1dStpPortDesignatedCost,
           dot1dStpPortDesignatedBridge,
           dot1dStpPortDesignatedPort,
           dot1dStpPortForwardTransitions,
           dot1dStpPortPathCost32
       }
       STATUS      current
       DESCRIPTION
           "Данные STP для каждого порта устройства."
       ::= { dot1dGroups 5 }

   dot1dStpPortGroup3 OBJECT-GROUP
       OBJECTS {
           dot1dStpPortPathCost32
       }
       STATUS      current
       DESCRIPTION
           "Данные STP для устройств, поддерживающих 32-битовые
            значения стоимости пути."
       ::= { dot1dGroups 6 }

   -- ---------------------------------------------------------- --
   -- группа dot1dTp 
   -- ---------------------------------------------------------- --

   dot1dTpBridgeGroup OBJECT-GROUP
       OBJECTS {
           dot1dTpLearnedEntryDiscards,
           dot1dTpAgingTime
       }
       STATUS      current
       DESCRIPTION
           "Данные прозрачного моста для устройства в целом."
       ::= { dot1dGroups 7 }

   dot1dTpFdbGroup OBJECT-GROUP
       OBJECTS {
           dot1dTpFdbAddress,
           dot1dTpFdbPort,
           dot1dTpFdbStatus
       }

       STATUS      current
       DESCRIPTION
           "Данные Filtering Database для моста в целом."
       ::= { dot1dGroups 8 }

   dot1dTpGroup OBJECT-GROUP
       OBJECTS {
           dot1dTpPort,
           dot1dTpPortMaxInfo,
           dot1dTpPortInFrames,
           dot1dTpPortOutFrames,
           dot1dTpPortInDiscards
       }
       STATUS      current
       DESCRIPTION
           "Динамические данные Filtering Database для каждого порта."
       ::= { dot1dGroups 9 }

   -- ---------------------------------------------------------- --
   -- База данных статической фильтрации по адресам получателей
   -- ---------------------------------------------------------- --

   dot1dStaticGroup OBJECT-GROUP
       OBJECTS {
           dot1dStaticAddress,
           dot1dStaticReceivePort,
           dot1dStaticAllowedToGoTo,
           dot1dStaticStatus
       }
       STATUS      current
       DESCRIPTION
           "Статические данные Filtering Database для каждого порта."
       ::= { dot1dGroups 10 }

   -- ---------------------------------------------------------- --
   -- Группа Trap Notification
   -- ---------------------------------------------------------- --

   dot1dNotificationGroup NOTIFICATION-GROUP
       NOTIFICATIONS {
           newRoot,
           topologyChange
       }
       STATUS      current
       DESCRIPTION
           "Группа объектов, описывающих уведомления (trap)."
       ::= { dot1dGroups 11 }

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

   bridgeCompliance1493 MODULE-COMPLIANCE
       STATUS      current
       DESCRIPTION
           "Заявление о поддержке функций моста в соответствии с RFC 1493."

       MODULE
           MANDATORY-GROUPS {
               dot1dBaseBridgeGroup,
               dot1dBasePortGroup
           }

       GROUP   dot1dStpBridgeGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих протокол STP."

       GROUP   dot1dStpPortGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих протокол STP."

       GROUP   dot1dTpBridgeGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих прозрачный режим. Группу будут 
           реализовать прозрачные и SRT мосты."

       GROUP   dot1dTpFdbGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих прозрачный режим. Группу будут 
           реализовать прозрачные и SRT мосты."

       GROUP   dot1dTpGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих прозрачный режим. Группу будут 
           реализовать прозрачные и SRT мосты."

       GROUP   dot1dStaticGroup
       DESCRIPTION
           "Реализация этой группы не обязательна."

       GROUP dot1dNotificationGroup
       DESCRIPTION
           "Реализация этой группы не обязательна."
       ::= { dot1dCompliances 1 }

   bridgeCompliance4188 MODULE-COMPLIANCE
       STATUS      current
       DESCRIPTION
           "Заявление о соответствии для устройства, поддерживающего 
           функции моста. Это включает поддержку 32-битовых значений 
           Path Cost и более ограниченные по сравнению с IEEE 802.1t
           приоритеты моста и портов.

           Полная поддержка объектов управления 802.1D требует реализации
           объектов SNMPv2-MIB [RFC3418] sysDescr и sysUpTime, а также
           объектов IF-MIB [RFC2863] ifIndex, ifType, ifDescr, 
           ifPhysAddress и ifLastChange."

       MODULE
           MANDATORY-GROUPS {
               dot1dBaseBridgeGroup,
               dot1dBasePortGroup
           }

       GROUP   dot1dStpBridgeGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих протокол STP."

       OBJECT dot1dStpPriority
       SYNTAX Integer32 (0|4096|8192|12288|16384|20480|24576
                        |28672|32768|36864|40960|45056|49152
                        |53248|57344|61440)
       DESCRIPTION
           "Возможные значения определены стандартом IEEE 802.1t."

       GROUP   dot1dStpPortGroup2
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих протокол STP."

       GROUP   dot1dStpPortGroup3
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих протокол STP и 32-битовые значения
           стоимости пути. В частности, это устройства, 
           поддерживающие IEEE 802.1t и IEEE 802.1w."

       OBJECT dot1dStpPortPriority
       SYNTAX Integer32 (0|16|32|48|64|80|96|112|128
                        |144|160|176|192|208|224|240)
       DESCRIPTION
           "Возможные значения определены стандартом IEEE 802.1t."

       GROUP   dot1dTpBridgeGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих прозрачный режим. Группу будут 
           реализовать прозрачные и SRT мосты."

       GROUP   dot1dTpFdbGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих прозрачный режим. Группу будут 
           реализовать прозрачные и SRT мосты."

       GROUP   dot1dTpGroup
       DESCRIPTION
           "Реализация этой группы обязательна для мостов, 
           поддерживающих прозрачный режим. Группу будут 
           реализовать прозрачные и SRT мосты."

       GROUP   dot1dStaticGroup
       DESCRIPTION
           "Реализация этой группы не обязательна."

       GROUP dot1dNotificationGroup
       DESCRIPTION
           "Реализация этой группы не обязательна."
       ::= { dot1dCompliances 2 }

   END

5. Взаимодействие с IANA

Описанный в этом документе модуль MIB использует назначенное IANA значение OBJECT IDENTIFIER, записанное в реестр SMI Numbers.

 

Дескриптор

Значение OBJECT IDENTIFIER

dot1dBridge

{ mib-2 17 }

 

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

В этом модуле MIB определено множество объектов с MAX-ACCESS, разрешающим запись (read-write и/или read-create). Такие объекты могут быть уязвимыми в некоторых сетевых средах. Поддержка операций SET в небезопасной среде без подобающей защиты может оказывать негативное влияние на работу сети.

Некоторые из доступных для чтения объектов в данном модуле MIB (объекты, у которых MAX-ACCESS отличается от not-accessible), могут быть уязвимыми в некоторых сетевых средах. Важно контролировать даже операции GET и/или NOTIFY для таких объектов и возможно даже шифровать их значения при передаче через сеть по протоколу SNMP.

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

  • Открытые для записи объекты dot1dStpPriority, dot1dStpBridgeMaxAge, dot1dStpBridgeHelloTime, dot1dStpBridgeForwardDelay, dot1dStpPortPriority, dot1dStpPortEnable, dot1dStpPortPathCost и dot1dStpPortPathCost32 влияют на протокол STP. Несанкционированная запись в эти объекты может привести к изменению принятой по умолчанию топологии или повлиять на скорость расчета остовного дерева.

  • Открытый для записи объект dot1dTpAgingTime управляет сроком старения определенной динамически информации о пересылке. Установка слишком большого значения может упростить организацию атак с переполнением таблицы пересылки.

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

  • Открытые для чтения объекты в модуле BRIDGE-MIB содержат информацию о сети на базе мостов и подключенных к ней активных станциях. Адреса в таблице dot1dTpFdbTable обычно показывают производителя оборудования MAC и это может помочь при организации атак.

  • Два уведомления newRoot и topologyChange, передаваемые в процессе расчета STP, могут инициировать проверку системой управления состояния мостов и перерасчета внутренней топологической информации. Это позволяет с помощью обманных уведомлений вынудить систему управления выполнять ненужные расчеты и генерировать дополнительный трафик SNMP, направленный мостам сети. Такие ложные уведомления могут быть частью атаки на отказ сетевых служб.

Протокол SNMP до версии SNMPv3 не обеспечивает адекватной защиты. Даже в защищенной сети (например, с помощью IPSec) нет возможности персонально контролировать доступ GET/SET (чтение, изменение, создание, удаление) к объектам данного модуля MIB.

Разработчикам рекомендуется рассмотреть функции защиты, обеспечиваемые SNMPv3 (см. раздел 8 [RFC3410]), включая полную поддержку криптографических механизмов SNMPv3 (для аутентификации и конфиденциальности).

Более того, развертывание версий SNMP до SNMPv3 не рекомендуется. Вместо этого рекомендуется использовать SNMPv3 и включать криптографическую защиту. Тогда на абонентов/операторов ложится ответственность за обеспечение того, чтобы объект SNMP, предоставляющий доступ к экземпляру этого модуля MIB, был правильно настроен для предоставления доступа к объектам лишь тем элементам (пользователям), которые имеют легитимные права выполнять операции GET или SET (изменить, создать, удалить).

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

Представленный здесь модуль MIB является трансляцией модуля BRIDGE-MIB, определенного в [RFC1493], с использованием синтаксиса SMIv2. Авторами исходного модуля SMIv1 были E. Decker, P. Langille, A. Rijsinghani и K. McCloghrie. Большое спасибо членам исходной рабочей группы Bridge за подготовку [RFC1493].

Документ был подготовлен от имени рабочей группы Bridge MIB в рамках направления Operations and Management под эгидой IETF. Авторы благодарны членам группы Bridge MIB, особенно Mike MacFadden, John Flick и Bert Visscher за их замечания и предложения, которые позволили улучшить документ. Juergen Schoenwaelder помог подготовить документ к публикации.

8. Контактная информация

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

E. Decker

P. Langille

A. Rijsinghan

Accton Technology Corporation

5 Mount Royal Ave

Marlboro, MA 01752

USA

K. McCloghrie

Cisco Systems, Inc.

170 West Tasman Drive

San Jose, CA 95134

USA

Преобразование в формат SMIv2 обеспечили перечисленные ниже участники работы.

Kenyon C. Norseth

L-3 Communications

640 N. 2200 West

Salt Lake City, Utah 84116-0850

USA

E. Bell

3Com Europe Limited

3Com Centre, Boundary Way

Hemel Hempstead Herts. HP2 7YU

UK

9. Отличия от RFC 1493

Ниже перечислены изменения, внесенные в RFC 1493.

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

  2. Добавлен объект dot1dStpPortPathCost32 для поддержки IEEE 802.1t.

  3. Разрешенные значения dot1dStpPriority и dot1dStpPortPriority были дополнительно разъяснены для мостов, поддерживающих IEEE 802.1t или IEEE 802.1w.

  4. Разъяснена интерпретация dot1dStpTimeSinceTopologyChange для мостов, поддерживающих протокол RSTP.

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

  6. Обновлены ссылки на документы IEEE 802.1d.

  7. Дополнения и разъяснения в текстах описаний.

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

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

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

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

[RFC2579] McCloghrie, K., Perkins, D., and J. Schoenwaelder, «Textual Conventions for SMIv2», STD 58, RFC 2579, April 1999.

[RFC2580] McCloghrie, K., Perkins, D., and J. Schoenwaelder, «Conformance Statements for SMIv2», STD 58, RFC 2580, April 1999.

[RFC3418] Presuhn, R., «Management Information Base (MIB) for the Simple Network Management Protocol (SNMP)», STD 62, RFC 3418, December 2002.

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

[IEEE8021D] IEEE Project 802 Local and Metropolitan Area Networks, «ANSI/IEEE Standard 802.1D-1998 MAC Bridges», March 1998.

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

[RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, «Introduction and Applicability Statements for Internet-Standard Management Framework», RFC 3410, December 2002.

[RFC1493] Decker, E., Langille, P., Rijsinghani, A., and K. McCloghrie, «Definitions of Managed Objects for Bridges», RFC 1493, July 1993.

[RFC1525] Decker, E., McCloghrie, K., Langille, P., and A. Rijsinghani, «Definitions of Managed Objects for Source Routing Bridges», RFC 1525, September 1993.

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

Kenyon C. Norseth (редактор)

L-3 Communications

640 N. 2200 West

Salt Lake City, Utah 84116-0850

USA

Phone: +1 801-594-2809

EMail: kenyon.c.norseth@L-3com.com

E. Bell (редактор)

3Com Europe Limited

3Com Centre, Boundary Way

Hemel Hempstead Herts. HP2 7YU

UK

Phone: +44 1442 438025

EMail: elbell@ntlworld.com


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

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

nmalykh@gmail.com

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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.


1Management Information Base — база данных для управления.

2Simple Network Management Protocol.

3Structure of Management Information — структура управляющей информации.

4Spanning Tree Protocol — протокол остовного (связующего) дерева.

5Rapid Spanning Tree Protocol — ускоренный протокол остовного дерева.

Рубрика: RFC | Комментарии к записи RFC 4188 Definitions of Managed Objects for Bridges отключены

RFC 4115 A Differentiated Service Two-Rate, Three-Color Marker with Efficient Handling of in-Profile Traffic

Network Working Group                                      O. Aboul-Magd
Request for Comments: 4115                                      S. Rabie
Category: Informational                                  Nortel Networks
                                                               July 2005

A Differentiated Service Two-Rate, Three-Color Marker with Efficient Handling of in-Profile Traffic

Дифференцированное обслуживание с 3-цветной маркировкой по 2 скоростям и эффективной обработкой трафика по профилю

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Замечание IESG

В этом RFC не представлен какой-либо стандарт Internet. IETF не дает каких-либо сведений о пригодности этого RFC для каких-либо целей и, в частности, отмечает, что решение о публикации принималось не на основе рецензии IETF в части таких аспектов, как безопасность, контроль перегрузок и неподобающее взаимодействие с развернутыми протоколами. Редактор RFC самостоятельно принимал решение о публикации документа. Читателям следует соблюдать осторожность при оценке пригодности документа для реализации или развертывания. Дополнительная информация об этом представлена в RFC 3932.

Аннотация

Этот документ описывает 3-цветную маркировку по 2 скоростям, которую можно применять для услуг передачи данных, включая Frame Relay. Маркеры могут служить для измерения трафика на уровне потока в расширяющихся услугах IP и L2 VPN. Определенный здесь маркер отличается от предложенных ранее в части обработки трафика по профилю (in-profile). Кроме того, маркер не задает требований к пиковой скорости для абонентских краевых устройств (CE1).

1. Введение

Для дифференцированных услуг определена архитектура QoS2 в сети Internet [RFC2475], двумя компонентами которой являются измерение и маркировка. В этом документе описан алгоритм измерения и маркировки с 3 цветами по 2 скоростям, который подходит для дифференцированных услуг, таких как IP и L2 VPN. Этот алгоритм применяется в службах передачи данных, включая Frame Relay.

Определенные здесь измерение и маркировка отличаются от предложенных в [RFC2697] и [RFC2698]. Отличие от [RFC2697] заключается в использовании маркера по 2 скоростям с 3 цветами (в [RFC2697] одна скорость), а от [RFC2698] — в способе задания параметров, который позволяет улучшить обработку по профилю для преобладающих сценариев обслуживания в более широком диапазоне параметров трафика.

Кроме того, описанный алгоритм избавляет устройства CE от формовать трафик в соответствии определенной пиковой скоростью (PIR3), как может потребоваться для маркеров [RFC2698], когда значение пикового размера всплесков (PBS4) меньше их согласованного размера (CBS5).

Описанный здесь маркер подходит для режимов color-blind (слепой) и color-aware, определенных в [RFC2698].

2. Настройка конфигурации

Работа маркера описывается двумя значениями скорости — согласованной (CIR6) и избыточной (EIR7), которые определяют скорость генерации маркеров (token) в корзине (token bucket), размер которых задают согласованная (CBS) и избыточная (EBS) величина всплесков, соответственно.

CBS и EBS измеряются в байтах и должны настраиваться так, чтобы быть больше ожидаемого максимального размера входящих PDU. CIR и EIR измеряются в бит/с и могут устанавливаться независимо одна от другой. Можно также связать CIR и EIR, задавая параметр продолжительности пиков T=CBS/CIR=EBS/EIR.

3. Измерение и маркировка

Поведение измерителя определяется его режимом и двумя корзинами маркеров C и E со скоростями CIR и EIR, соответственно, и размером CBS и EBS.

Корзины C и E исходно (время 0) полны, т. е. счетчики маркеров имеют значения Tc(0) = CBS и Te(0) = EBS. После этого счетчик Tc инкрементируется на 1 CIR раз в секунду (до CBS), а Te — EIR раз в секунду (до EBS).

В режиме color-aware предполагается, что алгоритм способен распознать цвет входящего пакета (green, yellow, red). Измерение в режиме color-aware описано ниже.

При поступлении зеленого пакета (green) размером B в момент t:

  • если Tc(t) — B > 0, пакет считается зеленым, а Tc(t) уменьшается на B;

  • если Te(t) — B > 0, пакет считается желтым (yellow), а Te(t) уменьшается на B;

  • пакет считается красным (red).

При поступлении желтого пакета (yellow) размером B в момент t:

  • если Te(t) — B > 0, пакет считается желтым (yellow), а Te(t) уменьшается на B;

  • пакет считается красным (red).

Входящие красные пакеты не проверяются и остаются красными.

В слепом (color-blind) режиме измеритель считает входящие пакеты зелеными и работа измерителя похожа на работу распознающего цвета измерителя для зеленых пакетов.

Отличительной особенностью алгоритма является то, что трафик в рамках заданного значения CIR маркируется зеленым напрямую без дополнительной проверки. Это является основным отличием от [RFC2698], где трафик маркируется зеленым после двух проверок (PIR и CIR). В любой из режимов color-blind или color-aware нужны 2 проверки соответствия, которые могут приводить к отбрасыванию пакета в корзине маркера PIR даже если он находится в рамках своего значения CIR (соответствующий профилю трафик). Кроме того, в режиме color-aware необходимость двух проверок может приводить к тому, что желтый трафик будет «истощать» входящие в рамках профиля зеленые пакеты.

Работа алгоритма проиллюстрирована на рисунке.

          +---------------------------------+
          |        Каждые T секунд          |
          | Tc(t+)=MIN(CBS, Tc(t-)+CIR*T)   |
          | Te(t+)=MIN(EBS, Te(t-)+EIR*T)   |
          +---------------------------------+

 Прибытие пакета
 размером B      /----------------\
---------------->|   color-blind  |
                 |       ИЛИ      |Да   +---------------+
                 |  green-пакет   |---->|  green-пакет  |
                 |        И       |     |Tc(t+)=Tc(t-)-B|
                 |    B <= Tc(t-) |     +---------------+
                 \----------------/
                         |
                         | Нет
                         v
                 /----------------\
                 |   color-blind  |
                 |       ИЛИ      |Да   +----------------+
                 |  НЕ red-пакет  |---->|  yellow-пакет  |
                 |        И       |     |Te(t+)=Te(t-)-B |
                 |    B <= Te(t-) |     +----------------+
                 \----------------/
                         |
                         | Нет
                         v
                 +---------------+
                 |   red-пакет   |
                 +---------------+

Рисунок 1. Алгоритм измерения и маркировки трафика.

На рисунке 1 X(t-) и X(t+) указывают значение параметра X до и после момента t.

4. Сценарий обслуживания

Описанный маркер можно применять для «окрашивания» потока пакетов IP в услугах, где зеленым, желтым и красным пакетам предоставляются убывающие гарантии (абсолютные или относительные). Например, служба может отбрасывать все красные пакеты, поскольку они выходят за пределы скорости обслуживания, пересылать желтые пакеты по возможности (best effort) и обеспечивать низкую вероятность потерь для зеленых. Маркировка может также применяться для измерения в службах L2 VPN, таких как доставка кадров Ethernet через сети IP.

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

Вопросы безопасности, связанные с этим документом, аналогичны рассмотренным в [RFC2697] и [RFC2698].

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

[RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., and W. Weiss, «An Architecture for Differentiated Service», RFC 2475, December 1998.

[RFC2697] Heinanen, J. and R. Guerin, «A Single Rate Three Color Marker», RFC 2697, September 1999.

[RFC2698] Heinanen, J. and R. Guerin, «A Two Rate Three Color Marker», RFC 2698, September 1999.

[RFC3932] Alvestrand, H., «The IESG and RFC Editor Documents: Procedures», BCP 92, RFC 3932, October 2004.


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

Osama Aboul-Magd

Nortel Networks

3500 Carling Ave

Ottawa, ON K2H8E9

EMail: osama@nortel.com

Sameh Rabie

Nortel Networks

3500 Carling Ave

Ottawa, ON K2H8E9

EMail: rabie@nortel.com


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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).
К этому документу применимы права, лицензии и ограничения, указанные в 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.


1Customer edge.

2Quality-of-service — качество обслуживания.

3Peak information rate.

4Peak burst size.

5Committed burst size — согласованный размер всплесков (пиков) трафика.

6Committed information rate.

7Excess information rate.

Рубрика: RFC | Комментарии к записи RFC 4115 A Differentiated Service Two-Rate, Three-Color Marker with Efficient Handling of in-Profile Traffic отключены

RFC 4113 Management Information Base for the User Datagram Protocol (UDP)

Network Working Group                                      B. Fenner
Request for Comments: 4113                      AT&T Labs - Research
Obsoletes: 2454, 2013                                       J. Flick
Category: Standards Track                    Hewlett-Packard Company
                                                           June 2005

MIB для протокола UDP

Management Information Base for the User Datagram Protocol (UDP)

PDF

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

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

Аннотация

В этом документе определяется часть MIB1 для использования с протоколами сетевого управления в сообществе Internet. В частности, документ определяет управляемые объекты, которые используются для реализации протокола UDP2 независимо от версии IP. Данный документ отменяет действие RFC 2013 и RFC 2454.

1. Стандартная модель управления Internet

Детальный обзор документов, описывающих стандартную модель управления Internet, содержится в главе 7 RFC 3410 [RFC3410].

Доступ к объектам обеспечивается через виртуальное хранилище информации, называемое MIB. Доступ к объектам MIB обычно обеспечивается с использованием протокола SNMP3. Объекты в базе MIB определяются с использованием механизмов, определенных в SMI4. В данном документе приводится спецификация модуля MIB, которая соответствует стандарту SMIv2, описанному в STD 58 ([RFC2578], [RFC2579] и [RFC2580]).

2. Обзор

В этом документе определяется часть MIB для использования с протоколами сетевого управления в сообществе Internet. В частности, документ определяет управляемые объекты, которые используются для реализации протокола UDP5 независимо от версии IP.

База UDP-MIB, определяемая в этом документе состоит из одной таблицы и группы скаляров:

  • Группа скаляров udp сообщает о параметрах и статистике протокола UDP. В эту группу после публикации RFC 2013 [RFC2013] были добавлены два скаляра udpHCInDatagrams и udpHCOutDatagrams, обеспечивающие возможность поддержки счетчиков для высокоскоростных сетей. Прекращается поддержка счетчиков sysUpTime, определенных в RFC 3418 [RFC3418].
  • Таблица udpEndpointTable обеспечивает доступ к информации о состоянии для всех конечных точек UDP, обслуживаемых данным модулем протокола UDP. Информация в таблице обеспечивается как для традиционных прослушивающих точек с udpTable, так и для “подключенных” точек UDP, которые воспринимают пакеты только от заданной удаленной системы. Таблица также обеспечивает идентификацию процессов уровня операционной системы, которые обслуживают соединения UDP. Адреса и порты конечных точек UDP в этой таблице представлены с использованием текстовых соглашений InetAddressType, InetAddress и InetPortNumber, определенных в RFC 4001 [RFC4001].

2.1. Связь с другими MIB

В этом параграфе обсуждаются связи данного модуля UDP-MIB с другими модулями MIB.

2.1.1. Связь с RFC1213-MIB

Связанные с протоколом UDP объекты MIB были изначально определены как часть RFC1213-MIB в документе RFC 1213 [RFC1213]. Связанные с UDP объекты RFC1213-MIB позднее были скопированы в отдельный модуль MIB и опубликованы в RFC 2013 [RFC2013] с использованием формата SMIv2. Обе предыдущие версии UDP-MIB включают определение udpTable, которое признано устаревшим и отменено по двум причинам:

  1. udpTable поддерживает только IPv4.Сейчас IETF предлагает создавать независимые от версии IP базы MIB, а не различные варианты для разных версий протокола IP. Такой подход избавляет от лишних операций при определении новых объектов, поскольку они добавляются только в одну базу. Следовательно, опубликованное в RFC 2454 [RFC2454] предложение о поддержке разных таблиц утратило силу.
  2. Таблица udpTable не позволяет описывать “подключенные” конечные точки UDP.“Подключенные” конечные точки отличаются по своему поведению и управлению от прослушивающих конечных точек. Добавление информации об удаленных конечных точках в таблицу udpEndpointTable позволяет добавлять специфические объекты для состояния и статистики “подключенных” конечных точек и соединений.

2.1.2. Связь с IPV6-UDP-MIB

База IPV6-UDP-MIB, определенная в RFC 2454 [RFC2454], была перемещена в число архивных по причине отказа от поддержки различных баз для разных версий протокола IP. Следовательно, реализация RFC 2454 не имеет смысла.

Отметим, что в силу того, что наблюдаемые в сети адреса представлены типами IPv4z и IPv6z, больше не возникает необходимости явного включения ifIndex в параграф index таблицы udpEndpointTable. Это является отличием от использования ipv6UdpIfIndex в RFC 2454.

2.1.3. Связь с HOST-RESOURCES-MIB и SYSAPPL-MIB

Таблица udpEndpointTable содержит идентификаторы процессов уровня операционной системы, которые обслуживают “подключенные” или прослушивающие конечные точки. Значение возвращается как Unsigned32 и предполагается, что это значение совпадает с hrSWRunIndex из HOST-RESOURCES-MIB [RFC2790] (если значение меньше 2147483647) или sysApplElmtRunIndex из SYSAPPL-MIB [RFC2287]. Такой подход позволяет управляющим приложениям идентифицировать соединения UDP, которые относятся к процессам уровня ОС и используют проверенную рабочую среду.

3. Определения

   UDP-MIB DEFINITIONS ::= BEGIN

   IMPORTS
       MODULE-IDENTITY, OBJECT-TYPE, Integer32, Counter32, Counter64,
       Unsigned32, IpAddress, mib-2       FROM SNMPv2-SMI
       MODULE-COMPLIANCE, OBJECT-GROUP    FROM SNMPv2-CONF
       InetAddress, InetAddressType,
       InetPortNumber                     FROM INET-ADDRESS-MIB;

   udpMIB MODULE-IDENTITY
       LAST-UPDATED "200505200000Z"  -- May 20, 2005
       ORGANIZATION
              "IETF IPv6 Working Group
               http://www.ietf.org/html.charters/ipv6-charter.html"
       CONTACT-INFO
              "Bill Fenner (editor)

               AT&T Labs -- Research
               75 Willow Rd.
               Menlo Park, CA 94025

               Phone: +1 650 330-7893
               Email: <fenner@research.att.com>

               John Flick (editor)

               Hewlett-Packard Company
               8000 Foothills Blvd. M/S 5557
               Roseville, CA 95747

               Phone: +1 916 785 4018
               Email: <john.flick@hp.com>

               Send comments to <ipv6@ietf.org>"

       DESCRIPTION
              "The MIB module for managing UDP implementations.
               Copyright (C) The Internet Society (2005).  This
               version of this MIB module is part of RFC 4113;
               see the RFC itself for full legal notices."
       REVISION      "200505200000Z"  -- May 20, 2005
       DESCRIPTION
              "IP version neutral revision, incorporating the
               following revisions:

               - Added udpHCInDatagrams and udpHCOutDatagrams in order
                 to provide high-capacity counters for fast networks.
               - Added text to the descriptions of all counter objects
                 to indicate how discontinuities are detected.
               - Deprecated the IPv4-specific udpTable and replaced it
                 with the version neutral udpEndpointTable.  This
                 table includes support for connected UDP endpoints
                 and support for identification of the operating
                 system process associated with a UDP endpoint.
               - Deprecated the udpGroup and replaced it with object
                 groups representing the current set of objects.
               - Deprecated udpMIBCompliance and replaced it with
                 udpMIBCompliance2, which includes the compliance
                 information for the new object groups.

               This version published as RFC 4113."
       REVISION      "199411010000Z"    -- November 1, 1994
       DESCRIPTION
              "Initial SMIv2 version, published as RFC 2013."
       REVISION      "199103310000Z"    -- March 31, 1991
       DESCRIPTION
              "The initial revision of this MIB module was part of
               MIB-II, published as RFC 1213."
       ::= { mib-2 50 }

   -- the UDP group

   udp      OBJECT IDENTIFIER ::= { mib-2 7 }

   udpInDatagrams OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
              "The total number of UDP datagrams delivered to UDP
               users.
               Discontinuities in the value of this counter can occur
               at re-initialization of the management system, and at
               other times as indicated by discontinuities in the
               value of sysUpTime."
       ::= { udp 1 }

   udpNoPorts OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
              "The total number of received UDP datagrams for which
               there was no application at the destination port.

               Discontinuities in the value of this counter can occur
               at re-initialization of the management system, and at
               other times as indicated by discontinuities in the
               value of sysUpTime."
       ::= { udp 2 }

   udpInErrors OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
              "The number of received UDP datagrams that could not be
               delivered for reasons other than the lack of an
               application at the destination port.

               Discontinuities in the value of this counter can occur
               at re-initialization of the management system, and at
               other times as indicated by discontinuities in the
               value of sysUpTime."
       ::= { udp 3 }

   udpOutDatagrams OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
              "The total number of UDP datagrams sent from this
               entity.

               Discontinuities in the value of this counter can occur
               at re-initialization of the management system, and at
               other times as indicated by discontinuities in the
               value of sysUpTime."
       ::= { udp 4 }

   udpHCInDatagrams OBJECT-TYPE
       SYNTAX     Counter64
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
              "The total number of UDP datagrams delivered to UDP
               users, for devices that can receive more than 1
               million UDP datagrams per second.

               Discontinuities in the value of this counter can occur
               at re-initialization of the management system, and at
               other times as indicated by discontinuities in the
               value of sysUpTime."
       ::= { udp 8 }

   udpHCOutDatagrams OBJECT-TYPE
       SYNTAX     Counter64
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
              "The total number of UDP datagrams sent from this
               entity, for devices that can transmit more than 1
               million UDP datagrams per second.

               Discontinuities in the value of this counter can occur
               at re-initialization of the management system, and at
               other times as indicated by discontinuities in the
               value of sysUpTime."
       ::= { udp 9 }

   --
   -- { udp 6 } was defined as the ipv6UdpTable in RFC2454's
   -- IPV6-UDP-MIB.  This RFC obsoletes RFC 2454, so { udp 6 } is
   -- obsoleted.
   --

   -- The UDP "Endpoint" table.

   udpEndpointTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UdpEndpointEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "A table containing information about this entity's UDP
               endpoints on which a local application is currently
               accepting or sending datagrams.
               The address type in this table represents the address
               type used for the communication, irrespective of the
               higher-layer abstraction.  For example, an application
               using IPv6 'sockets' to communicate via IPv4 between
               ::ffff:10.0.0.1 and ::ffff:10.0.0.2 would use
               InetAddressType ipv4(1).

               Unlike the udpTable in RFC 2013, this table also allows
               the representation of an application that completely
               specifies both local and remote addresses and ports.  A
               listening application is represented in three possible
               ways:

               1) An application that is willing to accept both IPv4
                  and IPv6 datagrams is represented by a
                  udpEndpointLocalAddressType of unknown(0) and a
                  udpEndpointLocalAddress of ''h (a zero-length
                  octet-string).

               2) An application that is willing to accept only IPv4
                  or only IPv6 datagrams is represented by a
                  udpEndpointLocalAddressType of the appropriate
                  address type and a udpEndpointLocalAddress of
                  '0.0.0.0' or '::' respectively.

               3) An application that is listening for datagrams only
                  for a specific IP address but from any remote
                  system is represented by a
                  udpEndpointLocalAddressType of the appropriate
                  address type, with udpEndpointLocalAddress
                  specifying the local address.

               In all cases where the remote is a wildcard, the
               udpEndpointRemoteAddressType is unknown(0), the
               udpEndpointRemoteAddress is ''h (a zero-length
               octet-string), and the udpEndpointRemotePort is 0.

               If the operating system is demultiplexing UDP packets
               by remote address and port, or if the application has
               'connected' the socket specifying a default remote
               address and port, the udpEndpointRemote* values should
               be used to reflect this."
       ::= { udp 7 }

   udpEndpointEntry OBJECT-TYPE
       SYNTAX     UdpEndpointEntry
       MAX-ACCESS not-accessible
       STATUS     current

       DESCRIPTION
              "Information about a particular current UDP endpoint.

               Implementers need to be aware that if the total number
               of elements (octets or sub-identifiers) in
               udpEndpointLocalAddress and udpEndpointRemoteAddress
               exceeds 111, then OIDs of column instances in this table
               will have more than 128 sub-identifiers and cannot be
               accessed using SNMPv1, SNMPv2c, or SNMPv3."
       INDEX   { udpEndpointLocalAddressType,
                 udpEndpointLocalAddress,
                 udpEndpointLocalPort,
                 udpEndpointRemoteAddressType,
                 udpEndpointRemoteAddress,
                 udpEndpointRemotePort,
                 udpEndpointInstance }
       ::= { udpEndpointTable 1 }

   UdpEndpointEntry ::= SEQUENCE {
           udpEndpointLocalAddressType   InetAddressType,
           udpEndpointLocalAddress       InetAddress,
           udpEndpointLocalPort          InetPortNumber,
           udpEndpointRemoteAddressType  InetAddressType,
           udpEndpointRemoteAddress      InetAddress,
           udpEndpointRemotePort         InetPortNumber,
           udpEndpointInstance           Unsigned32,
           udpEndpointProcess            Unsigned32
       }

   udpEndpointLocalAddressType OBJECT-TYPE
       SYNTAX     InetAddressType
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "The address type of udpEndpointLocalAddress.  Only
               IPv4, IPv4z, IPv6, and IPv6z addresses are expected, or
               unknown(0) if datagrams for all local IP addresses are
               accepted."
       ::= { udpEndpointEntry 1 }

   udpEndpointLocalAddress OBJECT-TYPE
       SYNTAX     InetAddress
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "The local IP address for this UDP endpoint.

               The value of this object can be represented in three
               possible ways, depending on the characteristics of the
               listening application:

               1. For an application that is willing to accept both
                  IPv4 and IPv6 datagrams, the value of this object
                  must be ''h (a zero-length octet-string), with
                  the value of the corresponding instance of the
                  udpEndpointLocalAddressType object being unknown(0).

               2. For an application that is willing to accept only IPv4
                  or only IPv6 datagrams, the value of this object
                  must be '0.0.0.0' or '::', respectively, while the
                  corresponding instance of the
                  udpEndpointLocalAddressType object represents the
                  appropriate address type.

               3. For an application that is listening for data
                  destined only to a specific IP address, the value
                  of this object is the specific IP address for which
                  this node is receiving packets, with the
                  corresponding instance of the
                  udpEndpointLocalAddressType object representing the
                  appropriate address type.

               As this object is used in the index for the
               udpEndpointTable, implementors of this table should be
               careful not to create entries that would result in OIDs
               with more than 128 subidentifiers; else the information
               cannot be accessed using SNMPv1, SNMPv2c, or SNMPv3."
       ::= { udpEndpointEntry 2 }

   udpEndpointLocalPort OBJECT-TYPE
       SYNTAX     InetPortNumber
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "The local port number for this UDP endpoint."
       ::= { udpEndpointEntry 3 }

   udpEndpointRemoteAddressType OBJECT-TYPE
       SYNTAX     InetAddressType
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "The address type of udpEndpointRemoteAddress.  Only
               IPv4, IPv4z, IPv6, and IPv6z addresses are expected, or
               unknown(0) if datagrams for all remote IP addresses are
               accepted.  Also, note that some combinations of
               udpEndpointLocalAdressType and
               udpEndpointRemoteAddressType are not supported.  In
               particular, if the value of this object is not
               unknown(0), it is expected to always refer to the
               same IP version as udpEndpointLocalAddressType."
       ::= { udpEndpointEntry 4 }

   udpEndpointRemoteAddress OBJECT-TYPE
       SYNTAX     InetAddress
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "The remote IP address for this UDP endpoint.  If
               datagrams from any remote system are to be accepted,
               this value is ''h (a zero-length octet-string).
               Otherwise, it has the type described by
               udpEndpointRemoteAddressType and is the address of the
               remote system from which datagrams are to be accepted
               (or to which all datagrams will be sent).

               As this object is used in the index for the
               udpEndpointTable, implementors of this table should be
               careful not to create entries that would result in OIDs
               with more than 128 subidentifiers; else the information
               cannot be accessed using SNMPv1, SNMPv2c, or SNMPv3."
       ::= { udpEndpointEntry 5 }

   udpEndpointRemotePort OBJECT-TYPE
       SYNTAX     InetPortNumber
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "The remote port number for this UDP endpoint.  If
               datagrams from any remote system are to be accepted,
               this value is zero."
       ::= { udpEndpointEntry 6 }

   udpEndpointInstance OBJECT-TYPE
       SYNTAX     Unsigned32 (1..'ffffffff'h)
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "The instance of this tuple.  This object is used to
               distinguish among multiple processes 'connected' to
               the same UDP endpoint.  For example, on a system
               implementing the BSD sockets interface, this would be
               used to support the SO_REUSEADDR and SO_REUSEPORT
               socket options."

       ::= { udpEndpointEntry 7 }

   udpEndpointProcess OBJECT-TYPE
       SYNTAX     Unsigned32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
              "The system's process ID for the process associated with
               this endpoint, or zero if there is no such process.
               This value is expected to be the same as
               HOST-RESOURCES-MIB::hrSWRunIndex or SYSAPPL-MIB::
               sysApplElmtRunIndex for some row in the appropriate
               tables."
       ::= { udpEndpointEntry 8 }

   -- The deprecated UDP Listener table

   -- The deprecated UDP listener table only contains information
   -- about this entity's IPv4 UDP end-points on which a local
   -- application is currently accepting datagrams.  It does not
   -- provide more detailed connection information, or information
   -- about IPv6 endpoints.

   udpTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UdpEntry
       MAX-ACCESS not-accessible
       STATUS     deprecated
       DESCRIPTION
              "A table containing IPv4-specific UDP listener
               information.  It contains information about all local
               IPv4 UDP end-points on which an application is
               currently accepting datagrams.  This table has been
               deprecated in favor of the version neutral
               udpEndpointTable."
       ::= { udp 5 }

   udpEntry OBJECT-TYPE
       SYNTAX     UdpEntry
       MAX-ACCESS not-accessible
       STATUS     deprecated
       DESCRIPTION
              "Information about a particular current UDP listener."
       INDEX   { udpLocalAddress, udpLocalPort }
       ::= { udpTable 1 }

   UdpEntry ::= SEQUENCE {
       udpLocalAddress   IpAddress,
       udpLocalPort      Integer32
   }

   udpLocalAddress OBJECT-TYPE
       SYNTAX     IpAddress
       MAX-ACCESS read-only
       STATUS     deprecated
       DESCRIPTION
              "The local IP address for this UDP listener.  In the
               case of a UDP listener that is willing to accept
               datagrams for any IP interface associated with the
               node, the value 0.0.0.0 is used."
       ::= { udpEntry 1 }

   udpLocalPort OBJECT-TYPE
       SYNTAX     Integer32 (0..65535)
       MAX-ACCESS read-only
       STATUS     deprecated
       DESCRIPTION
              "The local port number for this UDP listener."
       ::= { udpEntry 2 }

   -- conformance information

   udpMIBConformance OBJECT IDENTIFIER ::= { udpMIB 2 }
   udpMIBCompliances OBJECT IDENTIFIER ::= { udpMIBConformance 1 }
   udpMIBGroups      OBJECT IDENTIFIER ::= { udpMIBConformance 2 }

   -- compliance statements

   udpMIBCompliance2 MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
              "The compliance statement for systems that implement
               UDP.

               There are a number of INDEX objects that cannot be
               represented in the form of OBJECT clauses in SMIv2, but
               for which we have the following compliance
               requirements, expressed in OBJECT clause form in this
               description clause:

               -- OBJECT      udpEndpointLocalAddressType
               -- SYNTAX      InetAddressType { unknown(0), ipv4(1),
               --                               ipv6(2), ipv4z(3),
               --                               ipv6z(4) }
               -- DESCRIPTION
               --     Support for dns(5) is not required.
               -- OBJECT      udpEndpointLocalAddress
               -- SYNTAX      InetAddress (SIZE(0|4|8|16|20))
               -- DESCRIPTION
               --     Support is only required for zero-length
               --     octet-strings, and for scoped and unscoped
               --     IPv4 and IPv6 addresses.
               -- OBJECT      udpEndpointRemoteAddressType
               -- SYNTAX      InetAddressType { unknown(0), ipv4(1),
               --                               ipv6(2), ipv4z(3),
               --                               ipv6z(4) }
               -- DESCRIPTION
               --     Support for dns(5) is not required.
               -- OBJECT      udpEndpointRemoteAddress
               -- SYNTAX      InetAddress (SIZE(0|4|8|16|20))
               -- DESCRIPTION
               --     Support is only required for zero-length
               --     octet-strings, and for scoped and unscoped
               --     IPv4 and IPv6 addresses.
              "
       MODULE  -- this module
            MANDATORY-GROUPS { udpBaseGroup, udpEndpointGroup }
            GROUP       udpHCGroup
            DESCRIPTION
                   "This group is mandatory for systems that
                    are capable of receiving or transmitting more than
                    1 million UDP datagrams per second.  1 million
                    datagrams per second will cause a Counter32 to
                    wrap in just over an hour."
       ::= { udpMIBCompliances 2 }

   udpMIBCompliance MODULE-COMPLIANCE
       STATUS     deprecated
       DESCRIPTION
              "The compliance statement for IPv4-only systems that
               implement UDP.  For IP version independence, this
               compliance statement is deprecated in favor of
               udpMIBCompliance2.  However, agents are still
               encouraged to implement these objects in order to
               interoperate with the deployed base of managers."
       MODULE  -- this module
           MANDATORY-GROUPS { udpGroup }
       ::= { udpMIBCompliances 1 }

   -- units of conformance

   udpGroup OBJECT-GROUP
       OBJECTS   { udpInDatagrams, udpNoPorts,
                   udpInErrors, udpOutDatagrams,
                   udpLocalAddress, udpLocalPort }
       STATUS     deprecated
       DESCRIPTION
              "The deprecated group of objects providing for
               management of UDP over IPv4."
       ::= { udpMIBGroups 1 }

   udpBaseGroup OBJECT-GROUP
       OBJECTS   { udpInDatagrams, udpNoPorts, udpInErrors,
                   udpOutDatagrams }
       STATUS     current
       DESCRIPTION
              "The group of objects providing for counters of UDP
               statistics."
       ::= { udpMIBGroups 2 }

   udpHCGroup OBJECT-GROUP
       OBJECTS   { udpHCInDatagrams, udpHCOutDatagrams }
       STATUS     current
       DESCRIPTION
              "The group of objects providing for counters of high
               speed UDP implementations."
       ::= { udpMIBGroups 3 }

   udpEndpointGroup OBJECT-GROUP
       OBJECTS    { udpEndpointProcess }
       STATUS     current
       DESCRIPTION
              "The group of objects providing for the IP version
               independent management of UDP 'endpoints'."
       ::= { udpMIBGroups 4 }

   END

 

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

Этот документ содержит обновленные фрагменты RFC 1213 и заменяет собой RFC 2013 и 2454. Благодарим авторов и редакторов этих документов за прекрасно выполненную работу.

5. Участники

Этот документ является результатом работы команды по пересмотру IPv6 MIB и авторов предыдущих версий документа:

Bill Fenner, AT&T Labs — Research

Email: fenner@research.at.com

 

Brian Haberman

Email: brian@innovationslab.net

 

Shawn A. Routhier, Wind River

Email: sar@epilogue.com

 

Juergen Schoenwalder, TU Braunschweig

Email: schoenw@ibr.cs.tu-bs.de

 

Dave Thaler, Microsoft

Email: dthaler@windows.microsoft.com

 

В документ включено много текста из RFC1213/RFC2013, подготовленных Keith McCloghrie, и структура MIB следует указанным документам.

Mike Daniele написал исходный документ IPv6 UDP MIB (RFC2454).

Juergen Schoenwalder подготовил много текста для раздела 2.

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

В данной базе MIB не определено объектов, которые имеют в MAX-ACCESS значение read-write и/или read-create. Следовательно, при корректной реализации MIB не возникает риска создания или изменения злоумышленником объектов в данном модуле MIB с помощью прямых операций SNMP SET.

Некоторые из доступных для чтения объектов в MIB (т.е., объектов, для которых значение MAX-ACCESS отличается от not-accessible), которые могут рассматриваться как уязвимые или чувствительные к атакам в некоторых сетевых средах. Следовательно, важно контролировать доступ к таким объектам с помощью GET и/или NOTIFY и может быть даже шифровать значения этих объектов при передаче данных через сеть по протоколу SNMP. Ниже перечислены таблицы и объекты с указанием их “слабых” мест.

Индексы таблиц udpEndpointTable и udpTable содержат информацию о “слушателях”. В частности, объекты udpEndpointLocalPort и udpLocalPort можно использовать для идентификации открытых портов и организации атаки на эти порты без использования сканера портов.

Версии SNMP до SNMPv3 не обеспечивают требуемого уровня безопасности. Даже если сеть обеспечивает безопасность (например, с помощью IPSec), не существует способа контроля доступа для операций GET/SET (чтение/изменение/создание/удаление) по отношению к объектам данного модуля MIB.

Разработчикам рекомендуется рассмотреть средства безопасности, обеспечиваемые протоколом SNMPv3 (см. [RFC3410], глава 8), включая полную поддержку криптографических механизмов SNMPv3 для аутентификации и приватности.

Более того, не рекомендуется развертывать системы SNMP с версиями до SNMPv3. Рекомендуется использовать SNMPv3 и включать криптографические механизмы. В этом случае ответственность за доступ к объектам данного модуля MIB ложится на пользователя/оператора, которому следует настроить конфигурацию таким образом, чтобы соответствующий доступ получали лишь уполномоченные пользователи с четким разделением прав доступа к операциям GET и SET (изменение/создание/удаление).

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

Модуль MIB, описанный в данном документе, использует следующие значения идентификаторов объекта, выделенные IANA и внесенные в реестр SMI Numbers:

Дескриптор

Значение OBJECT IDENTIFIER

udp

{ mib-2 7}

udpMIB

{ mib-2 50 }

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

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

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

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

[RFC2579] McCloghrie, K., Perkins, D., and J. Schoenwaelder, «Textual Conventions for SMIv2», STD 58, RFC 2579, April 1999.

[RFC2580] McCloghrie, K., Perkins, D., and J. Schoenwaelder, «Conformance Statements for SMIv2», STD 58, RFC 2580, April 1999.

[RFC3418] Presuhn, R., «Management Information Base (MIB) for the Simple Network Management Protocol (SNMP)», STD 62, RFC 3418, December 2002.

[RFC4001] Daniele, M., Haberman, B., Routhier, S., and J. Schoenwaelder, «Textual Conventions for Internet Network Addresses», RFC 4001, February 2005.

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

[RFC1213] McCloghrie, K. and M. Rose, «Management Information Base for Network Management of TCP/IP-based internets:MIB-II», STD 17, RFC 1213, March 1991.

[RFC2013] McCloghrie, K., «SNMPv2 Management Information Base for the User Datagram Protocol using SMIv2», RFC 2013, November 1996.

[RFC2287] Krupczak, C. and J. Saperia, «Definitions of System-Level Managed Objects for Applications», RFC 2287, February 1998.

[RFC2454] Daniele, M., «IP Version 6 Management Information Base for the User Datagram Protocol», RFC 2454, December 1998.

[RFC2790] Waldbusser, S. and P. Grillo, «Host Resources MIB», RFC 2790, March 2000.

[RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, «Introduction and Applicability Statements for Internet-Standard Management Framework», RFC 3410, December 2002.

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

Bill Fenner

AT&T Labs — Research

75 Willow Rd

Menlo Park, CA 94025

USA

EMail: fenner@research.att.com

 

John Flick

Hewlett-Packard Company

8000 Foothills Blvd. M/S 5557

Roseville, CA 95747-5557

USA

EMail: john.flick@hp.com


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

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

nmalykh@gmail.com

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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.


1Management Information Base

2User Datagram Protocol

3Simple Network Management Protocol – простой протокол сетевого управления.

4Structure of Management Information – структура данных управления.

5User Datagram Protocol

 

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

RFC 4086 Randomness Requirements for Security

Network Working Group                                   D. Eastlake, 3rd
Request for Comments: 4086                         Motorola Laboratories
BCP: 106                                                     J. Schiller
Obsoletes: 1750                                                      MIT
Category: Best Current Practice                               S. Crocker
                                                               June 2005

Требования к случайным значениям для безопасности

Randomness Requirements for Security

PDF

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

Этот документ служит для обмена опытом (Best Current Practices) в сообществе Internet и служит приглашением к дискуссии в целях дальнейшего развития. Документ может распространяться свободно.

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

Copyright (C) The Internet Society (2005).

Аннотация

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

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

Оглавление

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

1. Введение и обзор

Программная криптография применяется все более широко, но еще не стала всеобъемлющей. Системы типа SSH, IPSEC, TLS, S/MIME, PGP, DNSSEC и Kerberos достаточно развиты и стали частью «сетевого ландшафта» [SSH] [IPSEC] [TLS] [S/MIME] [MAIL_PGP*] [DNSSEC*]. Для сравнения, на момент подготовки предыдущей версии этого документа [RFC1750] в 1994 г., единственной криптографической спецификацией Internet в рамках IETF был протокол Privacy Enhanced Mail [MAIL_PEM*].

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

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

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

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

2. Основные требования

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

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

Протокол TCP/IP также использует хаотические (случайные) значения для начальных порядковых номеров [RFC1948].

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

В некоторых случаях — например, использование симметричного шифрования с одноразовыми паролями или алгоритмов типа [AES1], стороны, желающие обеспечить конфиденциальность и/или аутентификацию обмена данными между собой, должны знать общий секретный ключ. В других ситуациях, когда применяются асимметричные методы шифрования с открытым ключом (public key), ключи являются парными. Один ключ в такой паре является секретным (private) и должен быть известен лишь одной стороне, а второй — открытым (public) и может быть опубликован для общего доступа. Определить секретный ключ по открытому вычислительными средствами невозможно и знание открытого ключа не поможет злоумышленнику [ASYMMETRIC]. Общие вопросы шифрования рассмотрены в работах [SCHNEIER, FERGUSON, KAUFMAN].

Требования к случайным величинам по частоте и объему существенно отличаются в разных криптографических системах. Для чистого RSA случайные значения требуются только при генерации новой пары ключей, а после этого можно подписать любое число сообщений без дополнительных потребностей в случайных значениях. Для основанного на открытых ключах алгоритма DSA2, разработанного в NIST3, требуются качественные случайные значения при создании каждой подписи [DSS]. А шифрование с «одноразовым блокнотом» (one-time pad — в принципе, наиболее сильный из возможных методов шифрования) требует хаотичность равного объема для всех обрабатываемых сообщений. Общие вопросы шифрования рассмотрены в работах [SCHNEIER, FERGUSON, KAUFMAN].

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

                              -----
                              \
            Биты информации =  \     - pi * log2 ( pi )
                               /
                              /
                              -----

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

Если имеется 2n различных равновероятных значений, злоумышленник должен будет подобрать значения n битов, а для этого потребуется перебрать в среднем половину возможных значений или 2(n-1). Если вероятность различных значений разная, объем информации снижается и злоумышленнику в среднем потребуется меньше усилий. В частности, возможность исключения злоумышленником тех или иных значений, как невозможных или маловероятных, упрощает его работу, позволяя в первую очередь проверять наиболее вероятные значения.

Рассмотрим, например, криптосистему со 128-битовыми ключами. Если эти ключи создаются с использованием фиксированного генератора псевдослучайных чисел, который работает с 8-битовой затравкой (seed), нарушителю потребуется перебрать лишь 256 ключей (запуская генератор псевдослучайных чисел с каждым из возможных значений seed), а не 2128, как могло показаться. В таких 128-битовых ключах содержится лишь 8 битов «информации».

Хотя приведенный выше анализ в общем случае корректен, он может вводить в заблуждение для некоторых случаев криптоанализа, которые могут играть важную роль в действиях нарушителей. В качестве примера предположим, что имеется генератор псевдослучайных чисел, создающий 128-битовые ключи (как в предыдущем примере), который первую половину времени генерирует 0, а во вторую выбирает случайное значение из оставшихся 2128 — 1. Приведенное выше уравнение Шеннона говорит о том, что в таких ключах будет содержаться 64 бита информации, но злоумышленник может нарушить защиту для первой половины случаев, просто попробовав значение 0. Поэтому для криптографических целей полезно также принимать во внимание другие характеристики, типа минимальной энтропии

        min-entropy =  - log  ( maximum ( pi ) )

где параметр i имеет описанный выше смысл. Используя это уравнение мы получим 1 бит min-entropy для предложенного выше распределения в отличие от 64 битов для классической энтропии Шеннона.

Был определен непрерывный спектр значений энтропии (иногда его называют энтропией Renyi), задаваемый параметром r. Случай r = 1 соответствует энтропии Шеннона, а бесконечное значение r — min-entropy. При r = 0 это просто log(n), где n указывает число отличных от нуля вероятностей. Энтропия Renyi представляет собой невозрастающую функцию r, поэтому min-entropy всегда является наиболее консервативной мерой энтропии и обычно лучше всего подходит для криптографической оценки [LUBY].

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

Например, использование широко распространенных постоянных последовательностей типа стандартных математических таблиц CRC является очень слабой защитой от злоумышленников. Нарушители, знающие или догадывающиеся об этом, смогут легко разрушить любую защиту (прошлую или будущую), основанную на последовательностях [CRC]. Другим примером может быть использование AES с постоянным ключом для шифрования последовательности целых чисел (типа 1, 2, 3, …), которое на выходе будет давать превосходную статистически хаотичность, которая будет полностью предсказуемой. С другой стороны, последовательное бросание кубика с символом ASCII на каждой грани будет давать статистически слабую хаотичность, но достаточно высокую непредсказуемость. Поэтому подчеркнем, что результаты статистических тестов ничего не говорят о предсказуемости.

3. Источники энтропии

Как правило источники энтропии сильно зависят от реализации. После накопления достаточно объема энтропии, она применяется в качестве затравки для создания нужного объема криптостойких псевдослучайных значений, как описано в разделах 6 и 7, после чего выполняется нормализация (de-skewed4) или смешивание, как описано в разделах 4 и 5.

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

Тепловой шум (иногда называемый шумом Джонсона в микросхемах) или радиоактивный источник и высокочастотный автогенератор5 (free-running oscillator) может обеспечить прямое решение задачи [GIFFORD]. Оно включает немного оборудования, которое легко включить в архитектуру компьютерной системы в качестве составной части. Подходит также большинство входных аудио- видео-устройств [TURBID]. Кроме того, любая система с вращающимся диском или кольцевым генератором (ring oscillator) и стабильными (кварцевыми) часами или чем-то похожим может служить подходящим источником хаотичности ([DAVIS] и параграф 3.3). Для этого нужно лишь признание со стороны производителей компьютерного оборудования целесообразности добавления в системы небольшого объема оборудования и программ для доступа к нему.

Комитет ANSI X9 в настоящее время занимается разработкой стандарта, включающего раздел, посвященный источникам энтропии (см. часть 2 [X9.82]).

3.1. Требуемый объем

Какой объем непредсказуемых данных нужен? Можно ли сформулировать количественные требования для этого (например, число непредсказуемых битов в секунду)?

Ответ на эти вопросы не так прост, как хотелось бы. Для AES ключ может иметь размер 128 битов и, как показано в примере раздела 8, даже для самых защищенных систем вряд ли потребуется больше 200 битов ключевого материала. Если нужна серия ключей, их можно создать из достаточно случайной затравки (стартовое значение), используя криптостойкую последовательность, как описано в параграфе 6.2. Нескольких сотен битов, генерируемых при запуске или однократно в течение дня, достаточно при использовании таких методов. Даже если случайные биты генерируются по одному в секунду и невозможно «распараллелить» процесс их генерации, ожидание в течение 200 секунд для требующих сильной защиты приложений не будет, скорей всего, критичным.

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

3.2. Оборудование, которое можно применить

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

3.2.1. Использование имеющихся видео-аудио входов

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

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

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

        cat /dev/audio | compress - >random-bits-file

Подробное описание этого типа источников хаотичности приведено в [TURBID].

3.2.2. Использование имеющихся дисков

Дисковые накопители имеют небольшие случайные флуктуации скорости вращения, обусловленные хаотической турбулентностью в воздухе [DAVIS, Jakobsson]. Измерение времени поиска на диске (seek-time) на низком уровне позволяет получить последовательность случайных значений. Эти данные обычно имеют сильную корреляцию, поэтому требуется их существенная обработка, как описано ниже в параграфе 5.2. Тем не менее, многолетние эксперименты показывают, что при использовании такой обработки даже медленные диски легко позволяют получить 100 и более битов в минуту случайных данных превосходного качества.

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

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

3.3. Кольцевые генераторы

При проектировании или программировании микросхемы можно соединить в кольцо нечетное количество логических элементов для создания автогенератора (free-running oscillator). Делая выборки в какой-либо точке кольца через одинаковые интервалы времени (например, синхронизируемые от внешнего стабильного генератора), можно получить некоторый объем хаотичности, обусловленной вариациями частоты колебаний автогенератора. Можно повысить скорость сбора энтропии, используя операцию XOR для выборок от нескольких кольцевых генераторов простым числом логических элементов. Иногда рекомендуют в таких случаях использовать нечетное число колец, чтобы даже при возникновении синхронизации между кольцами значения результирующей выборки менялись. Другим источником данных для выборки может служить шумящий диод.

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

Например, в стандарте IEEE 802.11i предлагается использование устройства, показанного на рисунке, с изоляцией каждого кольца для предотвращения нежелательной синхронизации и последующей дополнительной обработкой результата [IEEE_802.11i].

             |\     |\                |\
         +-->| >0-->| >0-- всего 19 --| >0--+-------+
         |   |/     |/                |/    |       |
         |                                  |       |
         +----------------------------------+       V
                                                 +-----+
             |\     |\                |\         |     | выход
         +-->| >0-->| >0-- всего 23 --| >0--+--->| XOR |------>
         |   |/     |/                |/    |    |     |
         |                                  |    +-----+
         +----------------------------------+      ^ ^
                                                   | |
             |\     |\                |\           | |
         +-->| >0-->| >0-- всего 29 --| >0--+------+ |
         |   |/     |/                |/    |        |
         |                                  |        |
         +----------------------------------+        |
                                                     |
           Другие случайности (при наличии) ---------+

3.4. Часы и порядковые номера

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

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

Использование аппаратных номеров (например, MAC-адресов Ethernet) обеспечивает значительно меньше уникальных битов, чем может казаться. Такие значения обычно хорошо структурированы и субполя имеют ограниченные диапазоны возможных значений, а значения номеров в целом могут быть легко предсказуемыми на основании даты выпуска или других данных. Например, очевидно, что компания, производящая компьютеры и адаптеры Ethernet, будет скорей всего использовать сетевые адаптеры собственного производства и это существенно ограничивает диапазон возможных адресов.

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

3.5. Синхронизация и значения от внешних событий

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

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

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

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

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

3.6. Неаппаратные источники хаотичности

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

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

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

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

4. Нормализация

Есть ли какие-то конкретный требования к форме распределения значений, собираемых для энтропии с целью генерации случайных чисел? Хорошая новость заключается в том, что такое распределение не обязательно должно быть однородным. Требуется лишь консервативная оценка степени неоднородности этого распределения. Ниже описаны простые методы выравнивания (de-skew) битового потока, а в параграфе 5.2 — более сильные криптографические методы.

4.1. Использование четности потока для нормализации

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

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

Предположим, что отношение единиц и нулей в выборке составляет ( 0.5 + E ) к ( 0.5 — E ), где E имеет значение из диапазона от 0 до 0,5 и служит мерой «эксцентричности» распределения. Рассмотрим распределение функции четности для выборки размером N битов. Вероятность того, что четность будет иметь значение 1 или 0 определяется суммой нечетных или четных компонент в биномиальном разложении (p + q)N, где p = 0.5 + E указывает вероятность единицы, а q = 0.5 — E указывает вероятность нуля.

Эти суммы легко рассчитать по формулам

        1/2 * ( ( p + q )N + ( p - q )N )

и

        1/2 * ( ( p + q )N - ( p - q )N ).

(какая из формул указывает вероятность того, что четность будет иметь значение 1, зависит от четности или нечетности значения N).

Поскольку p + q = 1 и p — q = 2E, эти выражения упрощаются до

        1/2 * [1 + (2E)N ]

и

        1/2 * [1 - (2E)N ].

Вероятность 1

E

N

0,5

0

1

0,6

0,10

4

0,7

0,20

7

0,8

0,30

13

0,9

0,40

28

0,95

0,45

59

0,99

0,49

308

Ни одно из этих выражений не будет в точности равно 0,5, пока E отлично от 0, но они могут быть сколь угодно близки к 0,5. Если мы хотим получить вероятность из диапазона d от значения 0,5, должно выполняться условие

        ( 0.5 + ( 0.5 * (2E)N ) )  <  0.5 + d.

Решение дает для N значение N > log(2d)/log(2E). Отметим, что 2E < 1, поэтому логарифм будет отрицательным. Деление на отрицательное число обращает смысл неравенства.

В таблице показаны размеры строки выборки (N), требуемой для разных уровней неоднородности (перекоса) распределения из диапазона от 0,001 до 50/50.

Последняя строка показывает, что даже при перекосе 99% в пользу единиц четность строки размером 308 битов будет попадать в диапазон распределения от 0,001 до 50/50. Однако, как будет показано в параграфе 5.2, есть более сильные методы получения большего объема доступной энтропии.

4.2. Использование временных отображений для нормализации

Другим методом, изначально предложенным фон-Нейманом (von Neumann) [VON_NEUMANN], является представление битового потока, как последовательности неперекрывающихся пар. Из выбранных пар отбрасываются все, имеющие значения 00 и 11, затем пары 01 интерпретируются, как 0, а пары 10 — как 1. Предположим, что вероятность 1 в битовом потоке составляет 0,5+E, а вероятность 0 — 0,5-E, где E показывает меру «эксцентричности» распределения, как описано в предыдущем параграфе. В этом случае вероятность каждой из возможных пар определяется выражениями, приведенными в таблице.

Пара

Вероятность

00

(0,5 - E)^2          =  0,25 - E + E^2

01

(0,5 - E)*(0.5 + E)  =  0,25     - E^2

10

(0,5 + E)*(0.5 - E)  =  0,25     - E^2

11

(0,5 + E)^2          =  0,25 + E + E^2

Этот метод будет полностью устранять любое смещение, однако требует неопределенного числа входных битов для создания желаемого объема данных на выходе. Вероятность отбрасывания любой пары составляет 0,5 + 2E2, поэтому ожидаемое число входных битов для создания на выходе X битов составит X/(0,25 — E2).

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

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

4.3. Использование FFT для нормализации

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

Использование для данных преобразования Фурье или его оптимизированного варианта FFT представляет в основном теоретический интерес. Можно показать, что этот метод позволяет устранить сильную корреляцию данных. Если подходящие данные обработать и устранить из них остаточные корреляции, спектральные составляющие будут представлять собой статистически не зависимые случайные значения с нормальным распределением [BRILLINGER].

4.4. Использование компрессии для нормализации

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

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

5. Смешивание

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

После того, как найдены хорошие источники, описанные в разделе 3, и значения смешаны, как описано здесь, остается выбрать правильную «затравку» (seed). Это позволит создать большой объем криптостойкого материала, как описано в разделах 6 и 7.

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

Рассмотрим задачу преобразования битового потока, смещенного в сторону 0 или 1 и имеющего некоторую предсказуемость, в более короткий поток, который будет более случайным, как отмечено в разделе 4. Это будет просто еще одним случаем, когда желательная сильная функция смешивания, принимающая входные биты и возвращающая меньшее число битов на выходе. Описанный в параграфе 4.1 метод на основе четности множества битов является просто результатом многократного использования операции XOR. Этот метод обеспечивает простейшую функцию смешивания, описанную ниже. Использование более сильной функции смешивания для получения больше хаотичности в потоке со смещением описано в параграфе 5.2. См. также работу [NASLUND].

Вход 1

Вход 2

Выход

0

0

0

0

1

1

1

0

1

1

1

0

5.1. Тривиальная функция смешивания

В целях разъяснения рассмотрим тривиальный пример, когда однобитовые входные потоки смешиваются с помощью функции «исключительное-ИЛИ» (XOR6). Эта функция эквивалентна сложению без переноса, как можно видеть из таблицы. Это вырожденный случай, когда выход всегда изменяется при смене любого из входных битов. Однако, несмотря на простоту, она служит хорошей иллюстрацией.

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

        Eoutput = 2 * Einput 1 * Einput 2

E

0,00

0,10

0,20

0,30

0,40

0,50

0,00

0,00

0,00

0,00

0,00

0,00

0,00

0,10

0,00

0,02

0,04

0,06

0,08

0,10

0,20

0,00

0,04

0,08

0,12

0,16

0,20

0,30

0,00

0,06

0,12

0,18

0,24

0,30

0,40

0,00

0,08

0,16

0,24

0,32

0,40

0,50

0,00

0,10

0,20

0,30

0,40

0,50

Поскольку E не может быть больше 1/2, эксцентричность всегда снижается за исключением случая полного перекоса хотя бы на одном из входов. Это хорошо видно из таблицы, где верхняя строка и левая колонка показывают входные значения, а в остальных ячейках указаны соответствующие выходные значения «эксцентричности.

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

5.2. Сильные функции смешивания

Стандарт US Government Advanced Encryption Standard [AES] служит примером использования сильной функции смешивания для множества битовых значений. В нем принимается до 384 битов на входе (128 битов данных и 256 битов ключа), а на выходе возвращается 128 битов, каждый из которых определяется сложной нелинейной функцией всех входных битов. Другие функции шифрования с такими же характеристиками (например, [DES]) тоже могут применяться для смешивания всех входных битов данных и ключа.

Другим хорошим классом функций смешивания являются функции создания «отпечатков» сообщений (message digest) или функции хэширования типа стандартов US Government Secure Hash Standard [SHA*] и серии MD4, MD5 [MD4, MD5]. Эти функции принимают на входе практически не ограниченное число битов и возвращают сравнительно короткую последовательность в результате смешивания всех входных битов. Функции MD* дают на выходе 128 битов, SHA-1 — 160 битов, а другие функции SHA — до 512 битов.

Хотя функции создания дайджестов сообщений рассчитаны на переменный размер входных данных, AES и другие функции шифрования также могут применяться для комбинирования произвольного числа входов. Если устраивает 128 битов на выходе, входные данные можно «упаковать» в 128-битовые блоки данных и «ключи» AES, дополняя при необходимости нулями. После этого блоки данных шифруются с помощью «ключей» при использовании алгоритма AES в режиме ECM7. Кроме того, входные данные могут быть «упакованы» в один 128-битовый ключ и множество блоков данных с последующим расчетом CBC-MAC [MODES].

Более сложное смешивание следует применять в тех случаях, когда на выходе нужно получить более 128 битов и хочется использовать AES (отметим, что абсолютно невозможно получить на выходе больше хаотичных битов, нежели было передано на вход). В качестве примера предположим, что входные данные упаковываются в три блока A, B и C. Один может использоваться алгоритмом AES для шифрования A с ключом B, а затем с ключом C для создания первой части выходных данных. Далее B шифруется с ключом C, а затем A для создания второго блока и при необходимости C шифруется с ключами A и B для создания третьего выходного блока. Если нужны еще блоки на выходе, можно изменить указанный выше порядок использования ключей. То же самое можно сделать с помощью хэш-функций, хэшируя разные подмножества входных данных или разные их копии с разными префиксами и/или суффиксами для создания множества выходных блоков.

В качестве примера использования сильной функции смешивания рассмотрим строку из 308 битов со смещением 99% в сторону 0. Описанный в параграфе 4.1 метод использования четности уменьшает объем данных до 1 бита, но отклонение также уменьшается до 1/1000 в любом из направлений. С учетом выравнивания, рассмотренного в разделе 2 эта 308-битовая смещенная последовательность содержит более 5 битов информации. Таким образом, хэширование последовательности с помощью функции SHA-1 и извлечение 5 «нижних» битов будет давать 5 несмещенных случайных битов, а не один, как при использовании четности. Кроме того, для некоторых приложений можно использовать весь вывод хэш-функции для сохранения всех «пяти с лишним» битов энтропии в 160-битовом значении.

5.3. Использование S-блоков для смешивания

Многие современные функции блочного шифрования, включая DES и AES, содержат модули, называемые S-Box (S-блок) или блоками подстановки. Он создают небольшой объем выходной информации из большого объема входных данных, используя сложную нелинейную функцию смешивания, что обеспечивает эффект концентрации ограниченной энтропии входных источников на выходе функции.

S-блоки иногда включают специальные логические функции (bent Boolean function) от четного числа битов, дающие на выходе один бит с максимальной нелинейностью. Выходные результаты для всех входных пар, различающихся в любой битовой позиции, будут делиться точно пополам. S-блок, в котором каждый выходной бит создается bent-функцией так, что любая линейная комбинация этих функций также является bent-функцией, называется «совершенным S-блоком» (perfect S-Box).

S-блоки и разные варианты повторяющегося или каскадированного применения могут служить для смешивания[SBOX1, SBOX2].

5.4. Diffie-Hellman в качестве функции смешивания

Метод обмена ключами Diffie-Hellman позволяет двум сторонам создать общий секрет. Посторонний не сможет рассчитать значение этого секрета, даже при возможности просматривать сообщения, передаваемые между двумя сторонами. Этот общий секрет представляет собой результат смешивания двух начальных значений, созданных каждой из сторон [D-H].

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

Сказанное верно для случая, когда расчет Diffie-Hellman выполняется втайне, но злоумышленник может видеть оба открытых ключа и, зная используемый модуль, может ограничить поиск пространством секретного ключа, который позволит ему рассчитать общий секретный ключ [D-H]. Консервативный подход оценивает непредсказуемость значения Diffie-Hellman, как худшую из непредсказуемостей двух входных значений. С учетом этого, а также значительного объема расчетов Diffie-Hellman, данный метод не рекомендуется применять в качестве функции смешивания.

5.5. Использование смешивания для «растягивания» случайных битов

Хотя от функция смешивания не требуется давать на выходе такое же или меньшее число битов по сравнению с поданным на вход, смешивание не может «растянуть» имеющуюся на входе непредсказуемую случайность битов. Таким образом, 4 входа по 32 бита в каждом, из которых только 12 достаточно непредсказуемы (например, 4096 равновероятных значений), не могут дать более 48 непредсказуемых битов на выходе. Выход можно растянуть на сотни и тысячи битов, смешивая, например, с последовательными целыми числами, но пространство поиска для злоумышленника по прежнему будет содержать 248 значений. Более того, снижение числа битов на выходе по сравнению с числом входных битов имеет тенденцию усиления хаотичности на выходе.

В последней таблице параграфа 5.1 показано, что смешивание случайного бита с постоянным м помощью операции XOR будет давать случайный бит. Хотя это верно, такой способ не обеспечивает «растягивания» одного случайного бита в несколько. Если смешивать, например, случайный бит сначала с 0, а затем с 1, это будет давать двухбитовую последовательность, которая всегда будет принимать значения 01 или 10. Поскольку число разных значений составляет лишь 2, объем непредсказуемости сохраняется равным одному биту.

5.6. Другие факторы при выборе функции смешивания

Для локального применения AES обеспечивает некоторые преимущества за счет того, что алгоритм многократно проверен, достаточно эффективно реализуется в программах, хорошо документирован и реализован во множестве программных (включая открытые) и аппаратных систем по всему миру. Семейство алгоритмов SHA* не так хорошо изучено и требует оной раз больше процессорных циклов для расчетов, но нет никаких причин считать эти алгоритмы несовершенными. SHA* и MD5 были разработаны на основе общего предшественника — алгоритма MD4. Доступны реализации этих алгоритмов с открытым исходным кодом [SHA*, MD4, MD5]. Были обнаружены некоторые признаки слабости алгоритмов MD4 и MD5. В частности, MD4 использует только три раунда (цикла вычислений) и существует две независимых уязвимости для двух первых и двух последних раундов. В выходе MD5 были обнаружены коллизии.

Алгоритм AES был выбран в результате открытого международного конкурса. Вместе с алгоритмами SHA* он был выбран агентством NSA8 на основе критериев, которые в основном остаются секретными, как и DES. Несмотря на множество слухов и спекуляций многолетние исследования алгоритма DES показали, что участие NSA в его изменении, начатом компанией IBM, свелось в основном к его усилению. Не было публикаций о наличии скрытых или специально сохраненных недостатков алгоритма DES. Вполне вероятно, что замена агентством NSA алгоритма MD4 на SHA также обусловлена большей защищенностью нового алгоритма (возможно от угроз, которые еще не известны всему сообществу криптографов).

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

На момент публикации этого документе применительно к алгоритмам AES, DES, SHA*, MD4 и MD5 не было известно о каких-либо патентных претензиях, за исключением безотзывной лицензии на свободное их использование во всем мире. Тем не менее, могут существовать не известные авторам патенты, а также патенты на реализации и применения или иные патенты, которые могли или могут быть выданы.

6. Генераторы псевдослучайных чисел

Когда затравка имеет достаточную энтропию, из входных данных, описанных в разделе 3, с возможным выравниванием и и смешиванием, описанными в разделах 4 и 5, можно алгоритмически получить большой объем криптографически сильных случайных значений. Такие алгоритмы не зависят от платформы и могут одинаково работать на любом компьютере. Для обеспечения безопасности алгоритма его входные данные и внутренние операции должны быть защищены от доступа нарушителей.

Устройство такого алгоритма генерации псевдослучайных чисел, подобно устройству симметричных алгоритмов шифрования, является задачей для профессионалов. В параграфе 6.1 рассмотрены некоторые плохие идеи, которые были использованы в неудачных алгоритмах. Если вы не хотите разбираться с такими неудачными идеями, пропустите параграф 6.1 и прочтите оставшуюся часть этого раздела и раздел 7, где описаны некоторые стандартные алгоритмы генерации псевдослучайных чисел со ссылками на документы. Дополнительную информацию можно найти в разделе 7 и части 3 документа [X9.82].

6.1. Несколько неудачных идей

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

6.1.1. Ошибочность сложных манипуляций

Одним из подходов, который может дать искаженное представление о непредсказуемости, может быть очень сложный алгоритм (или отличный традиционный генератор псевдослучайных чисел с хорошими статистическими свойствами) и рассчитывать криптографические ключи с использованием ограниченных входных данных типа компьютерных часов в качестве значения «затравки» (seed). Нарушитель, который представляет приблизительное время запуска генератора сможет ограничиться проверкой сравнительно небольшого числа значения затравки, поскольку знает, что это системное время. Может быть создано значительное число псевдослучайных битов, но пространство поиска, с которым требуется работать нарушителю, будет достаточно мало.

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

Другой стратегической ошибкой является допущение о том, что очень сложный алгоритм генерации псевдослучайных значений будет давать качественные случайные числа даже без теоретического обоснования и анализа алгоритма. Есть отличный пример такой ошибки в начале раздела 3 работы [KNUTH], где автор описывает сложный алгоритм. Предполагается, что реализация этого алгоритма в машинном коде будет настолько сложна, что человек, пытающийся разобраться просто не сможет без комментариев понять, что делает программа. К сожалению, реальное применение этого алгоритма показало, что он почти сразу же сходится к одному повторяющемуся значению в одном случае и к короткому циклу повторяющихся значений — в другом.

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

6.1.2. Ошибочность выбора из большой базы данных

Другим подходом, который может давать искаженное представление о непредсказуемости является случайный выбор значения из большой базы данных и предположение о том, что большой общий размер базы данных обеспечивает должную непредсказуемость. Например, типичный сервер USENET обрабатывает каждый день много мегабайтов информации [USENET_1, USENET_2]. Предположим, что случайное значение определяется выборкой 32 последовательных байтов данных со случайной установкой стартовой позиции для выбора. Это не будет давать 32*8 = 256 битов непредсказуемых данных. Даже если это будет часть фразы на человеческом языке, содержащем 2 или 3 непредсказуемых бита на байт, суммарный объем непредсказуемости будет примерно 32*2 = 64 бита. Для злоумышленника, имеющего доступ к той же базе данных Usenet, непредсказуемым будет только значение стартовой позиции, что вряд ли составит более нескольких десятков непредсказуемых битов.

Такие же аргументы применимы к выборке последовательностей из публично доступных дисков CD/DVD или любой другой открытой базы данных большого размера. Если злоумышленник имеет доступ к той же базе данных, такой «выбор из большого объема данных» мало что даст. Однако при выборе данных из недоступного злоумышленнику источника типа системных буферов в многопользовательской среде, результат может оказаться неплохим.

6.1.3. Традиционные псевдослучайные последовательности

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

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

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

Типичным вариантом генерации псевдослучайных чисел является «линейный конгруэнтный генератор». Этот метод использует «модульную арифметику», где значение с номером N+1 рассчитывается на основе значения с номером N по формуле

        VN+1 = ( VN  * a + b )(Mod c)

Этот метод сильно связан с генерацией псевдослучайных чисел на основе линейного регистра сдвига, хорошо изученной с точки зрения криптографии [SHIFT*]. В таких генераторах группа битов подается с одной стороны регистра сдвига с использованием операции XOR (Исключающее-ИЛИ, двоичная сумма без переноса) для выбранных фиксированных отводов. Пример этого метода показан на рисунке.

      +----+     +----+     +----+                      +----+
      | B  | <-- | B  | <-- | B  | <--  . . . . . . <-- | B  | <-+
      |  0 |     |  1 |     |  2 |                      |  n |   |
      +----+     +----+     +----+                      +----+   |
        |                     |            |                     |
        |                     |            V                  +-----+
        |                     V            +----------------> |     |
        V                     +-----------------------------> | XOR |
        +---------------------------------------------------> |     |
                                                              +-----+
       VN+1    = ( ( VN  * 2 ) + B0  XOR  B2 ... )(Mod 2n)

Качество традиционных алгоритмов генерации псевдослучайных чисел измеряется статистическими тестами выдаваемых последовательностей. Аккуратно подобранные значения a, b, c и начальное значение V или обдуманный выбор отводов из регистра сдвига в описанном выше процессе позволяет получить отличную статистику на выходе.

Такие последовательности могут хорошо подходить для моделирования (например, методом Monte Carlo), пока последовательность ортогональная структуре исследуемого пространства. Но даже в таких случаях могут возникать проблемы, связанные с повторяющимися группами («узоры»). Однако такие последовательности явно не подходят для защитных приложений. Они полностью предсказуемы, если известно начальное состояние. В зависимости от типа генератора псевдослучайных чисел последовательность можно восстановить из наблюдения короткой ее части [SCHNEIER, STERN]. Например, для показанного выше генератора можно определить V(n+1) по V(n). Фактически, было продемонстрировано, что в этих методах значение затравки (seed) можно определить даже по одному псевдослучайному биту на выходе.

Не только линейные конгруэнтные генераторы подвержены «взлому» — сейчас известны методы «взлома» полиномиальных конгруэнтных генераторов [KRAWCZYK].

6.2. Криптостойкие последовательности

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

Корректным методом является использование качественной случайной «затравки» (strong random seed) для выполнения криптографически сильных операций на ее основе [FERGUSON, SCHNEIER] без раскрытия полного состояния генератора в элементах последовательности. Если каждое значение в последовательности может быть рассчитано фиксированным способом на основе предыдущего значения, вся последовательность случайных значений будет скомпрометирована и любые будущие значения могут быть предсказаны. Такая ситуация может возникать, например, при создании каждого значения с помощью одной функции от предшествующих значений даже если эта функция является криптографически сильной, необратимой функцией создания отпечатка (дайджеста) сообщения.

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

6.2.1. Последовательности OFB и CTR

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

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

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

            +---------------+
            |       V       |
            |  |     n      |--+
            +--+------------+  |
                  |            |     +---------+
             сдвиг|            +---> |         |      +-----+
               +--+                  |Шифрован.| <--- |Ключ |
               |           +-------- |         |      +-----+
               |           |         +---------+
               V           V
            +------------+--+
            |      V     |  |
            |       n+1     |
            +---------------+

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

Donald W. Davies показал, что этот вариант частичной обратной связи со сдвигом существенно ослабляет алгоритм по сравнению с передачей на вход всех битов выхода. В частности, для алгоритма DES повторяющееся шифрования полного 64-битового значения будет давать ожидаемое повторение примерно через 263 итерации. Возврат на вход меньшего числа битов (меньше 64, но больше 0) будет приводить к повтору через 231 — 232 итерации!

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

6.2.2. Генератор Blum Blum Shub

На сегодняшний день наиболее сильное подтверждение качества имеет генератор Blum Blum Shub, названный по именам его изобретателей [BBS]. Этот генератор прост и работает на основе квадратичных вычетов. Единственным его недостатком является больший объем расчетов по сравнению с традиционными методами, описанными в параграфе6.1.3. Это не является существенной помехой, если генератор применяется не слишком часто (например, для создания сеансовых ключей).

Возьмем два больших простых числа (скажем, p и q), которые дают остаток 3 при делении на 4. Пусть n = p * q. Затем возьмем случайное число x, взаимно простое11 с n. Ниже приведены уравнения для вычисления «затравки» (seed) и последующих значений.

         s0  = (x2)(Mod n)
         si+1 = (si2)(Mod n)

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

         log2(log2(si))

младших битов, сложность верного предсказания последующих битов близка к сложности факторизации n.12 Если начальное значение x хранится в секрете, значение n можно раскрыть.

Интересной особенностью этого генератора является возможность прямого расчета любого значения s. В частности

      si = (s0((2^i) (Mod ((p-1)*(q-1)))))(Mod n)

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

6.3. Методы сбора энтропии

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

             +----------+    +-------+    +---------+
         --->|Смешивание|--->|Бассейн|--->|Выходные |--->
             |  входов  |    |       |    |   биты  |
             +----------+    +-------+    +---------+
                                 ^           V
                                 |           |
                                 +-----------+

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

Следует с осторожностью относиться к добавлению энтропии для обеспечения потребностей пользователя. См. также [RSA_BULL1] .

7. Примеры и стандарты генерации хаотичности

В настоящее время имеется несколько общедоступных стандартов и множество примеров широкого развертывания систем для генерации открытых ключей и создания других криптографических случайных величин. В некоторых (см. параграф 7.1) используются источники энтропии, в других (параграф 7.2) — генератор сильных псевдослучайных последовательностей, на входе которого предполагается случайная «затравка» (seed) или данные от источника энтропии.

7.1. Комплексные генераторы хаотичности

Ниже описаны три стандарта. Два наиболее старых стандарта используют алгоритм DES с размером блока 64 бита и ограниченным размером ключей. Оба варианта одинаково сильны и допускают замену функции смешивания на более сильную [DES]. Третий стандарт (более новый и сильный) основан на алгоритме SHA-1 [SHA*]. Кроме того, описаны широко распространенные современные генераторы случайных чисел операционных систем UNIX и Windows.

7.1.1. Рекомендации Министерства обороны США (US DoD) по выбору паролей

Министерство обороны США имеет свои рекомендации по выбору паролей [DoD]. Они предлагают использовать американский стандарт шифрования [DES] в режиме с обратной связью (Output Feedback Mode) [MODES], как описано ниже.

Использовать вектор инициализации, определяемый на основе комбинации

системных часов,

идентификатора системы,

идентификатора пользователя,

даты и времени.

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

регистров системных прерываний,

регистров состояния системы,

системных счетчиков.

В качестве открытых данных принимать созданное внешними средствами 64-битовое случайное значение в форме строки байтов ASCII из 8 символов, вводимых системным администратором.

На основе перечисленных выше данных пароль может быть рассчитан из 64 битов «шифротекста», создаваемого DES в 64-битовом режиме с обратной связью. Требуемое число битов может быть взято из этих 64 битов и «расширено» в произносимое слово, фразу или иной формат, если пароль должен запоминаться пользователем.

7.1.2. Устройство /dev/random

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

Например, в некоторых версиях Linux генератор включает пул размером 512 байтов, организованных в 128 слов по 4 байта. Когда происходит событие (например, дисковое прерывание) время этого события вносится в пул с использованием операции XOR и пул перемешивается с помощью первообразного полинома степени 128. Сам пул трактуется, как кольцевой буфер и новые данные добавляются с помощью операции XOR (после полиномиального перемешивания).

Для каждых входных данных, добавляющих энтропию в пул, выполняется оценка содержащейся в них энтропии. Сам пул включает «аккумулятор», который оценивает общую энтропию пула.

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

  1. Клавиатурные прерывания. Моменты нажатия клавиш и скан-коды клавиатуры добавляются в пул. Реально добавляется энтропия за счет изменения интервалов между нажатиями клавиш человеком.

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

  3. Перемещение мыши. Временные метки и данные о перемещении мыши служат для добавления энтропии.

При возникновении потребности в случайных байтах содержимое пула хэшируется с помощью SHA-1 [SHA*] для получения выходного случайного значения. Если число требуемых данных превышает выходной размер SHA-1 (20 байтов), хэшированный вывод возвращается в пул и снова хэшируется для получения следующих 20 байтов. По мере выдачи байтов из пула оценка его общей энтропии соответствующим образом снижается.

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

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

Устройство /dev/urandom похоже на /dev/random, однако оно обеспечивает данные на выходе даже при нулевом уровне энтропии в пуле. Такие данные могут подходить для сеансовых ключей и других случаев, когда нет возможности ожидания достаточного уровня энтропии в пуле. Риск в результате продолжения использования данных при малом уровне энтропии в пуле невелик и заключается в том, что прошлые данные могут быть рассчитаны по текущим, если атакующий сможет обратить SHA-1. С учетом необратимости SHA-1 этот риск можно считать приемлемым.

Для получения случайных значений в Linux, Solaris и других системах семейства UNIX, где используется описанный выше код, приложения просто открывают устройство /dev/random или /dev/urandom и считывают из него требуемое число байтов.

(Код устройства Linux Random был написан Theodore Ts’o на основе генератора случайных чисел PGP 2.X и PGP 3.0 (он же PGP 5.0))

7.1.3. Windows CryptGenRandom

Компания Microsoft рекомендует пользователям широко распространенной операционной системы Windows применять вызовы генератора случайных чисел CryptGenRandom через интерфейс CryptAPI. При вызове задается библиотека крипто-провайдера, указатель на буфер, в который вызывающее функцию приложение может поместить «энтропию», а крипто-провайдер возвратит созданное случайное значение, и число желаемых случайных октетов.

Крипто-провайдер Windows CryptAPI хранить переменную «затравки» (seed state variable) для каждого пользователя. При вызове CryptGenRandom значение этой переменной комбинируется с предоставленными при вызове случайными данными и пользовательскими данными (такими, как идентификаторы процесса и потока, системное время, системный счетчик, состояние памяти, данные о свободных кластерах на диске и хэшированный блок пользовательского окружения). Эти данные передаются функции SHA-1, а ее результат служит «затравкой» потока RC4, который применяется для генерации запрошенных псевдослучайных данных и обновления «затравочной» переменной.

Пользователи Windows .NET могут предпочесть интерфейс метода RNGCryptoServiceProvider.GetBytes.

Дополнительную информацию можно найти в [WSC].

7.2. Генераторы, предполагающие источник энтропии

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

7.2.1. Генерация псевдослучайных чисел X9.82

Комитет ANSI13 X9F1 завершает подготовку стандарта для генерации случайных чисел, включающего как генераторы действительно случайных значений, так и генераторы псевдослучайных чисел. Стандарт включает множество генераторов, основанных на функциях хэширования, один из которых вероятно будет базироваться на конструкциях HMAC SHA [RFC2104]. Ниже описана предварительная версия такого генератора без рассмотрения множества необязательных функций [X9.82].

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

7.2.1.1. Обозначения

Ниже даны определения используемых в последующих параграфах обозначений.

hash_length

выходной размер используемой хэш-функции.

input_entropy

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

K

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

V

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

|

указывает конкатенацию (склеивание).

7.2.1.2. Инициализация генератора

Установим во всех байтах V значение, содержащее нули во всех битах, кроме младшего.

Установим во всех байтах K нулевые значения, а затем

         K = HMAC ( K, V | 0x00 | input_entropy )
         V = HMAC ( K, V )
         K = HMAC ( K, V | 0x01 | input_entropy )
         V = HMAC ( K, V )

Примечание. Все алгоритмы SHA дают на выходе целое число байтов, поэтому размеры K и V в байтах будут целыми числами.

7.2.1.3. Генерация случайных битов

Когда нужно просто выходное значение, вызывается функция хэширования

         V = HMAC ( K, V )

и берутся начальные биты V. Если число требуемых битов превышает размер V, создается пустая битовая строка temp и повторяется цикл

         V = HMAC ( K, V )
         temp = temp | V

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

После извлечения и сохранения выходных псевдослучайных битов до их возврата вызвавшему приложению нужно выполнить два дополнительных преобразования HMAC

         K = HMAC ( K, V | 0x00 )
         V = HMAC ( K, V )

7.2.2. Генерация ключей X9.17

ANSI задает для генерации последовательности ключей [X9.17] следующий метод:

s0 — начальные 64 бита затравки;

gn — последовательность сгенерированных 64-битовых ключей;

k — случайный ключ, зарезервированный для генерации данной последовательности ключей;

t — момент генерации ключа с максимально доступной точностью и разрешением (вплоть до 64 битов).

DES ( K, Q ) является результатом шифрования DES для значения Q с использованием ключа K.

Тогда

         gn  = DES ( k, DES ( k, t ) XOR sn )
         sn+1 = DES ( k, DES ( k, t ) XOR  gn )

Если gn будет применяться в качестве ключа DES, каждый восьмой бит должен указывать четность, но для расчета следующего значения s нужно применять все 64 бита исходного значения g без их изменения.

7.2.3. Генерация псевдослучайных чисел DSS

Приложение 3 к стандарту NIST DSS14 [DSS] определяет метод создания последовательности псевдослучайных 160-битовых значений для использования в качестве секретных ключей или похожих применений. Этот метод был изменен в [DSS_CN1] для создания псевдослучайных чисел общего назначения, как показано ниже.

         t = 0x 67452301 EFCDAB89 98BADCFE 10325476 C3D2E1F0
         XKEY0  = начальная затравка
         For j = 0 to ...
             XVAL = ( XKEYj  + необязательный ввод от пользователя ) (Mod 2512)
             Xj  = G( t, XVAL )
             XKEYj+1 = ( 1 + XKEYj  + Xj ) (Mod 2512)

Создаваемые таким способом псевдослучайные значения X являются 160-битовыми. В качестве указанной выше функции G могут применяться две функции, каждая из которых имеет два аргумента размером 160 и 512 битов.

Первая функция основана на SHA-1 и работает путем установки для 5 связующихся переменных, обозначенных H с нижним индексом в спецификации SHA-1, значений из первого параметра, поделенного на 5 частей. Затем выполняются этапы (a) — (e) из раздела 7 спецификации NIST SHA-1 для второго аргумента, как 512-битового блока данных. После этого значения связующихся переменных объединяются с помощью конкатенации в выходное значение G [SHA*].

В качестве дополнительного метода NIST определяет функцию G на основе многократного применения функции шифрования DES [DSS].

8. Примеры требуемой хаотичности

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

В дополнение к этому отметим работы [ORMAN] и [RSA_BULL13], где приведена информация о размерах открытых ключей, которыми следует пользоваться при обмене симметричными ключами.

8.1. Создание пароля

Предположим, что пользовательские пароли меняются один раз в год и желательно обеспечить вероятность угадывания нарушителем пароля для той или иной учетной записи пользователя не более 1:1000. Предположим также, что передача пароля в систему является единственным способом проверить его корректность. В таком случае основным вопросом становится скорость передачи нарушителем подбираемых паролей в систему. Предположим, что система не позволяет вводить пароль чаше одного раза в течение 6 секунд. Это позволит нарушителю проверить 600 паролей в час, около 15 000 в сутки и около 5 миллионов в год. При наличии хоть какого-то контроля и мониторинга у нарушителя просто не будет возможности непрерывно подбирать пароли в течение года. Даже при однократной проверке журнальных файлов в течение месяца попытка подбора 500 000 паролей будет замечена и приведет к смене пользовательских паролей с целью усложнения их подбора.

При вероятности угадывания пароля 1:1000 для того, чтобы 500 000 попыток не дали результата, пространство паролей должно иметь размер не менее 500 миллионов (приблизительно 229). Следовательно, требуется 29 битов непредсказуемости. Этого можно достигнуть, воспользовавшись рекомендациями US DoD по выбору входных данных для генерации паролей, предлагающими использовать 8 входных байтов со средней хаотичностью 5 битов в каждом (см. параграф 7.1). Используя список из 1000 слов, пароли можно задавать фразами из 3 слов, что даст 1000000000 вариантов. При использовании строчных и прописных букв, а также цифр пароли размером 6 символов вполне подойдут ((26+10)6 = 2176782336 вариантов).

Для более защищенных паролей число битов требуется увеличить. Для снижения вероятности подбора в 1000 раз требуется расширить пространство паролей во столько же раз и для этого нужно добавить около 10 битов. Таким образом, для снижения вероятности угадывания пароля до одной миллионной в описанном выше сценарии будет требоваться 39 битов непредсказуемости и пароли, представляющие собой фразы в 4 слова из списка в 1000 слов или 8 алфавитно-цифровых символов. Для снижения вероятности угадывания до 10-9 потребуется 49 случайных битов, что может быть реализовано с использованием паролей в пять слов или 10 алфавитно-цифровых символов.

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

8.2. Стойкий криптографический ключ

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

8.2.1. Цена одной попытки

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

Если злоумышленнику доступен многопотоковый процессор или большая сеть рабочих станций, на сегодняшний день следует считать, что он способен выполнять не менее 1011 операций (машинных тактов) в секунду. Заглядывая на несколько лет вперед, это значение следует увеличить по крайней мере на порядок. Таким образом, можно предположить у злоумышленника возможность проверки 1010 ключей в секунду, 3,6*1012 в час, 6*1014 в день или 2,4*1015 в месяц15. С учетом этого ключи должны содержать не менее 63 битов непредсказуемости для того, чтобы устоять против подбора в течение месяца. Но даже в этом случае можно предположить, что через несколько лет мотивированный и обладающий ресурсами злоумышленник сможет подобрать ключ в течение 2 недель — в среднем для этого нужно перебрать только половину из возможных ключей.

Эти вопросы подробно рассматриваются в работе «Minimal Key Lengths for Symmetric Ciphers to Provide Adequate Commercial Security: A Report by an Ad Hoc Group of Cryptographers and Computer Scientists» [KeyStudy], спонсированной Business Software Alliance. Там делается заключение, что в 1995 году для ключей с высоким уровнем защиты следовало использовать от 75 до 90 битов и, поскольку «стоимость» криптографии не зависит от размера ключа, рекомендовалось использовать 90 битов. Для приведения этих рекомендаций в соответствие с современностью просто добавьте 2/3 на каждый год в соответствии с законом Мура [MOORE]. Это показывает, что в 2004 году разумным размером ключей является 81 — 96 битов. Фактически, сегодня повсеместно расширяется использование ключей размером более 96 битов, типа 128-битовых (или более длинных) ключей AES, а также ключей triple-DES с эффективным размером 112 битов.

8.2.2. Атаки meet-in-the-middle

При одновременной доступности зашифрованных и открытых данных становятся возможными атаки типа meet-in-the-middle (встреча посередине), если структура алгоритма шифрования позволяет их организовать. При атаках с известными открытыми данными злоумышленник знает все или часть (возможно, некоторые стандартные поля заголовков или трейлеров) данных из шифруемых сообщений. При атаках по выбранным данным злоумышленник может спровоцировать шифрование тех или иных выбранных им данных (возможно, имитировав утечку «важных» данных, которые в результате будут переданы по шифрованному каналу).

В сильно упрощенном представлении атака meet-in-the-middle выглядит так — злоумышленник может полу-шифровать (half-encrypt) известные или выбранные данные со всеми возможными первыми полу-ключами, отсортировать результат, а затем полу-расшифровать (half-decrypt) их со всеми вторыми полу-ключами. Если будет найдено соответствие, можно собрать полный ключ из двух половинок и применять его для расшифровки других частей данного сообщения или других сообщений. В лучшем случае при такой атаке нарушитель сможет вдвое снизить показатель степени объема работы, хотя при этом добавится очень большой, но примерно постоянный коэффициент. Таким образом, если такая атака считается возможной, для уровня 2004 года потребуется удвоение объема хаотичности криптостойкого ключа как минимум до 192 битов (96*2), в соответствии с анализом [KeyStudy].

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

Атака meet-in-the-middle предполагает возможность разделения алгоритма шифрования на две части. Есть надежда, что современные алгоритмы не обладают таким недостатком, но возможны случаи, когда нет уверенности или даже не известен применяемый алгоритм. Даже если базовый алгоритм не подвержен атакам meet-in-the-middle, попытка создания более сильного алгоритма за счет повторного его применения (или последовательного использования двух разных алгоритмов) с другим ключом не повысит уровень защиты ожидаемым образом. Такие композитные алгоритмы будут уязвимы для атак meet-in-the-middle.

Для организации атаки meet-in-the-middle могут потребоваться аномально большие ресурсы, но они вполне могут оказаться доступными для спецслужб больших стран. В частности, все страны пытаются отслеживать трафик других стран.

8.2.3. Другие вопросы

В [KeyStudy] рассматриваются возможности взлома шифров с использованием специального оборудования а также оценки адекватности уровня защиты.

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

Дополнительные примеры консервативных принципов проектирования можно найти в работе [FERGUSON].

9. Заключение

Генерация непредсказуемых «случайных» секретных значений для защиты является важной и сложной задачей.

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

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

После сбора достаточного объема (несколько сотен битов) высококачественного ключевого материала может использоваться множество доступных расчетных методов для генерации не предсказуемых расчетным путем значений на основе такой «затравки».

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

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

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

Большое спасибо Paul Hoffman и John Kelsey за активное комментирование и Peter Gutmann за разрешение использовать материал из его статьи «Software Generation of Practically Strong Random Numbers».

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

Steve Bellovin, Daniel Brown, Don Davis, Peter Gutmann, Tony Hansen, Sandy Harris, Paul Hoffman, Scott Hollenback, Russ Housley, Christian Huitema, John Kelsey, Mats Naslund, Damir Rajnovic.

Ниже в алфавитном порядке перечислены участники разработки RFC 1750 — предшественника этого документа.

David M. Balenson, Don T. Davis, Carl Ellison, Marc Horowitz, Christian Huitema, Charlie Kaufman, Steve Kent, Hal Murray, Neil Haller, Richard Pitkin, Tim Redmond, Doug Tygar.

Приложение A. Отличия от RFC 1750

  1. Добавлены благодарности.

  2. Добавлен параграф 5.3, посвященный смешиванию блоков подстановки.

  3. Добавлен параграф 3.3 и описанием кольцевого генератора в качестве источника хаотичности.

  4. Добавлен алгоритм AES и серия алгоритмов SHA, дающие на выходе более 160 битов. Применение AES было рекомендовано взамен DES.

  5. Добавлен параграф 6.3 с описанием методов на основе пула энтропии.

  6. Добавлен параграф 7.2.3 с описанием методов генерации псевдослучайных чисел, приведенных в FIPS 186-2 (с изменением 1), параграф 7.2.1 с описанием методов из параграфа 7.12 X9.82, используемых в устройствах /dev/random операционных систем Linux и других UNIX-систем, а также параграф 7.1.3 с описанием методов генерации случайных чисел в Windows.

  7. Добавлена ссылка на исследование «Minimal Key Lengths for Symmetric Ciphers to Provide Adequate Commercial Security», результаты которого опубликованы в январе 1996 года [KeyStudy], и [RFC1948].

  8. Добавлены предостережения в части использования Diffie-Hellman в качестве функции смешивания.

  9. Добавлены ссылки на работы X9.82 и статьи [TURBID] и [NASLUND].

  10. Расширено рассмотрение min-entropy и Renyi entropy, а также приведена ссылка на книгу [LUBY].

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

Литература

[AES] «Specification of the Advanced Encryption Standard (AES)», United States of America, US National Institute of Standards and Technology, FIPS 197, November 2001.

[ASYMMETRIC] Simmons, G., Ed., «Secure Communications and Asymmetric Cryptosystems», AAAS Selected Symposium 69, ISBN 0-86531-338-5, Westview Press, 1982.

[BBS] Blum, L., Blum, M., and M. Shub, «A Simple Unpredictable Pseudo-Random Number Generator», SIAM Journal on Computing, v. 15, n. 2, 1986.

[BRILLINGER] Brillinger, D., «Time Series: Data Analysis and Theory», Holden-Day, 1981.

[CRC] «C.R.C. Standard Mathematical Tables», Chemical Rubber Publishing Company.

[DAVIS] Davis, D., Ihaka, R., and P. Fenstermacher, «Cryptographic Randomness from Air Turbulence in Disk Drives», Advances in Cryptology — Crypto ’94, Springer-Verlag Lecture Notes in Computer Science #839, 1984.

[DES] «Data Encryption Standard», US National Institute of Standards and Technology, FIPS 46-3, October 1999. Also, «Data Encryption Algorithm», American National Standards Institute, ANSI X3.92-1981. See also FIPS 112, «Password Usage», which includes FORTRAN code for performing DES.

[D-H] Rescorla, E., «Diffie-Hellman Key Agreement Method», RFC 2631, June 1999.

[DNSSEC1] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, «DNS Security Introduction and Requirements», RFC 4033, March 2005.

[DNSSEC2] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, «Resource Records for the DNS Security Extensions», RFC 4034, March 2005.

[DNSSEC3] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, «Protocol Modifications for the DNS Security Extensions», RFC 4035, March 2005.

[DoD] «Password Management Guideline», United States of America, Department of Defense, Computer Security Center, CSC-STD-002-85, April 1885.

(см. также «Password Usage», FIPS 112, включающий CSC-STD-002-85 в качестве jlyjuj bp приложениq. FIPS 112 доступен по ссылке http://www.idl.nist.gov/fipspubs/fip112.htm).

[DSS] «Digital Signature Standard (DSS)», US National Institute of Standards and Technology, FIPS 186-2, January 2000.

[DSS_CN1] «Digital Signature Standard Change Notice 1», US National Institute of Standards and Technology, FIPS 186-2 Change Notice 1, 5, October 2001.

[FERGUSON] Ferguson, N. and B. Schneier, «Practical Cryptography», Wiley Publishing Inc., ISBN 047122894X, April 2003.

[GIFFORD] Gifford, D., «Natural Random Number», MIT/LCS/TM-371, September 1988.

[IEEE_802.11i] «Amendment to Standard for Telecommunications and Information Exchange Between Systems — LAN/MAN Specific Requirements — Part 11: Wireless Medium Access Control (MAC) and physical layer (PHY) specifications: Medium Access Control (MAC) Security Enhancements», IEEE, January 2004.

[IPSEC] Kent, S. and R. Atkinson, «Security Architecture for the Internet Protocol», RFC 240116, November 1998.

[Jakobsson] Jakobsson, M., Shriver, E., Hillyer, B., and A. Juels, «A practical secure random bit generator», Proceedings of the Fifth ACM Conference on Computer and Communications Security, 1998.

[KAUFMAN] Kaufman, C., Perlman, R., and M. Speciner, «Network Security: Private Communication in a Public World», Prentis Hall PTR, ISBN 0-13-046019-2, 2nd Edition 2002.

[KeyStudy] Blaze, M., Diffie, W., Riverst, R., Schneier, B. Shimomura, T., Thompson, E., and M. Weiner, «Minimal Key Lengths for Symmetric Ciphers to Provide Adequate Commercial Security: A Report by an Ad Hoc Group of Cryptographers and Computer Scientists», January 1996. Доступен по ссылкам http://www.crypto.com/papers/keylength.txt и http://www.securitydocs.com/library/441.

[KNUTH] Knuth, D., «The Art of Computer Programming», Volume 2: Seminumerical Algorithms, Chapter 3: Random Numbers, Addison-Wesley Publishing Company, 3rd Edition, November 1997.

[KRAWCZYK] Krawczyk, H., «How to Predict Congruential Generators», Journal of Algorithms, V. 13, N. 4, December 1992.

[LUBY] Luby, M., «Pseudorandomness and Cryptographic Applications», Princeton University Press, ISBN 0691025460, 8 January 1996.

[MAIL_PEM1] Linn, J., «Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures», RFC 1421, February 1993.

[MAIL_PEM2] Kent, S., «Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management», RFC 1422, February 1993.

[MAIL_PEM3] Balenson, D., «Privacy Enhancement for Internet Electronic Mail: Part III: Algorithms, Modes, and Identifiers», RFC 1423, February 1993.

[MAIL_PEM4] Kaliski, B., «Privacy Enhancement for Internet Electronic Mail: Part IV: Key Certification and Related Services», RFC 1424, February 1993.

[MAIL_PGP1] Callas, J., Donnerhacke, L., Finney, H., and R. Thayer, «OpenPGP Message Format», RFC 2440, November 1998.

[MAIL_PGP2] Elkins, M., Del Torto, D., Levien, R., and T. Roessler, «MIME Security with OpenPGP», RFC 3156, August 2001.

[S/MIME] RFCs 2632 through 2634:

Ramsdell, B., «S/MIME Version 3 Certificate Handling», RFC 2632, June 1999.

Ramsdell, B., «S/MIME Version 3 Message Specification», RFC 2633, June 1999.

Hoffman, P., «Enhanced Security Services for S/MIME», RFC 2634, June 1999.

[MD4] Rivest, R., «The MD4 Message-Digest Algorithm», RFC 1320, April 1992.

[MD5] Rivest, R., «The MD5 Message-Digest Algorithm», RFC 1321, April 1992.

[MODES] «DES Modes of Operation», US National Institute of Standards and Technology, FIPS 81, December 1980. Also: «Data Encryption Algorithm — Modes of Operation», American National Standards Institute, ANSI X3.106-1983.

[MOORE] Закон Мура — экспоненциальный рост логической плотности кремниевых микросхем. В первоначальной формулировке Gordon Moore (1964) плотность возрастала каждый год, начиная с 1962, вдвое, но в конце 1970-х скорость роста упала до удвоения в течение каждый 18 месяцей и оставалась такой на момент публикации этого документа. См. «The New Hacker’s Dictionary», Third Edition, MIT Press, ISBN 0-262-18178-9, Eric S. Raymond, 1996.

[NASLUND] Naslund, M. and A. Russell, «Extraction of Optimally Unbiased Bits from a Biased Source», IEEE Transactions on Information Theory. 46(3), May 2000.

[ORMAN] Orman, H. and P. Hoffman, «Determining Strengths For Public Keys Used For Exchanging Symmetric Keys», BCP 86, RFC 3766, April 2004.

[RFC1750] Eastlake 3rd, D., Crocker, S., and J. Schiller, «Randomness Recommendations for Security», RFC 1750, December 1994.

[RFC1948] Bellovin, S., «Defending Against Sequence Number Attacks», RFC 1948, May 1996.

[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, «HMAC: Keyed-Hashing for Message Authentication», RFC 2104, February 1997.

[RSA_BULL1] «Suggestions for Random Number Generation in Software», RSA Laboratories Bulletin #1, January 1996.

[RSA_BULL13] Silverman, R., «A Cost-Based Security Analysis of Symmetric and Asymmetric Key Lengths», RSA Laboratories Bulletin #13, April 2000 (revised November 2001).

[SBOX1] Mister, S. and C. Adams, «Practical S-box Design», Selected Areas in Cryptography, 1996.

[SBOX2] Nyberg, K., «Perfect Non-linear S-boxes», Advances in Cryptography, Eurocrypt ’91 Proceedings, Springer-Verland, 1991.

[SCHNEIER] Schneier, B., «Applied Cryptography: Protocols, Algorithms, and Source Code in C», 2nd Edition, John Wiley & Sons, 1996.

[SHANNON] Shannon, C., «The Mathematical Theory of Communication», University of Illinois Press, 1963. Originally from: Bell System Technical Journal, July and October, 1948.

[SHIFT1] Golub, S., «Shift Register Sequences», Aegean Park Press, Revised Edition, 1982.

[SHIFT2] Barker, W., «Cryptanalysis of Shift-Register Generated Stream Cypher Systems», Aegean Park Press, 1984.

[SHA] «Secure Hash Standard», US National Institute of Science and Technology, FIPS 180-2, 1 August 2002.

[SHA_RFC] Eastlake 3rd, D. and P. Jones, «US Secure Hash Algorithm 1 (SHA1)», RFC 3174, September 2001.

[SSH] Products of the SECSH Working Group, Works in Progress, 2005.

[STERN] Stern, J., «Secret Linear Congruential Generators are not Cryptographically Secure», Proc. IEEE STOC, 1987.

[TLS] Dierks, T. and C. Allen, «The TLS Protocol Version 1.0», RFC 2246, January 1999.

[TURBID] Denker, J., «High Entropy Symbol Generator», <http://www.av8n.com/turbid/paper/turbid.htm>, 2003.

[USENET_1] Kantor, B. and P. Lapsley, «Network News Transfer Protocol», RFC 977, February 1986.

[USENET_2] Barber, S., «Common NNTP Extensions», RFC 2980, October 2000.

[VON_NEUMANN] Von Nuemann, J., «Various techniques used in connection with random digits», Von Neumann’s Collected Works, Vol. 5, Pergamon Press, 1963.

[WSC] Howard, M. and D. LeBlanc, «Writing Secure Code, Second Edition», Microsoft Press, ISBN 0735617228, December 2002.

[X9.17] «American National Standard for Financial Institution Key Management (Wholesale)», American Bankers Association, 1985.

[X9.82] «Random Number Generation», American National Standards Institute, ANSI X9F1, Work in Progress.

Part 1 — Overview and General Principles.

Part 2 — Non-Deterministic Random Bit Generators

Part 3 — Deterministic Random Bit Generators


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

Donald E. Eastlake 3rd

Motorola Laboratories

155 Beaver Street

Milford, MA 01757 USA

Phone: +1 508-786-7554 (w)

+1 508-634-2066 (h)

EMail: Donald.Eastlake@motorola.com

Jeffrey I. Schiller

MIT, Room E40-311

77 Massachusetts Avenue

Cambridge, MA 02139-4307 USA

Phone: +1 617-253-0161

EMail: jis@mit.edu

Steve Crocker

EMail: steve@stevecrocker.com


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

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

nmalykh@gmail.com


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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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.


1US Advanced Encryption Standard — стандарт США для усовершенствованного шифрования.

2Digital Signature Algorithm — алгоритм цифровой подписи.

3US National Institute of Standards and Technology — Национальный институт стандартов и технологий США.

4Букв., устранение перекосов. Прим. перев.

5Генератор с положительной обратной связью без источника синхросигнала. Прим. перев.

6Exclusive Or.

7Electronic Codebook Mode — режим простой замены.

8US National Security Agency — Агентство национальной безопасности США.

9CRC Standard Mathematical Tables.

10Output feedback mode.

11Взаимно простые числа не имеют общих делителей, за исключением 1. Прим. перев.

12В https://www.rfc-editor.org/errata_search.php?eid=3105 отмечена ошибочность данного утверждения. Прим. перев.

13American National Standards Institute — Национальный институт стандартизации США.

14Digital Signature Standard — стандарт цифровой подписи.

15В числовых значениях и порядках (показателях степени) тут явные ошибки. Оставим их на совести авторов. Прим. перев.

16Этот документ был заменен RFC 4301. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 4086 Randomness Requirements for Security отключены

RFC 4084 Terminology for Describing Internet Connectivity

Network Working Group                                     J. Klensin
Request for Comments: 4084                                  May 2005
BCP: 104
Category: Best Current Practice

Терминология для описания услуг по подключению к Internet

Terminology for Describing Internet Connectivity

PDF

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

В этом документе рассматривается позитивный опыт (Best Current Practices), который может быть полезен сообществу Internet. Документ служит приглашением к дискуссии в целях дальнейшего совершенствования и может распространяться свободно.

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

Copyright (C) The Internet Society (2005).

Аннотация

Когда сеть Internet развилась достаточно сильно, началась активная реклама и продажа «подключения к Internet1». В силу того, что предложения могут существенно различаться по своим возможностям, набору опций, а также по причине отсутствия стандартизованной терминологии, конечные пользователи зачастую не могут разобраться с предлагаемыми услугами. В этом документе приводится список терминов и определений, описывающих различные типы сервиса, которые могут предлагаться. Эти определения могут оказаться полезными для провайдеров, потребителей и (возможно) контролирующих органов.

Оглавление

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

1. Введение

1.1. Проблема и требования

Различные поставщики услуг доступа в Internet (ISP) и другие провайдеры предлагают широкий спектр продукции и услуг, обозначаемых как «Internet» или «доступ в Internet». Эта продукция характеризуется различным набором функций и, в результате, может оказаться подходящей для одних пользователей и совершенно неприемлемой для других. Например, сервис, который обеспечивает только доступ в Web (в контексте этого документа – часть Internet, доступная по протоколам HTTP и HTTPS), может устроить тех, кто интересуется исключительно Web-серверами и почтовыми системами на базе Web. Однако такой сервис не подойдет тем, кто хочет загружать из сети файлы или использовать электронную почту более интенсивно. Очевидно, что еще меньше такой сервис подойдет тем, кто предоставляет свои серверы для других пользователей или нуждается в каналах VPN (виртуальные частные сети) или иных системах организации защищенного доступа в удаленный офис, а так же тем, кому нужна синхронизация электронной почты для работы с ней без постоянного доступа в сеть (offline0.

Недавние и быстротекущие изменения в среде электронной почты Internet привели к дополнительным ограничениям на передачу и получение (retrieving) почты. Эти ограничения, большинство из которых разработаны как часть системы предотвращения незапрошенной почты2, могут вводиться независимо от типа сервиса, описанного ниже, и рассматриваются отдельно в главе 3.

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

Термины SHOULD (следует), MUST (должно), и MAY (можно) выделяются в этом документе, как описано в [1].

1.2. Адаптация терминов

Приведенные здесь определения будут иметь мало смысла, если сервис-провайдеры не примут их. Предложенные здесь термины не следует рассматривать как “уничижительные”, несмотря на то, что ряд членов сообщества IETF считает некоторые из описанных здесь типов сервиса “забытыми” (broken) или не относящимися к «Internet-сервису” (not really an Internet service). Упоминание того или иного типа сервиса или модели в данном документе не является подтверждением или признанием существования или возможности существования его на реальном рынке. Таким образом, опыт (Best Current Practice), описываемый в этом документе, относится к терминологии, а приведенная информация предназначена для пользователей и не задает типов сервиса, которые следует предлагать.

2. Общая терминология

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

Определения типов обслуживания приводятся в порядке возрастания возможностей вплоть до полнофункционального подключения к Internet3.

  • Web connectivity (Web-подключение).

Этот тип сервиса обеспечивает подключение к Web, т. е., к службам, поддерживаемым с помощью Web-браузеров (таких, как Firefox, Internet Explorer, Mozilla, Netscape, Lynx или Opera), в частности, к службам, работающим по протоколам HTTP и HTTPS. Другие типы сервиса в общем случае не поддерживаются. В частности, такой тип сервиса может не предоставлять доступа к электронной почте по протоколам POP3 или IMAP4, не поддерживать шифрованные туннели и другие механизмы VPN.

Используемые для такого сервиса адреса могут быть приватными и/или недоступными в глобальном масштабе. Адреса обычно выделяются динамически (см. обсуждение в параграфе 3) и срок их использования достаточно мал (часы или дни). Такие адреса часто анонсируются как динамические (dynamic) для тех, кто поддерживает списки динамических адресов, используемых для коммутируемого доступа. Провайдер может использовать фильтрацию с помощью Web-прокси для соединений; прокси-сервер может изменять или перенаправлять URL на другие сайты взамен тех, которые указаны пользователем или приведены в ссылке.

  • Client connectivity only, without a public address (подключение в качестве клиента без предоставления публичного адреса).

Этот тип сервиса обеспечивает доступ в Internet без поддержки возможности организации серверов и реализации большинства функций peer-to-peer. Выделяемый пользователю адрес IP является динамическим и обычно относится к приватным блокам. Серверы и функции peer-to-peer обычно не поддерживаются системами трансляции адресов (NAT), которые требуются при использовании приватных адресов. Более точное описание категорий NAT в документе [2] в некоторых случаях отличается от трактовки в данном документа. Такие функции могут рассматриваться как отдельные типы сервиса, описанные в главе 4.

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

  • Client only, public address (подключение в качестве клиента с предоставлением публичного адреса).

Этот тип сервиса обеспечивает доступ в Internet без поддержки возможности организации серверов и реализации большинства функций peer-to-peer. Пользователю предоставляется публичный4 адрес IP. Адрес обычно выделяется динамически или может быть изменен в любое время, но работа с одним адресом может продолжаться в течение месяцев. С этим типом обслуживания работает большинство систем VPN5 и подобных им соединений. Провайдер может запретить пользователю организацию серверов на уровне контракта или путем фильтрации попыток входящих (к пользователю) соединений.

Фильтрующие Web-прокси нехарактерны для этого типа сервиса и провайдерам следует сообщать о наличии таких серверов.

  • Firewalled Internet Connectivity (подключение с использованием межсетевого экрана).

Этот тип сервиса обеспечивает доступ в Internet и поддерживает возможность организации серверов и использования большинства функций peer-to-peer functions с предоставлением клиенту одного публичного адреса IP или блока таких адресов (обычная практика). Этот тип сервиса похож на полнофункциональное подключение, описанное ниже, и к нему применимы все описанные для этого сервиса классификации и ограничения. Однако для данного типа сервиса используется подключение через поддерживаемый провайдером межсетевой экран6, который находится между пользователем и публичной частью Internet. Поддержка межсетевого экрана обычно включается по запросу заказчика и повышает стоимость обслуживания. Условия фильтрации пользовательского трафика на межсетевом экране оговариваются в контракте и могут обеспечивать блокирование некоторых услуг.

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

В большинстве случаев услуги межсетевого экранирования предлагаются в качестве платного дополнения к сервису Full Internet Connectivity, который отличается от описанной выше модели тем, что любая фильтрация или блокирование трафика выполняются по запросу заказчика, а не как ограничение возможностей пользователей.

  • Full Internet Connectivity (полнофункциональное подключение).

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

Фильтрующие Web-прокси, перехватывающие прокси-серверы, NAT и иные вносимые провайдером ограничения для входящего или исходящего трафика или портов несовместимы с этим типом сервиса. Серверы в локальной сети пользователя обычно рассматриваются как нормальное явление. Допустимыми для такого сервиса ограничениями являются полоса канала и запрет на недопустимое использование ресурсов и противоправные действия.

3. Терминология, относящаяся к фильтрации и безопасности

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

В общем случае максимальные ограничения очевидно будут связаны с такими типами сервиса, как Web-подключение и подключение без предоставления публичного адреса, но некоторые рекомендации предлагают применять ограничения ко всем уровням сервиса. Некоторые ограничения для электронной почты не позволяют клиента передавать почту напрямую (однако можно передавать почту через сервер провайдера), запрещают пользователю устанавливать произвольный обратный адрес в письмах и могут даже закрывать доступ к серверам электронной почты (за исключением предоставленных провайдером) по протоколам типа POP3 или IMAP4. Поскольку пользователям может требоваться доступ к файловым серверам и удаленным почтовым серверам (хотя бы для того, чтобы можно было пользоваться своим электронным адресом из разных мест), важно, чтобы провайдеры указывали до­ступные при подключении службы и вводимые ограничения.

Некоторые вопросы фильтрации электронной почты имеют особую важность и рассмотрены ниже.

  • Динамические адреса.Множество систем, включая некоторые “черные списки” (blacklist), работают на основе допущения, что значительная часть незапрошенной почты поступает от хостов с динамическими адресами, особенно от компьютеров с коммутируемым доступом по телефонным линиям или домашних систем, подключенных по широкополосным каналам. Следовательно, предпринимаются попытки предотвратить передачу почты с таких адресов (за исключением передачи сообщений через серверы провайдера).Для идентификации систем с динамическими адресами используются различные методы, включая анонсирование провайдерами динамически распределяемых блоков держателям “черных списков”, эвристические методы, преобразование адресов в доменные имена и проверка наличия в полученном имени подстрок типа «dsl» или «dial». В некоторых случаях отсутствие реверсной записи DNS трактуется как принадлежность адреса к числу динамических. Отметим, что метод запрета соединений FTP с адресов, для которых отсутствует возможность обратного преобразования DNS, был разработан несколько лет назад и показал свою несостоятельность (множество ложных срабатываний и частый пропуск действительно динамических адресов). Провайдерам следует описывать свои требования (действия) в данном направлении как для входящего, так и для исходящего трафика. Пользователей следует предупреждать о том, что анонсирование провайдером динамических адресов может делать невозможной прямую передачу электронной почты даже для сервиса типа Full Internet Connectivity.
  • Приватные адреса и трансляция NAT.Системы NAT, используемые для преобразования приватных адресов в публичные (и обратно) позволяют подключаться к удаленным почтовым службам и передавать почтовый трафик в обоих направлениях, но соглашения с провайдерами зачастую запрещают использование серверов, не относящихся к сети провайдера, а также использование клиентских станций в качестве почтовых серверов (обычно это требование не определено достаточно четко).
  • Фильтрация провайдером исходящего трафика по портам.

    Другим распространенным способом блокирования соединений с серверами за пределами сети провайдера является фильтрация соединений с портами TCP. Разные провайдеры имеют различные “теории” на сей счет. Некоторые запрещают своим клиентам использовать внешние серверы SMTP для отправки сообщений, но позволяют использовать такие функции при наличии аутентификации отправителя [3]. Другие провайдеры пытаются блокировать все связанны с отправкой почты соединения (такой подход реже используется для клиентов с публичными адресами, нежели для клиентов с приватными адресами и NAT). При использовании такой фильтрации, особенно для сервиса типа «Client only, public address» или «Full Internet Connectivity», провайдер должен сообщать об этом клиентам (см. также главу 4).

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

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

4. Дополнительные термины

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

  • Поддержка версий протокола.Версии протокола IP, поддерживаемые провайдером – только IPv4, IPv4 и IPv6 или только IPv6.
  • Поддержка аутентификации.

    Технические механизмы, используемые провайдером для организации и аутентификации соединений. Примерами могут слу­жить DHCP, PPP, RADIUS, перехват (interception) HTTP.

  • VPN и туннели.

    Поддерживается ли использование IPSec? Поддерживаются ли другие механизмы организации туннелей на уровне IP или ниже (например, L2TP)? Предпринимаются ли попытки блокирования туннельных механизмов прикладного уровня (напри­мер, SSH)?

  • Поддержка групповой адресации.Может ли пользовательская станция принимать пакеты с групповой адресацией?
  • Поддержка DNS.Требуется ли от клиента использование DNS-серверов провайдера или запросы DNS могут отправляться на произвольные серверы?
  • ICMP и traceroute.Пропускаются ли сообщения ICMP в направлении пользователя и от него? Блокируется ли использование таких инструментов, как ping и traceroute (если да, то в какой точке сети)?
  • Роуминг.Поддерживает ли провайдер IP-роуминг? Поддерживается ли для широкополосных соединений возможность организации коммутируемого соединения в качестве резервного или при отъезде в другое место? Как в случае работы с роумингом осуществляется доступ к электронной почте и т. п.?
  • Электронная почта и хостинг.Предоставляется ли электронная почта и/или Web-хостинг в составе сервиса? Для почтовых служб следует определить тип доступа к почтовым ящикам (POP3, IMAP4 или Web, а также средства аутентификации для каждого из вариантов доступа.
  • Блокировка исходящих соединений с серверами.

    Блокирует ли провайдер использование чужих серверов SMTP или перехватывает их и перенаправляет их на свой сервер? Ограничивается ли на почтовых серверах использование “чужих” доменов в исходящих почтовых сообщениях (см. также главу 3)? Поддерживается ли команда FTP PASV? Блокируются (перехватываются) ли обращения в файлообменные сети или использование других механизмов передачи файлов, а также серверы конференций и приватных приложений?

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

  • Блокирование входящих соединений с серверами.Использует ли провайдер какие-либо ограничения для соединений, которые может организовывать пользовательское оборудование, в дополнение к ограничениям, связанным с динамическими и приватными адресами? В частности, следует выяснить блокируются ли входящие соединения SMTP, HTTP, HTTPS, FTP, peer-to-peer и др.?
  • Фильтрация содержимого.Провайдерам следует сообщать своим пользователям о средствах фильтрации, используемых для предотвращения червей, вирусов и спама, атак на службы или ограничения доступа к Web (в частности, для детей).
  • Прослушивание” и перехват.В описание сервиса следует включать сведения о возможности законного перехвата проходящего через сеть провайдера трафика. Провайдеру следует также оповещать пользователей будут ли они получать от провайдера предупреждение об активизации такого перехвата. Аналогичные вопросы следует задать и по поводу хранящейся у провайдера данных о трафике пользователей.

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

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

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

Толчком к созданию этого документа послужила переписка по электронной почте с Верноном Шрайнером (Vernon Schryver), Паулем Викси (Paul Vixie0 и Натаниэлем Борнстейном (Nathaniel Bornstein). Разговоры о необходимости разработки таких определений велись уже много лет, упомянутая переписка убедила автора в том, что настало время перейти от слов к делу. Harald Alvestrand, Brian Carpenter, George Michaelson, Vernon Schryver и другие внесли в черновой вариант документа предложения, кото­рые позволили подготовить новый черновой вариант. Stephane Bortzmeyer, Brian Carpenter, Tony Finch, Susan Harris, David Kessens, Pekka Savola и Vernon Schryver внесли много полезных предложений в последующие версии документа. Сьюзан Харрис (Susan Harris) внимательно прочла предпоследнюю версию документа и внесла поправки как редактор (RFC Editor).

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

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

[2] Srisuresh, P. and M. Holdrege, «IP Network Address Translator (NAT) Terminology and Considerations», RFC 2663, August 1999.

[3] Gellens, R. and J. Klensin, «Message Submission», RFC 2476, December 1998.

Адрес автора

John C Klensin

1770 Massachusetts Ave, #322

Cambridge, MA 02140

USA

Phone: +1 617 491 5735

EMail: john-ietf@jck.com


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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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В оригинале используется термин “Internet connectivity”. Прим. перев.

2Спама. Прим. перев.

3В оригинале — «full Internet connectivity». Прим. перев.

4Маршрутизируемый через Internet. Прим. перев.

5Virtual Private network – виртуальная частная сеть. Прим. перев.

6Firewall. В русском языке часто используется термин брандмауэр или транслитерация “фаервол”. Прим. перев.

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

RFC 3927 Dynamic Configuration of IPv4 Link-Local Addresses

Network Working Group                                        S. Cheshire
Request for Comments: 3927                                Apple Computer
Category: Standards Track                                       B. Aboba
                                                   Microsoft Corporation
                                                              E. Guttman
                                                        Sun Microsystems
                                                                May 2005

Динамическая настройка адреса IPv4 Link-Local

Dynamic Configuration of IPv4 Link-Local Addresses

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

Для участия в работе распределенных сетей IP хосту нужны адреса IP на его интерфейсах, заданные вручную или автоматически с помощью механизмов, таких как сервер DHCP1. К сожалению данные для настройки адресов доступны не всегда. Поэтому для хостов будет преимуществом возможность использовать хотя бы часть сетевых функций IP при отсутствии настроенного адреса. Этот документ описывает для хостов способ автоматической настройки для интерфейсов адресов IPv4 из префикса 169.254/16, которые подходят для коммуникаций с другими устройствами, подключенными к тому же физическому (или логическому) каналу.

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

1. Введение

По мере роста популярности протокола Internet становится все более ценной возможность использования привычных инструментов IP, таких как протокол FTP, не только для глобальных, но и для локальных коммуникаций. Например, два человека с переносными компьютерами, поддерживающими беспроводные соединения IEEE 802.11 [802.11], могут пожелать обмениваться файлами через такое соединение. Для таких людей желательно обеспечить возможность использования программ IP без неудобств, связанных с ручной настройкой статических адресов IP или их получением от сервера DHCP [RFC2131].

В этом документе описан метод, с помощью которого хост может автоматически настроить для своего интерфейса адрес IPv4 из префикса 169.254/16, который будет пригоден для локальных коммуникаций (Link-Local) через этот интерфейс. Это особенно полезно в средах, где нет других механизмов настройки конфигурации. Префикс IPv4 169.254/16 зарегистрирован IANA специально для таких целей. Выделение адреса IPv6 Link-Local описано в документе IPv6 Stateless Address Autoconfiguration [RFC2462].

Локальные коммуникации с использованием адресов IPv4 Link-Local подходят только для связи между устройствами, подключенными к одному физическому (или логическому) каналу. Адреса IPv4 Link-Local непригодны для связи с устройствами, которые не подключены непосредственно к одному физическому (или логическому) каналу.

Microsoft Windows 98 (и более поздние версии) и Mac OS 8.5 (и более поздние версии) уже поддерживают такую возможность. Данный документ стандартизует использование локальных (Link-Local) адресов IPv4 и описывает правила трактовки таких адресов хостами и маршрутизаторами. В частности, описано поведение маршрутизаторов при получении ими пакетов с адресами IPv4 Link-Local в поле отправителя или получателя. Для хостов рассматривается заявление и защита локальных адресов, поддержка локального и маршрутизируемого адреса IPv4 на одном интерфейсе и вопросы связанные с множеством интерфейсов на хосте.

1.1. Уровни требований

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

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

Этот документ описывает адресацию Link-Local для коммуникаций IPv4 между двумя хостами на одном канале. Множество хостов относятся к одному каналу при выполнении двух условий:

  • если хост A передает хосту B из того же множества пакет с использованием индивидуальной, групповой или широковещательной адресации, данные (payload) канального уровня сохраняются неизменными;

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

Заголовок канального уровня может быть изменен (например, в Token Ring Source Routing [802.5]), но данные (payload) канального уровня не меняются. В частности, если любое пересылающее пакет устройство меняет какую-либо часть заголовка IP или данных IP, пакет больше не считается относящимся к тому же каналу. Это означает, что пакет может проходить через повторители, мосты, концентраторы или коммутаторы, оставаясь на том же канале в понимании данного документа, но не может проходить в этом смысле через устройства типа маршрутизаторов IP, которые уменьшают значение TTL или как-то иначе меняют заголовок IP.

В этом документе термин «маршрутизируемый адрес» (routable address) означает все действующие индивидуальные адреса IPv4, не входящие в префикс 169.254/16, которые могут пересылаться маршрутизаторами. Сюда входят все публичные адреса IP и приватные адреса типа 10/8 [RFC1918], но не адреса петлевых интерфейсов типа 127.0.0.1.

Всякий раз, когда в этом документе используется термин «хост» при описании использования адресов IPv4 Link-Local, это относится также к маршрутизаторам, которые являются источниками или предполагаемыми получателями пакетов, содержащих адрес IPv4 Link-Local в поле отправителя или получателя.

В тех случаях, когда в документе используется термин «IP-адрес отправителя» или «IP-адрес получателя» в контексте пакета ARP, это относится к полям пакета ARP, указанным в спецификации ARP [RFC826] как ar$spa (протокольный адрес отправителя) и ar$tpa (протокольный адрес получателя), соответственно. Для описанных в этом документе применений ARP каждое из этих полей всегда содержит адрес IP.

В этом документе термин «проба ARP» относится к пакетам ARP Request, передаваемым по широковещательному адресу в локальный канал с нулевым значением IP-адреса отправителя. Поле аппаратного адреса отправителя должно содержать аппаратный адрес передавшего пакет интерфейса. Поле аппаратного адреса получателя игнорируется и его следует заполнять нулями. В поле IP-адреса получателя должен указываться проверяемый адрес.

Термин «анонсы ARP» в этом документе относится к пакетам ARP Request, передаваемым по широковещательному адресу в локальный канал, аналогично описанным выше пробам ARP, за исключением того, что в полях IP-адресов отправителя и получателя указывается анонсируемый адрес.

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

1.3. Применимость

Эта спецификация применима для всех ЛВС IEEE 802 [802], включая Ethernet [802.3], Token-Ring [802.5] и беспроводные ЛВС IEEE 802.11 [802.11], а также для других технологий канального уровня, которые работают со скоростями не менее 1 Мбит/с, имеют время кругового обхода не более 1 секунды и поддерживают ARP [RFC826]. Термин IEEE 802 в документе относится ко всем таким сетевым технологиям.

Технологии канального уровня с поддержкой ARP, работающие со скоростями ниже 1 Мбит/с или временем кругового обхода больше 1 секунды, могут потребовать подбора значений для перечисленных ниже параметров.

  1. Число проб ARP и интервалы между ними (см. PROBE_NUM, PROBE_MIN и PROBE_MAX в параграфе 2.2.1).

  2. Число анонсов ARP и интервалы между ними (ANNOUNCE_NUM и ANNOUNCE_INTERVAL в параграфе 2.4).

  3. Максимальная скорость, с которой могут выполняться попытки объявления адреса (см. RATE_LIMIT_INTERVAL и MAX_CONFLICTS в параграфе 2.2.1).

  4. Граница интервала при конфликте между ARP, ниже которой хост должен изменить конфигурацию вместо попытки защиты своего адреса (см. DEFEND_INTERVAL в параграфе 2.5).

Технологии канального уровня, не поддерживающие ARP, могут использовать другие методы определения занятости адресов IP. Однако применение механизмов объявления и защиты (claim-and-defend) адресов для таких сетей выходит за рамки этого документа.

Данная спецификация предназначена для использования в небольших специализированных (ad hoc) сетях, где один канал используется для соединения небольшого числа хостов. Хотя в принципе доступны 65024 адресов IPv4 Link-Local, попытки использовать все эти адреса на локальном канале обречены на высокую вероятность конфликтов и потребуют от хостов затраты значительного времени на поиск доступного адреса.

Сетевые операторы, имеющие более 1300 хостов на одном канале, могут рассматривать вопрос о разбиении этого канала на две или более подсети. Хост, подключающийся к каналу, где уже имеется 1300 хостов, при выборе адреса IPv4 Link-Local имеет вероятность с первой попытки найти свободный локальный адрес около 98%, при двух попытках вероятность возрастает до 99,96%. Вероятность того, что потребуется более 10 попыток, составляет около 10-17.

1.4. Протокол прикладного уровня

Локальные адреса IPv4 и их динамическая настройка оказывают существенное влияние на использующие эти адреса приложения (см. раздел 6). Многие приложения предполагают, что адреса взаимодействующих с ними партнеров являются маршрутизируемыми, сравнительно редко меняющимися и уникальными. Эти допущения неверны для адресов IPv4 Link-Local или смешанного использования локальных и маршрутизируемых адресов IPv4. Поэтому некоторые приложения могут работать корректно в среде IPv4 Link-Local или смешанной среде с локальными и маршрутизируемыми адресами, а для других могут потребоваться изменения или будет теряться часть функций. В некоторых случаях приложения невозможно изменить для работы в таких условиях.

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

Использование адресов IPv4 Link-Local для коммуникаций, выходящих за пределы локального канала, с высокой вероятностью приведет к возникновению проблем. Это может произойти в любом приложении, использующем вложенные адреса IPv4 Link-Local при коммуникациях с хостами, не подключенными к тому же каналу. Примеры приложений с вложенными адресами включают IPsec, Kerberos 4/5, FTP, RSVP, SMTP, SIP, X-Windows/Xterm/Telnet, Real Audio, H.323 и SNMP [RFC3027].

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

  1. Адреса IPv4 Link-Local недопустимо указывать в DNS2. Отображение адресов IPv4 на имена хостов происходит в форме запросов DNS вида x.x.x.x.in-addr.arpa. При использовании локальных адресов, которые имеют смысл только на данном канале, недопустима передача таких запросов DNS за пределы локального соединения. Клиентам DNS недопустимо передавать запросы DNS для имен, относящихся к домену «254.169.in-addr.arpa.». Рекурсивные серверы DNS, получая запросы от некорректно работающих клиентов для имен из домена «254.169.in-addr.arpa.», должны по умолчанию возвращать RCODE 3, правомочно заявляя об отсутствии таких имен в DNS.

  2. В приложениях следует использовать имена, преобразуемые в глобальном масштабе в маршрутизируемые адреса, когда такие имена доступны. Имена, отображающиеся только на локальные адреса (используемые протоколами типа Link Local Multicast Name Resolution [LLMNR]), недопустимо использовать во внешних коммуникациях. Адреса IPv4 и имена, которые могут отображаться только на локальный канал, не следует пересылать за пределы этого канала. Адреса IPv4 Link-Local следует передавать лишь при использовании локального адреса для получателя или отправителя. Это должно предотвратить выход локальных адресов за пределы контекста их применимости.

  3. Если имена, преобразуемые в глобально маршрутизируемые адреса, не доступны, но имеются адреса с глобальной маршрутизацией, их следует применять вместо адресов IPv4 Link-Local .

1.5. Вопросы автоматической настройки

Реализации автоматической настройки адресов IPv4 Link-Local должны предполагать конфликты адресов и должны быть готовы к аккуратному выбору другого адреса в таких случаях, как описано в разделе 2. Требование детектирования и обработки конфликтов применяется в течение всего срока использования хостом локального адреса 169.254/16, а не только при начальной настройке интерфейса. Например, конфликт адресов может возникнуть после завершения загрузки хоста, если к этой сети подключится другой хост, как описано в разделе 4.

1.6. Запрет других применений

Отметим, что адреса из префикса 169.254/16 не следует задавать вручную или с помощью сервера DHCP, поскольку это может приводить к использованию хостом такого адреса без выполнения правил, связанных с обнаружением дубликатов и автоматической настройки, применяемых для этого префикса. Хотя спецификация DHCP [RFC2131] указывает, что клиенту DHCP следует проверять полученный вновь адрес с помощью ARP, это не является обязательным. В спецификации указано, что серверу DHCP перед выделением адреса следует проверять его с помощью запроса ICMP Echo, но это тоже не обязательно и даже в том случае, когда сервер выполняет такую проверку ее результат не будет иметь смысла, если сервер DHCP не подключен напрямую к локальному каналу, поскольку адреса IPv4 Link-Local не маршрутизируются.

Администраторам, желающим настроить свои локальные адреса (вручную, с помощью сервера DHCP или иного механизма, не описанного здесь), следует использовать один из приватных префиксов [RFC1918], а не 169.254/16.

1.7. Множество интерфейсов

Дополнительные вопросы возникают для хостов с несколькими активными интерфейсами, из которых часть или все используют адреса IPv4 Link-Local. Эти вопросы рассматриваются в разделе 3.

1.8. Взаимодействие с маршрутизируемыми адресами

Бывают случаи, когда устройствам с адресами Link-Local нужно взаимодействовать с устройством, имеющим маршрутизируемый адрес, на том же физическом канале. Правила таких коммуникаций рассмотрены в параграфе 2.6.

Это позволяет, например, переносному компьютеру, имеющему только маршрутизируемый адрес для взаимодействия с web-серверами по всему миру, в то же время печатать документы на локальном принтере с адресом IPv4 Link-Local.

1.9. Когда настраивают адрес IPv4 Link-Local

Наличие на интерфейсе адресов с разными областями действия без адекватного способа определить условия использования каждого из адресов усложняют работу приложений и путают пользователя. Хост а адресом, подключенный к каналу, может взаимодействовать со всеми хостами этого канала независимо от использования маршрутизируемых или локальных адресов. По этой причине хосту не следует использовать на одном интерфейсе маршрутизируемые и локальные адреса. Термин «пригодный для работы адрес» (operable address) используется для обозначения адреса, обеспечивающего коммуникации в текущем сетевом контексте (см. ниже). Когда доступен пригодный для работы маршрутизируемый адрес, хосту не следует назначать для того же интерфейса еще и адрес IPv4 Link-Local. Однако в процессе перехода от маршрутизируемого адреса к локальному (и наоборот) оба адреса могут использоваться одновременно при соблюдении приведенных ниже правил.

  1. Назначение адреса IPv4 Link-Local интерфейсу определяется лишь состоянием интерфейса и не зависит от каких-либо других протоколов типа DHCP. Хосту недопустимо менять свое поведение и использовать другие протоколы (например, DHCP), поскольку он имеет адрес IPv4 Link-Local на своем интерфейсе.

  2. Если хост обнаружил, что интерфейс, которому был ранее назначен адрес IPv4 Link-Local, имеет доступный маршрутизируемый адрес, хост должен использовать маршрутизируемый адрес при инициировании новых коммуникаций и должен прекратить анонсирование доступности адреса IPv4 Link-Local с помощью любых механизмов. Хосту следует продолжать использование адреса IPv4 Link-Local для организованных ранее коммуникаций и он может продолжать восприятие новых коммуникаций по адресу IPv4 Link-Local. Способы получения на интерфейсе маршрутизируемого адреса включают:

    • ручную настройку;

    • назначение сервером DHCP;

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

  3. Если хост обнаруживает, что на интерфейсе больше нет доступного маршрутизируемого адреса, он может определить подходящий адрес IPv4 Link-Local (см. раздел 2) и назначить его интерфейсу. Причины утраты интерфейсом маршрутизируемого адреса включают:

    • удаление адреса вручную;

    • завершение срока аренды адреса в DHCP;

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

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

В работе Detection of Network Attachment (DNA) in IPv4 [DNAv4] приведено дополнительное рассмотрение вопросов назначения адресов и определения их пригодности для использования.

2. Выбор адреса, защита и доставка

В следующих параграфах описан алгоритм выбора адресов IPv4 Link-Local, их защиты и доставки пакетов IPv4 с локальными адресами.

Хосты Windows и Mac OS уже поддерживают автоматическую настройку адресов Link-Local IPv4 в соответствии с описанными в этом разделе правилами. Однако при обнаружении каких-либо проблем взаимодействия стандартное решение определяет этот документ, а не та или иная реализация.

2.1. Выбор локального адреса

Хост, желающий настроить адрес IPv4 Link-Local, выбирает его из диапазона 169.254.1.0 — 169.254.254.255 (включительно) с использованием генератора псевдослучайных чисел с однородным распределением. Префикс IPv4 169.254/16 зарегистрирован агентством IANA специально для таких целей. Первые и последние 256 адресов префикса 169.254/16 зарезервированы для использования в будущем и их недопустимо выбирать для использования хостом с помощью этого механизма динамической настройки.

Алгоритм генерации псевдослучайных значений должен выбираться так, чтобы разные хосты не генерировали одинаковые последовательности чисел. Если хост имеет доступ к стабильной информации, которая различается для каждого хоста (например, адрес IEEE 802 MAC), генератору псевдослучайных чисел следует использовать такую информацию в качестве основы для создания «затравки» (seed). Это означает, что даже при использовании лишь этого источника «затравочной» информации хост обычно будет выбирать один и тот же адрес IPv4 Link-Local при каждой загрузке, что может быть удобно для отлаживания и решения других операционных задач. Инициализация генератора псевдослучайных чисел с использованием часов или иного источника информации, который дает (или может давать) одинаковые значения на каждом хосте, не подходит для этой цели, поскольку группа хостов при одновременном включении будет генерировать одинаковые последовательности, что приведет к бесконечной последовательности конфликтов адресов.

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

2.2. Объявление локального адреса

После выбора адреса IPv4 Link-Local хост должен убедиться, что этот адрес не занят, прежде чем использовать его. При переходе сетевого интерфейса из неактивного состояния в активное хост не знает об уже используемых на канале локальных адресах IPv4, поскольку точка подключения могла измениться или интерфейс мог быть не активен в момент объявления конфликтующего адреса.

Когда хост сразу же начинает использовать адрес IPv4 Link-Local, который уже занят другим хостом, это будет нарушать работу того хоста. Поскольку точка подключения хоста могла измениться и в новой сети может быть доступен маршрутизируемый адрес, поэтому хост не может предполагать, что адрес IPv4 Link-Local является предпочтительным.

Перед использованием адреса IPv4 Link-Local (например, в поле отправителя пакета IPv4 или в поле Sender IPv4 пакета ARP) хост должен выполнить описанную ниже проверку для обеспечения уверенности в том, что использование адреса IPv4 Link-Local не вызовет проблем.

Примерами событий, приводящих к переходу интерфейса в активное состояние, могут служить:

перезагрузка (включение) или выход из состояния «сна» (если сетевой интерфейс не был активен во время «сна») с активизацией сетевого интерфейса;

изменение аппаратного состояния IEEE 802 (подходящее для типа среды и механизма защиты), показывающее, что интерфейс активизируется;

организация связи с беспроводной базовой станцией или сетью ad hoc.

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

2.2.1. Детали проверки

На канальном уровне типа IEEE 802, который поддерживает ARP, обнаружение конфликтов выполняется с помощью проб ARP. Для канальных технологий без поддержки ARP могут использоваться другие механизмы проверки занятости конкретного адреса IPv4. Однако применение в таких сетях механизма объявления и защиты адреса выходит за рамки этого документа.

Хост пытается проверить занятость адреса путем отправки широковещательного запроса ARP для данного адреса. Клиент должен заполнить поле sender hardware address в запросе ARP, указав в нем аппаратный адрес интерфейса, через который передается пакет. Поле sender IP address должно быть заполнено нулями, чтобы избежать загрязнения кэшей ARP на других хостах того же канала в тех случаях, когда адрес уже занят другим хостом. Поле target hardware address игнорируется и его следует заполнять нулями. В поле target IP address должен быть указан проверяемый адрес. Созданный таким образом запрос ARP с нулем в поле sender IP address называется пробой ARP (ARP Probe).

При готовности хоста к началу проверки ему следует сначала выждать случайный интервал времени из диапазона 0 — PROBE_WAIT секунд с равномерным распределением, затем передать PROBE_NUM пробных пакетов со случайными интервалами из диапазона PROBE_MIN — PROBE_MAX. Если с момента начала проверки до истечения ANNOUNCE_WAIT секунд после финальной пробы хост получает какой-либо пакет ARP (Request или Reply) на интерфейсе, использованном для отправки проб, где sender IP address указывает проверяемый адрес, хост должен считать, что этот адрес уже используется другим хостом, должен выбрать новый псевдослучайный адрес и повторить процедуру проверки. В дополнение к этому при получении хостом любого пакета ARP, в котором target IP address указывает проверяемый адрес, а sender hardware address не является аппаратным адресом настраиваемого интерфейса хоста, этот хост должен считать, что возник конфликт адресов и выбирать новый адрес, как описано выше. Такое может происходить при одновременной попытке двух (и более) хостов выбрать один адрес IPv4 Link-Local.

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

Если по истечении ANNOUNCE_WAIT секунд после отправки последнего пакета ARP Probe хост не получил пакета ARP Reply или ARP Probe, он может заявлять выбранный адрес IPv4 Link-Local.

2.3. Сокращенные тайм-ауты

Могут появляться сетевые технологии, для которых подойдут более короткие задержки, нежели задано в этом документе. Для таких технологий могут быть подготовлены соответствующие публикации IETF в другими рекомендуемыми значениями PROBE_WAIT, PROBE_NUM, PROBE_MIN и PROBE_MAX.

2.4. Анонсирование адреса

Проверив уникальность выбранного адреса, хост должен анонсировать этот адрес в ANNOUNCE_NUM широковещательных пакетов ARP с интервалом ANNOUNCE_INTERVAL секунд. Анонс ARP идентичен описанному выше пакету ARP Probe за исключением того, что в полях адресов IP устанавливается выбранный хостом адрес IPv4. Эти анонсы ARP позволяют убедиться в том, что у других хостов на канале не осталось устаревших записей в кэшах ARP от другого хоста, который ранее использовал этот адрес.

2.5. Обнаружение конфликтов и защита

Детектирование адресных конфликтов не ограничивается описанной выше фазой выбора адреса, когда хост передает пробы ARP. Обнаружение конфликтов непрерывный процесс, который работает в течение всего срока использования адреса IPv4 Link-Local. В любой момент получение на интерфейсе хоста пакета ARP (запрос или отклик), в котором sender IP address указывает IP-адрес хоста, установленный на этом интерфейсе, а sender hardware address не совпадает с аппаратным адресом этого интерфейса, говорит о конфликте адресов.

Хост должен отвечать на конфликтующие пакеты ARP в соответствии с пунктом (a) или (b).

  1. При получении конфликтующего пакета ARP хост может незамедлительно настроить новый адрес IPv4 Link-Local, как описано выше, или перейти к п. (b).

  2. Если у хоста имеются активные соединения TCP или иные причины сохранять прежний адрес IPv4, а в течение последних DEFEND_INTERVAL секунд не было других конфликтующих пакетов ARP, хост может попытаться защитить свой адрес, записав время приема конфликтующего пакета ARP и передав после этого один анонс ARP, указывающий его адрес IP и аппаратный адрес в качестве адресов отправителя ARP. После этого хост может продолжать использование адреса без каких-либо дополнительных действий. Однако, если это не первый конфликтующий пакет ARP, который получил хост, и записанное время предыдущего конфликтующего пакета ARP попадает в интервал DEFEND_INTERVAL секунд, хост должен немедленно прекратить использование адреса и выбрать себе новый адрес IPv4 Link-Local, как описано выше. Это требуется для того, чтобы два хоста не попали в бесконечный цикл попыток защиты одного адреса.

Хост должен ответить на конфликтующие пакеты ARP в соответствии с п. (a) или (b). Игнорирование конфликтующих пакетов ARP недопустимо.

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

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

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

Все пакеты ARP (отклики и запросы), содержащие адрес Link-Local в качестве IP-адреса отправителя, должны передаваться с использованием широковещания канального уровня, а не индивидуальной адресации. Это помогает своевременно обнаруживать дубликаты адресов. Пример, показывающий, как это помогает, приведен в разделе 4.

2.6. Использование адресов и правила пересылки

Для хостов, соответствующих этой спецификации, имеются дополнительные правила, которые следует выполнять независимо от использования на хосте адресов IPv4 Link-Local.

2.6.1. Использование адреса отправителя

Поскольку хост может иметь адрес IPv4 Link-Local в дополнение к адресам, заданным другими способами (например, вручную или от сервера DHCP), такой хост может выбирать адрес отправителя при отправке пакета или организации соединения TCP.

При одновременной доступности IPv4 Link-Local и маршрутизируемого адреса на одном интерфейсе в качестве адреса отправителя следует предпочитать маршрутизируемый адрес для новых коммуникаций, но пакеты, отправленные с адреса IPv4 Link-Local также будут доставляться. Адрес IPv4 Link-Local можно продолжать использовать в качестве адреса отправителя, если переход на предпочтительный адрес будет нарушать коммуникации в результате требований протокола вышележащего уровня (например, для имеющихся соединений TCP). Дополнительная информация приведена в параграфе 1.7.

Многодомным хостам приходится выбирать выходной интерфейс независимо от того, используется ли для получателя адрес IPv4 Link-Local. Детали этого выбора выходят за рамки документа. После выбора интерфейса многодомному хосту следует отправлять пакеты с адресами Link-Local в соответствии с данной спецификацией, как будто выбранный интерфейс является единственным. Дополнительное рассмотрение многодомных хостов приведено в разделе 3.

2.6.2. Правила пересылки

Независимо от используемого интерфейса при отправке пакетов адресату из префикса 169.254/16 (кроме широковещательного адреса 169.254.255.255 для Link-Local) отправитель должен передать запрос ARP для адреса получателя и после этого отправлять пакеты напрямую адресату в том же физическом канале. Это должно выполняться при использовании на интерфейса как адреса Link-Local, так и маршрутизируемого адреса IPv4.

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

Хосту недопустимо передавать пакеты с адресом получателя IPv4 Link-Local какому-либо маршрутизатору для пересылки.

Если адресом получателя является индивидуальный адрес не из префикса 169.254/16, хосту следует указать в качестве адреса отправителя подходящий маршрутизируемый адрес IPv4 (при наличии). Если по какой-либо причине хост решит отправлять пакет с адреса IPv4 Link-Local (например, на интерфейсе нет маршрутизируемых адресов), он должен передать запрос ARP для адреса получателя и затем отправлять пакет с адреса IPv4 Link-Local по маршрутизируемому адресу IPv4 напрямую получателю, подключенному к тому же физическому каналу. Хосту недопустимо отправлять пакет маршрутизатору для пересылки.

В случаях, когда устройство имеет единственный интерфейс и только адрес Link-Local IPv4, это требование можно перефразировать как «ARP для всех». Во многих сетевых стеках поведение «ARP for everything» может быть реализовано столь же просто, как отсутствие в конфигурации основного маршрутизатора, указание в качестве адреса основного маршрутизатора 0.0.0.0 или своего адреса Link-Local IPv4. Поведение многодомных хостов рассмотрено в разделе 3.

2.7. Локальные адреса не пересылаются

Для приложений, передающих пакеты с адреса IPv4 Link-Local разумно по умолчанию устанавливать IPv4 TTL = 1. Это подходит не для всех случаев, поскольку некоторые приложения могут требовать установки других значений IPv4 TTL.

Пакеты IPv4, в которых адрес отправителя и/или получателя относится к префиксу 169.254/16, недопустимо передавать какому-либо маршрутизатору для пересылки, а получившему такой пакет сетевому устройству недопустимо пересылать пакет независимо от значения TTL в заголовке IPv4. Аналогично, маршрутизатору или другому хосту недопустимо без разбора отвечать на все запросы ARP для адресов из префикса 169.254/16. Естественно, маршрутизатор может отвечать на запросы ARP для одного или нескольких адресов IPv4 Link-Local, объявленных им для собственного использования в соответствии с описанным в этом документе протоколом «объявить и защитить».

Эти ограничения применимы и к групповым пакетам. Пакеты IPv4 с адресом отправителя Link-Local недопустимо пересылать за пределы локального канала, даже если в них указан групповой адрес получателя.

2.8. Пакеты Link-Local являются локальными

Правило «без пересылки» означает, что хосты считают все адреса 169.254/16 напрямую подключены к тому же каналу. Адресный префикс 169.254/16 недопустимо делить на подсети. Данная спецификация использует основанное на ARP обнаружение конфликтов, при котором используется широковещательная рассылка в локальную подсеть. Поскольку такие широковещательные пакеты не пересылаются, разделение префикса на подсети приведет к тому, что конфликты адресов останутся не обнаруженными.

Это не означает запрет для устройств Link-Local коммуникаций, выходящих за пределы локального канала. Хосты IP с адресами Link-Local и обычными маршрутизируемыми адресами IPv4 могут использовать эти маршрутизируемые адреса без дополнительных ограничений.

2.9. Протоколы вышележащих уровней

Аналогичные рассуждения применимы к уровням, лежащим выше IP.

Например, дизайнерам Web-страниц (включая автоматически генерируемые страницы) не следует включать ссылки с адресами IPv4 Link-Local, если предполагается доступность страниц за пределами локального соединения.

Адреса IPv4 Link-Local могут меняться с течением времени и имеют ограниченную область действия, недопустимо включение адресов IPv4 Link-Local в DNS.

2.10. Вопросы приватности

Другой причиной ограничения выхода адресов IPv4 Link-Local за пределы локального соединения являются вопросы приватности. Если адрес IPv4 Link-Local выводить из хэшированного MAC-адреса, некоторые считают, что это дает опосредованную связь с конкретным человеком и может использоваться для слежки за ним. В рамках локального соединения аппаратные адреса в пакетах доступны для просмотра, но пока адреса IPv4 Link-Local не выходят за пределы локального соединения, это не позволяет злоумышленнику получить какую-либо информацию в дополнение к возможности прямого наблюдения аппаратных адресов.

2.11. Взаимодействие клиента DHCPv4 с машинами состояний IPv4 Link-Local

Как указано в Приложении A, ранние реализации IPv4 Link-Local используют модифицированную машину состояний DHCP. Опыт показывает, что эти изменения снижают надежность сервиса DHCP.

Устройствам, поддерживающим IPv4 Link-Local и клиента DHCPv4, не следует менять поведения клиента DHCPv4 для поддержки конфигурации IPv4 Link-Local. В частности, настройка адреса IPv4 Link-Local, независимо от того, отвечает ли в данное время сервер DHCP, не является достаточным основанием для отказа от действующей аренды DHCP, остановки попыток клиента DHCP получить новый адрес IP, изменения тайм-аутов DHCP или смены поведения машины состояний DHCP иным способом.

Этот вопрос подробно рассмотрен в работе «Detection of Network Attachment (DNA) in IPv4» [DNAv4].

3. Множество интерфейсов

Приведенные здесь рассуждения применимы к хостам с множеством адресов IP, независимо от наличия у них множества физических интерфейсов. Системы с множеством интерфейсов включают логические конечные точки (туннели, виртуальны частные сети и т. п.), а также множество логический сетей в одной физической среде. Такие системы часто называют многодомными (multi-homing).

Хосты, имеющие более одного активного интерфейса и выбирающие динамическую настройку адресов IPv4 Link-Local на одном или нескольких интерфейсах, будут сталкиваться с разными проблемами. В этом разделе рассматриваются проблемы, но не указаны возможные способы их решения. На момент подготовки документа общего решения этих проблем не было известно. Разработчикам нужно принимать эти проблемы во внимание до реализации описанного здесь протокола в системах, которые могут иметь более одного активного интерфейса для стека TCP/IP, поддерживающего многодомные системы.

3.1. Область действия адресов

Хост может быть подключен одновременно к множеству сетей. Было бы хорошо использовать во всех сетях одно адресное пространство, но это не так. Адреса, используемые в одной сети (например, находящейся за NAT или использующей адреса IPv4 Link-Local), не могут также использоваться в другой сети.

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

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

Вторая проблема связана с распространением параметров с ограниченной областью действия за пределы этой области. Этот вопрос рассматривается в разделе 7.

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

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

3.2. Неоднозначность адресов

Это основная проблема для случая доступности получателей IPv4 Link-Local через несколько интерфейсов. Что делать хосту, если ему нужно передать пакет получателю L с адресом Link-Local и ARP связывает L с несколькими каналами?

Даже в случае привязки адреса Link-Local в данный момент к единственному каналу нет гарантии сохранения такой однозначности в будущем. Другие хосты на других интерфейсах также могут объявить адрес L.

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

Для этой проблемы нет стандартного или очевидного решения. Существующие программы для стека протоколов IPv4 большей частью не способны работать при неоднозначности адресов. Это не мешает разработчикам искать решения и создавать программы, способные эти решения использовать, для поддержки хостов, которые смогут динамически настраивать адреса IPv4 Link-Local одновременно на нескольких интерфейсах. Однако такое решение почти наверняка не будет применимо для имеющихся приложений и прозрачно для протоколов вышележащих уровней.

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

3.3. Взаимодействие с хостами, имеющими маршрутизируемый адрес

В этом документе уделяется внимание переходу от применения адресов IPv4 Link-Local к маршрутизируемым адресам (см. параграф 1.5). Цель заключается в том, чтобы позволить хосту с одним интерфейсом сначала поддерживать конфигурацию Link-Local, а затем аккуратно перейти к использованию маршрутизируемого адреса. Поскольку в процессе перехода у хоста временно может быть более одного активного адреса, к нему будут применимы описанные в параграфе 3.1 проблемы ограничения области действия адресов. Когда хост получает маршрутизируемый адрес, ему не нужно сохранять свой адрес Link-Local для взаимодействия с другими устройствами на том же канале, использующими адреса Link-Local, — любой хост, соответствующий данной спецификации знает, что независимо от адреса отправителя получатель IPv4 Link-Local должен быть доступен путем прямой пересылки (без использования маршрутизаторов). Для хоста, взаимодействующего с хостом, имеющим адрес Link-Local, не требуется наличие адреса Link-Local.

Хост с адресом IPv4 Link-Local может передавать пакеты получателям, не имеющим адресов IPv4 Link-Local. Если хост не является многодомным, эта процедура проста и однозначна — используется ARP и прямая пересылка в канал. Однако для многодомных хостов правила маршрутизации более сложны особенно в случаях, когда один из его интерфейсов имеет маршрутизируемый адрес и принятый по умолчанию маршрут идет к маршрутизатору через этот интерфейс. Ниже представлен пример, иллюстрирующий эту проблему и общее решение для нее.

                         i1 +---------+ i2   i3 +-------+
               ROUTER-------=  HOST1  =---------= HOST2 |
                      link1 +---------+  link2  +-------+

HOST1 подключен к каналам link1 и link2. Интерфейс i1 имеет маршрутизируемый адрес, а i2 — адрес IPv4 Link-Local. HOST1 имеет принятый по умолчанию маршрут к маршрутизатору ROUTER через интерфейс i1. HOST1 будет направлять пакеты для получателей из 169.254/16 на интерфейс i2 для отправки напрямую.

HOST2 имеет адрес IPv4 (не Link-Local) на интерфейсе i3.

Используя протокол преобразования имен или поиска служб, HOST1 может узнать адрес HOST2. Поскольку адрес HOST2 не относится к префиксу 169.254/16, правила маршрутизации HOST1 будут направлять дейтаграммы для HOST2 через интерфейс i1 маршрутизатору ROUTER. Если у маршрутизатора ROUTER нет маршрута к HOST2, дейтаграммы от HOST1 не попадут на HOST2.

Решением проблемы будет попытка хоста локально связаться (используя ARP) с каждым хостом, для которого он получает сообщение ICMP об ошибке (код ICMP 0, 1, 6 или 7 [RFC792]). В этом случае хост будет перебирать все подключенные каналы поочередно. Такой подход был успешно реализован на некоторых хостах IPv6. В нашем примере HOST1 при невозможности доступа к HOST2 через ROUTER будет пытаться передать пакеты HOST2 через интерфейс i2 и это приведет к успеху.

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

3.4. Непреднамеренный автоиммунный отклик

Следует соблюдать осторожность в случаях, когда многодомный хост имеет более одного интерфейса в один и тот же канал и все эти интерфейсы поддерживают автонастройку IPv4 Link-Local. Если эти интерфейсы попытаются получить один адрес, хост будет защищаться от самого себя, что приведет к отказу алгоритма объявления адресов. Простейшим способом решения этой проблемы является независимое использование алгоритма для каждого интерфейса с адресом IPv4 Link-Local.

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

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

4. «Сращивание» разделенной сети

Хосты на разных каналах могут пользоваться совпадающими адресами IPv4 Link-Local. Если такие разъединенные сети позднее объединяются или связываются мостом, могут возникнуть адресные конфликты. Когда какой-либо хост попытается связаться с другим хостом сети, он в какой-то момент передаст широковещательный пакет ARP, который позволит всем участвующим хостам обнаружить конфликт адресов.

При обнаружении такого конфликта последующее изменение конфигурации может нарушить работу, вызывая разрыв соединений TCP. Однако предполагается, что такие ситуации будут редки. Для использования доступны 65024 адреса IPv4 Link-Local, поэтому при объединении небольших сетей вероятность возникновения конфликта адресов достаточно мала.

При объединении двух больших сетей (сети с большим числом хостов в сегменте) вероятность конфликта растет. В таких случаях объединение ранее разделенных сетей будет вынуждать один или множество хостов сменить свой адрес IPv4 Link-Local с последующим разрывом соединений TCP. Там, где такие объединения происходят часто (например, в удаленных сетях, связанных мостом) это может быть существенной помехой. Однако при не слишком большом числе хостов в объединяемых сегментах возникающий в результате объединения и возникающего при этом конфликта адресов, будет невелик.

Передача откликов ARP с адресом отправителя IPv4 Link-по широковещательному адресу вместо индивидуального гарантирует обнаружение конфликтов в тот момент, когда они создают потенциальную проблему, но не раньше. Например, если были соединены две ранее изолированные сети, где хосты A и B имеют одинаковый адрес Link-Local (X), ситуация может сохраняться, пока A, B или какой-то иной хост не попытаются начать взаимодействие. Если некий хост C передаст запрос ARP для адреса X, на который хосты A и B ответят обычными откликами ARP по индивидуальному адресу, хост C увидит конфликт, но A и B не будут знать об этом конфликте, поскольку они не видят пакетов друг друга. Широковещательная передача откликов позволит хостам A и B увидеть конфликтующие пакеты ARP и принять соответствующие меры.

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

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

Использование адресов IPv4 Link-Local может открывать хост для новых атак. В частности, на хосте без адресов IP стек IP не используется и он не восприимчив к атакам, основанным на IP. Настроив рабочий адрес хост может стать уязвимым для таких атак.

Протокол ARP [RFC826] является незащищенным. Вредоносные хосты могут отправлять в сеть подставные пакеты ARP, нарушая работу других хостов. Например, такой хост может отвечать на все запросы ARP откликами со своим аппаратным адресом, заявляя свои права на каждый адрес в сети.

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

Для хостов, использующих IPv4 Link-Local возникает другая угроза, связанная с принудительной сменой конфигурации и нарушением работы. Подключенный к каналу злоумышленник может передавать пакеты ARP, которые будут вызывать разрыв всех соединений и переход на новый адрес. Атакующий может вынуждать хост с адресом IPv4 Link-Local выбрать определенные адреса или препятствовать выбору некоторых адресов. Это другая угроза, создаваемая подставными пакетами ARP, описанными выше.

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

Разработчикам рекомендуется обеспечивать адекватную защиту ресурсов каждого устройства и хоста от известных и предполагаемых угроз. Хотя использование адресов IPv4 Link-Local может снижать число угроз для устройств с таким адресом, разработчикам устройств, поддерживающих протокол IP, не следует надеяться на отсутствие таких угроз в локальной сети устройства.

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

Во всех случаях, независимо от использования адресов IPv4 Link-Local, на устройствах, поддерживающих протокол IP, необходимо реализовать средства анализа известных и предполагаемых угроз, которым может подвергаться конкретное устройство или хост, и обеспечивать механизмы защиты, предотвращающие или снижающие уровень риска, связанного с такими угрозами.

6. Вопросы программирования приложений

Использование автоматически настраиваемых адресов IPv4 Link-Local предъявляет дополнительные требования к разработчикам приложений и может приводить к отказам в имеющихся программах.

6.1. Смена адресов, отказы и восстановление

Используемые приложением адреса IPv4 Link-Local могут меняться со временем и в некоторых программах в таких случаях могут возникать отказы. Например, имеющиеся соединения TCP будут разрываться, потребуется заново находить серверы, адреса которых изменились, операции чтения и записи будут возвращать ошибки и т. п.

Производителям приложений, которые будут использовать реализации IP с поддержкой адресов IPv4 Link-Local, следует детектировать и купировать события, связанные со сменой адресов. Разработчикам реализаций IPv4 с поддержкой настройки адресов IPv4 Link-Local следует выдавать приложениям информацию о смене адреса.

6.2. Ограниченная пересылка идентификаторов местоположения

Адреса IPv4 Link-Local недопустимо пересылать через протоколы прикладного уровня (например, в URL) адресатам, находящимся за пределами локального соединения (см. параграф 2.9 и раздел 3).

Существующие распределенные программы, которые пересылают адресную информацию, могут сталкиваться с отказами. Например, FTP [RFC959] (при работе не в пассивном режиме) передает IP-адрес клиента. Предположим, что клиент начал работу, имея лишь адрес Link-Local, а затем получи маршрутизируемый адрес IP и взаимодействует с сервером FTP за пределами локального соединения. Если клиент FTP передаст свой старый адрес Link-Local вместо нового маршрутизируемого адреса IP в команде FTP port, сервер FTP не сможет организовать соединение с клиентом для передачи данных и операция FTP завершится отказом.

6.3. Неоднозначность адресов

Прикладные программы на многодомных хостах с поддержкой автоматической настройки адресов IPv4 Link-Local на нескольких интерфейсах могут сталкиваться с отказами.

Это обусловлено тем, что приложение полагается на однозначность адресов IPv4, но для адресов IPv4 Link-Local такая однозначность обеспечивается лишь в рамках одного соединения. На хосте, подключенном к нескольким каналам один и тот же адрес может появляться сразу на нескольких интерфейсах или сначала на одном, затем на другом. Большинство имеющихся программ не готовы к таким ситуациям. В будущем предполагается разработка программных интерфейсов, предотвращающих такие проблемы. Этот вопрос рассмотрен в разделе 3.

7. Маршрутизаторы

Маршрутизатору недопустимо пересылать пакеты с адресом IPv4 Link-Local в поле отправителя или получателя, независимо от настройки принятого по умолчанию маршрута и маршрутов, полученных от протоколов динамической маршрутизации.

Маршрутизатору, получившему пакет с адресом отправителя или получателя IPv4 Link-Local, недопустимо пересылать такой пакет. Это предотвращает пересылку пакетов обратно в сегмент сети, из которого они получены или в другой сегмент.

8. Взаимодействие с IANA

Агентство IANA выделило префикс 169.254/16 для использования, описанного в этом документе. Первые и последние 256 адресов диапазона (169.254.0.x и 169.254.255.x) выделены для Standards Action в соответствии с Guidelines for Writing an IANA (BCP 26) [RFC2434]. Других услуг IANA этот документ не запрашивает.

9. Константы

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

PROBE_WAIT

1 секунда

Начальная случайная задержка.

PROBE_NUM

3

Число пробных пакетов.

PROBE_MIN

1 секунда

Минимальная задержка между повторными пробами.

PROBE_MAX

2 секунды

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

ANNOUNCE_WAIT

2 секунды

Задержка перед анонсированием.

ANNOUNCE_NUM

2

Число пакетов с анонсами.

ANNOUNCE_INTERVAL

2 секунды

Интервал между пакетами анонсирования.

MAX_CONFLICTS

10

Максимальное число конфликтов перед снижением скорости.

RATE_LIMIT_INTERVAL

60 секунд

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

DEFEND_INTERVAL

10 секунд

Минимальный интервал между защитными пакетами ARP.

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

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

[RFC792] Postel, J., «Internet Control Message Protocol», STD 5, RFC 792, September 1981.

[RFC826] Plummer, D., «Ethernet Address Resolution Protocol: Or converting network protocol addresses to 48.bit Ethernet address for transmission on Ethernet hardware», STD 37, RFC 826, November 1982.

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

[RFC2434] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

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

[802] IEEE Standards for Local and Metropolitan Area Networks: Overview and Architecture, ANSI/IEEE Std 802, 1990.

[802.3] ISO/IEC 8802-3 Information technology — Telecommunications and information exchange between systems — Local and metropolitan area networks — Common specifications — Part 3: Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications, (also ANSI/IEEE Std 802.3- 1996), 1996.

[802.5] ISO/IEC 8802-5 Information technology — Telecommunications and information exchange between systems — Local and metropolitan area networks — Common specifications — Part 5: Token ring access method and physical layer specifications, (also ANSI/IEEE Std 802.5-1998), 1998.

[802.11] Information technology — Telecommunications and information exchange between systems — Local and metropolitan area networks — Specific Requirements Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications, IEEE Std. 802.11-1999, 1999.

[RFC959] Postel, J. and J. Reynolds, «File Transfer Protocol», STD 9, RFC 959, October 1985.

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

[RFC2131] Droms, R., «Dynamic Host Configuration Protocol», RFC 2131, March 1997.

[RFC2462] Thomson, S. and T. Narten, «IPv6 Stateless Address Autoconfiguration», RFC 2462, December 1998.

[RFC3027] Holdrege, M. and P. Srisuresh, «Protocol Complications with the IP Network Address Translator», RFC 3027, January 2001.

[DNAv4] Aboba, B., «Detection of Network Attachment (DNA) in IPv4», Work in Progress3, July 2004.

[LLMNR] Esibov, L., Aboba, B. and D. Thaler, «Linklocal Multicast Name Resolution (LLMNR)», Work in Progress4, June 2004.

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

Авторы благодарят (в алфавитном порядке) Jim Busse, Pavani Diwanji, Donald Eastlake 3rd, Robert Elz, Peter Ford, Spencer Giacalone, Josh Graessley, Brad Hards, Myron Hattig, Hugh Holbrook, Christian Huitema, Richard Johnson, Kim Yong-Woon, Mika Liljeberg, Rod Lopez, Keith Moore, Satish Mundra, Thomas Narten, Erik Nordmark, Philip Nye, Howard Ridenour, Daniel Senie, Dieter Siegmund, Valery Smyslov и Ryan Troll за их вклад в работу.

Приложение A. Ранние реализации

A.1. Apple Mac OS 8.x и 9.x.

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

Mac OS передает 9 пакетов DHCPDISCOVER с интервалами 2 секунды между ними. Если не было получено отклика на эти сообщения (18 секунд), выполняется автоматическая настройка адреса.

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

Автоматически настроенные системы Mac OS проверяют наличие сервера DHCP каждые 5 минут. Если сервер DHCP найден, Mac OS не удалось получить аренду, сохраняется прежний (настроенный автоматически) адрес IP. если Mac OS получает новую аренду, все существующие соединения сбрасываются без уведомления. Это может приводить к разрыву организованных пользователем сессий. После получения новой аренды Mac OS не будет создавать новых соединений с заданным автоматически адресом IP.

Системы Mac OS не передают пакетов, адресованных получателю Link-Local, принятому по умолчанию шлюзу (если он имеется), такие адреса всегда считаются локальными.

Системы Mac OS по умолчанию передают все индивидуальные пакеты с TTL = 255. Групповые и широковещательные пакеты тоже передаются с TTL = 255, если они отправлены с адреса 169.254/16.

Mac OS реализует автоматическое обнаружение среды (sense where), если оборудование (и драйверы) поддерживают его. При обнаружении подключения на интерфейс будут передаваться сообщения DHCPDISCOVER. Это означает, что система будет выходить из автоматически сконфигурированного режима сразу же при восстановлении соединения.

A.2. Apple Mac OS X версии 10.2

Mac OS X выбирает адрес IP с использованием псевдослучайных значений. Выбранный адрес записывается в в память и может использоваться при последующих попытках автоматической настройке адреса при однократной загрузке системы.

Автоматическая настройка адреса Link-Local зависит от результатов процесса DHCP. DHCP передает два пакета с тайм-аутами в 1 и две секунды. Если отклик не получен (3 секунды), начинается автонастройка. DHCP продолжает передавать пакеты в течение 60 секунд.

В начале процесса автонастройки генерируется 10 случайных уникальных адресов IP, которые проверяются по одному каждые 2 секунды. Процесс проверки завершается при обнаружении первого свободного адреса или после проверки всех.

Если DHCP не дает результата, процесс останавливается на 5 минут, затем запускается снова. После получения адреса от DHCP настроенный автоматически адрес Link-Local удаляется, однако подсеть Link-Local остается.

Автоматическая настройка выполняется в каждый момент только для одного интерфейса.

Mac OS X гарантирует связывание с подсетью Link-Local подключенного интерфейса с высшим приоритетом. Пакеты, направленные по адресу Link-Local, никогда не передаются заданному по умолчанию шлюзу (если он есть). Адреса Link-local всегда привязываются к локальному сегменту.

Mac OS реализует автоматическое обнаружение среды, если оборудование и драйверы поддерживают его. Когда индикатор сетевой среды показывает соединение, процесс автоматической настройки запускается вновь и пытается использовать назначенный ранее адрес Link-Local. При индикации отключения о сети система ждет 4 секунды до отмены настроенного адреса Link-Local и подсети. Если соединение не восстанавливается, система выбирает другой интерфейс для автоматической настройки.

Mac OS X по умолчанию передает все индивидуальные пакеты с TTL = 255. Групповые и широковещательные пакеты тоже передаются с TTL = 255, если они отправлены с адреса 169.254/16.

A.3. Microsoft Windows 98/98SE

Системы Windows 98/98SE выбирают адрес IPv4 Link-Local с использованием псевдослучайных значений. Алгоритм выбора адреса основан на расчете хэш-значения MAC-адреса, поэтому при большом наборе хостов должно быть равномерное распределение выбранных адресов из блока 169.254/16. Определение начального адреса IPv4 Link-Local на основе адреса MAC также предполагает попытку получения системой того же адреса при перезагрузке, если не возникает конфликта.

В состоянии INIT клиент DHCP Windows 98/98SE передает 4 сообщения DHCPDISCOVER с интервалом 6 секунд. При отсутствии отклика (24 секунды) хост начинает автоматическую настройку адреса.

Число попыток автоматической настройки для систем 98/98SE составляет 10. После 10 неудачных попыток автоматической настройки адреса IPv4 хост будет загружаться без адреса IPv4.

Автоматически настроенные системы Windows 98/98SE проверяют наличие серверов DHCP каждые 5 минут. Если сервер DHCP найден, но Windows 98 не удалось получить аренду, система сохраняет автоматически настроенный адрес IPv4 Link-Local. Если Windows 98/98SE удалось получить аренду, имеющиеся соединения отбрасываются без уведомления. После получения адреса в аренду Windows 98/98SE больше не будет применять автоматически настроенный адрес IPv4 Link-Local.

Системы Windows 98/98SE с адресом IPv4 Link-Local не передают пакеты, направленные по адресам IPv4 Link-Local в заданный по умолчанию шлюз, если он имеется. Такие адреса всегда считаются локальными.

Системы Windows 98/98SE по умолчанию передают исходящие индивидуальные пакеты с TTL = 128. Настройка TTL выполняется путем установки в реестре Windows подходящего значения ключа HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services:\Tcpip\Parameters\DefaultTTL типа REG_DWORD. Однако это значение будет использоваться для всех пакетов. Это позволяет установить по умолчанию TTL = 255, но не дает возможности задать по умолчанию TTL = 1 для пакетов IPv4 Link-Local.

Системы Windows 98/98SE не поддерживают автоматического обнаружения подключений. Это значит, что проблемы с соединениями (типа отключения кабеля) могут помешать системе связаться с сервером DHCP и приведут к автоматической настройке адреса. После устранения проблемы (например, при подключении кабеля) ситуация не будет корректироваться незамедлительно. Поскольку система не способна обнаружить подключение, она продолжит использовать автоматически настроенный адрес, не пытаясь получить аренду от сервера DHCP.

Сервер DHCP из состава Windows 98SE ICS5 (реализация NAT) по умолчанию выделяет адреса из блока 192.168/16.

Однако этот префикс можно изменить путем редактирования реестра и не выполняется никаких проверок, позволяющих предотвратить выделение адресов из префикса IPv4 Link-Local. При такой настройке Windows 98SE ICS будет переписывать заголовки пакетов из префикса IPv4 Link-Local и пересылать их за пределы локального соединения. Windows 98SE ICS не маршрутизирует автоматически префикс IPv4 Link-Local и хосты, получившие адреса от DHCP не смогут взаимодействовать с устройствами, имеющими только локальный адрес.

Существуют и другие домашние шлюзы, которые по умолчанию выделяют адреса из префикса IPv4 Link-Local. Системы Windows 98/98SE могут использовать адрес 169.254/16 IPv4 Link-Local в качестве адреса отправителя при взаимодействии с хостами из других префиксов. Windows 98/98SE не поддерживает запросов и анонсов маршрутизаторов. Системы Windows 98/98SE не будут автоматически находить заданный по умолчанию маршрутизатор в режиме автоматической настройки адреса.

A.4. Windows XP, 2000 и ME

Поведение автоматической настройки адресов в системах Windows XP, Windows 2000 и Windows ME отличается от поведения Windows 98/98SE лишь поддержкой перечисленных ниже свойств.

Детектирование подключения к среде передачи.

Обнаружение маршрутизаторов.

Прослушивание RIP.

В Windows XP, 2000 и ME реализовано детектирование подключения к среде. При обнаружении такого подключения через интерфейс передается сообщение DHCPREQUEST или DHCPDISCOVER. Это означает незамедлительный выход системы из режима автонастройки при восстановлении доступа к среде.

Windows XP, 2000 и ME также поддерживают обнаружение маршрутизаторов, хотя по умолчанию оно отключено. В Windows XP и 2000 поддерживается также прослушивание протокола RIP. Это может приводить к неожиданному обнаружению маршрутизатора в режиме автоматической настройки адресов.

ICS в системах Windows XP/2000/ME ведет себя как в Windows 98SE применительно к выделению адресов и трансляции (NAT) для префикса Link-Local.

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

Stuart Cheshire

Apple Computer, Inc.

1 Infinite Loop

Cupertino

California 95014, USA

Phone: +1 408 974 3207

EMail: rfc@stuartcheshire.org

Bernard Aboba

Microsoft Corporation

One Microsoft Way

Redmond, WA 98052

Phone: +1 425 818 4011

EMail: bernarda@microsoft.com

Erik Guttman

Sun Microsystems

Eichhoelzelstr. 7

74915 Waibstadt Germany

Phone: +49 7263 911 701

EMail: erik@spybeam.org


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

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

nmalykh@gmail.com

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в 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.


1Dynamic Host Configuration Protocol — протокол динамической настройки конфигурации хоста.

2Domain Name System — система доменных имен.

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

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

5Internet Connection Sharing — совместное использование соединения Internet.

Рубрика: RFC | Комментарии к записи RFC 3927 Dynamic Configuration of IPv4 Link-Local Addresses отключены

RFC 4027 Domain Name System Media Types

Network Working Group                                       S. Josefsson
Request for Comments: 4027                                    April 2005
Category: Informational

Domain Name System Media Types

Типы носителей DNS

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

Документ регистрирует типы application/dns и text/dns в соответствии с RFC 2048. Тип application/dns используется для идентификации обособленного формата DNS (detached Domain Name System), описанного в RFC 2540. Тип text/dns служит для идентификации master-файлов, описанных в RFC 1035.

1. Введение

Информация системы доменных имён (DNS) [1] традиционно хранится в текстовых файлах, которые обычно называют master-файлами или файлами зон. Формат таких файлов описан в главе 5 RFC 1035 [2].

Данные DNS хранят также в обособленном (detached) формате, предназначенном для архивирования и описанном в RFC 2540 [4].

В этом документе регистрируются типы сред MIME для двух форматов данных в соответствии с процедурой регистрации, описанной в RFC 2048 [3].

2. Регистрация типа MIME application/dns

Кому: ietf-types@iana.org

Тема: регистрация типа MIME application/dns

Название типа MIME: application

Имя подтипа MIME: dns

Требуемые параметры: нет

Дополнительные параметры: нет

Представление: Формат данных является бинарным и данные должны передаваться без изменения. Использование кодирования, предназначенного для текста, не рекомендуется.

Вопросы безопасности: Этот тип идентифицирует содержимое, являющееся обособленной информацией DNS, описанной в RFC 2540 [4]. Эти данные могут иметь отношение к безопасности (RFC 2538 [7]) или быть защищёнными (RFC 2535 [6]). Защита содержимого может обеспечиваться с помощью стандартных методов, таких, как OpenPGP [5] или CMS [9], но этот вопрос выходит за пределы данного документа. Другие оценки безопасности здесь неприменимы.

Вопросы функциональной совместимости: Представление обособленной информации DNS является, в отличии от текстовых master-файлов, хорошо определенным. Других проблем функциональной совместимости неизвестно.

Опубликованная спецификация: Формат данных, которые могут помечаться этим типом, описан в RFC 2540 [4].

Приложения, использующие этот тип: Связанные с DNS программы, включая программы хранения и использования сертификатов, сохранённых в DNS.

Дополнительная информация:

Магический номер: нет

Расширение файлов: неизвестно

Код типа файлов Macintosh: неизвестен

Контактная информация:

Simon Josefsson simon@josefsson.org

Предполагаемое применение: Ограниченное использование

Автор/редактор изменений: simon@josefsson.org

3. Регистрация типа MIME text/dns

Кому: ietf-types@iana.org

Тема: регистрация типа MIME text/dns

Название типа MIME: text

Имя подтипа MIME: dns

Требуемые параметры: нет

Дополнительные параметры: нет

Представление:: Данные являются текстовыми и их следует передавать в ориентированном на работу со строками режиме. Текстовые литералы могут содержать последовательности CRLF внутри текста. Бинарный режим передачи возможен между системами, поддерживающими однотипный режим завершения строк. Master-файлы в основном используют кодировку ASCII, но могут включать и отличные от ASCII октеты, которые трактуются программами DNS как прозрачные значения (сравните с главой 5 RFC 1035). Формат master-файла разрешает представление произвольных октетов с использованием кодирования «\DDD». Использование этого кодирования может оказаться более надёжным, нежели передача отличных от ASCII символов с использованием MIME, если данные передаются через шлюзы, которые декодируют и заново кодируют символьные данные.

Вопросы безопасности: Этот тип идентифицирует содержимое, которое представляет собой информацию DNS в формате master-файла, описанном в 1035 [2]. Данные могут иметь отношение к безопасности (RFC 2538 [7]) или быть защищёнными (RFC 2535 [6]). Защита содержимого может обеспечиваться с помощью стандартных методов, таких, как OpenPGP [5] или CMS [9], но этот вопрос выходит за пределы данного документа. Другие оценки безопасности здесь неприменимы.

Вопросы функциональной совместимости: Для master-файлов существуют проблемы функциональной совместимости, связанные с широким спектром расширений, используемых разными производителями. Комментарии в отличной от ASCII кодировке в master-файлах могут использовать локально выбранные наборы символов, передача которых с сохранением функциональной совместимости может оказаться затруднительной. Отличные от ASCII данные в общем случае могут повреждаться на шлюзах, выполняющих декодирование и повторное кодирование. Для обеспечения функциональной совместимости можно использовать формат master-файлов, описанных в спецификации, и кодирование «\DDD» для отличных от ASCII октетов. Другая проблема функциональной совместимости связана с существованием неизвестных типов RR, которые могут обрабатываться в соответствии с рекомендациями главы 5 RFC 3597 [8].

Опубликованная спецификация: Формат данных, которые могут помечаться этим типом, описан в RFC 1035 [2].

Приложения, использующие этот тип: Связанные с DNS программы, включая программы хранения и использования сертификатов, сохранённых в DNS.

Дополнительная информация:

Магический номер: нет

Расширение файлов: известны расширения ‘soa’ и ‘zone’.

Код типа файлов Macintosh: неизвестен

Контактная информация:

Simon Josefsson simon@josefsson.org

Предполагаемое применение: Ограниченное использование

Автор/редактор изменений: simon@josefsson.org

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

Вопросы безопасности рассматриваются в соответствующих разделах регистрации MIME в параграфах 2 и 3.

5. Взаимодействие с IANA

Агентство IANA зарегистрировало типы MIME application/dns и text/dns с использованием регистрационных шаблонов, приведённых в параграфах 2 и 3, в соответствии с процедурой, описанной в RFC 2048 [3].

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

Спасибо D. Eastlake за предложения по типу text/dns. Спасибо Keith Moore и Alfred Hoenes за просмотр документа. Автор выражает свою признательность лаборатории RSA за поддержку работы, которая привела к созданию этого документа.

A. Отказ от претензий и разрешение на использование

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

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

[1] Mockapetris, P., «Domain names — concepts and facilities», STD 13, RFC 1034, November 1987.

[2] Mockapetris, P., «Domain names — implementation and specification», STD 13, RFC 1035, November 1987.

[3] Freed, N., Klensin, J., and J. Postel, «Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures», BCP 13, RFC 2048, November 1996.

[4] Eastlake 3rd, D., «Detached Domain Name System (DNS) Information», RFC 2540, March 1999.

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

[5] Callas, J., Donnerhacke, L., Finney, H., and R. Thayer, «OpenPGP Message Format», RFC 2440, November 1998.

[6] Eastlake 3rd, D., «Domain Name System Security Extensions», RFC 2535, March 1999.

[7] Eastlake 3rd, D. and O. Gudmundsson, «Storing Certificates in the Domain Name System (DNS)», RFC 2538, March 1999.

[8] Gustafsson, A., «Handling of Unknown DNS Resource Record (RR) Types», RFC 3597, September 2003.

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

Адрес автора

Simon Josefsson

EMail: simon@josefsson.org

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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

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

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

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

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

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

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

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

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

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