Адрес документа: http://law.rufox.ru/view/25/1200004857.htm


ГОСТ Р 34.11-94

Группа П85


ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ


Информационная технология

КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ

Функция хэширования

Information technology.
Cryptographic Data Security.
Hashing function

    
    
ОКСТУ 5002

Дата введения 1995-01-01



Предисловие

    
    
    1 РАЗРАБОТАН Главным управлением безопасности связи Федерального агентства правительственной связи и информации и Всероссийским научно-исследовательским институтом стандартизации
    
    ВНЕСЕН Техническим комитетом по стандартизации ТК 22 "Информационная технология" и Федеральным агентством правительственной связи и информации
    
    2 ПРИНЯТ И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Госстандарта России от 23.05.94 N 154
    
    3 ВВЕДЕН ВПЕРВЫЕ
    
    

ВВЕДЕНИЕ

    
    
    Расширяющееся применение информационных технологий при создании, обработке, передаче и хранении документов требует в определенных случаях сохранения конфиденциальности их содержания, обеспечения полноты и достоверности.
    
    Одним из эффективных направлений защиты информации является криптография (криптографическая защита), широко применяемая в различных сферах деятельности в государственных и коммерческих структурах.
    
    Криптографические методы защиты информации являются объектом серьезных научных исследований и стандартизации на национальных, региональных и международных уровнях.
    
    Настоящий стандарт определяет процедуру вычисления хэш-функции для любой последовательности двоичных символов.
    
    Функция хэширования заключается в сопоставлении произвольного набора данных в виде последовательности двоичных символов и его образа фиксированной небольшой длины, что позволяет использовать эту функцию в процедурах электронной цифровой подписи для сокращения времени подписывания и проверки подписи. Эффект сокращения времени достигается за счет вычисления подписи только под образом подписываемого набора данных.
    
    

1 ОБЛАСТЬ ПРИМЕНЕНИЯ

    
    
    Настоящий стандарт определяет алгоритм и процедуру вычисления хэш-функции для любой последовательности двоичных символов, которые применяются в криптографических методах обработки и защиты информации, в том числе для реализации процедур электронной цифровой подписи (ЭЦП) при передаче, обработке и хранении информации в автоматизированных системах.
    
    Определенная в настоящем стандарте функция хэширования используется при реализации систем электронной цифровой подписи на базе асимметричного криптографического алгоритма по ГОСТ Р 34.10.
    
    

2 НОРМАТИВНЫЕ ССЫЛКИ

    
    
    В настоящем стандарте использованы ссылки на следующие стандарты:
    
    ГОСТ 28147-89 Системы обработки информации. Защита криптографическая. Алгоритмы криптографического преобразования.
    
    ГОСТ Р 34.10-94 Информационная технология. Криптографическая защита информации. Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма.
    
    

3 ОБОЗНАЧЕНИЯ

    
    
    В настоящем стандарте используются следующие обозначения:
    
     - множество всех конечных слов в алфавите . Чтение слов и нумерация знаков алфавита (символов) осуществляются справа налево (номер правого символа в слове равен единице, второго справа - двум и т.д.).
    
     - длина слова .
    
     - множество всех бинарных слов длины .
    
     - конкатенация слов - слово длины , в котором левые |А| символов образуют слово , а правые символов образуют слово . Можно также использовать обозначение .
    
     -  конкатенация экземпляров слова .
    
    - слово длины , содержащее двоичную запись вычета неотрицательного целого числа .
    
     - неотрицательное целое число, имеющее двоичную запись .
    
     - побитовое сложение слов одинаковой длины по модулю 2.
    
     - сложение по правилу , .
    
     - последовательность двоичных символов, подлежащая хэшированию (сообщение в системах ЭЦП), .
    
     - хэш-функция, отображающая последовательность в слово .
    
     - результат зашифрования слова на ключе с использованием алгоритма шифрования по ГОСТ 28147 в режиме простой замены .
    
     - стартовый вектор хэширования.
    
    : = - присвоение параметру значения .
    
    

