Межгосударственный стандарт ГОСТ 34.12-2018 "Информационная технология. Криптографическая защита информации. Блочные шифры" (введен в действие приказом Федерального агентства по техническому регулированию и метрологии от 4 декабря 2018 г. N 1061-ст)

 

Information technology. Cryptographic data security. Block ciphers

 

МКС 35.040

 

Дата введения - 1 июня 2019 г.
Взамен ГОСТ 28147-89 в части раздела 1

 

Предисловие

 

Цели, основные принципы и основной порядок проведения работ по межгосударственной стандартизации установлены в ГОСТ 1.0-2015 "Межгосударственная система стандартизации. Основные положения" и ГОСТ 1.2-2015 "Межгосударственная система стандартизации. Стандарты межгосударственные, правила и рекомендации по межгосударственной стандартизации. Правила разработки, принятия, обновления и отмены"

 

Сведения о стандарте

 

1 Разработан Центром защиты информации и специальной связи ФСБ России с участием Открытого акционерного общества "Информационные технологии и коммуникационные системы" (ОАО "ИнфоТеКС")

2 Внесен Техническим комитетом по стандартизации ТК 26 "Криптографическая защита информации"

3 Принят Межгосударственным советом по метрологии, стандартизации и сертификации (протокол от 29 ноября 2018 г. N 54)

За принятие проголосовали:

 

Краткое наименование страны по МК (ИСО 3166) 004-97

Код страны по МК (ИСО 3166) 004-97

Сокращенное наименование национального органа по стандартизации

Армения

AM

Минэкономики Республики Армения

Киргизия

KG

Кыргызстандарт

Россия

RU

Росстандарт

Таджикистан

TJ

Таджикстандарт

 

4 Приказом Федерального агентства по техническому регулированию и метрологии от 4 декабря 2018 г. N 1061-ст межгосударственный стандарт ГОСТ 34.12-2018 введен в действие в качестве национального стандарта Российской Федерации с 1 июня 2019 г.

5 Настоящий стандарт подготовлен на основе применения ГОСТ Р 34.12-2015

6 Взамен ГОСТ 28147-89 в части раздела 1 "Структурная схема алгоритма криптографического преобразования"

 

Введение

 

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

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

Настоящий стандарт терминологически и концептуально увязан с международными стандартами ИСО/МЭК 10116 [1] и стандартами серии ИСО/МЭК 18033 [2], [3].

 

Примечание - Основная часть стандарта дополнена приложением А "Контрольные примеры".

 

1 Область применения

 

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

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

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

 

2 Термины, определения и обозначения

 

2.1 Термины и определения

 

В настоящем стандарте применены следующие термины с соответствующими определениями:

2.1.1 алгоритм зашифрования (encryption algorithm): Алгоритм, реализующий зашифрование, т.е. преобразующий открытый текст в шифртекст.

 

Примечание - Адаптировано из ИСО/МЭК 18033-1 [2].

 

2.1.2 алгоритм расшифрования (decryption algorithm): Алгоритм, реализующий расшифрование, т.е. преобразующий шифртекст в открытый текст.

 

Примечание - Адаптировано из ИСО/МЭК 18033-1 [2].

 

2.1.3 базовый блочный шифр (basic block cipher): Блочный шифр, реализующий при каждом фиксированном значении ключа одно обратимое отображение множества блоков открытого текста фиксированной длины в блоки шифртекста такой же длины.

2.1.4 блок (block): Строка бит определенной длины.

 

Примечание - Адаптировано из ИСО/МЭК 18033-1 [2].

 

2.1.5 блочный шифр (block cipher): Шифр из класса симметричных криптографических методов, в котором алгоритм зашифрования применяется к блокам открытого текста для получения блоков шифртекста.

 

Примечания

1 Адаптировано из ИСО/МЭК 18033-1 [2].

2 В настоящем стандарте установлено, что термины "блочный шифр" и "алгоритм блочного шифрования" являются синонимами.

 

2.1.6 зашифрование (encryption): Обратимое преобразование данных с помощью шифра, которое формирует шифртекст из открытого текста.

 

Примечание - Адаптировано из ИСО/МЭК 18033-1 [2].

 

2.1.7 итерационный ключ (round key): Последовательность символов, вычисляемая в процессе развертывания ключа шифра и определяющая преобразование на одной итерации блочного шифра.

2.1.8 ключ (key): Изменяемый параметр в виде последовательности символов, определяющий криптографическое преобразование.

 

Примечания

1 Адаптировано из ИСО/МЭК 18033-1 [2].

