НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ
КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ
ФУНКЦИЯ ХЭШИРОВАНИЯ
Information technology. Cryptographic data security. Hash-function
ГОСТ Р 34.11-2012
Предисловие
Цели и принципы стандартизации в Российской Федерации установлены Федеральным законом от 27 декабря 2002 г. N 184-ФЗ "О техническом регулировании", а правила применения национальных стандартов Российской Федерации - ГОСТ Р 1.0-2004 "Стандартизация в Российской Федерации. Основные положения".
Сведения о стандарте
1. Разработан Центром защиты информации и специальной связи ФСБ России с участием Открытого акционерного общества "Информационные технологии и коммуникационные системы" (ОАО "ИнфоТеКС").
2. Внесен Техническим комитетом по стандартизации ТК 26 "Криптографическая защита информации".
3. Утвержден и введен в действие Приказом Федерального агентства по техническому регулированию и метрологии от 7 августа 2012 г. N 216-ст.
Информация об изменениях к настоящему стандарту публикуется в ежегодно издаваемом информационном указателе "Национальные стандарты", а текст изменений и поправок - в ежемесячно издаваемых информационных указателях "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ежемесячно издаваемом информационном указателе "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет.
Введение
Настоящий стандарт содержит описание алгоритма и процедуры вычисления хэш-функции для любой последовательности двоичных символов, которые применяются в криптографических методах защиты информации, в том числе в процессах формирования и проверки электронной цифровой подписи.
Стандарт разработан взамен ГОСТ Р 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. Термины и определения
Примечание. В настоящем стандарте понятия "строка бит длиной L" и "двоичный вектор-строка размерности L" считаются тождественными.
Примечание. В настоящем стандарте в целях сохранения терминологической преемственности по отношению к действующим отечественным нормативным документам и опубликованным научно-техническим изданиям установлено, что термины "хэш-функция", "криптографическая хэш-функция", "функция хэширования" и "криптографическая функция хэширования" являются синонимами.
Примечание. В настоящем стандарте в целях сохранения терминологической преемственности по отношению к действующим отечественным нормативным документам и опубликованным научно-техническим изданиям установлено, что термины "электронная подпись", "цифровая подпись" и "электронная цифровая подпись" являются синонимами.
3.2. Обозначения
В настоящем стандарте используются следующие обозначения:
4. ОБЩИЕ ПОЛОЖЕНИЯ
Настоящий стандарт определяет две функции хэширования с длинами хэш-кода n = 512 бит и n = 256 бит.
5. ЗНАЧЕНИЯ ПАРАМЕТРОВ
5.1. Инициализационные векторы
Значение инициализационного вектора IV для функции хэширования с длиной хэш-кода 512 бит равно 0512. Значение инициализационного вектора IV для функции хэширования с длиной хэш-кода 256 бит равно (00000001)64.
5.2. Нелинейное биективное преобразование множества двоичных векторов
Нелинейное биективное преобразование множества двоичных векторов V8 задается подстановкой
Значения подстановки записаны ниже в виде массива
:
5.3. Перестановка байт
Значения перестановки , заданной на множестве {0, ..., 63}, записаны ниже в виде массива
:
5.4. Линейное преобразование множества двоичных векторов
Линейное преобразование l множества двоичных векторов V64 задается умножением справа на матрицу A над полем GF(2), строки которой записаны ниже последовательно в шестнадцатеричном виде. Строка матрицы с номером j, j = 0, ..., 63, записанная в виде , где
, i = 0, ..., 15, есть
.
Здесь в одной строке записаны четыре строки матрицы A, при этом в строке с номером i, i = 0, ..., 15, записаны строки матрицы A с номерами 4i + j, j = 0, ..., 3, в следующем порядке (слева направо):
Результат умножения вектора на матрицу A есть вектор
:
5.5. Итерационные константы
Итерационные константы записаны в шестнадцатеричном виде. Значение константы, записанное в виде , где
, i = 0, ..., 127, есть
:
6. ПРЕОБРАЗОВАНИЯ
При вычислении хэш-кода H(M) сообщения используются следующие преобразования:
7. ФУНКЦИЯ СЖАТИЯ
Значение хэш-кода сообщения вычисляется с использованием итерационной процедуры. На каждой итерации вычисления хэш-кода используется функция сжатия:
значение которой вычисляется по формуле
Значения , i = 1 , ..., 13, вычисляются следующим образом:
Для краткости вместо будем использовать обозначение
.
8. ПРОЦЕДУРА ВЫЧИСЛЕНИЯ ХЭШ-ФУНКЦИИ
Исходными данными для процедуры вычисления хэш-кода H(M) является подлежащее хэшированию сообщение и
- инициализаторный вектор .
Алгоритм вычисления функции H состоит из следующих этапов.
8.1. Этап 1
Присвоить начальные значения текущих величин:
8.2. Этап 2
2.1. Проверить условие |M| < 512.
При положительном исходе перейти к этапу 3.
В противном случае выполнить последовательность вычислений по 2.2 - 2.7.
2.2. Вычислить подвектор сообщения M: M = M'||m. Далее выполнить последовательность вычислений:
8.3. Этап 3
Значение величины h, полученное на шаге 3.6, является значением функции хэширования H(M).
КОНТРОЛЬНЫЕ ПРИМЕРЫ
Данное Приложение носит справочный характер и не является частью настоящего стандарта.
Векторы из V* записываются в шестнадцатеричном виде. Вектор , записанный в виде
, где
, i = 0, ..., n - 1, есть
.
А.1. Пример 1
Необходимо вычислить хэш-код сообщения
А.1.1. Для функции хэширования с длиной хэш-кода 512 бит
Длина сообщения , поэтому происходит заполнение неполного блока:
m = 01323130393837363534333231303938373635343332313039383
73635343332313039383736353433323130393837363534333
Затем выполняется преобразование E (K, m):
Результат выполнения преобразования :
h = fd102cf8812ccb1191ea34af21394f3817a86641445aa9a626488
adb33738ebd2754f6908cbbbac5d3ed0f522c50815c954135793fb1f5
Изменяются значения переменных N и :
N = 00000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000
Результат выполнения преобразования :
h = 5c881fd924695cf196c2e4fec20d14b642026f2a0b1716
ebaabb7067d4d597523d2db69d6d3794622147a14f19a66e7f9037e1d
Результат выполнения преобразования :
h = 486f64c1917879417fef082b3381a4e211c324f074654c38823
a7b76f830ad00fa1fbae42b1285c0352f227524bc9ab16254288dd6863
Хэш-кодом сообщения M1 является значение
А.1.2. Для функции хэширования с длиной хэш-кода 256 бит
Длина сообщения , поэтому происходит заполнение неполного блока:
m: = 013231303938373635343332313039383736353433323130
3938373635343332313039383736353433323130393837363534333
Затем выполняется преобразование E (K, m):
Результат выполнения преобразования :
h = e3bbadbf78af3264c9137127608aa510de90ba4d3075665844965
fb611dbb1998d48552a0c0ce6bcba71bc802a4f5b2d2a07b12c22e
Изменяются значения переменных N и :
N = 0000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
Результат выполнения преобразования :
h = 70f22bada4cfe18a6a56ec4b3f328cd40db8e1bf8a9d5f711d5
efab11191279d715aab7648d07eddbf87dc79c80516e6ffcbcf5678
Результат выполнения преобразования :
h = 00557be5e584fd52a449b16b0251d05d27f94ab76cbaa6da890b59
d8ef1e159d2088e482e2acf564e0e9795a51e4dd261f3f667985a2
Хэш-кодом сообщения M1 является значение:
А.2. Пример 2
Пусть необходимо вычислить хэш-код сообщения
А.2.1. Для функции хэширования с длиной хэш-кода 512 бит
Длина сообщения , поэтому сначала преобразуется часть сообщения
m: = fbeafaebef20fffbf0e1e0f0f520e0ed20e8ece0ebe5f0f2f120
fff0eeec20f120faf2fee5e2202ce8f6f3ede220e8e6eee1e8f0f2d
Затем выполняется преобразование E (K, m):
Результат выполнения преобразования :
h = cd7f602312faa465e3bb4ccd9795395de2914e938f10f8e127b
7ac459b0c517b98ef779ef7c7a46aa7843b8889731f482e5d221e8
Изменяются значения переменных N и :
N = 000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
Длина оставшейся части сообщения меньше 512, поэтому происходит заполнение неполного блока.
m: = 000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000
Результат выполнения преобразования :
h = c544ae6efdf14404f089c72d5faf8dc6aca1db5e28577fc
07818095f1df70661e8b84d0706811cf92dffb8f96e61493 dc382795c6ed7a17b64685902cbdc878e.
Изменяются значения переменных N и :
N = 00000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000
Результат выполнения преобразования :
h = 4deb6649ffa5caf4163d9d3f9967fbbd6eb3da68f916b6a09f41
f2518b81292b703dc5d74e1ace5bcd3458af43bb456e837326088
Результат выполнения преобразования :
h = 28fbc9bada033b1460642bdcddb90c3fb3e56c497ccd0f62b8a2
ad4935e85f037613966de4ee00531ae60f3b5a47f8dae06915d5
Хэш-кодом сообщения является значение:
А.2.2. Для функции хэширования с длиной хэш-кода 256 бит
Длина сообщения , поэтому сначала преобразуется часть сообщения
m: = fbeafaebef20fffbf0e1e0f0f520e0ed20e8ece0ebe5f0f2f120
fff0eeec20f120faf2fee5e2202ce8f6f3ede220e8e6eee1e8f0f2
Затем выполняется преобразование E (K, m):
Результат выполнения преобразования :
h = 203cc15dd55fcaa5b7a3bd98fb2408a67d5b9f33a80bb50540852
b204265a2c1aaca5efe1d8d51b2e1636e34f5becc077d930114
Изменяются значения переменных N и :
N = 0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000
Длина оставшейся части сообщения меньше 512, поэтому происходит заполнение неполного блока:
m = 000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
Результат выполнения преобразования :
h = a69049e7bd076ab775bc2873af26f098c538b17e39a5c027
d532f0a2b3b56426c96b285fa297b9d39ae6afd8b9001d97bb718a65
Изменяются значения переменных N и :
N = 0000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
Результат выполнения преобразования :
h = aee3bd55ea6f387bcf28c6dcbdbbfb3ddacc67dcc13dbd8d548
c6bf808111d4b75b8e74d2afae960835ae6a5f03575559c9fd839783
Результат выполнения преобразования :
h = 508f7e553c06501d749a66fc28c6cac0b005746d97537fa85d9
e40904efed29dc345e53d7f84875d5068e4eb743f0793d673f09741f
Хэш-кодом сообщения является значение:
БИБЛИОГРАФИЯ <*>
<*> Оригиналы международных стандартов ИСО/МЭК находятся во ФГУП "Стандартинформ" Федерального агентства по техническому регулированию и метрологии.