|  | 
| Утвержден Постановлением Госстандарта России от 23 мая 1994 г. N 154 Дата введения - 1 января 1995 года ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ ФУНКЦИЯ ХЭШИРОВАНИЯ INFORMATION
TECHNOLOGY. CRYPTOGRAPHIC DATA SECURITY. HASHING FUNCTION ГОСТ Р 34.11-94 ПРЕДИСЛОВИЕ 1. Разработан
Главным управлением безопасности связи Федерального агентства правительственной
связи и информации и Всероссийским научно-исследовательским институтом
стандартизации. Внесен Техническим комитетом по стандартизации ТК 22 "Информационная
технология" и Федеральным агентством правительственной связи и информации. 2. Принят и
введен в действие Постановлением Госстандарта России от 23.05.94 N 154. 3. Введен впервые. ВВЕДЕНИЕ Расширяющееся применение информационных
технологий при создании, обработке, передаче и хранении документов требует в
определенных случаях сохранения конфиденциальности их содержания, обеспечения
полноты и достоверности. Одним из эффективных направлений защиты
информации является криптография (криптографическая защита), широко применяемая
в различных сферах деятельности в государственных и коммерческих структурах. Криптографические методы защиты
информации являются объектом серьезных научных исследований и стандартизации на
национальных, региональных и международных уровнях. Настоящий стандарт определяет процедуру
вычисления хэш-функции для любой последовательности двоичных символов. Функция хэширования
заключается в сопоставлении произвольного набора данных в виде
последовательности двоичных символов и его образа фиксированной небольшой
длины, что позволяет использовать эту функцию в процедурах электронной цифровой
подписи для сокращения времени подписывания и
проверки подписи. Эффект сокращения времени достигается за счет вычисления
подписи только под образом подписываемого набора данных. 1. ОБЛАСТЬ
ПРИМЕНЕНИЯ Настоящий стандарт определяет алгоритм и
процедуру вычисления хэш-функции для любой последовательности двоичных
символов, которые применяются в криптографических методах обработки и защиты
информации, в том числе для реализации процедур электронной цифровой подписи
(ЭЦП) при передаче, обработке и хранении информации в автоматизированных
системах. Определенная в настоящем стандарте
функция хэширования используется при реализации
систем электронной цифровой подписи на базе асимметричного криптографического
алгоритма по ГОСТ Р 34.10. 2. НОРМАТИВНЫЕ
ССЫЛКИ В настоящем стандарте использованы ссылки
на следующие стандарты: ГОСТ 28147-89. Системы обработки
информации. Защита криптографическая. Алгоритмы криптографического преобразования. ГОСТ Р 34.10-94.
Информационная технология. Криптографическая защита информации. Процедуры
выработки и проверки электронной цифровой подписи на базе асимметричного
криптографического алгоритма. 3. ОБОЗНАЧЕНИЯ В настоящем стандарте используются
следующие обозначения: В* - множество всех конечных слов в
алфавите В = {0,1}. Чтение слов и нумерация знаков
алфавита (символов) осуществляются справа налево (номер правого символа в слове
равен единице, второго справа - двум и т.д.). |А| - длина слова А
принадлежит В*. V (2) - множество всех бинарных слов длины k. k А||В - конкатенация слов А, В принадлежат В* - слово длины |А| + |В|, в котором левые |А| символов образуют слово А, а правые |В| символов образуют слово В. Можно также использовать обозначение А||В = АВ. k А - конкатенация k экземпляров слова А (А принадлежит В*). <N> - слово длины k, содержащее двоичную запись вычета k k N(mod 2 ) неотрицательного целого числа N. ~ А - неотрицательное целое число, имеющее двоичную запись А (А принадлежит В*). {+} - побитовое сложение слов одинаковой длины по модулю 2. ~ ~ {+}' - сложение по правилу А {+}' В = <A + B> , (k = |A| = k |B|). М - последовательность двоичных символов, подлежащая хэшированию (сообщение в системах ЭЦП), М принадлежит В*. h - хэш-функция, отображающая последовательность М принадлежит В* в слово h(M) принадлежит V (2). 256 Е (А) - результат зашифрования слова А на ключе К с к использованием алгоритма шифрования по ГОСТ 28147 в режиме простой замены (К принадлежит V (2), A принадлежит V (2)). 256 64 Н - стартовый вектор хэширования. e := g - присвоение параметру е значения g. 4. ОБЩИЕ ПОЛОЖЕНИЯ Под хэш-функцией h понимается зависящее от параметра [стартового вектора хэширования Н, являющегося словом из V (2)] 256 отображение: h: B* -----------> V (2). 256 Для определения хэш-функции необходимы: - алгоритм вычисления шаговой функции хэширования каппа, т.е. отображения: каппа: V (2) x V (2) -----> V (2); 256 256 256 - описание итеративной процедуры вычисления значения хэш-функции h. 5. ШАГОВАЯ ФУНКЦИЯ ХЭШИРОВАНИЯ Алгоритм вычисления шаговой функции хэширования включает в себя три части, реализующие последовательно: - генерацию ключей - слов длины 256 битов; - шифрующее преобразование - зашифрование 64-битных подслов слова Н на ключах K (i = 1, 2, 3, 4) с использованием алгоритма i по ГОСТ 28147 в режиме простой замены; - перемешивающее преобразование результата шифрования. 5.1. Генерация ключей Рассмотрим Х = (b , b ,..., b ) принадлежит V (2). 256 255 1 256 Пусть X = x ||x ||x ||x = 4 3 2 1 = эта ||эта ||...||эта = 16 15 1 = кси ||кси ||...||кси , 32 31 1 где: ___ х = (b ,..., b ) принадлежит V (2), i = 1,4; i i x 64 (i - 1) x 64 + 1 64 ___ эта = (b ,..., b ) принадлежит V (2), j = 1,6; j j x 16 (j - 1) x 16 + 1 16 ____ кси = (b ,..., b ) принадлежит V (2), k = 1,32. k k x 8 (k - 1) x 8 + 1 8 Обозначают A(X) = (x {+} x )||x ||x ||x . 1 2 4 3 2 Используют преобразование P: V (2) ----> V (2), 256 256 слова кси ||...||кси в слово кси ||...||кси , 32 1 фи(32) фи(1) где: фи(i + 1 + 4(k - 1)) = 8i + k, i = от 0 до 3, k = от 1 до 8. Для генерации ключей необходимо использовать следующие исходные данные: - слова Н, M принадлежат V (2); 256 - параметры: слова С (i = 2, 3, 4), имеющие значения: i 256 8 8 16 24 16 8 8 8 2 8 8 8 8 4 8 8 4 С = С = 0 и С = 1 0 1 0 1 0 (0 1 ) 1 0 (0 1 ) (1 0 ) . 2 4 3 При вычислении ключей реализуется следующий алгоритм: 1. Присвоить значения i := 1, U := H, V := M. 2. Выполнить вычисление ___ W = U {+} V, K = P(W). i 3. Присвоить i := i + 1. 4. Проверить условие i = 5. При положительном исходе перейти к шагу 7. При отрицательном - перейти к шагу 5. 5. Выполнить вычисление: ___ ___ U := A(U) {+} C , V := A(A(V)), W := U {+} V, K = P(W). i i 6. Перейти к шагу 3. 7. Конец работы алгоритма. 5.2. Шифрующее преобразование На данном этапе осуществляется зашифрование 64-битных подслов слова Н на ключах K (i = 1, 2, 3, 4). i Для шифрующего преобразования необходимо использовать следующие исходные данные: ___ H = h ||h ||h ||h , - h принадлежит V (2), i = 1,4 4 3 2 1 i 64 и набор ключей К , К , К , К . 1 2 3 4 Реализуют алгоритм зашифрования и получают слова:                           s 
= E  (h ),                            i    к   i                                  i    
где i = 1, 2, 3,
4. В результате данного этапа образуется последовательность: S = s ||s ||s ||s . 4 3 2 1 5.3. Перемешивающее преобразование На данном этапе осуществляется перемешивание полученной последовательности с применением регистра сдвига. Исходными данными являются: слова Н, М принадлежат V (2) и слово S принадлежит V (2). 256 256 Пусть отображение: фи: V (2) ----> V (2) 256 256 преобразует слово: ____ эта ||...||эта , эта принадлежит V (2), i = 1,16 16 1 1 16 в слово: ___ ___ ___ ___ ___ эта {+} эта {+} эта {+} эта {+} эта {+} эта ||эта ||...||эта . 1 2 3 4 13 16 16 2 Тогда в качестве значения шаговой функции хэширования принимается слово: 61 ___ ___ 12 каппа(М, Н) = фи (Н {+} фи(М {+} фи (S))), i где фи - i-я степень преобразования фи. 6. ПРОЦЕДУРА ВЫЧИСЛЕНИЯ ХЭШ-ФУНКЦИИ Исходными данными для процедуры вычисления значения функции h является подлежащая хэшированию последовательность М принадлежит В*. Параметром является стартовый вектор хэширования Н - произвольное фиксированное слово из V (2). 256 Процедура вычисления функции h на каждой итерации использует следующие величины: М принадлежит В* - часть последовательности М, не прошедшая процедуры хэширования на предыдущих итерациях; H принадлежит V (2) - текущее значение хэш-функции; 256 СИГМА принадлежит V (2) - текущее значение контрольной 256 суммы; L принадлежит V (2) - текущее значение длины обработанной на 256 предыдущих итерациях части последовательности М. Алгоритм вычисления функции h включает в себя этапы: Этап 1 Присвоить начальные значения текущих величин: 1.1. М := М 1.2. Н := Н 256 1.3. СИГМА := 0 256 1.4. L := 0 1.5. Переход к этапу 2. Этап 2 2.1. Проверить условие |М| > 256. При положительном исходе перейти к этапу 3. В противном случае выполнить последовательность вычислений: ~ 2.2. L := <L + |M|> 256 - |М| 256 2.3. М' := 0 ||М 2.4. СИГМА := СИГМА {+}' М' 2.5. Н := каппа(М', Н) 2.6. Н := каппа(L, H) 2.7. Н := каппа(СИГМА, H) 2.8. Конец работы алгоритма. Этап 3 3.1. Вычислить подслово М принадлежит V (2) слова М (М = s 256 М ||М ). Далее выполнить последовательность вычислений: p s 3.2. H := каппа(М , Н) s 3.3. L := <L + 256> 256 ___ 3.4. СИГМА := СИГМА {+}' М s 3.5. М := М p 3.6. Перейти к этапу 2. Значение величины Н, полученное на шаге 2.7, является значением функции хэширования h(M). Проверочные примеры для вышеизложенной процедуры вычисления хэш-функции приведены в Приложении А. Приложение А (справочное) ПРОВЕРОЧНЫЕ ПРИМЕРЫ Заполнение узлов замены пи , пи ,..., пи и значение 1 2 8 стартового вектора хэширования Н, указанные в данном Приложении, рекомендуется использовать только в проверочных примерах для настоящего стандарта. А.1. Использование алгоритма ГОСТ 28147 В качестве шифрующего преобразования в приводимых ниже примерах используется алгоритм ГОСТ 28147 в режиме простой замены. При этом заполнение узлов замены пи , пи ,..., пи блока 1 2 8 подстановки пи следующее: │8 7 6 5 4 3 2 1 ────────┼─────────────────────────────────────────────────────── 0 │1 D 4 6 7 5 E 4  1       │F      B     
B     
C      D      8     
B      A  2       │D      4     
A      7      A     
1      4      9  3       │0      1     
0      1      1     
D      C      2  4       │5      3     
7      5      0     
A      6      D  5       │7      F     
2      F      8     
3      D      8  6       │A      5     
1      D      9     
4      F      0  7       │4      9   
  D      8     
