Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект часть2-Криптография.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

9.4.2. Функция хэширования гост р 34.11-94

При описании функции хэширования будут использоваться те же обозначения, что использовались при описании алгоритма выработки цифровой подписи согласно ГОСТ Р 34.10, и, кроме того, пусть

M – последовательность двоичных символов, подлежащих хэшированию.

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

EK(A) – результат шифрования слова А на ключе K с использованием алгоритма шифрования по ГОСТ 28147 в режиме простой замены.

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

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

Под хэш-функцией h понимается отображение

h: B* ® V256(2).

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

  • алгоритм вычисления шаговой функции хэширования k, где

k: V256(2)´V256(2) ® V256(2);

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

Алгоритм вычисления шаговой функции хэширования состоит из трех частей:

  • генерации четырех 256-битных ключей;

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

  • перемешивающего преобразования результата шифрования.

Генерация ключей.

Рассмотрим X = (b256, b255, …, b1) Î V256(2).

Пусть X = x4||x3||x2||x1 = h16||h15||…||h1 = x32||x31||…||x1,

где xiÎV64(2), i = 1..4; hjÎV16(2), j = 1..16; xkÎV8(2), k = 1..32.

Обозначим A(X) = (x1 Å x2)||x4||x3||x2.

Задается преобразование P: V256(2)®V256(2) слова x32||…||x1 в слово xj(32)||x(j)31||…||xj(1), где j(i+1+4(k‑1)) = 8i + k, i = 0..3, k = 1..8.

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

  • слова H, M Î V256(2);

  • константы: слова Сi (i = 2,3,4), имеющие значения С2=С4=0256 и C3= 180811602411608(0818)21808(0818)4(1808)4.

При вычислении ключей реализуется следующий алгоритм:

  1. Присвоить значения

i = 1, U = H, V = M.

  1. Выполнить вычисление

W = U Å V, K1 = P(W).

  1. Присвоить i = i + 1.

  2. Проверить условие i = 5. При положительном исходе перейти к шагу 7. При отрицательном – перейти к шагу 5.

  3. Выполнить вычисление

U = A(U) Å Ci, V = A(A(V)), W = U Å V, Ki = P(W);

  1. Перейти к шагу 3

  2. Конец работы алгоритма.

Шифрующее преобразование

На данном этапе осуществляется шифрование 64-битных подслов слова H на ключах Ki (i = 1, 2, 3, 4).

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

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

После выполнения шифрования получают слова

si = EKi(hi), где i = 1, 2, 3, 4,

т.е. в результате получается вектор

S = s4||s3||s2||s1.

Перемешивающее преобразование

На данном этапе осуществляется перемешивание полученной последовательности с применением регистра сдвига.

Исходными данными являются слова H, M Î V256(2) и слово S Î V256(2).

Пусть отображение

y: V256(2) ® V256(2)

преобразует слово

h16||…||h1, hiÎV16(2), i = 1..16

в слово

h1Åh2Åh3Åh4Åh13Åh16||h16||…||h2.

Тогда в качестве значения шаговой функции хэширования принимается слово

k(M,H) = y61(H Å y(M Å y12(S))),

где yi – i-я степень преобразования y.

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

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

Процедура вычисления функции h на каждой итерации использует следующие величины:

M Î B* – часть последовательности M, не прошедшая процедуры хэширования на предыдущих итерациях;

H Î V256(2) – текущее значение хэш-функции;

S Î V256(2) – текущее значение контрольной суммы;

L Î V256(2) – текущее значение длины обработанной на предыдущих итерациях части последовательности M.

Алгоритм вычисления функции h включает в себя следующие три этапа:

Этап 1

Присвоить начальные значения текущих величин

M := M; H := H; S := 0256; L := 0256

Этап 2

Проверить условие |M|>256. Если да, то перейти к этапу 3. В противном случае выполнить последовательность вычислений:

L := <L+|M|>256; M' := 0256–|M| ||M; S := S [+] M'

H := k(M',H); H := k(L,H); H := k(S,H);

Конец работы алгоритма. H содержит значение хэш-функции.

Этап 3

Вычислить подслово MS Î V256(2) слова M (M=MP||MS). Далее выполнить последовательность вычислений:

H := k(MS,H); L := <L+256>256; S := S [+] MS; M := MP

Перейти к этапу 2.