Information technology. Cryptographic data security. Hash-function
МКС 35.040
Дата введения - 1 июня 2019 г.
Введен впервые
Предисловие
Цели, основные принципы и основной порядок проведения работ по межгосударственной стандартизации установлены в ГОСТ 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 1060-ст межгосударственный стандарт ГОСТ 34.11-2018 введен в действие в качестве национального стандарта Российской Федерации с 1 июня 2019 г.
5 Настоящий стандарт подготовлен на основе применения ГОСТ Р 34.11-2012
6 Введен впервые
Введение
Настоящий стандарт содержит описание алгоритма и процедуры вычисления хэш-функции для любой последовательности двоичных символов, которые применяются в криптографических методах защиты информации, в том числе в процессах формирования и проверки электронной цифровой подписи.
Необходимость разработки настоящего стандарта вызвана потребностью в создании на межгосударственном уровне хэш-функции, соответствующей современным требованиям к криптографической стойкости и требованиям межгосударственного стандарта ГОСТ 34.10.
Настоящий стандарт терминологически и концептуально увязан с международным стандартом ИСО 2382 [1], а также международными стандартами серий ИСО/МЭК 9796 [2], [3], ИСО/МЭК 14888 [4]-[6] и ИСО/МЭК 10118 [7]-[10].
Примечание - Основная часть стандарта дополнена приложением А "Контрольные примеры".
1 Область применения
Настоящий стандарт определяет алгоритм и процедуру вычисления хэш-функции для любой последовательности двоичных символов, которые применяются в криптографических методах обработки и защиты информации, в том числе для реализации процедур обеспечения целостности, аутентичности, электронной цифровой подписи (ЭЦП) при передаче, обработке и хранении информации в автоматизированных системах.
Определенная в настоящем стандарте функция хэширования используется при реализации систем электронной цифровой подписи на базе асимметричного криптографического алгоритма по ГОСТ 34.10.
Стандарт рекомендуется использовать при создании, эксплуатации и модернизации систем обработки информации различного назначения.
2 Нормативные ссылки
В настоящем стандарте использована нормативная ссылка на следующий стандарт:
ГОСТ 34.10-2018 Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи
Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочного стандарта в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодному информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя "Национальные стандарты" за текущий год. Если ссылочный стандарт заменен (изменен), то при пользовании настоящим стандартом следует руководствоваться заменяющим (измененным) стандартом. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, применяется в части, не затрагивающей эту ссылку.
3 Термины, определения и обозначения
3.1 Термины и определения
В настоящем стандарте применены следующие термины с соответствующими определениями:
3.1.1 дополнение (padding): Приписывание дополнительных бит к строке бит.
Примечание - Адаптировано из ИСО/МЭК 10118-1 [7].
3.1.2 инициализационный вектор (initializing value): Вектор, определенный как начальная точка работы функции хэширования.
Примечание - Адаптировано из ИСО/МЭК 10118-1 [7].
3.1.3 сообщение (message): Строка бит произвольной конечной длины.
Примечание - Адаптировано из ИСО/МЭК 14888-1 [4].
3.1.4 функция сжатия (round function): Итеративно используемая функция, преобразующая строку бит длиной L1 и полученную на предыдущем шаге строку бит длиной L2 в строку бит длиной L2.
Примечания
1 Адаптировано из ИСО/МЭК 10118-1 [7].
2 В настоящем стандарте понятия "строка бит длиной L" и "двоичный вектор-строка размерности L" считаются тождественными.
3.1.5 хэш-код (hash-code): Строка бит, являющаяся выходным результатом хэш-функции.
Примечание - Адаптировано из ИСО/МЭК 10118-1 [7].
3.1.6 хэш-функция (collision-resistant hash-function): Функция, отображающая строки бит в строки бит фиксированной длины и удовлетворяющая следующим свойствам:
1) по данному значению функции сложно вычислить исходные данные, отображаемые в это значение;
2) для заданных исходных данных сложно вычислить другие исходные данные, отображаемые в то же значение функции;
3) сложно вычислить какую-либо пару исходных данных, отображаемых в одно и то же значение.
Примечания
1 Адаптировано из ИСО/МЭК 10118-1 [7].
2 В настоящем стандарте в целях сохранения терминологической преемственности по отношению к нормативным документам, действующим на территории государства, принявшего настоящий стандарт, и опубликованным ранее на русском языке научно-техническим изданиям установлено, что термины "хэш-функция", "криптографическая хэш-функция", "функция хэширования" и "криптографическая функция хэширования" являются синонимами.
3.1.7 [электронная цифровая] подпись (signature); ЭЦП: Строка бит, полученная в результате процесса формирования подписи.
Примечания
1 Адаптировано из ИСО/МЭК 14888-1 [4].
2 В настоящем стандарте в целях сохранения терминологической преемственности по отношению к нормативным документам, действующим на территории государства, принявшего настоящий стандарт, и опубликованным ранее на русском языке научно-техническим изданиям установлено, что термины "электронная подпись", "цифровая подпись" и "электронная цифровая подпись" являются синонимами.
3.2 Обозначения
В настоящем стандарте применены следующие обозначения:
V* - множество всех двоичных векторов-строк конечной размерности (далее - векторы), включая пустую строку;
|А| - размерность (число компонент) вектора A V* (если А - пустая строка, то |А| = 0);
Vn - множество всех n-мерных двоичных векторов, где n - целое неотрицательное число; нумерация подвекторов и компонент вектора осуществляется справа налево, начиная с нуля;
- операция покомпонентного сложения по модулю 2 двух двоичных векторов одинаковой размерности;
А||В - конкатенация векторов А, В V*, т.е. вектор из V|A| + |B|, в котором левый подвектор из |A| совпадает с вектором А, а правый подвектор из V|B| совпадает с вектором В;
Аn - конкатенация n экземпляров вектора А;
- кольцо вычетов по модулю 2n;
- операция сложения в кольце ;
Vecn: Z2n Vn - биективное отображение, сопоставляющее элементу кольца его двоичное представление, т.е. для любого элемента z кольца представленного вычетом z0 + 2z1 + ... + 2n-1zn-1, где zj {0, 1}, j = 0, ..., n - 1, выполнено равенство Vecn(z) = zn-1||...||z1||z0;
lntn: Vn - отображение, обратное отображению Vecn, т.е. Intn = ;
MSBn: V* Vn - отображение, ставящее в соответствие вектору zk-1||...||z1||z0, k n, вектор zk-1||...||zk-n+1||zk-n;
а := b - операция присваивания переменной а значения b;
- произведение отображений, при котором отображение действует первым;
М - двоичный вектор, подлежащий хэшированию, М V*, |М| < 2512;
Н: V* Vn - функция хэширования, отображающая вектор (сообщение) М в вектор (хэш-код) Н(М);
IV - инициализационный вектор функции хэширования, IV V512.
4 Общие положения
Настоящий стандарт определяет две функции хэширования Н : V* Vn с длинами хэш-кода n = 256 бит и n = 512 бит.
5 Значения параметров
5.1 Инициализационные векторы
Значение инициализационного вектора IV для функции хэширования с длиной хэш-кода 512 бит равно 0512. Значение инициализационного вектора IV для функции хэширования с длиной хэш-кода 256 бит равно (00000001)64.
5.2 Нелинейное биективное преобразование множества двоичных векторов
Нелинейное биективное преобразование множества двоичных векторов V8 задается подстановкой
,
(1)
где .
Значения подстановки записаны ниже в виде массива = ((0), (1), ..., (255)):
= (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).
5.3 Перестановка байт
Значения перестановки S64 записаны ниже в виде массива = ((0), (1), ..., (63)):
= (0, 8, 16, 24, 32, 40, 48, 56, 1, 9, 17, 25, 33, 41, 49, 57, 2, 10, 18, 26, 34, 42, 50, 58, 3, 11, 19, 27, 35, 43, 51, 59, 4, 12, 20, 28, 36, 44, 52, 60, 5, 13, 21, 29, 37, 45, 53, 61, 6, 14, 22, 30, 38, 46, 54, 62, 7, 15, 23, 31, 39, 47, 55, 63).
5.4 Линейное преобразование множества двоичных векторов
Линейное преобразование l множества двоичных векторов V64 задается умножением справа на матрицу А над полем GF(2), строки которой записаны ниже последовательно в шестнадцатеричном виде. Строка матрицы с номером j, j = 0, .., 63, записанная в виде аj,15 ... аj,0, где аj,i, i = 0, ..., 15, есть Vec4(aj,15)||...||Vec4(aj,0).
8e20faa72ba0b470 |
47107ddd9b505a38 |
ad08b0e0c3282d1c |
d8045870ef14980e |
6c022c38f90a4c07 |
3601161cf205268d |
1b8e0b0e798c13c8 |
83478b07b2468764 |
a011d380818e8f40 |
5086e740ce47c920 |
2843fd2067adea10 |
14aff010bdd87508 |
0ad97808d06cb404 |
05e23c0468365a02 |
8c711e02341b2d01 |
46b60f011a83988e |
90dab52a387ae76f |
486dd4151c3dfdb9 |
24b86a840e90f0d2 |
125c354207487869 |
092e94218d243cba |
8a174a9ec8121e5d |
4585254f64090fa0 |
accc9ca9328a8950 |
9d4df05d5f661451 |
c0a878a0a1330aa6 |
60543c50de970553 |
302a1e286fc58ca7 |
18150f14b9ec46dd |
0c84890ad27623e0 |
0642ca05693b9f70 |
0321658cba93c138 |
86275df09ce8aaa8 |
439da0784e745554 |
afc0503c273aa42a |
d960281e9d1d5215 |
e230140fc0802984 |
71180a8960409a42 |
b60c05ca30204d21 |
5b068c651810a89e |
456c34887a3805b9 |
ac361a443d1c8cd2 |
561b0d22900e4669 |
2b838811480723ba |
9bcf4486248d9f5d |
c3e9224312c8c1a0 |
effa11af0964ee50 |
f97d86d98a327728 |
e4fa2054a80b329c |
727d102a548b194e |
39b008152acb8227 |
9258048415eb419d |
492c024284fbaec0 |
aa16012142f35760 |
550b8e9e21f7a530 |
a48b474f9ef5dc18 |
70a6a56e2440598e |
3853dc371220a247 |
1ca76e95091051ad |
0edd37c48a08a6d8 |
07e095624504536c |
8d70c431ac02a736 |
c83862965601dd1b |
641c314b2b8ee083 |
Здесь в одной строке записаны четыре строки матрицы А, при этом в строке с номером i, i = 0, ..., 15, записаны строки матрицы А с номерами 4i + j, j = 0, ..., 3 в следующем порядке (слева направо):
4 i + 0, 4 i + 1, 4 i + 2, 4 i + 3.
Результат умножения вектора b = b63 ... b0 V64 на матрицу A есть вектор с V64:
,
(2)
где ,
для всех i = 0, ..., 63.
5.5 Итерационные константы
Итерационные константы записаны в шестнадцатеричном виде. Значение константы, записанное в виде а127 ... а0, где ai, i = 0, ..., 127, есть Vec4(a127)||...||Vec4(a0):
;
;
;
;
;
;
;
;
;
;
;
.
6 Преобразования
При вычислении хэш-кода Н(М) сообщения М V* используются следующие преобразования:
;
(3)
,
(4)
где a = a63||...||a0 V512, аi V8, i = 0, ..., 63;
,
(5)
где a = a63||...||a0 V512, аi V8, i = 0, ..., 63;
,
(6)
где a = a7||...||a0 V512, аi V64, i = 0, ..., 7.
7 Функция сжатия
Значение хэш-кода сообщения М V* вычисляется с использованием итерационной процедуры. На каждой итерации вычисления хэш-кода используется функция сжатия:
,
(7)
значение которой вычисляется по формуле
,
(8)
где Е(K, m) =X[K13]LPSX[K12] ... LPSX[K2]LPSX[K1](m).
Значения Ki V512, i = 1, ..., 13 вычисляются следующим образом:
K1 = K;
(9)
.
8 Процедура вычисления хэш-функции
Исходными данными для процедуры вычисления хэш-кода Н(М) является подлежащее хэшированию сообщение М V* и IV V512 - инициализационный вектор.
Алгоритм вычисления функции Н состоит из следующих этапов.
8.1 Этап 1
Присвоить начальные значения текущих величин:
Шаг 1.1 - присвоить h := IV;
Шаг 1.2 - присвоить N := 0512 V512;
Шаг 1.3 - присвоить := 0512 V512;
Шаг 1.4 - перейти к этапу 2.
8.2 Этап 2
Шаг 2.1 - проверить условие |М| < 512.
При положительном исходе перейти к этапу 3.
В противном случае выполнить последовательность вычислений по 2.2-2.7;
Шаг 2.2 - вычислить подвектор m V512 сообщения М : М = М'||m. Далее выполнить последовательность вычислений:
Шаг 2.3 - присвоить h := gN(h, m);
Шаг 2.4 - присвоить N := Vec512(lnt512(N)512);
Шаг 2.5 - присвоить := Vec512(lnt512()Int512(m));
Шаг 2.6 - присвоить М := М';
Шаг 2.7 - перейти к шагу 2.1.
8.3 Этап 3
Шаг 3.1 - присвоить m := 0511-|M|||1||М;
Шаг 3.2 - присвоить h := gN(h, m);
Шаг 3.3 - присвоить N := Vec512(lnt512(N)|M|);
Шаг 3.4 - присвоить := Vec512(lnt512()Int512(m));
Шаг 3.5 - присвоить h := g0(h, N);
;
Шаг 3.7 - конец работы алгоритма.
Значение величины h, полученное на шаге 3.6, является значением функции хэширования Н(М).
Библиография
Примечание - Оригиналы международных стандартов ИСО и ИСО/МЭК находятся в национальных (государственных) органах по стандартизации * государств, принявших настоящий стандарт.
------------------------------
*В Российской Федерации оригиналы международных стандартов ИСО/МЭК находятся в Федеральном информационном фонде стандартов.
------------------------------
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Межгосударственный стандарт ГОСТ 34.11-2018 "Информационная технология. Криптографическая защита информации. Функция хэширования" (введен в действие приказом Федерального агентства по техническому регулированию и метрологии от 4 декабря 2018 г. N 1060-ст)
Текст ГОСТа приводится по официальному изданию Стандартинформ, Москва, 2018 г.
Дата введения - 1 июня 2019 г.
Текст ГОСТа приводится с учетом поправки, опубликованной в ИУС "Национальные стандарты", 2021 г., N 1