2 В настоящем стандарте рассматриваются ключи только в виде последовательности двоичных символов (битов).

 

2.1.9 открытый текст (plaintext): Незашифрованная информация.

 

Примечание - Адаптировано из ИСО/МЭК 10116 [1].

 

2.1.10 развертывание ключа (key schedule): Вычисление итерационных ключей из ключа шифра.

2.1.11 расшифрование (decryption): Операция, обратная к зашифрованию.

 

Примечания

1 Адаптировано из ИСО/МЭК 18033-1 [2].

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

 

2.1.12 симметричный криптографический метод (symmetric cryptographic technique): Криптографический метод, использующий один и тот же ключ для преобразования, осуществляемого отправителем, и преобразования, осуществляемого получателем.

 

Примечание - Адаптировано из ИСО/МЭК 18033-1 [2].

 

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

 

Примечание - Адаптировано из ИСО/МЭК 18033-1 [2].

 

2.1.14 шифртекст (ciphertext): Данные, полученные в результате зашифрования открытого текста в целях скрытия его содержания.

 

Примечание - Адаптировано из ИСО/МЭК 10116 [1].

 

2.2 Обозначения

 

В настоящем стандарте применены следующие обозначения:

V* - множество всех двоичных строк конечной длины, включая пустую строку;

Vs - множество всех двоичных строк длины s, где s - целое неотрицательное число; нумерация подстрок и компонент строки осуществляется справа налево, начиная с нуля;

V x W - прямое (декартово) произведение множества U и множества W;

|А| - число компонент (длина) строки А V* (если А - пустая строка, то |А| = 0);

А||В - конкатенация строк A, B V*, т.е. строка из , в которой подстрока с большими номерами компонент из V|A| совпадает со строкой А, а подстрока с меньшими номерами компонент из V|B| совпадает со строкой В;

А<<<11 - циклический сдвиг строки А V32 на 11 компонент в сторону компонент, имеющих большие номера;

- операция покомпонентного сложения по модулю 2 двух двоичных строк одинаковой длины;

- кольцо вычетов по модулю 2s;

- операция сложения в кольце ;

- конечное поле GF(2)[x]/p(x), где р(х) = х+ х+ х+ х + 1 GF(2)[x]; элементы поля представляются целыми числами, причем элементу соответствует число , где zi {0, 1}, i = 0, 1, ..., 7, и обозначает класс вычетов по модулю р(х), содержащий х;

Vec Vs - биективное отображение, сопоставляющее элементу кольца его двоичное представление, т.е. для любого элемента , представленного в виде , где zi {0, 1}, i = 0, 1, ..., s-1, выполнено равенство ;

Int: Vs - отображение, обратное к отображению Vecs, т.е. ;

: V8 - биективное отображение, сопоставляющее двоичной строке из V8 элемент поля следующим образом: строке z7||...||z1||z0, zi {0, 1}, i = 0, 1, ..., 7 соответствует элемент ;

- отображение, обратное к отображению , т.е. ;

- композиция отображений, при которой отображение действует первым;

- композиция отображений и , причем .

 

3 Общие положения

 

В настоящем стандарте приведено описание двух базовых блочных шифров с длинами блоков n = 128 бит и n = 64 бит и длинами ключей k = 256 бит.

 

Примечания

1 На описанный в настоящем стандарте шифр с длиной блока n = 128 бит можно ссылаться как на блочный шифр "Кузнечик" ("Kuznechik").

2 На описанный в настоящем стандарте шифр с длиной блока n = 64 бит можно ссылаться как на блочный шифр "Магма" ("Magma").

 

4 Алгоритм блочного шифрования с длиной блока n = 128 бит

 

4.1 Значения параметров

 

4.1.1 Нелинейное биективное преобразование

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