F      2      A     
E  8       │9      0     
3      4      E     
E     
2      6  9       │2      A     
6      A      4     
F      3      B  10      │3      E     
8      9      6     
C      8      1  11      │E      7     
5      E      C     
7      1      C  12      │6      6     
9      0      B     
6      0      7  13      │B      8     
C      3      2     
0      7      F  14      │8      2     
F      B      5     
9      5      5 15 │C C E 2 3 B 9 3 ___ В столбце с номером j, j = 1,8, в строке с номером i, i = ____ 0,15, приведено значение пи (i) в шестнадцатеричной системе j счисления. А.2. Представление векторов Последовательности двоичных символов будем записывать как строки шестнадцатеричных цифр, в которых каждая цифра соответствует четырем знакам ее двоичного представления. А.3. Примеры вычисления значения хэш-функции В качестве стартового вектора хэширования принимают, например, нулевой вектор: Н = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000. А.3.1. Пусть необходимо выполнить хэширование сообщения: М = 73657479 62203233 3D687467 6E656C20 2C656761 7373656D 20736920 73696854. Выполняют присвоение начальных значений: текста М = 73657479 62203233 3D687467 6E656C20 2С656761 7373656D 20736920 73696854 хэш-функции Н = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 суммы блоков текста СИГМА = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 длины текста L = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000. Так как длина сообщения, подлежащего хэшированию, равна 256 битам (32 байтам), L = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 М' = М = 73657479 62203233 3D687467 6E656C20 2C656761 7373656D 20736920 73696854, то нет необходимости дописывать текущий блок нулями, СИГМА = М' = 73657479 62203233 3D687467 6E656C20 2C656761 7373556D 20736920 73696854. Переходят к вычислению значения шаговой функции хэширования каппа(М, Н). Вырабатывают ключи:     K  =    733D2C20       65686573      74746769       79676120     
1      626E7373       20657369      326C6568       33206D54    
K  =    110C733D       0D166568      130E7474       06417967     
2      1D00626E       161A2065      090D326C       4D393320    
K  =    80B111F3       730DF216      850013F1       C7E1F941     
3      620C1DFF       3ABAE91A      3FA109F2       F513B239    
K  =    A0E2804E       FF1B73F2      ECE27A00       E7B8C7E1 4 EE1D620C AC0CC5BA A804C05E A18B0AEC. Осуществляют зашифрование 64-битных подслов блока Н с помощью алгоритма по ГОСТ 28147. Блок h = 00000000 00000000 зашифровывают на ключе K и 1 1 получают s = 42ABBCCE 32BC0B1B. 1 Блок h = 00000000 00000000 зашифровывают на ключе K и 2 2 получают s = 5203EBC8 5D9BCFFD. 2 Блок h = 00000000 00000000 зашифровывают на ключе K и 3 3 получают s = 8D345899 00FF0E28. 3 Блок h = 00000000 00000000 зашифровывают на ключе K и 4 4 получают s = E7860419 0D2A562D. 4 Получают:     S =    E7860419       0D2A562D      8D345899       00FF0E28            5203EBC8       5D9BCFFD      42ABBCCE       32BC0B1B. Выполняют перемешивающее преобразование с применением регистра сдвига и получают: КСИ = каппа(М, H) = CF9A8C65 505967A4 68A03B8C 42DE7624 D99C4124 883DA687 561C7DE3 3315C034. Полагают H = КСИ, вычисляют каппа(L, H):     K  =     CF68D956      9AA09C1C       8C3B417D      658C24E3     
1       50428833      59DE3D15       6776A6C1      A4248734    
K  =     8FCF68D9      809AA09C       3C8C3B41      C7658C24     
2       BB504288      2859DE3D       666676A6      B3A42487    
K  =     4E70CF97      3C8065A0       853C8CC4      57389A8C     
3       CABB50BD      E3D7A6DE       D1996788      5CB35B24    
K  =     584E70CF      C53C8065       48853C8C      1657389A     
4       EDCABB50      78E3D7A6       EED19867      7F5CB35B    
S =      66B70F5E      F163F461       468A9528      61D60593              E5EC8A37      3FD42279       3СD1602D     
DD783E86    
КСИ =    2B6EC233      C7BC89E4       2ABC2692      5FEA7285              DD3848D1      C6AC997A       24F74E2B      09A3AEF7. Вновь полагают H = КСИ и вычисляют каппа(СИГМА, H):     K  =   5817F104       0BD45D84      B6522F27      4AF5B00B    
 1     A531B57A       9C8FDFCA      BB1EFCC6      D7A517A3    
