Введение
Настоящий стандарт содержит описание алгоритма и процедуры вычисления хэш-функции для любой последовательности двоичных символов, которые применяются в криптографических методах защиты информации, в том числе в процессах формирования и проверки электронной цифровой подписи.
Стандарт разработан взамен ГОСТ Р 34.11-94. Необходимость разработки настоящего стан дарта вызвана потребностью в создании хэш-функции, соответствующей современным требованиям к криптографической стойкости и требованиям стандарта ГОСТ Р 34.10-2012 к электронной цифровой подписи.
Настоящий стандарт терминологически и концептуально увязан с международными стандартами ИСО 2382-2 [1], ИСО/МЭК 9796 [2-3], серии ИСО/МЭК 14888 [4-7] и серии ИСО/МЭК 10118 [8-11].
Примечание - Основная часть стандарта дополнена одним приложением: Приложение А (справочное) Контрольные примеры.
1 Область применения
Настоящий стандарт определяет алгоритм и процедуру вычисления хэш-функции для любой последовательности двоичных символов, которые применяются в криптографических методах обработки и защиты информации, в том числе для реализации процедур обеспечения целостности, аутентичности, электронной цифровой подписи (ЭЦП) при передаче, обработке и хранении информации в автоматизированных системах.
Определенная в настоящем стандарте функция хэширования используется при реализации систем электронной цифровой подписи на базе асимметричного криптографического алгоритма по ГОСТ Р 34.10-2012.
Стандарт рекомендуется использовать при создании, эксплуатации и модернизации систем обработки информации различного назначения.
2 Нормативные ссылки
В настоящем стандарте использованы нормативные ссылки на следующие стандарты:
ГОСТ Р 34.10-2012 Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи
Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте Федерального агентства Российской Федерации по техническому регулированию и метрологии в сети Интернет или по ежегодно издаваемому информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по соответствующим ежемесячно издаваемым информационным указателям, опубликованным в текущем году. Если ссылочный стандарт заменен (изменен), то при пользовании настоящим стандартом следует руководствоваться заменяющим (измененным) стандартом. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, применяется в части, не затрагивающей эту ссылку.
3 Термины, определения и обозначения
В настоящем стандарте применены следующие термины с соответствующими определениями.
3.1 Термины и определения
3.1.1
заполнение (padding): Приписывание дополнительных бит к строке бит. [ИСО/МЭК 10118-1, статья 3.9] |
3.1.2
инициализационный вектор (initializing value): Вектор, определенный как начальная точка работы функции хэширования. [ИСО/МЭК 10118-1, статья 3.7] |
3.1.3
сообщение (message): Строка бит произвольной конечной длины. [ИСО/МЭК 14888-1, статья 3.10] |
3.1.4
функция сжатия (round-function): Итеративно используемая функция, преобразующая строку бит длиной и полученную на предыдущем шаге строку бит длиной в строку бит длиной . [ИСО/МЭК 10118-1, статья 3.10] |
Примечание - В настоящем стандарте понятия "строка бит длиной L" и "двоичный вектор-строка размерности L" считаются тождественными.
3.1.5
хэш-код (hash-code): Строка бит, являющаяся выходным результатом хэш-функции. [ИСО/МЭК 14888-1, статья 3.6] |
3.1.6
хэш-функция (collision-resistant hash-function): Функция, отображающая строки бит в строки бит фиксированной длины и удовлетворяющая следующим свойствам: 1) по данному значению функции сложно вычислить исходные данные, отображаемые в это значение; 2) для заданных исходных данных сложно вычислить другие исходные данные, отображаемые в то же значение функции; 3) сложно вычислить какую-либо пару исходных данных, отображаемых в одно и то же значение. [ИСО/МЭК 14888-1, статьи 3.2, 3.7] |
Примечание - В настоящем стандарте в целях сохранения терминологической преемственности по отношению к действующим отечественным нормативным документам и опубликованным научно-техническим изданиям установлено, что термины "хэш-функция", "криптографическая хэш-функция", "функция хэширования" и "криптографическая функция хэширования" являются синонимами.
3.1.7
электронная цифровая подпись (signature); ЭЦП: Строка бит, полученная в результате процесса формирования подписи. [ИСО/МЭК 14888-1, статья 3.12] |
Примечание - В настоящем стандарте в целях сохранения терминологической преемственности по отношению к действующим отечественным нормативным документам и опубликованным научно-техническим изданиям установлено, что термины "электронная подпись", "цифровая подпись" и "электронная цифровая подпись" являются синонимами.
3.2 Обозначения
В настоящем стандарте используются следующие обозначения:
V* |
множество всех двоичных векторов-строк конечной размерности (далее - векторы), включая пустую строку; |
|A| |
размерность (число компонент) вектора (если А - пустая строка, то |А| = 0); |
множество всех n-мерных двоичных векторов, где n - целое неотрицательное число; нумерация подвекторов и компонент вектора осуществляется справа налево, начиная с нуля; |
|
операция покомпонентного сложения по модулю 2 двух двоичных векторов одинаковой размерности; |
|
A||B |
конкатенация векторов А, , т.е. вектор из , в котором левый подвектор из , совпадает с вектором А, а правый подвектор из совпадает с вектором В; |
конкатенация n экземпляров вектора А; |
|
кольцо вычетов по модулю ; |
/---\
|-+-| операция сложения в кольце Z ;
\---/ 2n
биективное отображение, сопоставляющее элементу кольца его двоичное представление, т.е. для любого элемента z кольца , представленного вычетом , где , j = 0, ..., n - 1, выполнено равенство ; |
|
отображение, обратное отображению , т.е. ; |
|
отображение, ставящее в соответствие вектору , , вектор ; |
|
a: = b |
операция присваивания переменной а значения b; |
произведение отображений, при котором отображение действует первым; |
|
М |
двоичный вектор, подлежащий хэшированию, , ; |
функция хэширования, отображающая вектор (сообщение) М в вектор (хэш-код) Н(М); |
|
IV |
инициализационный вектор функции хэширования, . |
4 Общие положения
Настоящий стандарт определяет две функции хэширования с длинами хэш-кода n = 512 бит и n = 256 бит.
5 Значения параметров
5.1 Инициализационные векторы
Значение инициализационного вектора IV для функции хэширования с длиной хэш-кода 512 бит равно . Значение инициализационного вектора IV для функции хэширования с длиной хэш-кода 256 бит равно .
5.2 Нелинейное биективное преобразование множества двоичных векторов
Нелинейное биективное преобразование множества двоичных векторов задается подстановкой
, (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).
5.3 Перестановка байт
Значения перестановки , заданной на множестве {0, ..., 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 Линейное преобразование множества двоичных векторов
Линейное преобразование множества двоичных векторов задается умножением справа на матрицу А над полем GF(2), строки которой записаны ниже последовательно в шестнадцатеричном виде. Строка матрицы с номером j, j = 0, ..., 63, записанная в виде ... , где , i = 0, ..., 15, есть .
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, в следующем порядке (слева направо):
4i + 0, 4i + 1, 4i + 2, 4i + 3.
Результат умножения вектора на матрицу А есть вектор :
, (2)
где
для всех i = 0, ..., 63.
5.5 Итерационные константы
Итерационные константы записаны в шестнадцатеричном виде. Значение константы, записанное в виде , где , i = 0, ..., 127, есть :
= b1085bda1ecadae9ebcb2f81c0657c1f2f6a76432e45d016714eb88d7585c4fc 4b7ce09192676901a2422a08a460d31505767436cc744d23dd806559f2a64507;
= 6fa3b58aa99d2f1a4fe39d460f70b5d7f3feea720a232b9861d55e0f16b50131 9ab5176b12d699585cb561c2db0aa7ca55dda21bd7cbcd56e679047021b19bb7;
= f574dcac2bce2fc70a39fc286a3d843506f15e5f529c1f8bf2ea7514b1297b7b d3e20fe490359eb1c1с93a376062db09c2b6f443867adb31991e96f50aba0ab2;
= ef1fdfb3e81566d2f948e1a05d71e4dd488e857e335c3c7d9d721cad685e353f a9d72c82ed03d675d8b71333935203be3453eaa193e837f1220cbebc84e3d12e;
= 4bea6bacad4747999a3f410c6ca923637f151c1f1686104a359e35d7800fffbd bfcd1747253af5a3dfff00b723271a167a56a27ea9ea63f5601758fd7c6cfe57;
= ae4faeae1d3ad3d96fa4c33b7a3039c02d66c4f95142a46c187f9ab49af08ec6 cffaa6b71c9ab7b40af21f66c2bec6b6bf71c57236904f35fa68407a46647d6e;
= f4c70e16eeaac5ec51ac86febf240954399ec6c7e6bf87c9d3473e33197a93c9 0992abc52d822c3706476983284a05043517454ca23c4af38886564d3a14d493;
= 9b1f5b424d93c9a703e7aa020c6e41414eb7f8719c36de1e89b4443b4ddbc49a f4892bcb929b069069d18d2bd1a5c42f36acc2355951a8d9a47f0dd4bf02e71e;
= 378f5a541631229b944c9ad8ec165fde3a7d3a1b258942243cd955b7e00d0984 800a440bdbb2ceb17b2b8a9aa6079c540e38dc92cb1f2a607261445183235adb;
= abbedea680056f52382ae548b2e4f3f38941e71cff8a78db1fffe18a1b336103 9fe76702af69334b7a1e6c303b7652f43698fad1153bb6c374b4c7fb98459ced;
= 7bcd9ed0efc889fb3002c6cd635afe94d8fa6bbbebab07612001802114846679 8a1d71efea48b9caefbacd1d7d476e98dea2594ac06fd85d6bcaa4cd81f32d1b;
= 378ee767f11631bad21380b00449b17acda43c32bcdf1d77f82012d430219f9b 5d80ef9d1891cc86e71da4aa88e12852faf417d5d9b21b9948bc924af11bd720.
6 Преобразования
При вычислении хэш-кода Н(М) сообщения используются следующие преобразования:
, , ; (3)
, , (4)
где , , i = 0, ..., 63;
, , (5)
где , , i = 0, ..., 63;
, , (6)
где , , i = 0, ..., 7.
7 Функция сжатия
Значение хэш-кода сообщения вычисляется с использованием итерационной процедуры. На каждой итерации вычисления хэш-кода используется функция сжатия:
, , (7)
значение которой вычисляется по формуле
, (8)
где ... .
Значения , i = 1, ..., 13, вычисляются следующим образом:
; (9)
, i = 2, ..., 13. (10)
Для краткости вместо будем использовать обозначение .
8 Процедура вычисления хэш-функции
Исходными данными для процедуры вычисления хэш-кода Н(М) является подлежащее хэшированию сообщение и - инициализационный вектор.
Алгоритм вычисления функции Н состоит из следующих этапов.
8.1 Этап 1
Присвоить начальные значения текущих величин:
1.1 h: = IV;
1.2 ;
1.3 ;
1.4 Перейти к этапу 2.
8.2 Этап 2
2.1 Проверить условие |М| < 512.
При положительном исходе перейти к этапу 3.
В противном случае выполнить последовательность вычислений по 2.2-2.7.
2.2 Вычислить подвектор сообщения . Далее выполнить последовательность вычислений:
2.3 .
/---\
2.4 N: = Vec (lnt (N)|-+-|512).
512 512 \---/
/---\
2.5 Sigma: = Vec (lnt (Sigma)|-+-|lnt (m)).
512 512 \---/ 512
2.6 M: = M'.
2.7 Перейти к шагу 2.1.
8.3 Этап 3
3.1 .
3.2 .
/---\
3.3 N: = Vec (lnt (N)|-+-||M|).
512 512 \---/
/---\
3.4 Sigma: = Vec (lnt (Sigma)|-+-|lnt |m|).
512 512 \---/ 512
3.5 .
3.6
3.7 Конец работы алгоритма
Значение величины h, полученное на шаге 3.6, является значением функции хэширования Н(М).
Библиография*
______________________________
* Оригиналы международных стандартов ИСО/МЭК находятся во ФГУП "Стандартинформ" Федерального агентства по техническому регулированию и метрологии.
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Национальный стандарт РФ ГОСТ Р 34.11-2012 "Информационная технология. Криптографическая защита информации. Функция хэширования" (утв. приказом Федерального агентства по техническому регулированию и метрологии от 7 августа 2012 г. N 216-ст)
Текст ГОСТа приводится по официальному изданию Стандартинформ, 2013 г.
Дата введения - 1 января 2013 г.
1 Разработан Центром защиты информации и специальной связи ФСБ России с участием Открытого акционерного общества "Информационные технологии и коммуникационные системы" (ОАО "ИнфоТеКС")
2 Внесен Техническим комитетом по стандартизации ТК 26 "Криптографическая защита информации"
3 Утвержден и введен в действие приказом Федерального агентства по техническому регулированию и метрологии от 7 августа 2012 г. N 216-ст
4 Взамен ГОСТ Р 34.11-94
Текст ГОСТа приводится с учетом поправки, опубликованной в ИУС "Национальные стандарты", 2018, N 6