= (252, 238, 221, 17, 207, 110, 49, 22, 251, 196, 250, 218, 35, 197, 4, 77, 233, 119, 240, 219, 147, 46, 153, 186, 23, 54, 241, 187, 20, 205, 95, 193, 249, 24, 101, 90, 226, 92, 239, 33, 129, 28, 60, 66, 139, 1, 142, 79, 5, 132, 2, 174, 227, 106, 143, 160, 6, 11, 237, 152, 127, 212, 211, 31, 235, 52, 44, 81, 234, 200, 72, 171, 242, 42, 104, 162, 253, 58, 206, 204, 181, 112, 14, 86, 8, 12, 118, 18, 191, 114, 19, 71, 156, 183, 93, 135, 21, 161, 150, 41, 16, 123, 154, 199, 243, 145, 120, 111, 157, 158, 178, 177, 50, 117, 25, 61, 255, 53, 138, 126, 109, 84, 198, 128, 195, 189, 13, 87, 223, 245, 36, 169, 62, 168, 67, 201, 215, 121, 214, 246, 124, 34, 185, 3, 224, 15, 236, 222, 122, 148, 176, 188, 220, 232, 40, 80, 78, 51, 10, 74, 167, 151, 96, 115, 30, 0, 98, 68, 26, 184, 56, 130, 100, 159, 38, 65, 173, 69, 70, 146, 39, 94, 85, 47, 140, 163, 165, 125, 105, 213, 149, 59, 7, 88, 179, 64, 134, 172, 29, 247, 48, 55, 107, 228, 136, 217, 231, 137, 225, 27, 131, 73, 76, 63, 248, 254, 141, 83, 170, 144, 202, 216, 133, 97, 32, 113, 103, 164, 45, 43, 9, 91, 203, 155, 37, 208, 190, 229, 108, 82, 89, 166, 116, 210, 230, 244, 180, 192, 209, 102, 175, 194, 57, 75, 99, 182).

4.1.2 Линейное преобразование

Линейное преобразование задается отображением l: , которое определяется следующим образом:

 

(1)

 

для любых aiV8, i = 0, 1, ..., 15, где операции сложения и умножения осуществляются в поле , а константы являются элементами поля в указанном ранее смысле.

 

4.2 Преобразования

 

При реализации алгоритмов зашифрования и расшифрования используются следующие преобразования:

 

X[k]: V128 V128

,

где k, aV128;

(2)

S: V128 V128

S(a) = S(a15||...||a0) = (a15)||...||(a0),

где a = a15||...||a0V128, aiV8, i = 0, 1, ..., 15;

(3)

S-1: V128 V128

преобразование, обратное к преобразованию S, которое может быть вычислено, например, следующим образом:

 

S-1(a) = S-1(a15||...||a0) = (a15)||...||(a0),

где a = a15||...||a0V128, aiV8, i = 0, 1, ..., 15,

- подстановка, обратная к подстановке ;

(4)

R: V128 V128

R(a) = R(a15)||...||a0) = l(a15, ..., a0)||a15||...||a1,

где a = a15||...||a0V128, aiV8, i = 0, 1, ..., 15;

(5)

L: V128 V128

L(a) = R16(a),

где aV128;

(6)

R-1: V128 V128

преобразование, обратное к преобразованию R, которое может быть вычислено, например, следующим образом:

 

R-1(a) = R-1(a15||...||a0) = a14||a13||...||a0||l(a14, a13, ..., a0, a15),

где a = a15||...||a0V128, aiV8, i = 0, 1, ..., 15;

(7)

L-1: V128 V128

L-1(a) = (R-1)16(a),

где aV128;

(8)

F[k]: V128 x V128 V128 x V128

F[k](a1, a0) = (LSX[k](a1)a0, a1),

где k, a0, a1V128.

(9)

 

4.3 Алгоритм развертывания ключа

 

Алгоритм развертывания ключа использует итерационные константы СiV128, i = 1, 2, ..., 32, которые определены следующим образом:

 

.

(10)

 

Итерационные ключи KiV128, i = 1, 2, ..., 10, вырабатываются на основе ключа K = k255||...||k0V256, kiV1, i = 0, 1, ..., 255, и определяются равенствами:

 

;

 

;

 

.

(11)

 

4.4 Базовый алгоритм шифрования

 

4.4.1 Алгоритм зашифрования

Алгоритм зашифрования в зависимости от значений итерационных ключей KiV128, i = 1, 2, ..., 10, реализует подстановку , заданную на множестве V128 в соответствии с равенством

 

,

(12)

 

где а V128.

4.4.2 Алгоритм расшифрования

Алгоритм расшифрования в зависимости от значений итерационных ключей KiV128, i = 1, 2, ..., 10, реализует подстановку заданную на множестве V128 в соответствии с равенством

 

,

(13)

 

где а V128.

 

5 Алгоритм блочного шифрования с длиной блока n = 64 бит

 

5.1 Значения параметров

 

5.1.1 Нелинейное биективное преобразование

В качестве нелинейного биективного преобразования выступают подстановки где , i = 0, 1, ..., 7. Значения подстановок записаны ниже в виде массивов  = ((0), (1), ..., (15)), i = 0, 1, ..., 7:

 = (12, 4, 6, 2, 10, 5, 11, 9, 14, 8, 13, 7, 0, 3, 15, 1);

 = (6, 8, 2, 3, 9, 10, 5, 12, 1, 14, 4, 7, 11,13, 0, 15);

 = (11, 3, 5, 8, 2, 15, 10, 13, 14, 1, 7, 4, 12, 9, 6, 0);

 = (12, 8, 2, 1, 13, 4, 15, 6, 7, 0, 10, 5, 3, 14, 9, 11);

 = (7, 15, 5, 10, 8, 1, 6, 13, 0, 9, 3, 14, 11, 4, 2, 12);