K  =   E82759E0       C278D950      15CC523C      FC72EBB6     
2     D2C73DA8       19A6CAC9      3E8440F5      C0DDB65A    
K  =   77483AD9       F7C29CAA      EB06D1D7      841BCAD3     
3     FBC3DAA0       7CB555F0      D4968080      0A9E56BC    
K  =   Al157965       2D9FBC9C      088C7CC2      46FB3DD2     
4     7684ADCB       FA4ACA06      53EFF7D7      C0748708    
S =    2AEBFA76       A85FB57D      6F164DE9      2951A581            C31E7435       4930FD05      1F8A4942      550A582D    
КСИ =  FAFF37A6      
15A81669      1CFF3EF8      B68CA247            E09525F3       9F811983      2EB81975      D366C4B1. Таким образом, результат хэширования есть:     H =  FAFF37A6       15A81669       1CFF3EF8       B68CA247          E09525F3       9F811983       2EB81975       D366C4B1. А.3.2. Пусть необходимо выполнить хэширование сообщения: М = 7365 74796220 3035203D 20687467 6E656C20 73616820 65676173 73656D20 6C616E69 6769726F 20656874 2065736F 70707553. Так как длина сообщения, подлежащего хэшированию, равна 400 битам (50 байтам), то разбивают сообщение на два блока и второй (старший) блок дописывают нулями. В процессе вычислений получают:     ШАГ 1    
H = 00000000       00000000      00000000      00000000         00000000       00000000      00000000      00000000    
M =   73616820       65676173      73656D20       6C616E69           6769726F       20656874      2065736F       70707553    
K  =  73736720      
61656965      686D7273       20206F6F     
1    656C2070       67616570      616E6875       73697453    
K  =  14477373      
0C0C6165      1F01686D       4F002020     
2    4C50656C       04156761      061D616E 
     1D277369    
