Р 1323565.1.020-2018. Рекомендации по стандартизации. Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в протоколе безопасности транспортного уровня (TLS 1.2)
(утв. и введены в действие Приказом Росстандарта от 22.08.2018 № 511-ст)
Внимание
Документ утратил силу с 01.04.2021 в связи с изданием Приказа Росстандарта от 18.12.2020 № 1327-ст. Взамен введены в действие Р 1323565.1.020-2020. Документ утратил силу с 01.04.2021 в связи с изданием Приказа Росстандарта от 18.12.2020 № 1327-ст. Взамен введены в действие Р 1323565.1.020-2020. Документ включен в Перечень стандартов и рекомендаций в области информационной безопасности, применяемых в рамках реализации цифровой повестки Евразийского экономического союза (Рекомендация Коллегии Евразийской экономической комиссии от 12.03.2019 № 9). Документ введен в действие с 1 февраля 2019 года.
ИСТОРИЯ ИЗМЕНЕНИЙ НОРМАТИВНО-ТЕХНИЧЕСКИХ АКТОВ
flowchart LR n0["Р 1323565.1.020-2018"]:::rst click n0 "https://bukva.ai/docs/r-1323565-1-020-2018" "Р 1323565.1.020-2018. Рекомендации по стандартизации. Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в... (ут" n1["Р 1323565.1.020-2020"]:::doc click n1 "https://bukva.ai/docs/r-1323565-1-020-2020" "Р 1323565.1.020-2020. Рекомендации по стандартизации. Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в... (ут" n0 --> n1 classDef rst fill:#FFEBEB,stroke:#8B0000,color:#000; classDef doc fill:#EBFFEB,stroke:#006400,color:#000; classDef notEnt fill:#FFFFEB,stroke:#FF8C00,color:#000;
Утверждены и введены в действие
Приказом Федерального агентства
по техническому регулированию
и метрологии
от 22 августа 2018 г. № 511-ст
РЕКОМЕНДАЦИИ ПО СТАНДАРТИЗАЦИИ
КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ
ИСПОЛЬЗОВАНИЕ РОССИЙСКИХ КРИПТОГРАФИЧЕСКИХ АЛГОРИТМОВ
В ПРОТОКОЛЕ БЕЗОПАСНОСТИ ТРАНСПОРТНОГО УРОВНЯ (TLS 1.2)
Information technology. Cryptographic data security.
The use of the russian cryptographic algorithms
in the transport layer security protocol (TLS 1.2)
1 февраля 2019 года
Предисловие
1 РАЗРАБОТАНЫ Обществом с ограниченной ответственностью «КРИПТО-ПРО» (ООО «КРИПТО-ПРО»)
2 ВНЕСЕНЫ Техническим комитетом по стандартизации ТК 26 «Криптографическая защита информации»
3 УТВЕРЖДЕНЫ И ВВЕДЕНЫ В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 22 августа 2018 г. № 511-ст
Правила применения настоящих рекомендаций установлены в статье 26 Федерального закона от 29 июня 2015 г. № 162-ФЗ «О стандартизации в Российской Федерации». Информация об изменениях к настоящим рекомендациям публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе «Национальные стандарты», а официальный текст изменений и поправок — в ежемесячном информационном указателе «Национальные стандарты». В случае пересмотра (замены) или отмены настоящих рекомендаций соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя «Национальные стандарты». Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования — на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
Введение
Настоящие рекомендации содержат описание протокола безопасности транспортного уровня версии 1.2 (TLS 1.2), с криптонаборами на основе алгоритмов блочного шифрования «Магма» и «Кузнечик», описанных в ГОСТ Р 34.12-2015.
Необходимость разработки настоящего документа вызвана потребностью в обеспечении совместимости реализаций протокола TLS с использованием российских государственных криптографических стандартов.
Примечание — Основная часть настоящих рекомендаций дополнена приложениями А - В.
1 Область применения
Описанный в данных рекомендациях протокол предназначен для установления защищенного соединения между клиент-серверными приложениями в сети Интернет с использованием алгоритмов, определяемых российскими государственными криптографическими стандартами, для обеспечения аутентификации сторон, конфиденциальности и целостности информации, передаваемой по каналу связи, в котором допускается присутствие активного противника. Протокол может применяться для обеспечения защиты каналов связи при обработке информации, не содержащей сведений, составляющих государственную тайну.
2 Нормативные ссылки
В настоящих рекомендациях использованы нормативные ссылки на следующие стандарты:
ГОСТ Р 34.10-2012 Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи
ГОСТ Р 34.11-2012 Информационная технология. Криптографическая защита информации. Функция хэширования
ГОСТ Р 34.12-2015 Информационная технология. Криптографическая защита информации. Блочные шифры
ГОСТ Р 34.13-2015 Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров
ГОСТ Р ИСО/МЭК 9594-8 Информационная технология. Взаимосвязь открытых систем. Справочник. Часть 8. Основы аутентификации
Р 50.1.113-2016 Информационная технология. Криптографическая защита информации. Криптографические алгоритмы, сопутствующие применению алгоритмов электронной цифровой подписи и функции хэширования
Р 1323565.1.017-2018 Информационная технология. Криптографическая защита информации. Криптографические алгоритмы, сопутствующие применению алгоритмов блочного шифрования
Примечание — При пользовании настоящими рекомендациями целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования — на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодному информационному указателю «Национальные стандарты», который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя «Национальные стандарты» за текущий год. Если заменен ссылочный стандарт, на который дана недатированная ссылка, то рекомендуется использовать действующую версию этого стандарта с учетом всех внесенных в данную версию изменений. Если заменен ссылочный стандарт, на который дана датированная ссылка, то рекомендуется использовать версию этого стандарта с указанным выше годом утверждения (принятия). Если после утверждения настоящих рекомендаций в ссылочный стандарт, на который дана датированная ссылка, внесено изменение, затрагивающее положение, на которое дана ссылка, то это положение рекомендуется применять без учета данного изменения. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, применяется в части, не затрагивающей эту ссылку.
3 Термины, определения и обозначения
3.1 Термины и определения
В настоящих рекомендациях применены следующие термины с соответствующими определениями:
3.1.1 криптонабор (cipher suite): Набор криптографических алгоритмов и их параметров, определяющий работу протокола TLS в рамках соответствующей данному криптонабору сессии.
3.1.2 согласованный криптонабор: Криптонабор, соответствующий идентификатору криптонабора, согласованному сторонами взаимодействия в процессе выполнения протокола Handshake, описанного в разделе 6.
3.1.3 открытый ключ сервера: Ключ, равный ключу проверки подписи, хранящемуся в сертификате сервера.
3.1.4 закрытый ключ сервера: Ключ, равный ключу подписи сервера, соответствующему ключу проверки подписи, хранящемуся в сертификате сервера.
Примечание — В настоящих рекомендациях термины «открытый ключ сервера», «закрытый ключ сервера» используются вместо терминов «ключ проверки подписи сервера», «ключ подписи сервера» в целях конкретизации способа их использования и указывают на то, что данные ключи не используются в протоколе TLS 1.2 для формирования подписи, а участвуют в выработке общего ключа при работе протокола Handshake (см. раздел 6).
3.2 Обозначения
В настоящих рекомендациях использованы следующие обозначения:
| x mod y | - остаток от деления целого числа x на целое число y; |
|---|---|
| Bs | - множество байтовых строк длины s, s >= 0. Строка b = (b1,...,bs) принадлежит множеству Bs, если b_{1},...,b_{s} \in {0,...,255} . При s = 0 множество Bs состоит из единственной пустой строки длины 0; |
| | | - конкатенация двух байтовых строк; для двух строк a = (a_{1},...,a_{s1}) \in B_{s1} , b = (b_{1},...,b_{s2}) \in B_{s2} их конкатенацией a|b называется строка c = (a_{1},...,a_{s1},b_{1},...,b_{s2}) \in B_{s1 + s2} ; |
| b [i..j] | - строка b[i..j] = (b_{i},b_{i + 1},...,b_{j}) \in B_{j - i + 1} , где 1 <= i <= j <= s и b = (b_{1},...,b_{s}) \in B_{s} ; |
| INT (b) | - число INT (b) = 256s-1·b1 +...+ 256·bs-1 + bs, где b = (b_{1},...,b_{s}) \in B_{s} ; |
| STRs (r) | - строка STR_{s}(r) = (b_{1},...,b_{s}) \in B_{s} , соответствующая числу r = 256s-1·b1 +...+ 256·bs-1 + bs <= 256s — 1; |
| strs (r) | - строка str_{s}(r) = (b_{s},...,b_{1}) \in B_{s} , соответствующая числу r = 256s-1·b1 +...+ 256·bs-1 + bs <= 256s — 1; |
| LMBt (b) | - строка LMB_{t}(b) = (b_{1},...,b_{t}) \in B_{t} , соответствующая строке b = (b_{1},...,b_{s}) \in B_{s} , 1 <= t <= s. |
| n | - параметр алгоритма блочного шифрования, называемый длиной блока; в рамках данного документа измеряется в байтах; |
| k | - параметр алгоритма блочного шифрования, называемый длиной ключа; в рамках данного документа измеряется в байтах; |
| ENC (K, IV, M) | - алгоритм шифрования сообщения M на ключе K с помощью вектора инициализации IV, который задается выбранным криптонабором; |
| MAC (K, M) | - алгоритм вычисления кода аутентификации сообщения M на ключе K, который задается выбранным криптонабором; |
| q | - порядок подгруппы группы точек эллиптической кривой, соответствующей открытому ключу сервера; |
| P | - точка эллиптической кривой порядка q, соответствующей открытому ключу сервера; |
| O | - нулевая точка эллиптической кривой; |
| QC | - ключ проверки подписи, хранящийся в сертификате клиента; |
| kC | - ключ подписи клиента, соответствующий ключу QC; |
| QS | - открытый ключ сервера; |
| kS | - закрытый ключ сервера; |
| rC | - байтовая строка со случайными данными, соответствующая полю ClientHello.random, описанному в 6.3.2; |
| rS | - байтовая строка со случайными данными, соответствующая полю ServerHello.random, описанному в 6.3.3; |
| SIGNK | - алгоритм подписи на ключе K, описанный в 6.4.6; |
| HASH | - хэш-функция ГОСТ Р 34.11-2012 с длиной выхода 32 байта (256 бит); |
| KEG | - алгоритм генерации ключей экспорта, описанный в 6.4.5.1; |
| PRF | - псевдослучайная функция PRF_TLS_GOSTR3411_2012_256, описанная в Р 50.1.113-2016; |
| KExp15 | - алгоритм экспорта ключей, описанный в Р 1323565.1.017-2018, использующий блочных шифр, задающийся выбранным криптонабором; |
| KImp15 | - алгоритм импорта ключей, описанный в Р 1323565.1.017-2018, использующий блочных шифр, задающийся выбранным криптонабором; |
| & | - операция побитовой конъюнкции (побитовое «И»); |
| HM | - переменная, хранящая конкатенацию всех пересланных и полученных сообщений протокола Handshake, начиная с сообщения приветствия ClientHello и заканчивая сообщением (но не включая его), при формировании которого эта переменная используется; при этом сообщение запроса приветствия HelloRequest, сообщения протокола Change Cipher Spec и сообщения протокола Alert не включаются в переменную HM. |
Примечание 1 — Для описания протокола в настоящих рекомендациях используется общепринятый язык представления (далее — язык представления TLS), описанный в [1].
Примечание 2 — В настоящих рекомендациях все строковые константы приводятся в кавычках и представляются в кодировке ASCII.
Примечание 3 — В настоящих рекомендациях в целях сохранения терминологической преемственности с действующими отечественными нормативными документами и опубликованными научно-техническими изданиями установлено, что термины «хэш-функция», «криптографическая хэш-функция», «функция хэширования» и «криптографическая функция хэширования» являются синонимами.
Примечание 4 — В настоящих рекомендациях в целях сохранения терминологической преемственности с действующими отечественными нормативными документами и опубликованными научно-техническими изданиями установлено, что термины «электронная подпись», «цифровая подпись», «электронная цифровая подпись» и «подпись» являются синонимами.
Примечание 5 — В настоящих рекомендациях используются обозначения параметров эллиптических кривых в соответствии с ГОСТ Р 34.10-2012 (раздел 5).
4 Иерархия информационного обмена в протоколе TLS
Протокол TLS состоит из двух уровней: нижнего и верхнего. На нижнем уровне находится протокол Record, работающий поверх некоторого транспортного протокола (например, TCP) с гарантированной доставкой пакетов данных, который обеспечивает доставку сообщений с сохранением их очередности, отсутствием потерь и дублирований. Поверх протокола Record, в свою очередь, работают следующие протоколы: протокол Handshake, протокол Alert, протокол Change Cipher Spec и протокол Application Data.
Схема обмена данными в протоколе TLS изображена на рисунке 1.
Рисунок 1 — Схема обмена данными в протоколе TLS
Основное назначение протокола TLS — создание защищенного канала связи между двумя взаимодействующими сторонами, то есть обеспечение следующих свойств:
- аутентификация сторон: криптонаборы, описанные в настоящих рекомендациях, предоставляют возможность односторонней или двусторонней аутентификации сторон. Аутентификация клиента осуществляется за счет проверки подписи клиента; аутентификация сервера осуществляется за счет подтверждения обладания общим секретом с помощью закрытого ключа, соответствующего сертификату сервера;
- конфиденциальность: обеспечивается за счет шифрования передаваемой информации;
- целостность: обеспечивается за счет использования кодов аутентификации передаваемых сообщений.
Иерархия информационного обмена протокола TLS включает в себя сессии, соединения, поток сообщений различных типов, который разбивается на записи. В одной сессии может быть реализовано несколько соединений, произвольно разнесенных по времени.
Каждая сессия характеризуется следующими параметрами безопасности, которые согласовываются в ходе работы протокола Handshake (см. раздел 6) и остаются неизменными для каждого соединения в рамках данной сессии:
- идентификатор сессии;
- сертификат сервера;
- сертификат клиента (в случае двусторонней аутентификации);
- криптонабор;
- общее сессионное секретное значение MS (формируется клиентом и сервером в ходе работы протокола Handshake, соответствующего полной схеме обмена сообщениями).
Каждое соединение характеризуется следующими параметрами безопасности, которые согласовываются в ходе протокола Handshake (см. раздел 6):
- строка со случайными байтами rC, задаваемая клиентом;
- строка со случайными байтами rS, задаваемая сервером;
- ключ клиента для вычисления кода аутентификации сообщения K_{MAC,C}^{write} ;
- ключ клиента для проверки кода аутентификации сообщения K_{MAC,C}^{read} ;
- ключ сервера для вычисления кода аутентификации сообщения K_{MAC,S}^{write} ;
- ключ сервера для проверки кода аутентификации сообщения K_{MAC,S}^{read} ;
- ключ клиента для зашифрования данных K_{ENC,C}^{write} ;
- ключ клиента для расшифрования данных K_{ENC,C}^{read} ;
- ключ сервера для зашифрования данных K_{ENC,S}^{write} ;
- ключ сервера для расшифрования данных K_{ENC,S}^{read} ;
- вектор инициализации клиента для зашифрования данных IV_{C}^{write} ;
- вектор инициализации клиента для расшифрования данных IV_{C}^{read} ;
- вектор инициализации сервера для зашифрования данных IV_{S}^{write} ;
- вектор инициализации сервера для расшифрования данных IV_{S}^{read} .
Примечание 1 — При первичном открытии сессии во время выполнения протокола Handshake вырабатываются как параметры сессии, так и параметры соединения.
Примечание 2 — Криптонаборы, описанные в настоящих рекомендациях, соответствуют симметричной схеме защиты данных: векторы инициализации и ключи вычисления кода аутентификации сообщения и зашифрования сообщения, которые используются для формирования защищенной записи одной стороной, используются для проверки кода аутентификации сообщения и расшифрования сообщения другой стороной.
5 Протокол Record
Получив данные от протоколов более высокого уровня, протокол Record формирует из них последовательность структур, которые называются записями. Затем сформированные записи передаются транспортному протоколу.
Записи состоят из заголовка, описывающего передаваемые данные, и самих данных, которые передаются в открытом или защищенном виде в зависимости от текущего состояния соединения. Заголовок всегда передается в открытом виде.
Данные, полученные от протокола транспортного уровня, протокол Record интерпретирует как записи и формирует из них сообщения для протоколов верхнего уровня, опираясь на заголовки записей.
В настоящем разделе все действия будут описаны для одной фиксированной стороны взаимодействия (клиента или сервера), которая обладает ключом шифрования K_{ENC}^{write} , ключом вычисления кода аутентификации сообщения K_{MAC}^{write} , вектором инициализации IVwrite для формирования записей и ключом расшифрования K_{ENC}^{read} , ключом проверки кода аутентификации сообщения K_{MAC}^{read} , вектором инициализации IVread для чтения записей.
5.1 Состояние соединения
Состояние соединения определяет порядок обработки данных, передаваемых в рамках этого соединения. В каждый момент времени выделяется текущее состояние чтения и текущее состояние записи для каждой из сторон взаимодействия.
В каждый момент времени все записи обрабатываются в соответствии с текущим состоянием соединения. Установка и смена состояния соединения производятся после взаимного обмена сообщениями ChangeCipherSpec, производимого в рамках протокола Change Cipher Spec. Данное сообщение сигнализирует сторонам взаимодействия о том, что текущее состояние чтения/записи меняется на новое состояние, которое было согласовано в результате выполнения протокола Handshake.
Состояния чтения/записи характеризуются следующими значениями: параметрами сессии, параметрами соединения, номером получаемой/пересылаемой записи seqnum (числом от 0 до SNMAX, где параметр SNMAX задается выбранным криптонабором), который увеличивается на единицу после каждой полученной/отправленной записи. При смене состояния чтения/записи номеру пересылаемой записи должно присваиваться нулевое значение.
При установлении первого соединения алгоритм вычисления кода аутентификации и шифрования не используется, то есть все данные, передаваемые при работе протокола Handshake, будут пересылаться в открытом виде до тех пор, пока стороны не обменяются сообщениями ChangeCipherSpec и не сменят состояния чтения/записи, после чего все данные начнут передаваться в защищенном виде в соответствии с текущим состоянием чтения/записи.
При создании нового соединения в рамках текущего соединения все сообщения протокола Handshake передаются в защищенном виде в соответствии с состоянием чтения/записи, соответствующим текущему соединению, до тех пор, пока стороны не обменяются сообщениями ChangeCipherSpec и не сменят состояния чтения/записи.
5.2 Формирование записи
Каждая запись содержит следующие параметры: type, version, length, fragment. Первые три параметра type, version, length образуют заголовок записи, описанный в 5.2.2, и указывают на тип сообщения, версию протокола и длину передаваемых данных соответственно, а параметр fragment содержит фрагмент данных, передаваемых в открытом или защищенном виде. При этом с каждой записью неявно ассоциируется ее порядковый номер seqnum.
Часть данных, полученных от протоколов более высокого уровня и выделенных при фрагментации в соответствии с 5.2.1, переводится в TLSPlaintext-структуру, которая задается следующим образом:
Поле TLSPlaintext.fragment содержит фрагмент передаваемых данных в открытом виде.
При инициализации соединения до обмена сторонами сообщениями ChangeCipherSpec протокол Record оперирует незащищенными записями, которые формируются непосредственно в виде TLSPlaintext-структур.
После обмена сообщениями ChangeCipherSpec все данные пересылаются в защищенном виде. При установлении сторонами защищенного режима пересылки данных протокол Record переводит данные TLSPlaintext-структуры в защищенный вид, формируя из них TLSCiphertext-структуру (формат структуры полностью совпадает с форматом структуры TLSPlaintext), которой затем оперирует при информационном обмене:
| struct { ContentType type; ProtocolVersion version = {3, 3}; /*TLS v1.2 */ uint16 length; opaque fragment [TLSCiphertext.length]; } TLSCiphertext; |
|---|
Поле TLSCiphertext.fragment содержит фрагмент передаваемых данных в защищенном виде и формируется из поля TLSPlaintext.fragment в соответствии с согласованным криптонабором. Процесс формирования этого поля описан в 5.2.3.
Формирование защищенной записи из фрагмента данных, выделенного при фрагментации в соответствии с 5.2.1, выполняется в соответствии со следующими этапами, схематично отраженными на рисунке 2:
1) формирование незащищенной записи, имеющей структуру TLSPlaintext;
2) вычисление кода аутентификации в соответствии с 5.2.3.2 от конкатенации номера записи, заголовка незащищенной записи и данных незащищенной записи;
3) зашифрование данных незащищенной записи и кода аутентификации, полученного на предыдущем шаге;
4) формирование защищенной записи, имеющей структуру TLSCiphertext.
Рисунок 2 — Формирование защищенной записи
Примечание 1 — На рисунке 2 под HDR и HDR' подразумеваются заголовки незащищенной и защищенной записей соответственно.
Примечание 2 — В соответствии с [1] процесс формирования записи протокола TLS 1.2 допускает наличие этапа сжатия данных, однако при работе протокола в соответствии с криптонаборами, описанными в данных рекомендациях, этот этап отсутствует. В связи с этим структура TLSCompressed, описанная в [1], считается идентичной структуре TLSPlaintext и в тексте настоящих рекомендаций не используется.
5.2.1 Фрагментация
Принятые с верхнего уровня данные разбиваются протоколом Record на фрагменты, помещаемые в поля TLSPlaintext.fragment. Значение поля TLSPlaintext.length не должно превышать 214 (то есть размер поля TLSPlaintext.fragment не должен превышать 16 Кбайт).
Если состояние соединения подразумевает защиту данных, то структура TLSPlaintext используется для формирования структуры TLSCiphertext. При этом размер поля fragment структуры TLSCiphertext может оказаться больше размера соответствующего поля структуры TLSPlaintext из-за добавления кода аутентификации сообщения (это приводит к тому, что значение поля TLSCiphertext.length становится больше значения поля TLSPlaintext.length). При работе протокола в соответствии с криптонаборами, описанными в данных рекомендациях, значение поля TLSCiphertext.length не должно превышать 214 + 16.
Одно сообщение протокола, работающего над протоколом Record, может быть разбито на несколько фрагментов. Одному фрагменту могут принадлежать данные нескольких сообщений одного типа, то есть сообщений одного протокола верхнего уровня. Запрещается посылать фрагменты нулевой длины для сообщений протокола Handshake и Change Cipher Spec. Запрещается фрагментировать сообщения протокола Alert.
Способы фрагментации не влияют на корректность работы всего протокола TLS 1.2 и должны определяться на этапе его реализации.
5.2.2 Формирование заголовка записи
Записи состоят из заголовка, описывающего передаваемые данные, и самого фрагмента данных. Каждая запись передается в открытом (TLSPlaintext-структура) или защищенном (TLSCiphertext-структура) виде в зависимости от текущего состояния соединения. В каждом из двух случаев заголовок передается в открытом виде, имеет длину 5 байт и состоит из следующих полей:
type — тип сообщения (1 байт). Всего определено четыре типа сообщений: сообщения протокола Change Cipher Spec (тип 20), сообщения протокола Alert (тип 21), сообщения протокола Handshake (тип 22), сообщения протокола Application Data (тип 23);
version — версия протокола (2 байта). Данный параметр содержит внутренний идентификатор версии протокола TLS. Внутренний идентификатор версии протокола TLS 1.2, описанного в настоящих рекомендациях, равен (3, 3);
length — длина фрагмента данных в байтах (2 байта). Данный параметр определяет количество байтов, передаваемых в записи после ее заголовка. Значения полей TLSPlaintext.length и TLSCiphertext.length должны удовлетворять ограничениям, определенным в 5.2.1.
5.2.3 Защита данных
В настоящем разделе предполагается, что незащищенная запись с номером seqnum обозначается далее через Rec:
В настоящем разделе предполагается, что защищенная запись с номером seqnum обозначается далее через PRec:
При обеспечении защиты данных с помощью вычисления кода аутентификации и шифрования значение поля PRec.fragment защищенной записи, соответствующей номеру seqnum, вычисляется следующим образом
где значение RecENC вычисляется согласно 5.2.3.3.
5.2.3.1 Алгоритм TLSTREE выработки ключей защиты записей
В настоящем разделе описывается алгоритм TLSTREE, используемый для порождения ключей защиты записей из корневого ключа K_{root} \in B_{32} .
TLSTREE(Kroot,i) = Divers3(Divers2(Divers1(Kroot,STR8(i & & C1)),STR8(i & C2)),STR8(i & C3)), (2)
- число i \in {0,1,...,2^{64} - 1} ;
- константы C_{1},C_{2},C_{3} \in Z_{2^{64}} определяются конкретным криптонабором;
- Diversj (K,D), j \in {1,2,3} — алгоритм диверсификации ключа K \in B_{32} по данным диверсификации D \in B_{8} , который задается с помощью функции KDF256, определяемой алгоритмом KDF_GOSTR3411_2012_256, описанным в Р 50.1.113-2016 (подраздел 4.4):
Divers1(K,D) = KDF256(K,«level1»,D);
Divers2(K,D) = KDF256(K,«level2»,D); (3)
Divers3(K,D) = KDF256(K,«level3»,D).
5.2.3.2 Код аутентификации сообщения
В настоящем разделе предполагается, что ключ KMAC соответствует ключу K_{MAC}^{write} для состояния записи и ключу K_{MAC}^{read} для состояния чтения.
Для записи Rec с номером seqnum код аутентификации вычисляется от следующих данных:
MACData = STR8 (seqnum) | Rec.type | Rec.version | | Rec.length | Rec.fragment. (4)
Значение ключа K_{MAC}^{seqnum} , соответствующего конкретному номеру seqnum, получается из ключа KMAC с помощью алгоритма TLSTREE, описанного в 5.2.3.1, в соответствии с формулой
K_{MAC}^{seqnum} = TLSTREE(K_{MAC},seqnum) . (5)
Параметры алгоритма вычисления кода аутентификации сообщения MAC определяются согласованными криптонаборами в соответствии с 10.3.
Для записи Rec с номером seqnum код аутентификации сообщения RecMAC определяется в соответствии с формулой
RecMAC = MAC(K_{MAC}^{seqnum},MACData) . (6)
5.2.3.3 Шифрование
В настоящих рекомендациях описываются криптонаборы, для которых использование алгоритма шифрования при формировании защищенной записи является обязательным.
В настоящем разделе предполагается, что ключ KENC соответствует ключу K_{ENC}^{write} для состояния записи и ключу K_{ENC}^{read} для состояния чтения. Также полагаем, что вектор инициализации IV соответствует вектору инициализации IVwrite для состояния записи и вектору инициализации IVread для состояния чтения.
Для записи Rec с номером seqnum зашифровываются следующие данные:
ENCData = Rec.fragment | RecMAC. (7)
Значение ключа K_{ENC}^{seqnum} , соответствующее конкретному номеру записи seqnum, получается из ключа KENC с помощью алгоритма TLSTREE, описанного в 5.2.3.1, в соответствии с формулой
K_{ENC}^{seqnum} = TLSTREE(K_{ENC},seqnum) . (8)
Значение вектора инициализации IVseqnum, соответствующее конкретному номеру записи seqnum, определяется следующим образом
IVseqnum = STRn/2((INT(IV) + seqnum)mod2n·8/2). (9)
Параметры алгоритма шифрования ENC определяются согласованным криптонабором. Значение RecENC вычисляется в соответствии с формулой
RecENC = ENC(K_{ENC}^{seqnum},IV_{seqnum},ENCData) , (10)
при этом зашифрование данных проводится в режиме CTR-ACPKM, описанном в Р 1323565.1.017-2018 и использующем блочный шифр, соответствующий согласованному криптонабору.
6 Протокол Handshake
Протокол Handshake работает поверх протокола Record и используется для согласования следующих параметров сессии:
| идентификатор сессии | - произвольная последовательность байтов, выработанная сервером для идентификации активной или возобновляемой сессии; |
|---|---|
| сертификат стороны | - сертификат в формате X.509, формирующийся в соответствии с [2]. Аутентификация опционально может быть односторонней (аутентификация сервера клиентом, сертификат предоставляет только сервер) или взаимной (взаимная аутентификация сервера и клиента, клиент и сервер обмениваются сертификатами); |
| идентификатор криптонабора | - идентификатор, определяющий набор алгоритмов и их параметров, использующихся в рамках данной сессии; |
| значение MS (master secret) | - общее секретное значение длиной 48 байт, которое вырабатывается сторонами с помощью протокола выработки и подтверждения ключа (см. 6.4); |
| значение флага возобновления | - флаг, разрешающий/запрещающий повторные соединения в рамках данной сессии. |
Протокол Handshake начинает свою работу с сообщения ClientHello, которое может быть послано клиентом по его собственной инициативе либо в качестве ответа на сообщение сервера HelloRequest.
Схема обмена сообщениями в протоколе Handshake может быть полной или упрощенной.
Полная схема обмена сообщениями (см. рисунок 3) используется, если клиент в сообщении приветствия ClientHello в качестве идентификатора сессии указал пустую строку либо если сервер не смог найти в кэше сессий параметры сессии, соответствующей данному идентификатору.
Рисунок 3 — Полная схема обмена сообщениями в протоколе Handshake
Примечание 1 — Фигурными скобками отмечены те сообщения, которые являются опциональными.
Примечание 2 — Сообщение ChangeCipherSpec формально относится не к протоколу Handshake, а к протоколу Change Cipher Spec.
Примечание 3 — В соответствии с [1] протокол TLS 1.2 допускает возможность установления анонимного соединения без обмена сертификатами, однако в протоколе, соответствующем криптонаборам, описанным в данных рекомендациях, данная опция использоваться не должна.
Если клиент хочет создать соединение в рамках существующей сессии, то в сообщении приветствия ClientHello он должен указать идентификатор этой сессии. В случае если сервер смог найти в кэше сессий параметры сессии, соответствующей данному идентификатору, процесс обмена сообщениями протокола Handshake соответствует упрощенной схеме (см. рисунок 4).
| Client | Server | |
|---|---|---|
| ClientHello | ![]() |
|
![]() |
ServerHello ChangeCipherSpec Finished |
|
| ChangeCipherSpec Finished |
![]() |
|
| Application Data | \leftarrow \rightarrow | Application Data |
Рисунок 4 — Упрощенная схема обмена сообщениями в протоколе Handshake
Во время упрощенной схемы работы протокола Handshake стороны не вырабатывают новое общее сессионное секретное значение MS. Для выработки ключевого материала, необходимого для работы протокола Record в рамках устанавливаемого соединения, используется значение MS, выработанное при выполнении полной схемы протокола Handshake, в ходе которой были установлены параметры сессии с данным идентификатором.
6.1 Схема взаимодействия сторон
В таблице 6.1.1 пунктирной линией обозначены все опциональные сообщения, которые передаются в случае двухсторонней аутентификации.
Схема взаимодействия сторон в протоколе Handshake
6.2 Формат сообщений протокола Handshake
Каждое сообщение протокола Handshake содержит специальный заголовок, состоящий из четырех байтов. Первый байт содержит код типа сообщения, три следующих байта — длину сообщения:
Сообщения протокола Handshake, описанные ниже, приведены в том порядке, в котором они должны следовать для обеспечения корректной работы протокола. Единственным исключением является сообщение запроса приветствия (HelloRequest), которое может быть послано сервером в любой момент, но которое должно быть проигнорировано клиентом, если оно получено во время выполнения протокола Handshake.
6.3 Сообщения приветствия
6.3.1 Сообщение запроса приветствия (HelloRequest)
Данное сообщение может быть послано сервером в любой момент и используется для оповещения клиента о том, что тот должен начать процесс согласования параметров сессии заново. В ответ на данный запрос клиент должен послать сообщение приветствия ClientHello.
Данное сообщение должно быть проигнорировано клиентом, если в этот момент он уже участвует в процессе согласования параметров сессии. В случае если клиент отказывается пересогласовывать параметры сессии, то он может проигнорировать это сообщение либо послать в ответ оповещение no_renegotiation (см. раздел 8).
Если сервер послал сообщение запроса приветствия HelloRequest, но не дождался сообщения ClientHello в качестве ответа со стороны клиента, он может закрыть соединение, передав оповещение об ошибке с уровнем fatal (см. раздел 8).
После отправки сообщения запроса приветствия HelloRequest сервер не должен повторно отправлять данное сообщение до тех пор, пока последующий процесс согласования параметров сессии на этапе выполнения протокола Handshake не будет завершен.
Данное сообщение не должно входить в переменную HM.
6.3.2 Сообщение приветствия клиента (ClientHello)
Клиент посылает сообщение приветствия ClientHello в одном из следующих случаев:
- клиент впервые подключается к серверу;
- как ответ на сообщение запроса приветствия HelloRequest;
- с целью пересогласования параметров сессии.
Сообщение ClientHello содержит следующие параметры:
Сообщение ClientHello имеет следующую структуру:
После отправки сообщения ClientHello клиент ожидает от сервера сообщения ServerHello. В ответ на любое другое сообщение протокола Handshake (за исключением сообщения запроса приветствия HelloRequest) клиент должен ответить оповещением об ошибке с уровнем fatal (см. раздел 8).
6.3.3 Сообщение приветствия сервера (ServerHello)
Данное сообщение отправляется сервером после получения им сообщения ClientHello при условии, что среди параметров, переданных клиентом в сообщении приветствия, присутствует поддерживаемый сервером набор параметров установления соединения.
Сообщение приветствия содержит следующие параметры:
| версия протокола (server_version) | - максимальная поддерживаемая сервером версия протокола, не превосходящая версии клиента client_version. Примечание — Организация обратной совместимости проводится в соответствии с приложением E документа [1]; |
|---|---|
| строка со случайными данными (random) | - строка данных длины 32 байта, выработанная сервером, в которой первые 4 байта занимает значение текущего времени в 32-битном формате UNIX [количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года], а остальные 28 байт занимает строка, выработанная случайным образом; |
| идентификатор сессии (session_id) | - идентификатор сессии, в рамках которой осуществляется соединение. Если поле ClientHello.session_id не было пустым, тогда в кэше сессий сервер ищет параметры сессии, соответствующей данному идентификатору. В случае если такая сессия существует и сервер готов создать соединение в рамках данной сессии, он присваивает то же значение идентификатора сессии полю ServerHello.session_id. Если поле ClientHello.session_id было пустым либо если сервер не нашел параметры сессии, соответствующей данному идентификатору, сервер задает новое значение идентификатора, указывающего на создаваемую сессию. Сервер может послать пустое значение идентификатора, это будет означать, что параметры данной сессии не будут храниться в кэше сервера и повторное создание соединения в рамках данной сессии будет невозможно; |
| криптонабор (cipher_suite) | - криптонабор, который сервер выбирает из списка ClientHello.cipher_suites. Если значение ClientHello.session_id не нулевое, данный параметр должен содержать идентификатор криптонабора, согласованного в сессии ClientHello.session_id; |
| метод сжатия (compression_method) | - данная версия протокола не поддерживает методы сжатия, и поле должно содержать один метод с идентификатором null (0); |
| расширения (extensions) | - криптонаборы, описанные в настоящем документе, предполагают наличие двух обязательных расширений со стороны сервера: extended_master_secret и renegotiation_info. |
Сообщение ServerHello имеет следующую структуру:
| struct { ProtocolVersion server_version; Random random; SessionID session_id; CipherSuite cipher_suite; CompressionMethod compression_method; Extension extensions<0..2^16-1>; } ServerHello; |
|---|
6.3.4 Расширения (extensions)
Каждое расширение, посылаемое клиентом и сервером, имеет следующую структуру:
| struct { ExtensionType extension_type; opaque extension_data<0..2^16-1>; } Extension; enum { signature_algorithms(13), extended_master_secret(23), renegotiation_info(65281), (65535) } ExtensionType; |
|---|
6.3.4.1 Расширение signature_algorithms
Расширение signature_algorithms является обязательным только для клиента и не пересылается сервером. Данное расширение содержит список пар алгоритмов подписи и хэширования, поддерживаемых клиентом.
Данное расширение имеет тип 13. Поле extension_data расширения signature_algorithms, пересылаемого клиентом, содержит параметр supported_signature_algorithms, который задается следующим способом:
| SignatureAndHashAlgorithm supported_signature_algorithms<2..2^16-2>; struct { HashAlgorithm hash; SignatureAlgorithm signature; } SignatureAndHashAlgorithm; |
|---|
Множество поддерживаемых алгоритмов хэширования задается следующим образом:
| enum { gostr34112012_256(238), gostr34112012_512(239), (255) } HashAlgorithm; |
|---|
При этом значения gostr34112012_256 и gostr34112012_512 соответствуют алгоритму хэширования, определенному в ГОСТ Р 34.11-2012, с длиной выхода 256 и 512 бит соответственно.
Множество поддерживаемых алгоритмов подписи задается следующим образом:
| enum { gostr34102012_256(238), gostr34102012_512(239), (255) } SignatureAlgorithm; |
|---|
При этом значения gostr34102012_256 и gostr34102012_512 соответствуют алгоритму подписи, определенному в ГОСТ Р 34.10-2012, с длиной ключа 256 и 512 бит соответственно.
В протоколе, соответствующем криптонаборам, описанным в данных рекомендациях, допускается использование следующих пар алгоритмов подписи и хэширования: (gostr34112012_256, gostr34102012_256) и (gostr34112012_512, gostr34102012_512).
Примечание — В рамках протокола, соответствующего криптонаборам, описанным в данных рекомендациях, указание поддерживаемого алгоритма хэширования является избыточным и используется для обеспечения совместимости с форматом расширения signature_algorithms, описанным в [1].
6.3.4.2 Расширение extended_master_secret
Данное расширение всегда посылается клиентом и сервером и сигнализирует о том, что клиент и сервер используют расширенный вариант генерации значения общего секретного значения MS в соответствии с 6.4.7.
Данное расширение пересылается пустым и имеет тип 23.
Примечание — Описание расширения extended_master_secret соответствует [3].
6.3.4.3 Расширение renegotiation_info
Данное расширение всегда посылается клиентом и сервером и связывает каждое новое повторное согласование соединения с предшествующими сообщениями Finished, что препятствует внедрению сообщений противника.
Данное расширение имеет тип 65281. Поле extension_data расширения renegotiation_info, пересылаемого клиентом, содержит структуру RenegotiationInfo, которая задается следующим образом:
| struct { opaque renegotiated_connection<0..255>; } RenegotiationInfo; |
|---|
В случае если сообщения протокола Handshake посылаются впервые, то есть не в рамках ранее созданного соединения, поле renegotiated_connection должно оставаться пустым как в сообщении ClientHello, так и в сообщении ServerHello.
В случае если сообщение приветствия клиента ClientHello передается в рамках ранее созданного соединения, поле renegotiated_connection должно содержать данные client_verify_data, которые пересылались клиентом в поле verify_data сообщения Finished во время выполнения протокола Handshake, в результате которого было создано текущее соединение.
В случае если сообщение приветствия клиента ServerHello было передано в результате повторного согласования соединения, поле renegotiated_connection должно содержать конкатенацию данных client_verify_data и server_verify_data, которые пересылались клиентом и сервером соответственно в поле verify_data сообщения Finished во время выполнения протокола Handshake, в результате которого было создано текущее соединение.
В случае отсутствия корректно сформированного расширения renegotiation_info в сообщениях ClientHello или ServerHello проверяющая данное сообщение сторона должна ответить оповещением об ошибке с уровнем fatal (см. раздел 8).
Примечание — Описание расширения renegotiation_info соответствует [4].
struct { ASN.1Cert certificate_list<0..2^24-1>; } Certificate;
6.4.2 Сообщение запроса сертификата (CertificateRequest)
Данное сообщение посылается сервером в случае взаимной аутентификации.
Сообщение запроса сертификата содержит следующие параметры:
| типы сертификатов (certificate_types) | - настоящие рекомендации определяют два типа сертификатов: gostr34102012_256, gostr34102012_512. Данные типы указывают на то, что сервер принимает сертификаты клиента с ключами проверки подписи, соответствующими алгоритму ГОСТ Р 34.10-2012 с длиной ключа 256 и 512 бит соответственно; |
|---|---|
| поддерживаемые алгоритмы подписи и хэширования (supported_signature_algorithms) | - пары алгоритмов подписи и хэширования, указывающие на то, с помощью каких алгоритмов могут быть подписаны сертификаты из цепочки сертификатов клиента. Ключ проверки подписи, хранящийся в сертификате клиента, должен также соответствовать одному из алгоритмов подписи (не обязательно тому же, которым подписан сертификат), перечисленных в поле supported_signature_algorithms; |
| удостоверяющие центры (certificate_authorities) | - список допустимых удостоверяющих центров (УЦ), представленных в формате кодирования DER. Данный список может задавать допустимые имена для корневых УЦ или для подчиненных УЦ. Если данное поле остается пустым, то клиент может посылать любой сертификат, соответствующий полю certificate_types. |
| struct { ClientCertificateType certificate_types<1..2^8-1>; SignatureAndHashAlgorithm supported_signature_algorithms<2..2^16-2>; DistinguishedName certificate_authorities<0..2^16-1>; } CertificateRequest; |
|---|
Множество типов сертификатов задается следующим образом:
| enum { gostr34102012_256(238), gostr34102012_512(239), (255) } ClientCertificateType; |
|---|
Структура SignatureAndHashAlgorithm задается в 6.3.4.1.
Тип DistinguishedName задается следующим образом:
opaque DistinguishedName<1..2^16-1>;
6.4.3 Сообщение о завершении приветствия (ServerHelloDone)
Данное сообщение посылается сервером и сигнализирует о том, что все сообщения этапа приветствия переданы и сервер переходит в состояние ожидания сообщений от клиента.
Структура данного сообщения выглядит следующим образом:
6.4.4 Сообщение с сертификатом клиента (Certificate)
Данное сообщение посылается клиентом в случае двухсторонней аутентификации, то есть как ответ на сообщение о запросе сертификата со стороны сервера CertificateRequest. Данное сообщение содержит цепочку сертификатов. Сертификат клиента следует первым в данной цепочке и содержит ключ проверки подписи клиента.
Каждый из сертификатов цепочки сертификата клиента должен быть подписан в соответствии с одной из пар алгоритмов из списка CertificateRequest.supported_signature_algorithms.
Ключ проверки подписи в сертификате клиента должен соответствовать алгоритму подписи, указанному в расширении CertificateRequest.certificate_types.
Структура данного сообщения идентична структуре в 6.4.1.
6.4.5 Сообщение с ключом обмена клиента (ClientKeyExchange)
Для формирования сообщения ClientKeyExchange клиент выполняет следующие шаги:
- вырабатывает секретное значение PS, которое выбирается случайно из множества B32;
- выбирает случайное значение kEPH из множества Z_{q}^{*} ;
- формирует эфемерный ключ QEPH = kEPH·P;
- с помощью алгоритма KEG, описанного в 6.4.5.1, формирует ключи экспорта K_{MAC}^{Exp} и K_{ENC}^{Exp} следующим образом
Структура данного сообщения выглядит следующим образом:
| enum { vko_kdf_gost } KeyExchangeAlgorithm; struct { select (KeyExchangeAlgorithm) { case vko_kdf_gost: PSKeyTransport; } exchange_keys; } ClientKeyExchange; |
|---|
Структура PSKeyTransport определяется следующим образом:
Здесь в поле PSExp передается экспортное представление ключа PSExp, а поле ephemeralPublicKey задается структурой SubjectPublicKeyInfo (см. ГОСТ Р ИСО/МЭК 9594-8, раздел 8) и содержит информацию о параметре QEPH.
Получив сообщение ClientKeyExchange, сервер выполняет следующие шаги:
- проверяет выполнение следующих трех условий и в случае невыполнения одного из них прекращает взаимодействие, посылая сообщение об ошибке с уровнем fatal (см. раздел 8):
6.4.5.1 Алгоритм выработки ключей экспорта KEG
Алгоритм выработки ключей экспорта KEG принимает на вход закрытый ключ d, открытый ключ Q и строку h \in B_{32} . Результатом работы данного алгоритма является строка длины 64 байта.
Алгоритм выработки ключей экспорта задается двумя способами в зависимости от длины закрытого ключа.
В случае если длина закрытого ключа d равна 64 байта (512 бит), алгоритм KEG определяется следующим образом
KEG(d,Q,h) = VKO512(d,Q,UKM), (15)
где в качестве функции VKO512 используется алгоритм VKO_GOSTR3410_2012_512, определенный в Р 50.1.113-2016, а параметр UKM определяется следующим образом
В случае если длина закрытого ключа d равна 32 байта (256 бит), алгоритм KEG определяется следующим образом:
KEG(d,Q,h) = KDFTREE256(KEXP,«kdf tree»,seed,1), (17)
где в качестве функции KDFTREE256 используется алгоритм диверсификации KDF_TREE_GOSTR3411_2012_256, определенный в Р 50.1.113-2016, результатом работы которого является строка K(1)|K(2) \in B_{64} , а параметры KEXP и seed задаются следующим образом:
где в качестве функции VKO256 используется алгоритм VKO_GOSTR3410_2012_256, определенный в Р 50.1.113-2016.
6.4.6 Сообщение проверки сертификата (CertificateVerify)
В случае если сервером было послано сообщение запроса сертификата CertificateRequest, клиентом пересылается сообщение проверки сертификата CertificateVerify, которое содержит в себе значение
sgn_{C} = SIGN_{k_{C}}(HM) = str_{l}(r)|str_{l}(s) , (19)
- SIGN_{k_{C}} — алгоритм подписи ГОСТ Р 34.10-2012 на ключе подписи клиента kC, соответствующем ключу проверки подписи QC из сертификата клиента, результатом работы которого являются два числа r и s, определенных в ГОСТ Р 34.10-2012;
- для сертификатов, соответствующих алгоритму подписи gostr34102012_256, l = 32, а для сертификатов, соответствующих алгоритму gostr34102012_512, l = 64.
Примечание — Переменная HM в данном случае является конкатенацией всех сообщений протокола Handshake, начиная с сообщения приветствия ClientHello и заканчивая сообщением CertificateVerify (не включая данное сообщение).
Структура данного сообщения выглядит следующим образом:
| struct { SignatureAndHashAlgorithm algorithm; opaque signature<0..2^16-1>; } CertificateVerify; |
|---|
При этом поле CertificateVerify.signature содержит значение sgnC.
Получив сообщение CertificateVerify, сервер проверяет значение подписи с помощью ключа проверки подписи QC, полученного из сертификата клиента.
6.4.7 Сообщение завершения протокола Handshake (Finished)
Клиент и сервер вырабатывают общее секретное значение MS длины 48 байт:
MS = LMB48(PRF(PMS,«extended master secret»,HASH(HM))). (20)
Примечание — Переменная HM в данном случае является конкатенацией всех сообщений протокола Handshake, начиная с сообщения приветствия ClientHello и заканчивая сообщением Finished со стороны клиента (не включая данное сообщение).
Клиент вырабатывает ключи вычисления кода аутентификации, ключи шифрования и векторы инициализации для каждого из состояний чтения/записи:
Сервер вырабатывает ключи вычисления кода аутентификации, ключи шифрования и векторы инициализации для каждого из состояний чтения/записи:
Сразу после отправки сообщения изменения состояния ChangeCipherSpec клиент посылает сообщение Finished, которое содержит в себе данные client_verify_data, сформированные следующим образом
client_verify_data = = PRF(MS,«client finished»,HASH(HM)). (23)
При получении сообщения Finished, переданного со стороны клиента, сервер посылает свою пару сообщений ChangeCipherSpec и Finished. При этом данные server_verify_data, пересылаемые в сообщении Finished, формируются в соответствии с формулой
server_verify_data = = PRF(MS,«server finished»,HASH(HM)). (24)
Примечание — Переменная HM в данном случае является конкатенацией всех сообщений протокола Handshake, начиная с сообщения приветствия ClientHello и заканчивая сообщением Finished со стороны клиента (не включая данное сообщение) в случае формирования client_verify_data либо сообщением Finished со стороны сервера (не включая данное сообщение) в случае формирования server_verify_data. Таким образом, значение переменной HM при формировании сообщения Finished со стороны клиента будет отличаться от значения переменной HM при формировании сообщения Finished со стороны сервера.
Структура данного сообщения выглядит следующим образом:
| struct { opaque verify_data[verify_data_length]; } Finished; |
|---|
где параметр verify_data_length принимает значение 32.
При получении сообщения Finished клиент и сервер должны проверить корректность данных, пересылаемых в поле verify_data.
7 Протокол Change Cipher Spec
Сообщение протокола Change Cipher Spec, пересылаемое обоими участниками протокола, сигнализирует о том, что с данного момента сторона, пославшая данное сообщение, устанавливает защищенный режим пересылки данных, который соответствует новому состоянию соединения, параметры которого были выработаны в ходе работы протокола Handshake.
Сообщение протокола Change Cipher Spec состоит из одного байта, принимающего значение 1.
| struct { enum { change_cipher_spec(1), (255) } type; } ChangeCipherSpec; |
|---|
8 Протокол Alert
Каждое сообщение протокола Alert содержит информацию о пересылаемом оповещении:
| struct { AlertLevel level; AlertDescription description; } Alert; |
|---|
Поле level (уровень оповещения) задается одним байтом и может принимать значения warning и fatal:
- Оповещения с уровнем warning не требуют немедленного прекращения соединения в общем случае. При получении данного оповещения сторона взаимодействия может принять решение о продолжении работы или о закрытии соединения. В последнем случае она должна послать ответное оповещение с уровнем fatal.
- Оповещения с уровнем fatal должны приводить к немедленному прекращению соединения. В этом случае другие соединения, относящиеся к данной сессии, могут продолжать функционировать, однако идентификатор сессии обязан быть аннулирован (то есть исключен из кэша ранее созданных сессий), чтобы предотвратить возможность создания нового соединения, использующего параметры данной сессии.
| enum { warning(1), fatal(2), (255) } AlertLevel; |
|---|
Поле description (описание оповещения) задается одним байтом, соответствующим определенному типу оповещения, описанному в структуре AlertDescription:
Примечание — В протоколе, соответствующем криптонаборам, описанным в данных рекомендациях, оповещения decryption_failed_RESERVED(21), decompression_failure(30), no_certificate_RESERVED(41) и export_restriction_RESERVED(60), описанные в [1], пересылаться не должны.
Оповещения посылаются сторонами взаимодействия в двух случаях:
- стороны хотят корректно завершить соединение (см. 8.1);
- в процессе выполнения протокола произошла ошибка (см. 8.2).
8.1 Оповещения закрытия соединения
Клиент и сервер должны всегда обмениваться друг с другом информацией о завершении соединения. В случае если в процессе работы протокола TLS не возникло ни одного оповещения с уровнем fatal, при окончании взаимодействия каждая сторона обязана послать сообщение закрытия соединения close_notify, которое предназначено для осуществления корректного завершения соединения.
Инициировать обмен оповещениями закрытия соединения может как клиент, так и сервер. Оповещение закрытия соединения, посланное первой стороной, сигнализирует о том, что его отправитель закрыл соединение для отправки данных и больше не пошлет ни одного сообщения в рамках данного соединения. Вторая сторона при получении оповещения закрытия соединения должна ответить первой стороне своим собственным оповещением закрытия соединения и немедленно закрыть соединение. Первой стороне рекомендуется не дожидаться ответного оповещения закрытия соединения, прежде чем закрыть соединение для чтения данных. Любые данные, полученные после оповещения с типом close_notify, должны игнорироваться.
Рекомендуется присваивать оповещению закрытия соединения close_notify уровень warning.
8.2 Оповещения об ошибках
В случае возникновения ошибки в процессе работы протокола TLS сторона взаимодействия посылает оповещение об ошибке.
Настоящие рекомендации определяют оповещения об ошибке в соответствии с таблицами 8.2.1 - 8.2.3.
Оповещения об ошибке, которые могут возникнуть в процессе работы протокола Handshake
В случае если оповещения bad_certificate, unsupported_certificate, certificate_revoked, certificate_expired, certificate_unknown были посланы с уровнем warning, непосредственно после их получения принимающая сторона должна закрыть соединение с оповещением close_notify либо закрыть соединение с оповещением об ошибке, имеющим уровень fatal.
Оповещения об ошибке, которые могут возникнуть в процессе работы протокола Record
Общие оповещения об ошибке, которые могут возникать в процессе работы протокола TLS 1.2 в соответствии с криптонаборами, описанными в данных рекомендациях
9 Протокол Application Data
Прикладные данные передаются после отправки стороной взаимодействия сообщения Finished. Прикладные данные защищаются в соответствии с текущим состоянием соединения, которое было установлено в результате выполнения протокола Handshake. Сообщения протокола Application Data содержат фрагмент данных, принятых от протокола верхнего уровня, и передаются протоколу Record без дополнительного форматирования.
10 Криптонаборы
Настоящие рекомендации определяют два криптонабора, предназначенных для использования в протоколе TLS 1.2, со следующими приватными номерами:
- TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC, {0xFF, 0x89,};
- TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC, {0xFF, 0x88}.
Указанный порядок следования криптонаборов является рекомендуемым порядком предпочтения для клиентов, поддерживающих работу с обоими криптонаборами.
10.1 Сертификаты сторон
Клиент и сервер, взаимодействующие в соответствии с описанными в настоящем документе криптонаборами, могут поддерживать любой тип сертификатов для любого криптонабора.
10.2 Блочный шифр
Определенные в данных рекомендациях криптонаборы в качестве блочного шифра используют шифр «Магма» или «Кузнечик», определенные в ГОСТ Р 34.12-2015. Длина блока n составляет 16 байт (128 бит) для шифра «Кузнечик» и 8 байт (64 бита) для шифра «Магма», длина ключей k в обоих случаях составляет 32 байта (256 бит).
| Криптонабор | Блочный шифр |
|---|---|
| TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC | ГОСТ Р 34.12-2015, «Магма» |
| TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC | ГОСТ Р 34.12-2015, «Кузнечик» |
10.3 Алгоритм выработки кода аутентификации сообщения
Определенные в данных рекомендациях криптонаборы в качестве функции MAC используют блочный шифр, задающийся в соответствии с 10.2, в режиме выработки имитовставки, определенном в ГОСТ Р 34.13-2015, с длиной имитовставки равной n.
10.4 Алгоритм шифрования сообщений
Определенные в данных рекомендациях криптонаборы в качестве функции ENC используют блочный шифр, задающийся в соответствии с 10.2, в режиме CTR-ACPKM, определенном в Р 1323565.1.017-2018. Длина блока гаммы s, определенная в Р 1323565.1.017-2018, равна n.
Параметры режима шифрования CTR-ACPKM определены в таблице 10.4.1.
| Криптонабор | Размер секции |
|---|---|
| TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC | 1 Кбайт |
| TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC | 4 Кбайт |
10.5 Максимальное количество записей в соединении
Параметр SNMAX задает максимальное количество записей, которые могут передаваться в рамках одного соединения (номер записи seqnum может принимать значения от 0 до SNMAX включительно), и определяется в соответствии с таблицей 10.5.1.
Максимальное количество записей в соединении
| Криптонабор | SNMAX |
|---|---|
| TLS_GOSTR341112_256_WITH_M AGMA_CTR_OMAC | 232 — 1 |
| TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC | 264 — 1 |
10.6 Параметры ключевого дерева
Константы C1, C2, C3, используемые для порождения ключей защиты записей, определяются в соответствии с таблицей 10.6.1.
11 Вопросы безопасности
В целях создания эффективной реализации при использовании алгоритма TLSTREE обращение к функции Diversj, j \in {1,2,3} , должно проводиться только в тех случаях, когда номер записи seqnum достигает такого значения, что seqnum\&C_{j} \neq (seqnum - 1)\&C_{j} , в противном случае необходимо использовать значение, выработанное ранее. Данный подход позволяет также противодействовать атакам по побочным каналам.
КОНТРОЛЬНЫЕ ПРИМЕРЫ РАБОТЫ АЛГОРИТМА TLSTREE
Данное приложение носит справочный характер и не является частью настоящих рекомендаций.
А.1 TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC
| FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF; |
Выработка ключа защиты записи с номером 0:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Выработка ключа защиты записи с номером 4095:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Выработка ключа защиты записи с номером 4096:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 71 | 86 | 93 | EC | D3 | F1 | DC | E2 | 11 | 93 | BD | 56 | 40 | 6A | A4 | E2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 09 | 0F | E1 | C8 | 7A | 5D | 5D | 7A | 8C | E6 | E0 | D8 | 28 | A4 | 39 | 15. |
Выработка ключа защиты записи с номером 33554431:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| CD | 4E | 6F | 09 | 94 | C4 | CA | 17 | A9 | AD | E5 | 3D | 69 | 20 | 49 | 77 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 57 | 87 | 3B | C0 | 8D | 4F | 98 | 06 | E3 | C9 | 99 | A7 | E4 | AE | 70 | E0. |
Выработка ключа защиты записи с номером 33554432:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
| AC | 22 | FD | 64 | 6B | 15 | 94 | 8B | 94 | 52 | EA | 19 | 3F | 40 | 72 | C7 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 72 | CA | 54 | DA | 8E | A2 | F6 | 96 | 92 | 98 | 1F | 7C | 9E | 29 | B8 | B9. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 4E | AB | 0F | 8A | 28 | 2D | E5 | 78 | 85 | 7B | E0 | 15 | D1 | 32 | CD | FD |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 88 | F0 | EB | D9 | 9D | 10 | CC | A3 | B6 | D9 | 11 | 4E | 37 | 56 | 5D | E7. |
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
| 80 | A8 | 35 | D6 | A3 | 8A | CB | 77 | CB | AC | DF | C8 | E8 | E1 | 50 | 97 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C5 | 8F | 24 | 08 | D6 | 08 | B2 | 1B | 39 | CC | 85 | E4 | 1C | 5C | E9 | 5A. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 37 | 06 | B1 | BE | E6 | F3 | BE | DB | 74 | 66 | 4E | 1C | 43 | 40 | B5 | E1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 81 | 5F | FA | 87 | EA | 80 | F4 | 0E | AF | CC | 28 | EF | 30 | DD | F3 | BB. |
Выработка ключа защиты записи с номером 274877906944:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 89 | AB | 52 | 9B | 2F | E3 | DC | 74 | C2 | 78 | 46 | 9F | 15 | 7F | AF | 6B |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A9 | FB | 32 | D4 | B3 | C8 | A1 | 0E | C9 | DE | 68 | E5 | 2A | 25 | 3D | DE. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AA | 4D | 07 | 83 | 68 | C7 | D8 | 85 | 3C | 77 | BC | EF | C2 | B5 | 77 | FE |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| EC | EF | 53 | 79 | FB | 6A | 69 | 22 | 71 | 5F | 6D | 70 | 5F | B9 | 9F | 3D. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 9B | E5 | 7C | B5 | 2F | 46 | B6 | 0C | 68 | 40 | CD | 4E | 95 | 9A | 16 | 8A |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 74 | 82 | 2C | 1D | 00 | 6A | C7 | 46 | DA | BB | B9 | 84 | 8E | B0 | A5 | 8A. |
А.2 TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC
Значения корневого ключа Kroot:
| FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF; |
Выработка ключа защиты записи с номером 0:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Выработка ключа защиты записи с номером 63:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Выработка ключа защиты записи с номером 64:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| C1 | 9B | 63 | 9F | 4B | EA | 78 | 8C | 1C | 59 | B4 | C8 | 87 | DB | 5B | 07 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C1 | 91 | 19 | 10 | 18 | 68 | DA | B8 | 9A | 8D | 93 | 61 | B2 | F0 | 10 | F3. |
Выработка ключа защиты записи с номером 524287:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| AB | 3D | FD | 55 | 68 | 6D | 55 | 97 | 63 | 5C | FE | 08 | 6C | 12 | F0 | 2D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 72 | 2B | A4 | 65 | 9F | 51 | 77 | 34 | F8 | C5 | 84 | B8 | F9 | E9 | 9B. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 92 | 30 | 3E | B5 | 61 | 56 | 88 | 54 | E3 | 3E | 4F | E0 | 97 | A9 | 95 | 99 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 17 | 9F | 5B | 90 | 94 | AE | 34 | 79 | E6 | 1C | 43 | 69 | 3A | 3F | 0A | 06. |
Выработка ключа защиты записи с номером 524288:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | F1 | A2. |
| 1E | C6 | 92 | 34 | D7 | 1F | B8 | 92 | 1A | CF | 26 | C9 | 2F | B8 | 8C | 52 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10 | 57 | 0B | 6B | 21 | 0D | BF | 77 | 4E | 75 | 97 | C1 | D8 | CE | 16 | 0C. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| E8 | 55 | A0 | E2 | CB | DD | 68 | C1 | 13 | 7C | EF | 3E | 80 | 1E | 0B | FF |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 68 | 62 | 8C | 36 | 43 | 68 | 27 | 6D | 0C | B8 | 7E | B5 | 6E | 94 | EF | 42. |
Выработка ключа защиты записи с номером 4294967295:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| 27 | 67 | 9F | FB | FA | 99 | 43 | 54 | 30 | 51 | FD | 5E | A3 | 50 | C7 | F0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | EC | C2 | E7 | 5F | A2 | 11 | 96 | A6 | AE | 12 | C0 | 14 | 83 | Fl | A2. |
| ED | 6A | F8 | 70 | 1B | 59 | A1 | EF | D4 | 5A | 6E | 33 | CF | 80 | B7 | 66 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| D5 | 20 | 7A | 0B | 28 | 80 | CD | 63 | 63 | 4E | 80 | B1 | 83 | F9 | F3 | D4. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 93 | D3 | CA | E9 | 5A | 55 | B7 | 1A | A3 | B9 | A7 | DD | F9 | 9A | 6A | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3F | DA | 17 | 2A | 79 | 60 | 58 | 04 | A9 | C9 | FC | 6E | 84 | 8A | F1 | AA. |
Выработка ключа защиты записи с номером 4294967296:
1. Ключ первого уровня, являющийся результатом работы функции Divers1:
| E2 | BE | DA | BC | 66 | 55 | 9F | 65 | FB | 55 | E5 | 52 | 73 | 56 | 50 | EE |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 71 | 0F | 08 | 81 | A0 | 81 | EF | EA | 6B | 7A | BA | 82 | BD | AF | 8A | 6E. |
2. Ключ второго уровня, являющийся результатом работы функции Divers2:
| 5E | 6A | D9 | 06 | EE | E7 | 85 | F8 | BE | 28 | 6C | C7 | 04 | C2 | 5D | 46 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| D6 | 54 | 9D | 18 | 71 | 9D | 9B | E7 | FE | 79 | D0 | 1D | A4 | 37 | A1 | DB. |
3. Итоговое значение ключа, являющееся результатом работы функции Divers3:
| 7F | FB | 1A | D7 | E5 | 7B | 70 | BE | 10 | 96 | 31 | D2 | 71 | 92 | 98 | B9 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7D | EE | 3B | 00 | 8D | 86 | F8 | 3D | AA | F6 | 2A | 4E | A5 | B7 | AA | FD. |
КОНТРОЛЬНЫЕ ПРИМЕРЫ ДЛЯ РАБОТЫ ПРОТОКОЛА RECORD
Данное приложение носит справочный характер и не является частью настоящих рекомендаций.
Так как процесс обработки данных во время работы протокола Record одинаков для сервера и клиента, все действия описываются для одной фиксированной стороны взаимодействия. Способ фрагментации данных, длина данных и количество записей выбраны из условий удобства и наглядности.
Для наглядности байтовые строки разделяются на подстроки (не более 16 байтов в подстроке) с указанием смещения текущей подстроки относительно начала строки. Смещение указывается слева от подстроки в шестнадцатеричном виде и отделяется от соответствующей подстроки двоеточием.
Б.1 TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC
В настоящем разделе приведен тестовый пример работы протокола Record для криптонабора TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC. Рассматривается случай обработки 4097 сообщений, при этом значения контрольных примеров приводятся для трех из них, демонстрирующих наиболее важные особенности работы протокола.
Предполагается, что в результате выполнения протокола Handshake стороной взаимодействия были выработаны следующие параметры:
| 000000: | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF; |
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00; |
| 000000: | 00 | 00 | 00 | 00. |
|---|
Б.1.1 Формирование защищенной записи с номером 0
Фрагмент данных длины 7 байт, передающийся в рамках протокола Application Data в записи с номером seqnum = 0:
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00. |
|---|
Незащищенная запись Rec0, представленная в виде структуры TLSPlaintext:
| 000000: | 17 | 03 | 03 | 00 | 07 | 00 | 00 | 00 | 00 | 00 | 00 | 00, |
|---|
Ключ K_{MAC}^{0} вычисления имитовставки для записи с номером seqnum = 0, выработанный в результате работы алгоритма TLSTREE:
| 000000: | 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Значение RecMAC для записи с номером seqnum = 0:
| 000000: | 30 | 70 | B8 | 64 | 77 | 9D | 95 | 47. |
|---|
Ключ K_{ENC}^{0} зашифрования для записи с номером seqnum = 0, выработанный в результате работы алгоритма TLSTREE:
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
Вектор инициализации IV0 для записи с номером seqnum = 0:
| 000000: | 00 | 00 | 00 | 00. |
|---|
Зашифрование данных ENCData проводится на одном секционном ключе K1.
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
Защищенная запись PRec0, представленная в виде структуры TLSCiphertext:
| 000000: | 17 | 03 | 03 | 00 | 0F | 1B | B1 | C2 | 20 | BE | 6D | 55 | F4 | 79 | 58 | DD |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 63 | 81 | F3 | D6. |
Б.1.2 Формирование защищенной записи с номером 4095
Фрагмент данных длины 1024 байта (1 Кбайт), передающийся в рамках протокола Application Data в записи с номером seqnum = 4095:
Незащищенная запись Rec4095, представленная в виде структуры TLSPlaintext:
Ключ K_{MAC}^{4095} вычисления имитовставки для записи с номером seqnum = 4095 равен ключу K_{MAC}^{0} :
| 000000: | 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Значение RecMAC для записи с номером seqnum = 4095:
| 000000: | ED | EE | A5 | 8C | E6 | 28 | B7 | 7C. |
|---|
Ключ K_{ENC}^{4095} зашифрования для записи с номером seqnum = 4095 равен ключу K_{ENC}^{0} :
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
Вектор инициализации IV4095 для записи с номером seqnum = 4095:
| 000000: | 00 | 00 | 0F | FF. |
|---|
Данные ENCData разбиваются на две секции, зашифрование проводится на двух секционных ключах K1 и K2.
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
| 000000: | 44 | 90 | 5F | EF | 56 | 6A | 28 | 2A | B0 | 71 | A6 | C4 | FB | 54 | 84 | 06 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 10 | 43 | 10 | 22 | A0 | 5C | 76 | 47 | 32 | 1A | 15 | 4E | 3E | 2F | 03 | 67. |
Защищенная запись PRec4095, представленная в виде структуры TLSCiphertext:
Б.1.3 Формирование защищенной записи с номером 4096
Фрагмент данных длины 2048 байт (2 Кбайта), передающийся в рамках протокола Application Data в записи с номером seqnum = 4096:
Незащищенная запись Rec4096, представленная в виде структуры TLSPlaintext:
Ключ K_{MAC}^{4096} вычисления имитовставки для записи с номером seqnum = 4096, выработанный в результате работы алгоритма TLSTREE:
| 000000: | 71 | 86 | 93 | EC | D3 | F1 | DC | E2 | 11 | 93 | BD | 56 | 40 | 6A | A4 | E2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 09 | 0F | E1 | C8 | 7A | 5D | 5D | 7A | 8C | E6 | E0 | D8 | 28 | A4 | 39 | 15. |
Значение RecMAC для записи с номером seqnum = 4096:
| 000000: | 9E | 76 | D1 | 8E | 75 | A5 | DB | 32. |
|---|
Ключ K_{ENC}^{4096} зашифрования для записи с номером seqnum = 4096, выработанный в результате работы алгоритма TLSTREE:
| 000000: | 60 | BA | 8C | DF | 9C | 67 | 0A | D0 | 5C | 5B | E3 | B5 | E0 | 04 | B7 | 37 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 13 | 9F | 1A | A9 | 05 | 92 | 8A | 02 | 8F | 6C | C4 | B0 | 95 | 49 | CC | A4. |
Вектор инициализации IV4096 для записи с номером seqnum = 4096:
| 000000: | 00 | 00 | 10 | 00. |
|---|
Данные ENCData разбиваются на три секции, зашифрование проводится на трех секционных ключах K1, K2 и K3.
| 000000: | 60 | BA | 8C | DF | 9C | 67 | 0A | D0 | 5C | 5B | E3 | B5 | E0 | 04 | B7 | 37 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 13 | 9F | 1A | A9 | 05 | 92 | 8A | 02 | 8F | 6C | C4 | B0 | 95 | 49 | CC | A4. |
| 000000: | 08 | B0 | 0A | BB | 92 | 9E | D2 | EE | 8F | 73 | 3B | 95 | DF | 1B | D4 | F5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 84 | 24 | A1 | 8A | 37 | 53 | 0C | BB | 34 | E7 | F7 | AF | 50 | 09 | 9B | 51. |
| 000000: | 74 | E2 | E2 | A9 | C3 | 3A | 22 | D2 | 20 | 43 | F8 | 33 | 0A | 46 | DC | A7 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 54 | 0D | D0 | 6E | EC | 1E | 3B | 0B | 06 | B8 | D3 | E2 | EE | 4A | 22 | 95. |
Защищенная запись PRec4096, представленная в виде структуры TLSCiphertext:
Б.2 TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC
В настоящем разделе приведен тестовый пример работы протокола Record для криптонабора TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC. Рассматривается случай обработки 65 сообщений, при этом значения контрольных примеров приводятся для трех из них, демонстрирующих наиболее важные особенности работы протокола.
Предполагается, что в результате выполнения протокола Handshake стороной взаимодействия были выработаны следующие параметры:
| 000000: | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF | FF; |
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00; |
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00. |
|---|
Б.2.1 Формирование защищенной записи с номером 0
Фрагмент данных длины 15 байт, передающийся в рамках протокола Application Data в записи с номером seqnum = 0:
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00. |
|---|
Незащищенная запись Rec0, представленная в виде структуры TLSPlaintext:
| 000000: | 17 | 03 | 03 | 00 | 0F | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 00 | 00 | 00 | 00. |
Ключ K_{MAC}^{0} вычисления имитовставки для записи с номером seqnum = 0, выработанный в результате работы алгоритма TLSTREE:
| 000000: | 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Значение RecMAC для записи с номером seqnum = 0:
| 000000: | 75 | 53 | 09 | CB | C7 | 3B | B9 | 49 | C5 | 0E | BB | 86 | 16 | 0A | 0F | EE. |
|---|
Ключ K_{ENC}^{0} зашифрования для записи с номером seqnum = 0, выработанный в результате работы алгоритма TLSTREE:
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
Вектор инициализации IV0 для записи с номером seqnum = 0:
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00. |
|---|
Зашифрование данных ENCData проводится на одном секционном ключе K1.
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
Защищенная запись PRec0, представленная в виде структуры TLSCiphertext:
| 000000: | 17 | 03 | 03 | 00 | 1F | F3 | 17 | A7 | 1D | 3A | CE | 43 | 3B | 01 | D4 | E7 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | D4 | EF | 61 | AE | 00 | D5 | 3B | 41 | 52 | 7A | 26 | 1E | DF | C2 | BA | 78 |
| 000020: | 57 | C1 | 93 | 2D. |
Б.2.2 Формирование защищенной записи с номером 63
Фрагмент данных длины 4096 байт (4 Кбайта), передающийся в рамках протокола Application Data в записи с номером seqnum = 63:
Незащищенная запись Rec63, представленная в виде структуры TLSPlaintext:
Ключ K_{MAC}^{63} вычисления имитовставки для записи с номером seqnum = 63 равен ключу K_{MAC}^{0} :
| 000000: | 50 | 76 | 42 | D9 | 58 | C5 | 20 | C6 | D7 | EE | F5 | CA | 8A | 53 | 16 | D4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | F3 | 4B | 85 | 5D | 2D | D4 | BC | BF | 4E | 5B | F0 | FF | 64 | 1A | 19 | FF. |
Значение RecMAC для записи с номером seqnum = 63:
| 000000: | 0A | 3B | FD | 43 | 0F | CD | D8 | D8 | 5C | 96 | 46 | 86 | 81 | 78 | 4F | 7D. |
|---|
Ключ K_{ENC}^{63} зашифрования для записи с номером seqnum = 63 равен ключу K_{ENC}^{0} :
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
Вектор инициализации IV63 для записи с номером seqnum = 63:
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 3F. |
|---|
Данные ENCData разбиваются на две секции, зашифрование проводится на двух секционных ключах K1 и K2.
| 000000: | F7 | 97 | 25 | 68 | 45 | F3 | 6C | F0 | 75 | 60 | 34 | 45 | CD | 32 | 2B | AC |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C3 | 83 | 40 | 32 | BC | 42 | 5E | 4D | 3C | 84 | 95 | 23 | 6F | 7B | 6C | AF. |
| 000000: | 3E | E3 | 23 | 10 | 86 | B9 | 3E | 86 | 69 | 3B | 6A | 08 | 25 | ED | 68 | 4B |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 2B | CC | D2 | 89 | E4 | E7 | 6C | 7D | 4D | B8 | 89 | AA | E2 | DA | DC | DD. |
Защищенная запись PRec63, представленная в виде структуры TLSCiphertext:
Б.2.3 Формирование защищенной записи с номером 64
Фрагмент данных длины 8192 байта (8 Кбайт), передающийся в рамках протокола Application Data в записи с номером seqnum = 64:
Незащищенная запись Rec64, представленная в виде структуры TLSPlaintext:
Ключ K_{MAC}^{64} вычисления имитовставки для записи с номером seqnum = 64, выработанный в результате работы алгоритма TLSTREE:
| 000000: | C1 | 9B | 63 | 9F | 4B | EA | 78 | 8C | 1C | 59 | B4 | C8 | 87 | DB | 5B | 07 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | C1 | 91 | 19 | 10 | 18 | 68 | DA | B8 | 9A | 8D | 93 | 61 | B2 | F0 | 10 | F3. |
Значение RecMAC для записи с номером seqnum = 64:
| 000000: | 47 | 25 | A2 | 3C | 64 | 3C | CA | E1 | 28 | 28 | FE | DC | 0D | 65 | EB | B3. |
|---|
Ключ K_{ENC}^{64} зашифрования для записи с номером seqnum = 64, выработанный в результате работы алгоритма TLSTREE:
| 000010: | F3 | C9 | BA | 5C | 5D | 43 | AA | 38 | 8B | 9F | 9A | 8C | 98 | 05 | 23 | 9D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 16 | 23 | 08 | C8 | 85 | CB | 2D | 1C | 9A | 76 | 13 | 83 | 2F | 96 | 70 | 00. |
Вектор инициализации IV64 для записи с номером seqnum = 64:
| 000000: | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 40. |
|---|
Данные ENCData разбиваются на три секции, зашифрование проводится на трех секционных ключах K1, K2 и K3.
| 000000: | F3 | C9 | BA | 5C | 5D | 43 | AA | 38 | 8B | 9F | 9A | 8C | 98 | 05 | 23 | 9D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 16 | 23 | 08 | C8 | 85 | CB | 2D | 1C | 9A | 76 | 13 | 83 | 2F | 96 | 70 | 00. |
| 000000: | F8 | 40 | F3 | 80 | A0 | 7B | B6 | 2D | EC | 02 | 5F | 9A | 07 | 46 | AF | 68 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | EC | 19 | 23 | 75 | 3F | F6 | 16 | 24 | D5 | 84 | A5 | 53 | DD | 76 | FB | 78. |
| 000000: | A9 | 3D | 06 | 1E | 9B | 9E | 0C | 88 | 02 | 2E | E4 | A3 | 8B | FD | 4B | 37 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 000010: | 81 | 20 | 18 | B2 | 8A | 3E | 99 | DE | 96 | FD | 71 | 4D | 55 | 18 | A5 | BC. |
Защищенная запись PRec64, представленная в виде структуры TLSCiphertext:
Данное приложение носит справочный характер и не является частью настоящих рекомендаций.
Для наглядности данные, которыми оперируют клиент и сервер, представлены слева и справа от вертикальной черты соответственно. При этом обозначения «------->» и «<-------» используются для указания на данные, пересылаемые по каналу связи клиентом и сервером соответственно.
В.1 TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC
В настоящем разделе приведен тестовый пример сценария работы протокола TLS 1.2 для криптонабора TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC, при котором используется полная схема работы протокола Handshake с односторонней аутентификацией. Открытый и закрытый ключи сервера задаются следующим образом.
Идентификатор кривой сертификата сервера:
id-tc26-gost-3410-2012-256-paramSetA, «1.2.643.7.1.2.1.1.1».
x = 0xC03ED6E3604CCB026E56E91272454707 94E0508A1FE1602371F443DC20E313FD; y = 0x994D579491A2DBB720E78E0AFAC8479C 8D1A852989A46D4969C799E39A1025EC.
0x0880FD1E94C7656CA143A310553A04B5 5583E16ABF56D91336AB271B7396E0E4.
Предполагается, что соединение устанавливается впервые. Для удобства в рамках каждой записи передается только одно сообщение.
В.2 TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC
В настоящем разделе приведен тестовый пример сценария работы протокола TLS 1.2 для криптонабора TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC, при котором используется полная схема работы протокола Handshake с двусторонней аутентификацией. Открытый и закрытый ключ сервера задаются следующим образом.
Идентификатор кривой сертификата сервера:
id-tc26-gost-3410-2012-512-paramSetC, «1.2.643.7.1.2.1.2.3».
x = 0xF14589DA479AD972C66563669B3FF580 92E6A30A288BF447CD9FF6C3133E9724 7A9706B267703C9B4E239F0D7C7E3310 C22D2752B35BD2E4FD39B8F11DEB833A; y = 0xF305E95B36502D4E60A1059FB20AB30B FC7C95727F3A2C04B1DFDDB53B0413F2 99F2DFE66A5E1CCB4101A7A01D612BE6 BD78E1E3B3D567EBB16ABE587A11F4EA.
0x12FD7A70067479A0F66C59F9A25534AD FBC7ABFD3CC72D79806F8B402601644B 3005ED365A2D8989A8CCAE640D5FC08D D27DFBBFE137CF528E1AC6D445192E01.
Ключ проверки подписи и ключ подписи клиента задаются следующим образом.
Идентификатор кривой сертификата клиента:
id-tc26-gost-3410-2012-256-paramSetA, «1.2.643.7.1.2.1.1.1».
Ключ проверки подписи клиента QC:
x = 0x0F5DB18A9E15F324B778676025BFD7B5 DF066566EABAA1C51CD879F87B0B4975; y = 0x9EE5BBF18361F842D3F087DEC2943939 E0FA2BFB4EDEC25A8D10ABB22C48F386.
0x0918AD3F7D209ABF89F1E8505DA894CE E10DA09D32E72E815D9C0ADA30B5A103.
Предполагается, что соединение устанавливается впервые. Для удобства в рамках каждой записи передается только одно сообщение.

















(11)
(12)
(13)
(14)
. (16)
(21)
(22)