Структура IPlir-пакета приведена на рисунке 1.
IP-заголовок представляет собой заголовок стандартного IP-пакета, в котором для IPv4 поле Protocol и для IPv6 поле NextHeader содержит значение 241 или, в случае дополнительной инкапсуляции в UDP протокол, значение 17.
UDP-заголовок является стандартным UDP-заголовком, который присутствует только в том случае, если используется дополнительная инкапсуляция IPlir-сообщения в UDP-сообщение. Протокол IPlir использует UDP-порт назначения 55777 в качестве порта по умолчанию.
IPlir-сообщение является основной частью IPlir-пакета, включающей защищенные данные из исходного IP-пакета и открытые данные, необходимые для обработки IPlir-пакета.
IPlir-сообщение состоит:
- из IPlir-заголовка, содержащего открытую информацию, связанную с инкапсуляцией и защитой исходного IP-пакета;
- IPlir-тела, содержащего информацию, шифрование которой является опциональным;
- IPlir-трейлера, содержащего имитовставки, идентификатор транзитного узла и транзитную синхропосылку.
Структура IPlir-сообщения приведена на рисунке 2.
Поля IPlir-сообщения имеют сетевой (big-endian) порядок следования байт. Нумерация байтов ведется слева направо, и старшие байты имеют меньшие номера. Нумерация бит внутри байт ведется справа налево, и старшие биты имеют большие номера.
Кортежи (Type, Length, Value) позволяют передавать в составе IPlir-сообщения дополнительную информацию. На наличие кортежей указывает значение поля TLV. Если его значение равно 1, то в начале IPlir-тела расположен один кортеж или более.
Поле Value любого кортежа должно иметь длину, кратную 8 битам. Поле Length указывает на длину поля Value в байтах.
Допустимые значения поля Type для кортежей представлены в таблице 1.
Таблица 1
Последний присутствующий в сообщении кортеж всегда имеет тип 0. Длину этого кортежа рекомендуется устанавливать из соображений эффективности обработки IPlir-сообщения.
4.3.1 Пара IPv4 адресов
В поле Value кортежа данного типа передается пара IPv4 адресов. Первым следует адрес отправителя, вторым - адрес получателя. Адреса передаются в сетевом порядке следования байт.
Основное назначение кортежа данного типа - сохранение IPv4 адресов из исходного IP-пакета при использовании режима "легкий туннель".
Структура такого кортежа приведена на рисунке 3.
Примечание - Байты, отмеченные как "не используются", содержат информацию, относящуюся к следующему кортежу.
4.3.2 Пара IPv6 адресов
В поле Value кортежа данного типа передается пара IPv6 адресов. Первым следует адрес отправителя, вторым - адрес получателя. Адреса передаются в сетевом порядке следования байт.
Основное назначение кортежа данного типа - сохранение IPv6 адресов из исходного IP-пакета при использовании режима "легкий туннель".
Структура кортежа приведена на рисунке 4.
Примечание - Байты, отмеченные как "не используются", содержат информацию, относящуюся к следующему кортежу.
IPlir-протокол может работать в трех режимах: транспортном, туннельном и режиме "легкого туннеля". Транспортный режим и режим легкого туннеля обеспечивают защиту данных, сформированных протоколами, расположенными выше уровня IP в базовой эталонной модели ISO OSI, в частности транспортным уровнем. Туннельный режим обеспечивает защиту всего исходного IP-пакета.
Принимающая сторона определяет, в каком режиме отправлен пакет исходя из значения поля Mode. Возможные значения поля приведены в таблице 2.
Таблица 2
4.4.1 Транспортный режим
В транспортном режиме IPlir-заголовок и кортежи (Type, Length, Value) помещаются после заголовка IP и перед заголовком следующего уровня (например, TCP, UDP, ICMP и т.п.). В контексте IPv4 это означает размещение IPlir-заголовка после заголовка IP, включая все опции в исходном IP-пакете, но перед заголовком протокола следующего уровня.
На рисунке 5 показан пример защиты IP-пакета с помощью протокола IPlir в транспортном режиме.
![]() в транспортном режиме
В контексте IPv6 заголовок IPlir предназначен оконечному адресату. Таким образом, его следует размещать после заголовков-расширений Hop-by-hop, Routing и Fragmentation. Заголовки расширения опций назначения Destination Options могут размещаться до, после и по обе стороны от заголовка IPlir, в зависимости от требуемой семантики. Однако, поскольку протокол IPlir может обеспечить конфиденциальность только полей, расположенных после IPlir-заголовка, рекомендуется помещать опции адресата после IPlir-заголовка.
4.4.2 "Легкий туннель"
Расположение IPlir-заголовка и кортежей (Type, Length, Value) в режиме легкого туннеля совпадает с транспортным режимом, за исключением того, что набор кортежей, находящийся в IPlir-теле, должен включать либо кортеж типа 1 (пара IPv4 адресов), либо кортеж типа 2 (пара IPv6 адресов), в котором сохраняются адреса отправителя и получателя из IP-заголовка исходного IP-пакета. Тип кортежа диктуется версией IP-заголовка исходного IP-пакета.
Узел-получатель может восстанавливать исходные IP-адреса из поля Value доступного кортежа.
Режим легкого туннеля, в отличие от транспортного режима, дает возможность менять адреса в IP-заголовке IPlir-пакета.
На рисунке 6 показан пример защиты IP-пакета с помощью протокола IPlir в режиме "легкий туннель".
![]() в режиме "легкий туннель"
4.4.3 Туннельный режим
Туннельный режим, приведенный на рисунке 7, в отличие от остальных режимов, защищает весь исходный IP-пакет, включая его IP-заголовок.
![]() в туннельном режиме
В туннельном режиме формируется новый IP-заголовок, заполняемый на основании контекста узла-получателя и таблицы IP маршрутизации узла-отправителя, за которым следует IPlir-заголовок и кортежи (Type, Length, Value). Далее размещается исходный IP-пакет.
Допускается различие версий исходного и нового IP-заголовков, т.е. возможна передача пакетов IPv6 по протоколу IPv4 и пакетов IPv4 по протоколу IPv6.
При криптографической обработке сетевых пакетов используемые алгоритмы и порядок их применения определяются криптографическим набором.
Выбор криптографического набора для защиты исходного IP-пакета определяется соответствующей политикой безопасности узла-отправителя и контекстом узла-получателя на стороне узла-отправителя. Логика и порядок обработки IPlir-пакетов, защищенных с использованием того или иного криптографического набора, определяется политикой приема IPlir-пакетов и контекстом узла-отправителя на стороне узла-получателя. Необходимость и порядок использования транзитной имитозащиты определяется политикой безопасности узла-отправителя и политиками приема IPlir-пакетов транзитных узлов и узла-получателя.
В зависимости от политик безопасности и иных требований может потребоваться защита узла-получателя или транзитного узла от навязывания ранее передававшихся IPlir-пакетов для повторной обработки. Протокол IPlir обеспечивает возможность организации такой защиты за счет использования значений счетчиков и/или меток времени, а также за счет слежения за историей изменения этих значений на транзитных узлах и узле-получателе. В качестве значений счетчиков могут использоваться, к примеру, значения полей SequenceNumber, InitValue, TransitInitValue, в качестве меток времени - значения поля Timestamp. Описание конкретных механизмов, предназначенных для обеспечения защиты от навязывания ранее передававшихся IPlir-пакетов для повторной обработки, не является предметом данного документа.
Протокол IP при упаковке данных в IP-пакеты может фрагментировать (разбивать на части) сообщения вышележащих протоколов транспортного уровня UDP, TCP и др. После упаковки будет получено несколько (связанных) IP-пакетов, каждый из которых называется IP-фрагментом.
IPlir-протокол в транспортном режиме и режиме легкого туннеля должен применяться только к целым (нефрагментированным) IP-пакетам, но не к IP-фрагментам. В туннельном режиме IPlir-протокол может применяться как к целым IP-пакетам, так и к IP-фрагментам.
При инкапсуляции в IPv4, IPlir-пакет, как и любой другой IPv4-пакет, в процессе передачи по сети может быть фрагментирован маршрутизаторами. До обработки IPlir-пакета на стороне узла-получателя или транзитного узла должна быть проведена дефрагментация такого IPlir-пакета.
Если в отношении конкретного IP-пакета узлом-отправителем принято решение о его защите, то IPlir-пакет создается нижеприведенным образом.
5.2.1 Согласно контекстам узла-получателя и транзитного узла, а также используемой политике безопасности определяются:
- режим формирования IPlir-пакета;
- криптографический набор;
- необходимость использования транзитной имитозащиты.
5.2.2 Согласно контекстам узла-получателя и транзитного узла, а также криптографическому набору:
- вырабатываются сквозная синхропосылка и, если необходима транзитная имитозащита, транзитная синхропосылка;
- формируется номер пакета и отметка времени;
- вырабатываются ключ шифрования пакета, ключ сквозной имитозащиты пакета и, при необходимости, ключ транзитной имитозащиты пакета.
5.2.3 С учетом данных из исходного IP-пакета и выработанных ранее данных заполняются поля IPlir-пакета.
5.2.4 Выполняются зашифрование IPlir-тела (если этого требует политика безопасности) и вычисление значения сквозной имитовставки в порядке, установленном криптографическим набором. Значение сквозной имитовставки помещается в соответствующее поле IPlir-трейлера.
5.2.5 Если необходим транзитный контроль целостности, заполняются соответствующие поля и флаги IPlir-заголовка и IPlir-трейлера, вычисляется значение транзитной имитовставки. Значение транзитной имитовставки помещается в соответствующее поле IPlir-трейлера.
5.2.6 Формируется IPlir-пакет, в котором части исходного IP-пакета размещаются в соответствии с правилами, определенными в подразделе 4.4.
Транзитный узел, получив IPlir-пакет, выполняет следующие шаги по обработке IPlir-пакета.
5.3.1 Полученный IPlir-пакет проверяется на соответствие политике приема IPlir-пакетов. Если пакет не соответствует политике, то дальнейшая обработка пакета прекращается.
5.3.2 Если версия IPlir-протокола, указанная в IPlir-заголовке, не поддерживается узлом, то дальнейшая обработка пакета прекращается.
5.3.3 IPlir-пакету сопоставляется контекст узла-отправителя или предыдущего транзитного узла. Если контекст не найден или в найденном контексте указаны криптографические наборы, не соответствующие набору из IPlir-заголовка, дальнейшая обработка пакета прекращается.
5.3.4 Если набор из IPlir-заголовка не предусматривает транзитной имитозащиты, дальнейшая обработка пакета прекращается.
5.3.5 На основе контекста предыдущего транзитного узла и IPlir-заголовка вырабатывается ключ транзитной имитозащиты пакета. Производится контроль целостности IPlir-пакета путем проверки транзитной имитовставки. Если транзитная имитовставка не верна, то дальнейшая обработка пакета прекращается.
5.3.6 Согласно контексту узла-получателя на транзитном узле определяется следующий транзитный узел (либо выясняется, что IPlir-пакет может быть доставлен узлу-получателю напрямую). Если контекст следующего транзитного узла (либо узла-получателя) не найден, то дальнейшая обработка пакета прекращается.
5.3.7 Если в найденном контексте указаны криптографические наборы, не соответствующие набору из IPlir-заголовка, то дальнейшая обработка пакета прекращается.
5.3.8 На основе контекста следующего транзитного узла, IPlir-заголовка и IPlir-трейлера вырабатываются ключ транзитной имитозащиты пакета и транзитная синхропосылка. В IPlir-сообщении устанавливаются необходимый номер ключей транзитной имитозащиты пакета и идентификатор транзитного узла. Транзитная синхропосылка размещается в поле TransitInitValue.
5.3.9 Вычисляется значение транзитной имитовставки и помещается в соответствующее поле IPlir-трейлера.
5.3.10 Формируется IPlir-пакет, в котором части исходного IP-пакета размещаются в соответствии с правилами, определенными в подразделе 4.4.
Возможны сценарии, когда в соответствии с политиками безопасности требуется добавить транзитную имитовставку к маршрутизируемому пакету без проверки предыдущего значения или, наоборот, проверить целостность полученного транзитного IPlir-пакета, не вычисляя нового значения транзитной имитовставки, а также сценарии, при которых требование по транзитной защите отсутствует. Из чего следует:
- при отсутствии необходимости проверять целостность полученного транзитного IPlir-пакета шаги 5.3.3 - 5.3.5 приведенного алгоритма не выполняются;
- при отсутствии необходимости в вычислении транзитной имитовставки шаги 5.3.7 - 5.3.9 приведенного выше алгоритма не выполняются;
- при отсутствии требования по транзитной защите шаги 5.3.3 - 5.3.5, 5.3.7 - 5.3.9 приведенного выше алгоритма не выполняются.
Узел-получатель, получив IPlir-пакет, выполняет следующие шаги по восстановлению исходного IP-пакета.
5.4.1 Полученный IPlir-пакет проверяется на соответствие политике приема IPlir-пакетов. Если пакет не соответствует политике, то дальнейшая обработка пакета прекращается.
5.4.2 Если версия IPlir-протокола, указанная в IPlir-заголовке, не поддерживается узлом, то дальнейшая обработка пакета прекращается.
5.4.3 IPlir-пакету сопоставляется контекст предыдущего транзитного узла. Если контекст не найден или в найденном контексте указаны криптографические наборы, не соответствующие набору из IPlir-заголовка, то дальнейшая обработка пакета прекращается.
5.4.4 На основе контекста предыдущего транзитного узла и IPlir-заголовка вырабатывается ключ транзитной имитозащиты пакета. Производится контроль целостности IPlir-пакета путем проверки транзитной имитовставки. Если транзитная имитовставка не верна, то дальнейшая обработка пакета прекращается.
5.4.5 IPlir-пакету сопоставляется контекст узла-отправителя. Если контекст не найден или в найденном контексте указаны криптографические наборы, не соответствующие набору из IPlir-заголовка, то дальнейшая обработка пакета прекращается.
5.4.6 На основе контекста узла-отправителя и IPlir-заголовка вырабатываются ключ шифрования пакета и ключ сквозной имитозащиты пакета.
5.4.7 Выполняется проверка сквозной имитовставки; если IPlir-тело зашифровано, то и расшифрование IPlir-тела пакета производится в порядке, установленном криптографическим набором. Если сквозная имитовставка не верна, то дальнейшая обработка пакета прекращается.
5.4.8 Восстанавливается IP-пакет в соответствии с правилами подраздела 4.4.
Возможны сценарии, когда в соответствии с политиками безопасности не требуется проверять транзитную имитовставку узлом-получателем. В таком случае шаги 5.4.3, 5.4.4 приведенного алгоритма не выполняются.
Возможные значения аргументов функций в представленных алгоритмах ограничены допустимостью их использования в качестве входных параметров преобразований.
Для обеспечения конфиденциальности пакета в протоколе IPlir предусмотрена возможность его шифрования с использованием симметричного криптографического метода. Шифрование пакета в IPlir рекомендуется, но не является обязательным. Отключение шифрования может быть реализовано выделением отдельного криптонабора, явно указывающего на отсутствие шифрования. При наличии шифрования оно осуществляется между узлом-отправителем и узлом-получателем вне зависимости от топологии сети передачи и наличия промежуточных узлов.
Для обеспечения имитостойкости пакета в протоколе IPlir предусмотрена возможность его имитозащиты. Имитозащита пакета подразделяется на сквозную и транзитную. Сквозная имитозащита пакета осуществляется между узлом-отправителем и узлом-получателем и является обязательной. Транзитная имитозащита пакета осуществляется между парами соседних узлов в цепочке передачи пакета и является опциональной.
Для одновременного обеспечения конфиденциальности и имитостойкости пакета могут использоваться как отдельные алгоритмы шифрования и имитозащиты, так и AEAD-алгоритмы.
Подразумевается, что существует ключевая система, которая обеспечивает взаимодействующие узлы необходимыми ключами обмена и следит за синхронизацией этих ключей. Допускается как ручное, так и автоматическое управление ключами. Структура и вид конкретной ключевой системы выходят за рамки настоящих рекомендаций.
В настоящих рекомендациях предполагается, что ключи обмена, необходимые для защиты конкретного пакета, со всеми их обязательными атрибутами (метаинформацией) доступны на момент начала обработки пакета.
Для корректного функционирования протокола IPlir подразумевается наличие системы нумерации узлов, в которой каждому узлу присваивается уникальный идентификатор. При этом заданной паре узлов и заданному криптографическому набору соответствует отдельный ключ обмена, индексируемый парой идентификаторов этих узлов и номером криптографического набора. Допускается использование ключевых систем, в которых для заданной пары узлов и заданного криптографического набора предусмотрено существование нескольких ключей обмена одновременно (не более 16). Для обеспечения данной возможности каждый ключ обмена в протоколе IPlir дополнительно индексируется целочисленным значением от 0 до 15, размещаемым в поле KN или поле TKN IPlir-сообщения и позволяющим однозначно определить ключ обмена для заданной пары узлов и заданного криптографического набора.
Особенностью протокола IPlir является то, что для каждого IP-пакета на основе ключей обмена вырабатываются уникальные ключи шифрования пакета, сквозной имитозащиты пакета и транзитной имитозащиты пакета, используемые в соответствующих криптографических алгоритмах. Ключи шифрования пакета, сквозной имитозащиты пакета и транзитной имитозащиты пакета, вырабатываемые для одного и того же IP-пакета, должны быть различными, за исключением случая использования AEAD-алгоритмов, в которых для шифрования и сквозной имитозащиты пакета применяется один ключ шифрования и сквозной имитозащиты пакета.
Ключ обмена, на основе которого вырабатываются ключи шифрования пакета и сквозной имитозащиты пакета (или ключ шифрования и сквозной имитозащиты пакета), определяется значением поля KN IPlir-сообщения, идентификаторами узла-отправителя и узла-получателя и номером криптографического набора. Ключ обмена, на основе которого вырабатывается ключ транзитной имитозащиты пакета, определяется значением поля TKN IPlir-сообщения, идентификаторами взаимодействующих (транзитных) узлов и номером криптографического набора.
Типы ключей обмена и способы выработки из них ключей защиты пакета устанавливаются криптографическим набором.
Для любого уникального ключа, когда-либо используемого в протоколе IPlir, должна обеспечиваться невозможность его вычисления из остальных ключей, за исключением случая вычисления производных ключей, предназначенных для защиты пакета, из конкретного ключа обмена.
Максимальный объем материала, который может быть обработан на одном ключе, должен определяться с учетом теоретических ограничений, возникающих при использовании конкретных криптографических алгоритмов, и практических ограничений, возникающих при реализации протокола IPlir. Теоретические ограничения на объем материала, который может быть обработан на одном ключе при использовании некоторых вариантов режимов работы блочных шифров согласно ГОСТ 34.13-2018, приведены в Р 1323565.1.005-2017. Практические ограничения на объем материала, который может быть обработан на одном ключе, должны быть получены в рамках тематических исследований конкретного СКЗИ, реализующего протокол IPlir, при оценке соответствия этого СКЗИ требованиям по безопасности информации, предъявляемым к СКЗИ, в соответствии с Р 1323565.1.012-2017.
Максимальное количество ключей (шифрования пакета, сквозной имитозащиты пакета, транзитной имитозащиты пакета или ключей шифрования и сквозной имитозащиты пакета), вырабатываемых из одного ключа обмена, должно определяться с учетом теоретических ограничений, возникающих при использовании конкретных криптографических алгоритмов, и практических ограничений, возникающих при реализации протокола IPlir. Практические ограничения на количество выработанных ключей должны быть получены в рамках тематических исследований конкретного СКЗИ, реализующего протокол IPlir, при оценке соответствия этого СКЗИ требованиям по безопасности информации, предъявляемым к СКЗИ, в соответствии с Р 1323565.1.012-2017.
В случае выработки допустимого ресурса конкретного ключа взаимодействующие стороны должны прекратить его использование. Для защиты последующих взаимодействий стороны должны использовать ключ, допустимый ресурс которого еще не выработан, например новый ключ.
Совокупность используемых в протоколе IPlir криптографических алгоритмов и параметров составляет криптонабор, который задается своим номером CS, размещаемым в поле CS каждого IPlir-сообщения. Всего может существовать не более 256 различных криптонаборов.
Допустимые значения поля CS представлены в таблице 3.
Таблица 3
Список основных механизмов и параметров, определяемых и/или описываемых в криптонаборе, приведен в таблице 4.
Таблица 4
При описании криптонабора обязательно задание всех необходимых параметров. Интерпретация значения конкретных параметров криптонабора определяется самим криптонабором. Если некоторый параметр в криптонаборе неприменим или должен игнорироваться, это должно быть указано явно.
6.3.1 Криптографический набор MAGMA-MGM: CS = 1
Описание данного криптонабора приведено в таблице 5.
Таблица 5
6.3.1.1 Ключи обмена
Для каждой пары взаимодействующих узлов предполагается наличие единого ключа обмена длины 256 бит, предназначенного для выработки ключей шифрования и сквозной имитозащиты пакета, а также ключей транзитной имитозащиты пакета.
Допускается наличие нескольких единых ключей обмена для пары взаимодействующих узлов. Для определения конкретного единого ключа обмена используется значение поля KN IPlir-сообщения (в случае выработки ключей шифрования и сквозной имитозащиты пакета) или значение поля TKN IPlir-сообщения (в случае выработки ключей транзитной имитозащиты пакета).
6.3.1.2 Требования к синхропосылкам
Сквозная синхропосылка InitValue, размещаемая в поле InitValue IPlir-сообщения, должна иметь длину 64 бита и быть уникальной для каждого IPlir-пакета, защищаемого посредством шифрования и сквозной имитозащиты одним и тем же узлом-отправителем с использованием одного и того же единого ключа обмена.
Транзитная синхропосылка TransitInitValue, размещаемая в поле TransitInitValue IPlir-сообщения, должна иметь длину 64 бита и быть уникальной для каждого IPlir-пакета, защищаемого посредством транзитной имитозащиты одним и тем же (транзитным) узлом с использованием одного и того же единого ключа обмена.
6.3.1.3 Алгоритмы вычисления производных ключей
Ключ шифрования и сквозной имитозащиты пакета KAEAD длины 256 бит вычисляется следующим образом:
KAEAD = K1 || K2 || K3 || K4,
где каждое значение
, i = 1, 2, 3, 4 вычисляется в соответствии с ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018, причем:- в качестве ключа используется единый ключ обмена, соответствующий заданным узлу-отправителю и узлу-получателю, а также значению поля KN IPlir-сообщения;
- в качестве данных используется двоичная строка вида
IntToVec8(i) || Label || aL || IVKDF ||
|| SN || Node || cL || oL,
где
- длина имитовставки s равна 64 бита.
Ключ транзитной имитозащиты пакета KTMAC длины 256 бит вычисляется следующим образом:
KTMAC = K1 || K2 || K3 || K4,
где каждое значение
, i = 1, 2, 3, 4 вычисляется в соответствии с ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018, причем:- в качестве ключа используется единый ключ обмена, соответствующий заданным (транзитным) узлам, через которые проходит IPlir-пакет, а также значению поля TKN IPlir-сообщения;
- в качестве данных используется двоичная строка вида
IntToVec8(i) || Label || aL || TIVKDF ||
|| SN || Node || cL || oL,
где
- длина имитовставки s равна 64 бита.
6.3.1.4 Алгоритмы шифрования и имитозащиты
Шифрование IPlir-тела и вычисление сквозной имитовставки ICV, размещаемой в поле IntegrityCheckValue IPlir-сообщения, происходит в соответствии с алгоритмом ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019, причем:
- в качестве ключа используется ключ шифрования и сквозной имитозащиты пакета KAEAD;
- в качестве дополнительных имитозащищаемых данных используются данные полей IPlir-заголовка в порядке, совпадающем с порядком их следования в IPlir-сообщении;
- в качестве открытого текста используются данные полей IPlir-тела в порядке, совпадающем с порядком их следования в IPlir-сообщении;
- в качестве уникального вектора используется величина
:IVAEAD = LSB63(InitValue),
где InitValue инициализируется значением поля InitValue IPlir-сообщения;
- длина имитовставки s равна 32 бита.
Схема выполнения шифрования и сквозной имитозащиты приведена на рисунке 8.
![]() имитозащиты при использовании криптонабора MAGMA-MGM
Вычисление транзитной имитовставки TICV, размещаемой в поле TransitIntegrityCheckValue IPlir-сообщения, происходит в соответствии с алгоритмом ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019, причем:
- в качестве ключа используется ключ транзитной имитозащиты пакета KTMAC;
- в качестве дополнительных имитозащищаемых данных используются данные полей IPlir-заголовка, зашифрованное IPlir-тело и данные полей IntegrityCheckValue, TransitIdentifier, TransitInitValue в порядке, совпадающем с порядком их следования в IPlir-сообщении;
- открытый текст представляет собой пустую строку;
- в качестве уникального вектора используется величина
:TIVAEAD = LSB63(TransitInitValue),
где TransitInitValue инициализируется значением поля TransitInitValue IPlir-сообщения;
- длина имитовставки s равна 32 бита.
Схема выполнения транзитной имитозащиты приведена на рисунке 9. Под значением "null" подразумевается пустая двоичная строка.
![]() при использовании криптонабора MAGMA-MGM
6.3.2 Криптографический набор KUZN-CTR-CMAC: CS=2
Описание данного криптонабора приведено в таблице 6.
Таблица 6
6.3.2.1 Ключи обмена
Для каждой пары взаимодействующих узлов предполагается наличие единого ключа обмена длины 256 бит, предназначенного для выработки ключей шифрования пакета, ключей сквозной имитозащиты пакета и ключей транзитной имитозащиты пакета.
Допускается наличие нескольких единых ключей обмена для пары взаимодействующих узлов. Для определения конкретного единого ключа обмена используется значение поля KN IPlir-сообщения (в случае выработки ключей шифрования пакета и ключей сквозной имитозащиты пакета) или значение поля TKN IPlir-сообщения (в случае выработки ключей транзитной имитозащиты пакета).
6.3.2.2 Требования к синхропосылкам
Сквозная синхропосылка InitValue, размещаемая в поле InitValue IPlir-сообщения, должна иметь длину 64 бита и быть уникальной для каждого IPlir-пакета, защищаемого посредством шифрования и сквозной имитозащиты одним и тем же узлом-отправителем с использованием одного и того же единого ключа обмена.
Транзитная синхропосылка TransitInitValue, размещаемая в поле TransitInitValue IPlir-сообщения, должна иметь длину 64 бита и быть уникальной для каждого IPlir-пакета, защищаемого посредством транзитной имитозащиты одним и тем же (транзитным) узлом с использованием одного и того же единого ключа обмена.
6.3.2.3 Алгоритмы вычисления производных ключей
Ключ шифрования пакета KENC длины 256 бит и ключ сквозной имитозащиты пакета KMAC длины 256 бит вычисляются следующим образом:
KENC = K1 || K2,
KMAC = K3 || K4,
где каждое значение
, i = 1, 2, 3, 4 вычисляется в соответствии с ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018, причем:- в качестве ключа используется единый ключ обмена, соответствующий заданным узлу-отправителю и узлу-получателю, а также значению поля KN IPlir-сообщения;
- в качестве данных используется строка вида
IntToVec8(i) || Label || aL || IVKDF ||
|| SN || Node || cL || oL,
где
- длина имитовставки s равна 128 бит.
Ключ транзитной имитозащиты пакета KTMAC длины 256 бит вычисляется следующим образом:
KTMAC = K1 || K2,
где каждое значение
, i = 1, 2 вычисляется в соответствии с ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018, причем:- в качестве ключа используется единый ключ обмена, соответствующий заданным (транзитным) узлам, через которые проходит IPlir-пакет, а также значению поля TKN IPlir-сообщения;
- в качестве данных используется строка вида
IntToVec8(i) || Label || aL || TIVKDF ||
|| SN || Node || cL || oL,
где
- длина имитовставки s равна 128 бит.
6.3.2.4 Алгоритмы шифрования и имитозащиты
Шифрование IPlir-тела происходит в соответствии с алгоритмом ГОСТ 34.12-2018 ("Кузнечик") в режиме гаммирования согласно ГОСТ 34.13-2018, причем:
- в качестве ключа используется ключ шифрования пакета KENC;
- в качестве открытого текста используются данные полей IPlir-тела в порядке, совпадающем с порядком их следования в IPlir-сообщении;
- в качестве синхропосылки используется величина
:IVENC = InitValue,
где InitValue инициализируется значением поля InitValue IPlir-сообщения;
- длина блоков гаммы s равна 128 бит.
Вычисление сквозной имитовставки ICV, размещаемой в поле IntegrityCheckValue IPlir-сообщения, происходит в соответствии с алгоритмом ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018, причем:
- в качестве ключа используется ключ сквозной имитозащиты пакета KMAC;
- в качестве данных используются данные полей IPlir-заголовка и зашифрованное IPlir-тело в порядке, совпадающем с порядком их следования в IPlir-сообщении;
- длина имитовставки s равна 64 бита.
Схема выполнения шифрования и сквозной имитозащиты приведена на рисунке 10.
![]() имитозащиты при использовании криптонабора KUZN-CTR-CMAC
Вычисление транзитной имитовставки TICV, размещаемой в поле TransitIntegrityCheckValue IPlir-сообщения, происходит в соответствии с алгоритмом ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018, причем:
- в качестве ключа используется ключ транзитной имитозащиты пакета KTMAC;
- в качестве данных используются данные полей IPlir-заголовка, зашифрованное IPlir-тело и данные полей IntegrityCheckValue, TransitIdentifier, TransitInitValue в порядке, совпадающем с порядком их следования в IPlir-сообщении;
- длина имитовставки s равна 64 бита.
Схема выполнения транзитной имитозащиты приведена на рисунке 11.
![]() при использовании криптонабора KUZN-CTR-CMAC
(справочное)
Приводимые ниже значения ключей обмена рекомендуется использовать только для проверки корректной работы конкретной реализации алгоритмов, описанных в настоящих рекомендациях.
Все числовые значения приведены в шестнадцатеричной записи. Нижний индекс в записи числа обозначает основание системы счисления.
В настоящем приложении двоичные строки из V*, длина которых кратна 4, записываются в шестнадцатеричном виде, а символ конкатенации ("||") опускается, т.е. строка
, i = 0, 1,..., r-1. Соответствие между двоичными строками длины 4 и шестнадцатеричными строками длины 1 задается естественным образом (см. таблицу А.1).Для возможности записи в шестнадцатеричном виде двоичных строк, длина которых не кратна 4, каждая такая строка предварительно дополняется нулями слева в количестве, минимально необходимом для получения двоичной строки, длина которой кратна 4.
Преобразование, ставящее в соответствие двоичной строке длины 4r шестнадцатеричную строку длины r, и соответствующее обратное преобразование для простоты записи опускается.
Таблица А.1
Примечание - Далее по тексту символ "\\" обозначает перенос числа на новую строку.
А.1 Ключи обмена
В качестве ключа обмена при вычислении производных ключей шифрования пакета и сквозной имитозащиты пакета (или ключей шифрования и сквозной имитозащиты пакета) используется ключ
В качестве ключа обмена при вычислении производных ключей транзитной имитозащиты пакета используется ключ
А.2 Криптографический набор MAGMA-MGM
А.2.1 Сообщение M1
Пусть IPlir-сообщение M1, подлежащее криптографической защите, имеет следующий вид:
Тогда поля IPlir-сообщения M1 содержат следующие значения:
Version = 0116
CS = 0116
T = 1
D = 1
ExtID = 0
ExtSN = 0
DAR = 0
R1 = 000
KN = 116
TKN = 116
Timestamp = 1c2aadbc16
SourceIdentifier = 4321000116
DestinationIdentifier = 4321000216
SequenceNumber = 56ee677816
InitValue = 5b77468ea1236c7116
Mode = 00
TLV = 0
S = 0
R2 = 016
NextHeader = 0116
IntegrityCheckValue = 0000000016
TransitIdentifier = 0000000016
TransitInitValue = 000000000000000016
TransitIntegrityCheckValue = 0000000016
Идентификатор криптонабора в IPlir-сообщении M1 имеет значение CS = 1, поэтому криптографическая защита сообщения выполняется согласно описанию криптографического набора MAGMA-MGM.
А.2.1.1 Выполнение шифрования и сквозной имитозащиты
А.2.1.1.1 Вычисление производного ключа
Для вычисления производного ключа KAEAD на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- ключ (ключ обмена)
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = b037a3cde12fd3fd16
K2 = d17f96fbd94696c216
K3 = 56c6afe9742db87116
K4 = 81662454def36de316
Итоговое значение ключа KAEAD равно
А.2.1.1.2 Шифрование и сквозная имитозащита
Для выполнения шифрования и сквозной имитозащиты пакета на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019 подаются:
Выходными значениями алгоритма ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019, являются:
Тогда после шифрования и сквозной имитозащиты IPlir-сообщение принимает следующий вид:
А.2.1.2 Выполнение транзитной имитозащиты
Флаг наличия полей для транзитной имитозащиты в IPlir-сообщении M1 имеет значение T = 1, поэтому для сообщения требуется выполнение транзитной имитозащиты.
Пусть идентификатор транзитного узла равен
TransitIdentifier = 4321000316
и транзитная синхропосылка равна
TransitInitValue = 55735cb2bd57287b16
А.2.1.2.1 Вычисление производного ключа
Для вычисления производного ключа транзитной имитозащиты пакета KTMAC на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = 3de55f45f19a181a16
K2 = 4b8d8899263e465216
K3 = a713aaf64546e4a016
K4 = bb6fa8323ea2289816
Итоговое значение ключа KTMAC равно
А.2.1.2.2 Транзитная имитозащита
Для выполнения транзитной имитозащиты на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019 подаются:
- дополнительные имитозащищаемые данные (IPlir-заголовок, зашифрованное IPlir-тело, значения полей IntegrityCheckValue, TransitIdentifier, TransitInitValue):
Выходными значениями алгоритма ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019 являются:
Тогда после транзитной имитозащиты IPlir-сообщение принимает следующий вид:
А.2.2 Сообщение M2
Пусть IPlir-сообщение M2, подлежащее криптографической защите, имеет следующий вид:
Тогда поля IPlir-сообщения M2 содержат следующие значения:
Version = 0116
CS = 0116
T = 1
D = 1
ExtID = 1
ExtSN = 1
DAR = 0
R1 = 000
KN = 116
TKN = 116
Timestamp = 1c2aadbc16
SourceIdentifier = 432100000000000116
DestinationIdentifier = 432100000000000216
SequenceNumber = 0000000056ee677a16
InitValue = 5b77468ea1236c7116
Mode = 00
TLV = 0
S = 0
R2 = 016
NextHeader = 0116
IntegrityCheckValue = 0000000016
TransitIdentifier = 000000000000000016
TransitInitValue = 000000000000000016
TransitIntegrityCheckValue = 0000000016
Идентификатор криптонабора в IPlir-сообщении M2 имеет значение CS = 1, поэтому криптографическая защита сообщения выполняется согласно описанию криптографического набора MAGMA-MGM.
А.2.2.1 Выполнение шифрования и сквозной имитозащиты
А.2.2.1.1 Вычисление производного ключа
Для вычисления производного ключа KAEAD на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- ключ (ключ обмена)
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = b7152dfdee9ede3816
K2 = 2fbd9c707f92690016
K3 = b8f8b8819dc44b5d16
K4 = f8574653b15d10ce16
Итоговое значение ключа KAEAD равно
А.2.2.1.2 Шифрование и сквозная имитозащита
Для выполнения шифрования и сквозной имитозащиты пакета на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019 подаются:
Выходными значениями алгоритма ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019 являются:
Тогда после шифрования и сквозной имитозащиты IPlir-сообщение принимает следующий вид:
А.2.2.2 Выполнение транзитной имитозащиты
Флаг наличия полей для транзитной имитозащиты в IPlir-сообщении M2 имеет значение T = 1, поэтому для сообщения требуется выполнение транзитной имитозащиты.
Пусть идентификатор транзитного узла равен
TransitIdentifier = 432100000000000316
и транзитная синхропосылка равна
TransitInitValue = 55735cb2bd57287b16
А.2.2.2.1 Вычисление производного ключа
Для вычисления производного ключа транзитной имитозащиты пакета KTMAC на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- ключ (ключ обмена)
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Магма") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = 291dbdfc51cfeee116
K2 = a58d580028e9f16716
K3 = 393fb14579d18e5a16
K4 = f03f7ac4349ea3b516
Итоговое значение ключа KTMAC равно
А.2.2.2.2 Транзитная имитозащита
Для выполнения транзитной имитозащиты на вход алгоритму ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019 подаются:
- открытый текст (IPlir-тело):
![]() - уникальный вектор:
IVTMAC = 55735cb2bd57287b16
Выходными значениями алгоритма ГОСТ 34.12-2018 ("Магма") в режиме MGM согласно Р 1323565.1.026-2019 являются:
- шифртекст:
![]() - имитовставка (транзитная):
TransitIntegrityCheckValue = bcdf4bf316
Тогда после транзитной имитозащиты IPlir-сообщение принимает следующий вид:
А.3 Криптографический набор KUZN-CTR-CMAC
А.3.1 Сообщение M3
Пусть IPlir-сообщение M3, подлежащее криптографической защите, имеет следующий вид:
Тогда поля IPlir-сообщения M3 содержат следующие значения:
Version = 0116
CS = 0216
T = 1
D = 1
ExtID = 0
ExtSN = 0
DAR = 0
R1 = 000
KN = 116
TKN = 116
Timestamp = 1c2aadbc16
SourceIdentifier = 4321000116
DestinationIdentifier = 4321000216
SequenceNumber = 56ee677916
InitValue = 5b77468ea1236c7116
Mode = 00
TLV = 0
S = 0
R2 = 016
NextHeader = 0116
IntegrityCheckValue = 000000000000000016
TransitIdentifier = 0000000016
TransitInitValue = 000000000000000016
TransitIntegrityCheckValue = 000000000000000016
Идентификатор криптонабора в IPlir-сообщении M3 имеет значение CS = 2, поэтому криптографическая защита сообщения выполняется согласно описанию криптографического набора KUZN-CTR-CMAC.
А.3.1.1 Выполнение шифрования и сквозной имитозащиты
А.3.1.1.1 Вычисление производных ключей
Для вычисления производных ключей KENC и KMAC на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- ключ (ключ обмена)
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = 8b6d117a33a1830e414878ac9b18738d16
K2 = 2b883274a8bda076e10198f7d21799e516
K3 = 06fc0e2199fd4b65570113427878b49d16
K4 = 9387d06a938509e31bccac292bd3e08e16
Итоговые значения ключей KENC и KMAC равны
А.3.1.1.2 Шифрование и сквозная имитозащита
Для выполнения шифрования пакета на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме гаммирования согласно ГОСТ 34.13-2018 подаются:
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме гаммирования согласно ГОСТ 34.13-2018 является:
Для выполнения сквозной имитозащиты пакета на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является:
- имитовставка (сквозная):
IntegrityCheckValue = 8ee7840ee70f7e9d16
Тогда после шифрования и сквозной имитозащиты IPlir-сообщение принимает следующий вид:
А.3.1.2 Выполнение транзитной имитозащиты
Флаг наличия полей для транзитной имитозащиты в IPlir-сообщении M3 имеет значение T = 1, поэтому для сообщения требуется выполнение транзитной имитозащиты.
Пусть идентификатор транзитного узла равен
TransitIdentifier = 4321000316
и транзитная синхропосылка равна
TransitInitValue = 55735cb2bd57287b16
А.3.1.2.1 Вычисление производного ключа
Для вычисления производного ключа транзитной имитозащиты пакета KTMAC на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- ключ (ключ обмена)
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = ea643907e8d92fdc2f6f9dfa049b06cb16
K2 = 53699b79cca70358c019459544367f4e16
Итоговое значение ключа KTMAC равно
А.3.1.2.2 Транзитная имитозащита
Для выполнения транзитной имитозащиты на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является:
- имитовставка (транзитная):
TransitIntegrityCheckValue = 92897fbe72bcf4cb16
Тогда после транзитной имитозащиты IPlir-сообщение принимает следующий вид:
А.3.2 Сообщение M4
Пусть IPlir-сообщение M4, подлежащее криптографической защите, имеет следующий вид:
Тогда поля IPlir-сообщения M4 содержат следующие значения:
Version = 0116
CS = 0216
T = 1
D = 1
ExtID = 1
ExtSN = 1
DAR = 0
R1 = 000
KN = 116
TKN = 116
Timestamp = 1c2aadbc16
SourceIdentifier = 432100000000000116
DestinationIdentifier = 432100000000000216
SequenceNumber = 0000000056ee677b16
InitValue = 5b77468ea1236c7116
Mode = 00
TLV = 0
S = 0
R2 = 016
NextHeader = 0116
IntegrityCheckValue = 000000000000000016
TransitIdentifier = 000000000000000016
TransitInitValue = 000000000000000016
TransitIntegrityCheckValue = 000000000000000016
Идентификатор криптонабора в IPlir-сообщении M4 имеет значение CS = 2, поэтому криптографическая защита сообщения выполняется согласно описанию криптографического набора KUZN-CTR-CMAC.
А.3.2.1 Выполнение шифрования и сквозной имитозащиты
А.3.2.1.1 Вычисление производных ключей
Для вычисления производных ключей KENC и KMAC на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- ключ (ключ обмена)
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = b04a700c48694da819279608b3188f7316
K2 = fb18e7641fe9a356b68451a965917a8016
K3 = 23a6ca4df25b92fcb5fa7b4678fa53e516
K4 = d139426512d74b65969e8e11167cad4316
Итоговые значения ключей KENC и KMAC равны
А.3.2.1.2 Шифрование и сквозная имитозащита
Для выполнения шифрования пакета на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме гаммирования согласно ГОСТ 34.13-2018 подаются:
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме гаммирования согласно ГОСТ 34.13-2018 является:
Для выполнения сквозной имитозащиты пакета на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является:
- имитовставка (сквозная):
IntegrityCheckValue = 57890a4ce449147716
Тогда после шифрования и сквозной имитозащиты IPlir-сообщение принимает следующий вид:
А.3.2.2 Выполнение транзитной имитозащиты
Флаг наличия полей для транзитной имитозащиты в IPlir-сообщении M4 имеет значение T = 1, поэтому для сообщения требуется выполнение транзитной имитозащиты.
Пусть идентификатор транзитного узла равен
TransitIdentifier = 432100000000000316
и транзитная синхропосылка равна
TransitInitValue = 55735cb2bd57287b16
А.3.2.2.1 Вычисление производного ключа
Для вычисления производного ключа транзитной имитозащиты пакета KTMAC на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
- ключ (ключ обмена)
- данные
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является соответствующая часть ключа:
K1 = f5caa07667e24f19485fe515767a5f9516
K2 = 02a3fdd462a59331dee778fe9d80e0e116
Итоговое значение ключа KTMAC равно
А.3.2.2.2 Транзитная имитозащита
Для выполнения транзитной имитозащиты на вход алгоритму ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 подаются:
Выходным значением алгоритма ГОСТ 34.12-2018 ("Кузнечик") в режиме выработки имитовставки согласно ГОСТ 34.13-2018 является:
- имитовставка (транзитная):
TransitIntegrityCheckValue = d4054f6db591179e16
Тогда после транзитной имитозащиты IPlir-сообщение принимает следующий вид:
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/prikaz/66/r_51481.html
На правах рекламы:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||