K  =  CBFF14B8      
6D04F30C      96051FFE       DFFFB000     
3    35094CAF       72F9FB15      7CF006E2       AB1AE227    
K  =  EBACCB00      
F7006DFB      E5E16905       B0B0DFFF     
4    BA1C3509       FD118DF9      F61B830F       F8C554E5    
S =   FF41797C       EEAADAC2      43C9B1DF       2E14681С           EDDC2210       1EE1ADF9      FA67E757       DAFE3AD9    
КСИ =
F0CEEA4E       368B5A60      C63D96C1       E5B51CD2           A93BEFBD       2634F0AD      CBBB69CE       ED2D5D9A    
ШАГ 2    
H =   F0CEEA4E       368B5A60      C63D96C1       E5B51CD2           A93BEFBD       2634F0AD      CBBB69CE       ED2D5D9A    
M' =  00000000  00000000 00000000 00007365           74796220 
3035203D 20687467 6E656C20    
K  =  F0C6DDEB      
CE3D42D3      EA968D1D       4EC19DA9     
1    36E51683       8BB50148      5A6FD031       60B790BA    
K  =  16A4C6A9      
F9DF3D3B      E4FC96EF       5309C1BD     
2    FB68E526       2CDBB534      FE161C83       6F7DD2C8    
K  =  C49D846D      
1780482C      9086887F       C48C9186     
3    9DCB0644       D1E641E5      A02109AF       9D52C7CF    
K  =  BDB0C9F0      
756E9131      E1F290EA       50E4CBB1     
4    1CAD9536       F4Е4B674     
99F31E29       70C52AFA    
S =   62A07EA5       EF3C3309      2CE1B076       173D48CC           6881EB66       F5C7959F      63FCA1F1       D33C31B8    
КСИ =
95BEA0BE       88D5AA02      FE3C9D45       436CE821           B8287CB6       2CBC135B      3E339EFE       F6576CA9    
ШАГ 3    
H =  95BEA0BE       88D5AA02      FE3C9D45       436CE821          B8287CB6       2CBC135B      3E339EFE       F6576CA9 L = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000190    
K  =  95FEB83E      
BE3C2833      A09D7C9E       BE45B6FE     
1    88432CF6       D56CBC57      AAE8136D       02215B39    
K  =  8696FEB8      
1BBE3C28      E2A09D7C       48BE45B6     
2    DA88432C       EBD56CBC      7FABE813       F292215B    
K  =  В9799501       141B413C      1EE2A062       0CB74145     
3    6FDA88BC       D0142A6C      FA80AA16       15F2FDB1    
K  =  94B97995      
7D141B41      C21EE2A0       040CB741     
4    346FDA88       46D0142A      BDFA81AA       DC1562FD    
S =   D42336E0       2A0A6998      6C65478A       3D08A1B9           9FDDFF20       4808E863      94FD9D6D       F776A7AD    
КСИ =
47E26AFD       3E7278A1      7D473785       06140773           A3D97E7E       A744CB43      08AA4C24       3352C745    
ШАГ 4    
H =     47E26AFD      3E7278A1       7D473785      06140773             A3D97E7E      A744CB43       08AA4C24      3352C745    
СИГМА =
73616820      65676173       73656D20      6C61Е1СЕ             DBE2D48F      509A88B1       40CDE7D6      DED5E173    
K  =    340E7848      83223B67       025AAAAB      DDA5F1F2     
1      5B6AF7ED      1575DE87       19E64326      D2BDF236    
K  =    03DC0ED0      F4CD26BC       8B595F13      F5A4A55E     
2      A8B063CB      ED3D7325       6511662A      7963008D    
K  =    C954EF19      D0779A68       ED37D3FB      7DA5ADDC     
3      4A9D0277      78ЕF765В       C4731191      7EBB21B1    
K  =    6D12BC47      D9363D19       1E3C696F      28F2DC02     
4      F2137F37      64E4C18B       69CCFBF8      EF72B7E3    
S =     790DD7A1      066544EA       2829563C      3C39D781             25EF9645      EE2C05DD       A5ECAD92      2511A4D1    
КСИ =   0852F562     
3B89DD57       AEB4781F      E54DF14E EAFBC135 0613763A 0D770AA6 57BA1A47. Таким образом, результат хэширования есть:      H =    0852F562       3B89DD57      AEB4781F       E54DF14E             EAFBC135       0613763A      0D770AA6       57BA1A47. | 
|  | © Информационно-справочная онлайн система "Технорма.RU" , 2010. Бесплатный круглосуточный доступ к любым документам системы. При полном или частичном использовании любой информации активная гиперссылка обязательна. Внимание! Все документы, размещенные на этом сайте, не являются их официальным изданием. |