4 ОБЩИЕ ПОЛОЖЕНИЯ

    
    
    Под хэш-функцией понимается зависящее от параметра [стартового вектора хэширования , являющегося словом из ] отображение
    

-------.

    
    Для определения хэш-функции необходимы:
    
    - алгоритм вычисления шаговой функции хэширования , т.е. отображения
    

------- ;

    - описание итеративной процедуры вычисления значения хэш-функции .
    
    

5 ШАГОВАЯ ФУНКЦИЯ ХЭШИРОВАНИЯ

    
    
    Алгоритм вычисления шаговой функции хэширования включает в себя три части, реализующие последовательно:
    
    - генерацию ключей - слов длины 256 битов;
    
    - шифрующее преобразование - зашифрование 64-битных подслов слова на ключах ( = 1, 2, 3, 4) с использованием алгоритма по ГОСТ 28147 в режиме простой замены;
    
    - перемешивающее преобразование результата шифрования.
    
    5.1 Генерация ключей
    
    Рассмотрим .
    

Пусть

 

 
    
    
    
,

где ;
    
    ;
    
    .
    
    Обозначают .
    
    Используют преобразование --------
слова в слово, ,
    
где
    
    Для генерации ключей необходимо использовать следующие исходные данные:
    
    - слова ;
    
    - параметры: слова (=2, 3, 4), имеющие значения
    
     и .
    
    При вычислении ключей реализуется следующий алгоритм:
    
    1 Присвоить значения
    
    .
    
    2 Выполнить вычисление
    
    

     
    3 Присвоить .
    
    4 Проверить условие .
    
    При положительном исходе перейти к шагу 7. При отрицательном - перейти к шагу 5.
    
    5 Выполнить вычисление
    
    , , , .
    
    6 Перейти к шагу 3.
    
    7 Конец работы алгоритма.
    
    5.2 Шифрующее преобразование
    
    На данном этапе осуществляется зашифрование 64-битных подслов слова на ключах (1, 2, 3, 4).
    
    Для шифрующего преобразования необходимо использовать следующие исходные данные:
    
    ,
    
    и набор ключей , , , .
    
    Реализуют алгоритм зашифрования и получают слова
    
    , где =1, 2, 3, 4.
    
    В результате данного этапа образуется последовательность
    
    .
    
    5.3 Перемешиваюшее преобразование
    
    На данном этапе осуществляется перемешивание полученной последовательности с применением регистра сдвига.
    
    Исходными данными являются:
    
    слова и слово .
    
    Пусть отображение
    
    --------
    
     преобразует слово
    
    , ,
    
    в слово
    
    .
    
    Тогда в качестве значения шаговой функции хэширования принимается слово
    
     ,
    
где - -я степень преобразования .
    

6 ПРОЦЕДУРА ВЫЧИСЛЕНИЯ ХЭШ-ФУНКЦИИ

    
    
    Исходными данными для процедуры вычисления значения функции является подлежащая хэшированию последовательность . Параметром является стартовый вектор хэширования - произвольное фиксированное слово из .
    
    Процедура вычисления функции на каждой итерации использует следующие величины:
    
- часть последовательности , не прошедшая процедуры хэширования на предыдущих итерациях;
    
- текущее значение хэш-функции;
    
- текущее значение контрольной суммы;
    
- текущее значение длины обработанной на предыдущих итерациях части последовательности .
    
    Алгоритм вычисления функции включает в себя этапы:
    
    Этап 1
    
    Присвоить начальные значения текущих величин
    
    1.1
    
    1.2
    
    1.3
    
    1.4
    
    1.5 Переход к этапу 2
    
    Этап 2
    
    2.1 Проверить условие .
    
    При положительном исходе перейти к этапу 3.
    
    В противном случае выполнить последовательность вычислений:
    
    2.2
    
    2.3
    
    2.4
    
    2.5
    
    2.6
    
    2.7
    
    2.8 Конец работы алгоритма
    
    Этап 3
    
    3.1 Вычислить подслово слова . Далее выполнить последовательность вычислений:
    
    3.2
    
    3.3
    
    3.4
    
    3.5
    
    3.6 Перейти к этапу 2.
    
    Значение величины , полученное на шаге 2.7, является значением функции хэширования .
    
    Проверочные примеры для вышеизложенной процедуры вычисления хэш-функции приведены в приложении А.
    
    

