6 Процедура вычисления хэш-функции
Исходными данными для процедуры вычисления значения функции h является подлежащая хэшированию последовательность Мб В*. Параметром является стартовый вектор хэширования Н— произвольное фиксированное слово из Vzse (2).
Процедура вычисления функции h на каждой итерации использует следующие величины:
М(-В*—часть последовательности М, не прошедшая процедуры хэширования на предыдущих итерациях;
НбУ2бб(2) —текущее значение хэш-функции;
26 Уг5б(2) —текущее значение контрольной суммы;
L6 Уг5б(2) — текущее значение дли'ны обработанной на предыдущих итерациях части последовательности М.
Алгоритм вычисления функции h включает в себя этапы:
Этап 1 Присвоить начальные значения текущих величин ;
1.1 М:=М
1.2 Н:=Н
1.3 Е:==0'-1"" • 1.4 L:=026"
1.5 Переход к этапу 2 Этап 2
2.1 Проверить условие |М|>256.
При положительном исходе перейти к этапу 3.
В противном случае выполнить последовательность вычислений:
2.2 L:=<L+|M|>256
23 М^^О256-1"' ||М
24 Е:==ЕФ'М'
2.5 Н:=х(М', Н)
2.6 H:=x(L, H) ;
2.7 Н:=1^, Н) -
2.8 Конец работы алгоритма '.
Этап 3
3.1 Вычислить подслово Ms6V256(2) слова М (М==Мр||М,)-Далее выполнить последовательность вычислений:
3.2 Н:=х(М„ Н)
3.3 L:=<L+256>2ee
3.4 E^E'e'M,
3.5 M:=Mp
3.6 Перейти к этапу 2.
Значение величины Н, полученное на шаге 2.7, является значением функции хэширования h (М).
Проверочные примеры для вышеизложенной процедуры вычисления хэш-функции приведены в приложении А.
Приложение а
(справочное)
ПРОВЕРОЧНЫЕ ПРИМЕРЫ
llrVJUI-la ^ - _^
Заполнение узлов замены п\, яа,..., Лв и значение стартового вектора хэширования Н, указанные в данном приложении, рекомендуется использовать только в проверочных примерах для настоящего стандарта.
A.I Использование алгоритма ГОСТ 28147
В качестве шифрующего преобразования в приводимых ниже примерах используется алгоритм ГОСТ 28147 в режиме простой замены. ''
При этом заполнение узлов замены п\, лг,..., Пв блока подстановки я"
<ледующее:
f 8 7 6 5 4 3 '2 • 1
i0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
8 1 Р D 0 5 7 . • A 4 9 2 3 E 6 В 8 С
|
7 D В 4 1 3 F 5 9 0 А E 7 6 8 2 С
|
b 4 В А 0 7 2 D 3 6 8 5 9 С .Р F.
|
0 6 С 7 1 0 F П 8 4 A 9 E 0 3 В 2 '~R~ в ст
|
7 D A 1 0 8 9 F E 4 6 С В 2 5 3 ооке с
|
5 8 ' 1 D А 3 4 2 E Р С 7 . 6 0 9 В номером
|
E В 4 'С 6 U F A 2 3 ' в I 0 7 S ' 9 >, i-OX"
|
4 A 9 2 D 8 0 E 6 В 1 С 7 F 5 3 при
|
r 4
'ii I с с г. ^
В столбце с номером ], )'=1,8, в, строке с номером i, i— 0,15, приведено значение Л)(0 в шестнадцатеричной системе счисления.
А.2 Представление векторов
Последовательности двоичных символов будем записывать как строки шестнадцатиричных цифр, в которых каждая цифра соответствует четырем знакам
<е двоичного представления.
А.З П р и м е р ы вычисления значения хэш-ф^ункции
В качестве стартового вектора хэширования принимают, например, нулевой вектор
н=ооооаооо оооооооо оооаоооо ооюооооо
00000000 ОООООООО ОООООООО ООйООООО А.3.1 Пусть необходимо выполнить хэширование сообщения
М- 73657479 622103233 3D687467 6Е656С20 ix 2С656761 7373696D 20736920 73696854
• Выполняют присвоение начальных значений:
текста , М-73657479 ^">03233 3D687467 6Е656С20
1СеЭ6761 7373656D 20736920 73696854 »
дэш-функции
н=оооаоооо оооооооо
00000000 ОООООООО ОООООООО ООЙООООО
OOOOQOOO ОООООООО ., -суммы блоков текста
Д^ОООООООЮ ОООООООО ОООООООО ЮООООООО
оооооооо оооооооо
00000000 ОООООООО
длины текста L-= ОООООООО ОООООООО
оооооооо
оооооооо
ОООООООО
001000000-
ОООООООО
00000000 ОООООООО 00000100
L=001000000 OOOQOOOO 00000000 ОООООООО
М'=М= 73657479'62203233 3D687467 6Е656С20
2С696761 7373656D 30736920 73696854, то
нет необходимости дописывать текущий блок нулями,
2=М'= 73657479 62203233 3D687467 6Е656С20 2С656761 7373656D 20736920 73696854
Переходят к вычислению значения шаговой функции хэширования х (М, Н). Вырабатывают ключи
" '»nnr-\Ct/^rhrt ;;[
Kl-
|
733D2C20 626Е7373
|
65686573 20657369'"
|
747467C9 326C6568
|
79676120 33206D54
|
к»»
|
110C733D 1D00626E
|
OD 166568 161A2065
|
130E7474 090D326C
|
061417967 •4D393320
|
к.-
|
80B111F3 620C1DFF
|
730DF216 3ABAE91A
|
850013F1 3FA109F2
|
C7E1F941 FB13B239
|
К4-
|
АОЕ2804Е EE1D620C
|
FF1B73F2 ACOCC5BA
|
ЕСЕ27АЙО A804C05E
|
E7B8C7E1 A18BOAEC
|
Осуществляют зашифрование W-битных подслов блока Н с помощью алгоритма по ГОСТ 28147.
Блок hi =00000000 ОООООООО зашифровывают на ключе Ki и получают Si—
-42АВВССЕ 32BGOB1B.
Блок ha=00000000 OOOOOIQOO зашифровывают на ключе Кд и получают за™'
=5203ЕВС8 5D9BCFFD.
Блок ha =00000000 ОООООООО зашифровывают на ключе К» и получают s»—
-8D345899 OOFFOE28.
Блок h4= ОООООООО 000100000 зашифровывают на ключе К« и получают 84—
=Е7860419 OD2A962D. Получают
S- E7860419 OD2A562D 8D345899 &3FFOE28 5203ЕВС8 5D9BCFFD 42АВВССЕ 32ВСОВ1В
с
Выполняют перемешивающее преобразование с применением регистра сдвига и получают •
В-х(М,Н)= CF9A8C65 Э35967А4 68AU3B8C 42DE7624' D99C4124 883DA687 S61C7J3E3 3315С034
;Т Р 34
|
1.11-М
|
|
|
|
Полага
|
ют H=S, вы1
|
числяют х (L
|
-, Н):
|
|
К,-
|
CP68D956 50428833
|
9АА09С1С 59DE3D15
|
8C3B417D 6776А6С1
|
658С24ЕЗ А4248734
|
К,»
|
8FCF68D9 ВВ504288
|
в09АА'С9С 2859DE3D
|
ЗС8СЗВ41 666676А'5
|
С7658С24 B3Ai42487
|
Ка°
|
4E70CF97 CABB50BD
|
3C8.GS5AO E3D7A6DE
|
853С8СС4 01936788
|
57389A8C 6CB35B24
|
К,"
|
584E70CF EDCABB50
|
С53С8065 78E3D7A6
|
48853С8С EED 19867
|
1657389A 7F5CB35B
|
S=
|
66B70F5E Е5ЕС8А37
|
F163P461 3FD42279
|
468А9528 3CD1602D
|
61D60593 DD763E86
|
S=
|
2В6ЕС233 DD3848D1
|
С7ВС89Е4 С6АС997А
|
2АВС2692 24F74E2B
|
5FEA7285 09A3AEF7
|
Вновь
|
полагают Н==
|
Е и вычисляют х (2, Н)':
|
||
К,-
|
5817F104 А531В57А
|
OBD45D84 9C8FDFCA
|
B6522F27 BB1EFCC6
|
4AF5BOOB D7A517A3
|
Кг-
|
Е82759ЕО D2C73DA8
|
C278D950 19А6САС9
|
15СС523С 3E8440F5
|
FC72EBB6 CODDB65A
|
Кз=
|
77483AD9 FBC3DAAO
|
F7C29CAA 7CB555FO
|
EB06D1D7 D4968080
|
641BCAD3 OA9E56BC
|
к<°
|
А 1157965 768 4 AD CB
|
2D9FBC9C FA4ACA06
|
С88С7СС2 53EFF7D7
|
46FB3DD2 C07487081
|
S"
|
2AEBFA76 С31Е7435
|
A85FB57D 4930FD05
|
6F164DE9 1F18A4942
|
2951A581 550A582D
|
5=
|
FAFF37A6 E09525F3
|
15А81669 9F811983
|
1CFF3EF8 2ЕВ81975
|
B68CA247 D366C4B1
|
Таким образом, результат хэширования есть
Н= FAFF37A6 15А81669 1CFF3EF8 B68CA247 E0.9525F3 9F811983 2ЕВ81975 D366C4B1
А.3.2 Пусть необходимо выполнить хэширование сообщения ,
М= 7365 7479622Й 3035203D 2С687467 6Е656С20 73616820 65676173 73656D20 6С616Е69 6769726F 20656874 2065736Р 707107553
Tax как длина сообщения, подлежащего хэшированию, равяа 400 битам (50 байтам), то разбивают сообщение на два блока и второй (старший) блок дописывают нулями В процессе вычислений получают:
Ш/ Н= М= Кг
|
t
|
Г 1 000( ото
|
ЗДОЮО П0001 00000 ОООС 73616820 6769726Р 73736720 656С2070
|
30 10(
|
'00 000000 ЖО ООНЗОС 65676173 20656874 61656965 67616570
|
00 100
|
ortcoonoo 00000000 73656D20 2065736F 6S5D7273 616E6875
|
6С616Е69 710707553 20206F6F 73697453
|
K,-
|
14477373 4С50656С
|
ОСОС6166 lFi01686D 04156761 061D616E
|
4РООЙ020 1D277369
|
Кэ-
|
CBFF114B8 35094CAF
|
6D04F30C 96051FFE 72F9FB15 7CF006E2
|
DFFFBO'00 AB1AE227
|
К4»
|
ЕВАССВОО ВА1С350.9
|
F7006DFB E5E 16905 FD118DF9 F)61B830'F
|
BOBODFFF F8C554E5
|
s=
|
FF41797C EDDC2210
|
EEAADAC2 43C9B1DF 1EE1ADF9 FA67E757
|
2E114681C DAFE3AD9
|
. s-
|
FOCEEA4E A93BEFBD
|
368B5A60 C63D96C1 2634FOAD CBBB69CE
|
E5B51CD2 ED2D5D9A
|
ШАГ
|
2
|
|
|
H~
|
FOCEEA4E A93BEFBD
|
368B5A60 C63D96C1 2634F'OAD CBBB69CE
|
E5B51CD2 ED2D5D9A
|
М'=
|
00000000 001000000 00000000 .00007365 714796220 3035203D 20687467 6Е656С20
|
||
Ki=
|
FOC6DDEB 36Е51683
|
CE3D42D3 EA968D1D 8BB50148 5A6FD03I
|
4EC19DA9 80B790BA
|
Ка-
|
16А4С6А9 FB68E526
|
F9DF3D3B E4FC96EF 2CDBB534 FE161C83
|
5339C1BD 6F7DD2C8
|
Кз=
|
C49D846D 9DCB0644
|
1780482C 9086887F D1E641E5 A02109AF
|
C48C9186 9D52C7CF
|
К4=
|
BDBOC9FO 1CAD9536
|
7Э6Е9131 E1F290EA F4B4B674 99F31E29
|
50E4CBB1 70C52AFA
|
S-
|
62А07ЕА5 6881ЕВ6В
|
EF3C3309 2CE1B076 F5C7959F 63FCA1F1
|
1173D48CC D33C31B8
|
s=
|
96ВЕАОВЕ В82в7СВ6
|
88D6AA02 FE3C9D45 2CBC135B 3E339EFE,
|
436CE821 P6576CA9
|
ШАГ
|
3
|
|
|
Н-
|
95ВЕАОВЕ В8287СВ6
|
8&D5AA02 FE3C9D45 2CBC135B 3E339EFE
|
436CE821 F657CCA9
|
L-
|
010000000 00000000 00000000 00000000 00000000 00000000 00000000 00000190
|
||
К,-
|
95FEB83E 88432CF6
|
BE3C2833 A09D7C9E D56CBC57 AAE8136D
|
BE45B6FE 02215B39 •'
|
К.-
|
869CFEB8 DA88432C
|
1BBE3C28 E2A09D7C EBD56CBC 7FABE813
|
48ВБ45В6 F292215B
|
К»-
|
В9799ЭС1 6FDA88BC
|
141B413C 1EE2A062 D0142A6C РА'80ААГ6
|
SOCB74L45 15F2FDB1
|
К«-
|
94В97995 346FDA88
|
7D141B41 С21ЕЕ2АО 46D0142A BDFA81AA
|
040CB741 DC1562FD
|
S-
|
D42336EO 9FDDFF20
|
2АОА6998 6С65478А 48С8Е863 94FD9D6D
|
3D08A1B9 F776A7AD
|