Здесь и далее названия полей сообщений выделяют прямым полужирным шрифтом. При указании конкретного значения поля используют курсив.
Для записи чисел используется сетевой порядок байтов (Big-endian).
Перечень полей CRISP-сообщения приведен в таблице 1.
Таблица 1
Признак необходимости внешней информации для однозначного определения базового ключа для обработки входящего CRISP-сообщения. Длина поля - 1 бит.
ExternalKeyIdFlag = 0 означает, что базовый ключ для обработки входящего CRISP-сообщения однозначно определяется значением KeyId. ExternalKeyIdFlag = 1 означает, что для однозначного определения базового ключа для обработки входящего CRISP-сообщения требуется дополнительная информация.
Версия протокола CRISP. Беззнаковое целое число. Длина поля - 15 бит.
Текущий документ описывает протокол CRISP, для которого Version = 0.
Идентификатор криптографического набора. Беззнаковое целое число. Длина поля - 8 бит.
Идентификатор определяет криптографический набор, используемый для создания CRISP-сообщения или восстановления исходного сообщения из CRISP-сообщения. Всего может использоваться не более 256 различных криптонаборов, исходя из 8-битной длины поля CS CRISP-сообщения.
Список механизмов и параметров, определяемых и/или описываемых в криптографическом наборе, приведен в таблице 2.
Таблица 2
Идентификатор ключа. Двоичная строка.
KeyId = 100000002 означает, что поле KeyId не используется. В остальных случаях:
- если MSB1(KeyId) = 0, то длина поля KeyId составляет 1 байт и оставшиеся 7 бит содержат значение идентификатора ключа;
- если MSB1(KeyId) = 1, то оставшиеся 7 бит первого байта интерпретируются как беззнаковое целое число и определяют количество дополнительных байтов (от 1 до 127). Дополнительные байты содержат значение идентификатора ключа.
Порядковый номер сообщения. Беззнаковое целое число. Длина поля - 48 бит.
Используется также для формирования синхропосылки алгоритма шифрования.
Исходное сообщение или зашифрованное исходное сообщение. Поле переменной длины.
Применение шифрования при обработке сообщения определяется использованным криптографическим набором (значением поля CS).
Имитовставка. Двоичная строка. Длина поля определяется использованным криптографическим набором (значением поля CS). Для конкретного значения CS длина поля ICV может принимать только одно фиксированное значение.
Поле содержит значение имитовставки, рассчитанной для полей 1 - 6 CRISP-сообщения.
Максимальный размер CRISP-сообщения (суммарная длина всех полей CRISP-сообщения) - 2048 байт.
Предполагается следующее:
- отправитель и получатель имеют общий базовый ключ;
- с каждым базовым ключом ассоциирован идентификатор ключа, который может быть использован при определении базового ключа для обработки CRISP-сообщения;
- с каждым базовым ключом ассоциировано множество отправителей. Каждый из них обладает идентификатором отправителя SourceIdentifier, который может быть как внешней по отношению к KeyId информацией, так и частью KeyId. Идентификатор однозначно определяет отправителя для каждого базового ключа, т.е. у разных отправителей, имеющих общий базовый ключ, SourceIdentifier различны;
- отправитель и получатель имеют общие криптографические наборы;
- задача определения базового ключа обработки сообщения отправителем и получателем находится за рамками протокола CRISP;
- для каждого отправителя и получателя настроен размер окна принятых сообщений.
Примечания
1 Способ установки на отправителе и получателе общего базового ключа, его идентификатора, криптографических наборов и SourceIdentifier находится за рамками протокола CRISP.
2 Под определением базового ключа для обработки сообщения отправителем или получателем понимается поиск нужного ключа среди установленных на отправителе или получателе на основании KeyId и, при необходимости, дополнительной информации, например SourceIdentifier.
3 Размер идентификатора отправителя SourceIdentifier должен быть в пределах от 4 до 32 байт.
4 Размер окна принятых сообщений Size должен быть в пределах от 1 до 256 (включительно) сообщений.
Перед первым использованием конкретного базового ключа с целью защиты сообщений отправитель устанавливает начальное значение (инициализирует) SeqNum. Инициализация SeqNum может потребоваться также для восстановления после сбоев в нумерации сообщений.
Настоящий стандарт не специфицирует конкретный алгоритм инициализации SeqNum. При этом алгоритм инициализации совместно с правилом формирования порядкового номера исходящих сообщений должны обеспечивать нахождение значения SeqNum в диапазоне от 0 до 248 - 1 (включительно) и строгое возрастание значения SeqNum для каждого сообщения, создаваемого одним отправителем с использованием одного базового ключа.
Перед первым использованием конкретного базового ключа для каждого ассоциированного с ним отправителя с целью восстановления сообщений получатель устанавливает максимальный и минимальный номера окна принятых сообщений равными 0.
Предполагается, что определен базовый ключ, его идентификатор и криптонабор для формирования CRISP-сообщения данному получателю.
Для создания CRISP-сообщения выполняется такая последовательность действий:
- формируется порядковый номер сообщения SeqNum - текущее значение SeqNum увеличивается на 1;
- из базового ключа вырабатываются ключи шифрования (в случае, если криптографическим набором предусмотрено шифрование) и вычисления имитовставки;
- формируются поля заголовка CRISP-сообщения - поля 1 - 5 таблицы 1;
- если криптографическим набором предусмотрено шифрование, то зашифровывается исходное сообщение;
- вычисляется значение имитовставки ICV от содержимого полей 1 - 6 таблицы 1, т.е. для заголовка CRISP-сообщения и исходного сообщения (в случае, если криптографическим набором не предусмотрено шифрование) или заголовка CRISP-сообщения и зашифрованного сообщения (в случае, если криптографическим набором предусмотрено шифрование).
Для восстановления исходного сообщения из CRISP-сообщения выполняется такая последовательность действий:
а) если версия протокола CRISP Version или идентификатор криптографического набора CS, указанные в заголовке, не поддерживаются получателем, то обработка CRISP-сообщения прекращается;
б) согласно значению KeyId и в случае ExternalKeyIdFlag = 1 дополнительной информации определяется базовый ключ, устанавливается отправитель и выбирается окно принятых сообщений от данного отправителя;
в) проверяется допустимость значения SeqNum входящего CRISP-сообщения:
1) если значение SeqNum входящего CRISP-сообщения меньше минимального номера окна принятых сообщений, то обработка CRISP-сообщения прекращается;
2) если значение SeqNum входящего CRISP-сообщения принадлежит окну принятых сообщений и данный порядковый номер CRISP-сообщения помечен как принятый в окне принятых сообщений, то обработка CRISP-сообщения прекращается;
3) в остальных случаях значение SeqNum входящего CRISP-сообщения является допустимым и осуществляется переход к следующему шагу;
г) из базового ключа вырабатываются ключи шифрования (если криптографическим набором предусмотрено шифрование) и вычисления имитовставки;
д) выполняется контроль целостности CRISP-сообщения путем проверки имитовставки:
1) если имитовставка, рассчитанная для полей 1 - 6 принятого CRISP-сообщения, неверна (не совпадает со значением поля ICV), то обработка CRISP-сообщения прекращается;
2) если имитовставка верна (совпадает со значением поля ICV), то осуществляется переход к следующему шагу;
е) обновляется окно принятых сообщений:
1) если значение SeqNum входящего CRISP-сообщения принадлежит окну принятых сообщений, то порядковый номер SeqNum помечается в окне принятых сообщений как принятый;
2) если значение SeqNum входящего CRISP-сообщения больше максимального номера окна принятых сообщений, то новым максимальным номером окна принятых сообщений становится значение SeqNum, порядковый номер SeqNum помечается в окне принятых сообщений как принятый, а новым минимальным номером окна принятых сообщений становится значение SeqNum - Size + 1 или 0, если значение SeqNum - Size + 1 меньше 0;
ж) извлекается исходное сообщение из поля PayloadData и, если криптографическим набором предусмотрено шифрование, то выполняется его расшифрование.
8.1.1 Описание криптографического набора MAGMA-CTR-CMAC
Значение идентификатора данного криптонабора: CS = 1.
Описание криптографического набора MAGMA-CTR-CMAC приведено в таблице 3.
Таблица 3
8.1.2 Алгоритм шифрования
Для шифрования данных используется блочный шифр "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме гаммирования согласно ГОСТ Р 34.13-2015 (пункт 5.2). В качестве ключа используется ключ шифрования сообщения KENC. Значение входного параметра режима гаммирования s = 64. В качестве синхропосылки используется значение, определенное в 8.1.4. Дополнение сообщений для режима гаммирования не предусмотрено.
8.1.3 Алгоритм выработки имитовставки
Для вычисления имитовставки ICV, содержащейся в поле ICV CRISP-сообщения, используется блочный шифр "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6). В качестве ключа используется ключ вычисления имитовставки KMAC. Значение входного параметра режима выработки имитовставки s = 32. Криптографическое дополнение данных для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для формирования из 48-битного порядкового номера сообщения SeqNum, содержащегося в поле SeqNum CRISP-сообщения, 32-битной синхропосылки IV используются 32 младших бита SeqNum:
IV = LSB32(byte(SeqNum, 6)).
Для выработки ключей шифрования сообщения и вычисления имитовставки используется функция
CMAC(Key, Data),
которая реализуется с помощью блочного шифра "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6) для данных Data на ключе Key. Значение входного параметра режима выработки имитовставки s = 64. Криптографическое дополнение для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для выработки ключа шифрования сообщения и ключа вычисления имитовставки используется следующий алгоритм:
KMAC = K1||K2||K3||K4;
KENC = K5||K6||K7||K8.
Для каждого числа i = 1, ..., 8 вычисляются 64-битные величины:
Ki = CMAC(Key,byte(i, 1)||Label||aL||SN||Node||byte(CS,1)||cL||oL),
где:
- Key - инициализируется базовым ключом K;
- Label = binary('macenc', 6);
- aL = byte(6, 1);
- SN = 05||MSB35(byte(SeqNum, 6)), где SeqNum инициализируется значением SeqNum CRISP-сообщения;
- Node = SourceIdentifier, где SourceIdentifier инициализируется значением идентификатора отправителя;
- CS - инициализируется значением CS CRISP-сообщения;
- cL = byte(ContextLength, 2), где ContextLength - сумма длин (в байтах) значений SN, Node и CS;
- OutputLength = 512, где OutputLength - необходимая битовая длина вырабатываемого ключевого материала;
- oL = byte(OutputLength, 2).
8.2.1 Описание криптографического набора MAGMA-NULL-CMAC
Значение идентификатора данного криптонабора: CS = 2.
Описание криптографического набора MAGMA-NULL-CMAC приведено в таблице 4.
Таблица 4
8.2.2 Алгоритм выработки имитовставки
Для вычисления имитовставки ICV, содержащейся в поле ICV CRISP-сообщения, используется блочный шифр "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6). В качестве ключа используется ключ вычисления имитовставки KMAC. Значение входного параметра режима выработки имитовставки s = 32. Криптографическое дополнение данных для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для выработки ключа вычисления имитовставки используется функция
CMAC(Key,Data),
которая реализуется с помощью блочного шифра "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6) для данных Data на ключе Key. Значение входного параметра режима выработки имитовставки s = 64. Криптографическое дополнение для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для выработки ключа вычисления имитовставки используется следующий алгоритм:
KMAC = K1||K2||K3||K4.
Для каждого числа i = 1, ..., 4 вычисляются 64-битные величины:
Ki = CMAC(Key,byte(i,1)||Label||aL||SN||Node||byte(CS,1)||cL||oL),
где:
- Key - инициализируется базовым ключом K;
- Label = binary('macmac', 6);
- aL = byte(6,1);
- SN = 05||MSB35(byte(SeqNum, 6)), где SeqNum инициализируется значением SeqNum CRISP-сообщения;
- Node = SourceIdentifier, где SourceIdentifier инициализируется значением идентификатора отправителя;
- CS - инициализируется значением CS CRISP-сообщения;
- cL = byte(ContextLength, 2), где ContextLength - сумма длин (в байтах) значений SN, Node и CS;
- OutputLength = 256, где OutputLength - необходимая битовая длина вырабатываемого ключевого материала;
- oL = byte(OutputLength, 2).
8.3.1 Описание криптографического набора MAGMA-CTR-CMAC8
Значение идентификатора данного криптонабора: CS = 3.
Описание криптографического набора MAGMA-CTR-CMAC8 приведено в таблице 5.
Таблица 5
8.3.2 Алгоритм шифрования
Для шифрования данных используется блочный шифр "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме гаммирования согласно ГОСТ Р 34.13-2015 (пункт 5.2). В качестве ключа используется ключ шифрования сообщения KENC. Значение входного параметра режима гаммирования s = 64. В качестве синхропосылки используется значение, определенное в 8.3.4. Дополнение сообщений для режима гаммирования не предусмотрено.
8.3.3 Алгоритм выработки имитовставки
Для вычисления имитовставки ICV, содержащейся в поле ICV CRISP-сообщения, используется блочный шифр "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6). В качестве ключа используется ключ вычисления имитовставки KMAC. Значение входного параметра режима выработки имитовставки s = 64. Криптографическое дополнение данных для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для формирования из 48-битного порядкового номера сообщения SeqNum, содержащегося в поле SeqNum CRISP-сообщения, 32-битной синхропосылки IV используются 32 младших бита SeqNum
IV = LSB32(byte(SeqNum, 6)).
Для выработки ключей шифрования сообщения и вычисления имитовставки используется функция
CMAC(Key,Data),
которая реализуется с помощью блочного шифра "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6) для данных Data на ключе Key. Значение входного параметра режима выработки имитовставки s = 64. Криптографическое дополнение для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для выработки ключа шифрования сообщения и ключа вычисления имитовставки используется следующий алгоритм:
KMAC = K1||K2||K3||K4;
KENC = K5||K6||K7||K8.
Для каждого числа i = 1, ..., 8 вычисляются 64-битные величины:
Ki = CMAC(Key,byte(i,1)||Label||aL||SN||Node||byte(CS,1)||cL||oL),
где:
- Key - инициализируется базовым ключом K;
- Label = binary('macenc', 6);
- aL = byte(6, 1);
- SN = 05||MSB35(byte(SecNum, 6)), где SeqNum инициализируется значением SeqNum CRISP-сообщения;
- Node = SourceIdentifier, где SourceIdentifier инициализируется значением идентификатора отправителя;
- CS - инициализируется значением CS CRISP-сообщения;
- cL = byte(ContextLength, 2), где ContextLength - сумма длин (в байтах) значений SN, Node и CS;
- OutputLength = 512, где OutputLength - необходимая битовая длина вырабатываемого ключевого материала;
- oL = byte(OutputLength, 2).
8.4.1 Описание криптографического набора MAGMA-NULL-CMAC8
Значение идентификатора данного криптонабора: CS = 4.
Описание криптографического набора MAGMA-NULL-CMAC8 приведено в таблице 6.
Таблица 6
8.4.2 Алгоритм выработки имитовставки
Для вычисления имитовставки ICV, содержащейся в поле ICV CRISP-сообщения, используется блочный шифр "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6). В качестве ключа используется ключ вычисления имитовставки KMAC. Значение входного параметра режима выработки имитовставки s = 64. Криптографическое дополнение данных для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для выработки ключа вычисления имитовставки используется функция
CMAC(Key,Data),
которая реализуется с помощью блочного шифра "Магма" согласно ГОСТ Р 34.12-2015 (раздел 5) в режиме выработки имитовставки согласно ГОСТ Р 34.13-2015 (пункт 5.6) для данных Data на ключе Key. Значение входного параметра режима выработки имитовставки s = 64. Криптографическое дополнение для режима выработки имитовставки выполняется согласно ГОСТ Р 34.13-2015 (пункт 4.1).
Для выработки ключа вычисления имитовставки используется следующий алгоритм
KMAC = K1||K2||K3||K4.
Для каждого числа i = 1, ..., 4 вычисляются 64-битные величины:
Ki = CMAC(Key,byte(i,1)||Label||aL||SN||Node||byte(CS,1)||cL||oL),
где:
- Key - инициализируется базовым ключом K;
- Label = binary('macmac', 6);
- aL = byte(6, 1);
- SN = 05||MSB35(byte(SeqNum, 6)), где SeqNum инициализируется значением SeqNum CRISP-сообщения;
- Node = SourceIdentifier, где SourceIdentifier инициализируется значением идентификатора отправителя;
- CS - инициализируется значением CS CRISP-сообщения;
- cL = byte(ContextLength, 2), где ContextLength - сумма длин (в байтах) значений SN, Node и CS;
- OutputLength = 256, где OutputLength - необходимая битовая длина вырабатываемого ключевого материала;
- oL = byte(OutputLength, 2).
(справочное)
Приводимые ниже значения SourceIdentifier, KeyId, SeqNum и базового ключа K рекомендуется использовать только для проверки корректной работы конкретной реализации алгоритмов, описанных в настоящем стандарте.
Все числовые значения приведены в шестнадцатеричной системе счисления.
В данном приложении двоичные строки из V*, длина которых кратна 4, записываются в шестнадцатеричном виде, а символ конкатенации опускается. То есть строка
, i = 0, 1, ..., r - 1. Соответствие между двоичными строками длины 4 и шестнадцатеричными строками длины 1 задается естественным образом (таблица А.1).Таблица А.1
Преобразование, ставящее в соответствие двоичной строке длины 4r шестнадцатеричную строку длины r, и соответствующее обратное преобразование для простоты записи опускается.
Примечание - Символ "\\" обозначает перенос числа на новую строку.
А.1 Набор MAGMA-CTR-CMAC: CS = 1
Для формирования сообщения используются следующие значения:
ExternalKeyIdFlag = 1
Version = 0
CS = 0116
KeyId = 3016
SeqNum = 0b76e673600116
SourceIdentifier = 30323035313830303030303116
![]() Исходное сообщение:
![]() На основе исходных данных получаются следующие значения ключа вычисления имитовставки KMAC, ключа шифрования KENC, зашифрованного сообщения и имитовставки ICV:
![]() ICV = 887f0a3216
Зашифрованное сообщение:
d324643aefd97b93b18d343a2fba477e\\
c704cd8d14ac1cf74ceb25577af8fc2c\\
25fa9050a116
Итоговое сообщение будет иметь следующий вид:
800001300b76e6736001\\
d324643aefd97b93b18d343a2fba477e\\
c704cd8d14ac1cf74ceb25577af8fc2c\\
25fa9050a1\\
887f0a3216
А.2 Набор MAGMA-NULL-CMAC: CS = 2
Для формирования сообщения используются следующие значения:
ExternalKeyIdFlag = 1
Version = 0
CS = 0216
KeyId = 3016
SeqNum = 0b76e66ea00116
SourceIdentifier = 30323035313830303030303116
K = 56509427153249653498524659324653\\
0453294534659384507324957635129016
Исходное сообщение:
![]() На основе исходных данных получаются следующие значения ключа вычисления имитовставки KMAC и имитовставки ICV:
KMAC = c3e3780f87f2caf539fdad56d9cb0340\\
b1052c0ae8272ddc9601c921f81a7ca516
ICV = b97ade9416
Итоговое сообщение будет иметь следующий вид:
800002300b76e66ea001\\
48692120546869732069732074657374\\
20666f72204352495350206d65737361\\
6765730a03\\
b97ade9416
А.3 Набор MAGMA-CTR-CMAC8: CS = 3
Для формирования CRISP-сообщения используются следующие значения:
ExternalKeyIdFlag = 1
Version = 0
CS = 0316
KeyId = 3016
SeqNum = 0b76e673600116
SourceIdentifier = 30323035313830303030303116
![]() Исходное сообщение:
![]() На основе исходных данных получаются следующие значения ключа вычисления имитовставки KMAC, ключа шифрования KENC, зашифрованного сообщения и имитовставки ICV:
![]() ICV = edf339a0dbc0b5b716
Зашифрованное сообщение:
9def18d705afde4e00edb132a8b8d480\\
18ffe760fdd34cecd6461c3553c3087c\\
d0756f156916
Итоговое сообщение будет иметь следующий вид:
800003300b76e6736001\\
9def18d705afde4e00edb132a8b8d480\\
18ffe760fdd34cecd6461c3553c3087c\\
d0756f1569\\
edf339a0dbc0b5b716
А.4 Набор MAGMA-NULL-CMAC8: CS = 4
Для формирования сообщения используются следующие значения:
ExternalKeyIdFlag = 1
Version = 0
CS = 0416
KeyId = 3016
SeqNum = 0b76e66ea00116
SourceIdentifier = 30323035313830303030303116
![]() Исходное сообщение:
![]() На основе исходных данных получаются следующие значения ключа вычисления имитовставки KMAC и имитовставки ICV:
![]() ICV = f23152388e61582516
Итоговое сообщение будет иметь следующий вид:
800004300b76e66ea001\\
48692120546869732069732074657374\\
20666f72204352495350206d65737361\\
6765730a03\\
f23152388e61582516
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/18/gost_36317.html
На правах рекламы:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||