Главная | О фирме | Теория | Реклама | Цены | Архив | Сервис | Тесты | Ссылки


Вычисление функции хэширования по ГОСТ Р 34.11-94

Общие сведения

Указанный стандарт определяет процедуру вычисления хэш-функции для любой последовательности двоичных данных.
Функция хэширования заключается в сопоставлении произвольному набору данных в виде последовательности двоичных символов его образа фиксированной небольшой длины, что позволяет использовать эту функцию в процедурах электронной подписи для сокращения времени формирования и проверки подписи. Эффект сокращения времени достигается за счет вычисления подписи только под образом подписываемого набора данных.

Область применения

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

Обозначения

В настоящем документе используются следующие обозначения:

B*

Множество всех конечных слов в алфавите B={0,1}. Чтение слов и нумерация знаков алфавита (символов) осуществляется справа налево (номер правого символа в слове равен единице, второго справа - двум и т.д.).

/A|

Длина слова A <- B*.

Vk (2)

Множество всех бинарных слов длины k.

A||B

Конкатенация слов A, B <- B* - слово длины |A|+|B|, в котором левые |A| символов образуют слово A, а правые |B| символов образуют слово B. Можно также использовать обозначение A||B = AB.

Ak

Конкатенация k экземпляров слова A(A<- B*).

<N>k

Слово длины k, содержащее двоичную запись вычета N(mоd2k) неотрицательного целого числа N.

A`

Неотрицательное целое число, имеющее двоичную запись A (A<- b*).

&

Побитовое сложение слов одинаковой длины по модулю 2.

&’

Сложение по правилу A&’B = <A`+B`>, (k=|A|+|B|)/

M

Последовательность двоичных символов, подлежащая хэшированию (сообщение в системе ЭЦП), M <- B*.

h

Хэш-функция, отображающая последовательность M <- B* в слово h(M) <- V256(2).

Ek(A)

Результат зашифрования слова A на ключе K с использованием алгоритма шифрования по ГОСТ 28147 в режиме простой замены (K <- V256(2), A <-V64(2)).

H

Стартовый вектор хэширования.

e := g

Присвоение параметру e значения g.

<-

Обозначение принадлежности диапазону.

Общие положения

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

h : B* -----> V256(2)

Для определения хэш-функции необходимы:

  • алгоритм вычисления шаговой функции хэширования c т.е. отображения:

c : V256(2) x V256(2) ------> V256(2)

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

Шаговая функция хэширования

Алгоритм вычисления шаговой функции хэширования включает в себя три части, реализующие последовательно:

  • генерацию ключей - слов длины 256 битов с использованием исходных данных слов H, M <- V256(2);
  • шифрующее преобразование - зашифрование 64-битовых подслов слова H на ключах Ki (I=1, 2, 3, 4) с использованием алгоритма по ГОСТ 28147 в режиме простой замены с исходными данными:

H=h4||h3||h2||h1, h1<-V64(2), i=1,4 и набор ключей K1,K2,K3,K4

  •   в результате данного этапа образуется последовательность:

S=s4||s3||s2||s1,

  • перемешивающее преобразование результата шифрования с исходными данными в виде:

слово H, M<- V256(2) и слово S <- V256(2),

Процедура вычисления хэш-функции

Исходными данными для процедуры вычисления значения функции h является подлежащая хэшированию последовательность M <- B*. Параметром является стартовый вектор хэширования H - произвольное фиксированное слово из V256(2).
Процедура вычисления функции h на каждой итерации использует следующие величины:
M <- B* - часть последовательности M, не прошедшая процедуру хэширования на предыдущих итерациях;

H <- V256(2) - текущее значение хэш-функции;
S <- V
256(2) -текущее значение контрольной суммы;
L <- V
256(2) - текущее значение длины обработанной на предыдущих итерациях части последовательности M.


Copyright (c) 2000 ArgoSoft JSC