ПРИЛОЖЕНИЕ А

(справочное)

    
ПРОВЕРОЧНЫЕ ПРИМЕРЫ

    
    
    Заполнение узлов замены , ,..., и значение стартового вектора хэширования , указанные в данном приложении, рекомендуется использовать только в проверочных примерах для настоящего стандарта.
    
    А.1 Использование алгоритма ГОСТ 28147
    
    В качестве шифрующего преобразования в приводимых ниже примерах используется алгоритм ГОСТ 28147 в режиме простой замены.
    
    При этом заполнение узлов замены , ,..., блока подстановки следующее:
    


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

С

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

    
    В столбце с номером , , в строке с номером , , приведено значение в шестнадцатеричной системе счисления.
    
    А.2 Представление векторов
    
    Последовательности двоичных символов будем записывать как строки шестнадцатеричных цифр, в которых каждая цифра соответствует четырем знакам ее двоичного представления.
    
    А.3 Примеры вычисления значения хэш-функции
    
    В качестве стартового вектора хэширования принимают, например, нулевой вектор
    

         

=

00000000

00000000

00000000

00000000

 

 

00000000

00000000

00000000

00000000

    
    А.3.1 Пусть необходимо выполнить хэширование сообщения
    


=

73657479

62203233

3D687467

6Е656С20

 

 

2С656761

7373656D

20736920

73696854

    
    Выполняют присвоение начальных значений:
    
    текста
    


=

73657479

62203233

3D687467

6Е656С20

 

 

2С656761

7373656D

20736920

73696854

    
    хэш-функции
    

               

=

00000000

00000000

00000000

00000000

 

 

00000000

00000000

00000000

00000000

    
    суммы блоков текста
    

         

=

00000000

00000000

00000000

00000000

 

 

00000000

00000000

00000000

00000000

    
    длина текста
    

         

=

00000000

00000000

00000000

00000000

 

 

00000000

00000000

00000000

00000100

    
    Так как длина сообщения, подлежащего хэшированию, равна 256 битам (32 байтам),
    

        

=

00000000

00000000

00000000

00000000

 

 

00000000

00000000

00000000

00000100

    

        

=

73657479

62203233

3D687467

6Е656С20

 

 

2С656761

7373656D

20736920

73696854, то

    
    нет необходимости дописывать текущий блок нулями,
    


=

73657479

62203233

3D687467

6Е656С20

 

 

2С656761

7373656D

20736920

73696854

    
    Переходят к вычислению значения шаговой функции хэширования .
    
    Вырабатывают ключи
    


=

733D2C20

65686573

74746769

79676120

 

 

626Е7373
    
    

20657369

326С6568

33206D54

         

=

110C733D

0D166568

130E7474

06417967

 

 

1D00626E
    
    

    161A2065

090D326C

4D393320

         

=

80B111F3

730DF216

850013F1

C7E1F941

 

 

620C1DFF
    
     

3ABAE91A

3FA109F2

F513B239

         

=

A0E2804E

FF1B73F2

ECE27A00

E7B8C7E1

 

 

EE1D620C
     

AC0CC5BA

A804C05E

A18B0AEC

    
    Осуществляют зашифрование 64-битных подслов блока с помощью алгоритма по ГОСТ 28147.
    
    Блок = 00000000 00000000 зашифровывают на ключе и получают = 42АВВССЕ 32ВС0В1В.
    
    Блок = 00000000 00000000 зашифровывают на ключе и получают = 5203ЕВС8 5D9BCFFD.
    
    Блок = 00000000 00000000 зашифровывают на ключе и получают = 8D345899 00FF0E28.
    
    Блок = 00000000 00000000 зашифровывают на ключе и получают = Е7860419 0D2A562D.
    
    Получают
    

         

=

E7860419

0D2A562D

8D345899

00FF0E28

 

 

5203ЕВС8

5D9BCFFD

42АВВССЕ

