Функция хэширования ГОСТ Р 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. 2. Выполнить вычисление W = U Е V, K1 = P(W). 3. Присвоить i = i + 1. 4. Проверить условие i = 5. При положительном исходе перейти к шагу 7. При отрицательном – перейти к шагу 5. 5. Выполнить вычисление U = A(U) Е Ci, V = A(A(V)), W = U Е V, Ki = P(W); 6. Перейти к шагу 3 7. Конец работы алгоритма. Шифрующее преобразование На данном этапе осуществляется шифрование 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. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|