Адрес документа: http://law.rufox.ru/view/9/25896.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