32ВС0В1В

    
    Выполняют перемешивающее преобразование с применением регистра сдвига и получают
    

         

=

CF9A8C65

505967А4

68А03В8С

42DE7624

 

 

D99С4124

883DA687

561C7DE3

3315С034

    
    Полагают , вычисляют :
    


=

CF68D956

9АА09С1С

8C3B417D

658C24E3

 

 

50428833
    

59DE3D15

6776А6С1

A4248734

       

=

8FCF68D9

809AА09С

3С8С3В41

C7658C24

 

 

ВВ504288
    

2859DE3D

666676А6

B3A42487

       

=

4E70CF97

3С8065А0

853С8СС4

57389А8С

 

 

CABB50BD
    

E3D7A6DE

D1996788

5CB35B24

       

=

584E70CF

С53С8065

48853С8С

1657389A



 

EDCABB50
    

78E3D7A6

EED19867

7F5CB35B


=

66B70F5E

F163F461

468А9528

61D60593



 

Е5ЕС8А37
    

3FD42279

3CD1602D

DD783Е86


=

2В6ЕС233

С7ВС89Е4

2АВС2692

5FEA7285

 

 


DD3848D1

С6АС997А

24F74E2B

09A3AEF7

    
    Вновь полагают и вычисляют :
    


=

5817F104

0BD45D84

B6522F27

4AF5B00B

 

 

А531В57А
    

9C8FDFCA

BB1EFCC6

D7A517A3

       

=

Е82759Е0

C278D950

15СС523С

FC72EBB6

 

 

D2C73DA8

    

19А6САС9

3E8440F5

C0DDB65A

       

=

77483AD9

F7C29CAA

EB06D1D7

841BCAD3

 

 

FBC3DAA0
    

7CB555F0

D4968080

0A9E56BC

       

=

А 1157965

2D9FBC9C

088С7СС2

46FB3DD2



 

7684ADCB
    

FA4ACA06

53EFF7D7

C0748708


=

2AEBFA76

A85FB57D

6F164DE9

2951A581



 

С31Е7435

4930FD05

1F8A4942
    

550A582D


=

FAFF37A6

15A81669

2CFF3EF8

B68CA247



 

E09525F3

9F811983

2ЕВ81975

D366C4B1

    Таким образом, результат хеширования есть
    


=

FAFF37A6

15A81669

1CFF3EF8

B68CA247

 

 

E09525F3

9F811983

2ЕВ81975

D366C4B1

    
    А.3.2. Пусть необходимо выполнить хэширование сообщения
    

= 7365

74796220

3035203D

20687467

6Е656С20

73616820

65676173

 

73656D20

6С616Е69

6769726F

20656874

2065736F

70707553

    
    Так как длина сообщения, подлежащего хэшированию, равна 400 битам (50 байтам), то разбивают сообщение на два блока и второй (старший) блок дописывают нулями. В процессе вычислений получают:
    
    
    ШАГ 1
    
    


=

00000000

00000000

00000000

00000000

 

 

00000000

00000000

00000000

00000000

    
    


=

73616820

65676173

73656D20

6С616Е69

 

 

6769726F
    

20656874

2065736F

70707553


=

73736720

61656965

686D7273

20206F6F

 

 

656С2070
    

67616570

616E6875

73697453

       

=

14477373

0С0С6165

1F01686D

4F002020

 

 

4С50656С
    

04156761

061D616E

1D277369

       

=

CBFF14B8

6D04F30C

96051FFE

DFFFB000

 

 

35094CAF
    

72F9FB15

7CF006E2

AB1AE227

       

=

ЕВАССВ00

F7006DFB

Е5Е16905

B0B0DFFF





ВА1С3509
    
     

FD118DF9

F61B830F

F8C554E5


=

FF41797C

EEAADAC2

43C9B1DF

2E14681C



 

EDDC2210
    
     

1EE1ADF9

FA67E757

DAFE3AD9


=

F0CEEA4E

368B5A60

C63D96C1

E5B51CD2



 

A93BEFBD

2634F0AD

CBBB69CE

ED2D5D9A

         
    ШАГ 2
    
    


=

F0CEEA4E