= (5, 13, 15, 6, 9, 2, 12, 10, 11, 7, 8, 1, 4, 3, 14, 0);

 = (8, 14, 2, 5, 6, 9, 1, 12, 15, 4, 11, 0, 13, 10, 3, 7);

 = (1, 7, 14, 13, 0, 5, 8, 3, 4, 15, 10, 6, 9, 12, 11, 2).

 

5.2 Преобразования

 

При реализации алгоритмов зашифрования и расшифрования используются следующие преобразования:

 

t: V32 V32

t(a) = t(a7)||...||a0) = (a7)||...||(a0),

где a = a7||...||a0V32, aiV4, i = 0, 1, ..., 7;

(14)

g[k]: V32 V32

g[k](a) = (t(Vec32(Int32(a)Int32(k))))<<<11,

где k, a V32;

(15)

G[k]: V32 x V32 V32 x V32

G[k](a1, a0) = (a0, g[k](a0)a1),

где k, a0, a1 V32;

(16)

G*[k]: V32 x V32 V64

G*[k](a1, a0) = (g[k](a0)a1)||a0,

где k, a0, a1 V32.

(17)

 

5.3 Алгоритм развертывания ключа

 

Итерационные ключи KiV32, i = 1, 2, ..., 32, вырабатываются на основе ключа K = k255||...||k0V256, kiV1, i = 0, 1, ..., 255, и определяются равенствами:

 

;

 

;

 

;

 

;

 

;

 

;

 

;

 

;

 

;

 

;

 

.

(18)

 

5.4 Базовый алгоритм шифрования

 

5.4.1 Алгоритм зашифрования

Алгоритм зашифрования в зависимости от значений итерационных ключей KiV32, i = 1, 2, ..., 32, реализует подстановку , заданную на множестве V64 в соответствии с равенством

 

,

(19)

 

где а = а1||а0 V64, a0, a1 V32.

5.4.2 Алгоритм расшифрования

Алгоритм расшифрования в зависимости от значений итерационных ключей KiV32, i = 1, 2, ..., 32, реализует подстановку , заданную на множестве V64 в соответствии с равенством

 

,

(20)

 

где а = а1||а0V64, a0, a1V32.

 

Библиография

 

Примечание - Оригиналы международных стандартов ИСО/МЭК находятся в национальных (государственных) органах по стандартизации* государств, принявших настоящий стандарт.

 

------------------------------

* В Российской Федерации оригиналы международных стандартов ИСО/МЭК находятся в Федеральном информационном фонде стандартов.

 

[1]

ИСО/МЭК 10116:2017 (ISO/IEC 10116:2017)

Информационная технология. Методы и средства обеспечения безопасности. Режимы работы при использовании алгоритмов кодирования для режима n-разрядного блочного шифрования (Information technology - Security techniques - Modes of operation for an n-bit block cipher)

[2]

ИСО/МЭК 18033-1:2015 (ISO/IEC 18033-1:2015)

Информационные технологии. Методы и средства обеспечения безопасности. Алгоритмы шифрования. Часть 1. Общие положения (Information technology - Security techniques - Encryption algorithms - Part 1: General)

[3]

ИСО/МЭК 18033-3:2010 (ISO/IEC 18033-3:2010)

Информационные технологии. Методы и средства обеспечения безопасности. Алгоритмы шифрования. Часть 3. Блочные шифры (Information technology - Security techniques - Encryption algorithms - Part 3: Block ciphers)

 

Откройте актуальную версию документа прямо сейчас или получите полный доступ к системе ГАРАНТ на 3 дня бесплатно!

Получить доступ к системе ГАРАНТ

Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.


Межгосударственный стандарт ГОСТ 34.12-2018 "Информационная технология. Криптографическая защита информации. Блочные шифры" (введен в действие приказом Федерального агентства по техническому регулированию и метрологии от 4 декабря 2018 г. N 1061-ст)


Текст ГОСТа приводится по официальному изданию Стандартинформ, Москва, 2018 г.


Дата введения - 1 июня 2019 г.


Текст ГОСТа приводится с учетом поправки, опубликованной в ИУС "Национальные стандарты", 2019 г., N 4