368B5A60

C63D96C1

Е5В51СD2

 

 

A93BEFBD

2634F0AD

CBBB69CE

ED2D5D9A

       

=

00000000

00000000

00000000

00007365

 

 

74796220

3035203D

20687467

6E656C20


=

F0C6DDEB

CE3D42D3

EA968D1D

4EC19DA9

 

 

36Е51683
    

8ВВ50148

5A6FD031

60В790ВА

       

=

16А4С6А9

F9DF3D3B

E4FC96EF

5309C1BD

 

 

FB68E526
    

2CDBB534

FE161C83

6F7DD2C8

       

=

C49D846D

1780482С

9086887F

C48C9186

 

 

9DCB0644
    

D1E641E5

A02109AF

9D52C7CF

       

=

BDB0C9F0

756Е9131

E1F290EA

50E4CBB1





1CAD9536
    
     

F4E4B674

99F31E29

70C52AFA


=

62А07ЕА5

EF3C3309

2СЕ1В076

173D48CC



 

6881ЕВ66
    
    

F5C7959F

63FCA1F1

D33C31B8


=

95ВЕА0ВЕ

88D5AA02

FE3C9D45

436CE821



 

В8287СВ6

2СВС135В

3E339EFE

F6576CA9


    ШАГ 3
    
    


=

95BEA0BE

88D5AA02

FE3C9D45

436CE821

 

 

В8287СВ6

2СВС135В

3E339EFE

F6576СА9


=

00000000

00000000

00000000

00000000

 

 

00000000

00000000

00000000

00000190


=

95FEB83E

ВЕ3С2833

A09D7C9E

BE45B6FE

 

 

88432CF6
    

D56CBC57

AAE8136D

02215В39

       

=

8695FEB8

1ВВЕ3С28

E2A09D7C

48ВE45В6

 

 

DA88432C
    

EBD56CBC

7FABE813

F292215B

       

=

В9799501

141В413С

1ЕЕ2А062

0СВ74145

 

 

6FDA88BC
    

D0142A6C

FА80АА16

15F2FDB1

       

=

94В97995

7D141B41

С21ЕЕ2А0

040СВ741





346FDA88
    
    

46D0142A

BDFA81AA

DC1562FD


=

D42336E0

2А0А6998

6С65478А

3D08A1B9



 

9FDDFF20
    
     

4808Е863

94FD9D6D

F776A7AD


=

47E26AFD

3Е7278А1

7D473785

06140773



 

A3D97E7E

А744СВ43

08АА4С24

3352С745

         
    ШАГ 4
    
    


=

47E26AFD

3Е7278А1

7D473785

06140773

 

 

A3D97E7E
   

А744СВ43

08АА4С24

3352С745

         

=

73616820

65676173

73656D20

6061E1CE

 

 

DBE2D48F
    

509A88B1

40CDE7D6

DED5E173


=

340E7848

83223B67

025AAAAB

DDA5F1F2

 

 

5B6AF7ED
    

1575DE87

19E64326

D2BDF236


=

03DC0ED0

F4CD26BC

8B595F13

F5A4A55E

 

 

А8В063СВ
    

ED3D7325

6511662А

7963008D


=

C954EF19

D0779A68

ED37D3FB

7DA5ADDC

 

 

4A9D0277
    

78ЕF765В

С4731191

7ЕВВ21В1


=

6D12BC47

D9363D19

1Е3С696F

28F2DC02





F2137F37
    
    

64Е4С18В

69CCFBF8

EF72B7E3


=

790DD7A1

066544ЕА

2829563С

3C39D781



 

25EF9645
    
    

EE2C05DD

A5ECAD92

2511A4D1


=

0852F562

3B89DD57

AEB4781F

E54DF14E



 

EAFBC135

0613763А

0D770AA6

57ВА1А47

    
    Таким образом, результат хэширования есть
    


=

0852F562

3B89DD57

AEB4781F

E54DF14E

 

 

EAFBC135

0613763А

0D770AA6

57ВА1А47

    
    
    
Текст документа сверен по:
официальное издание
М.: Издательство стандартов, 1994