9.3.2 Шифрування, перемішування та обчислення крокової функції
На другому етапі здійснюється шифперетворення блоку , для чого виконується шифрування алгоритмом ГОСТ 28147-89 підблоків на ключах відповідно.
В результаті отримаємо блок , де , .
На третьому етапі виконується процедура перемішування та обчислення проміжного геш-коду .
Перемішування даних пояснемо на основі регістру зсуву з лінійним зворотним зв’язком, кожна комірка якого містить вектор з шістнадцяти бітів. Регістр розгортається справа наліво. Початковими заповненнями є блоки виду .
За один такт роботи регістру його стан перетворюється у стан , що у стандарті позначається як . Аналогічно, стан регістру після тактів роботи позначається через .
На кожному такті стан регістру зсувається на комірку вправо, а потім значення функції зворотного зв’язку записується в крайню ліву комірку регістру: .
Таким чином, рекурентний закон має вид , .
Значення крокової функції обчислюється через функцію з правилом , де - результат етапу шифрперетворення.
9.4 Процедура обчислення геш-функції
Початковими даними для обчислення геш-функції є повідомлення , та вектор ініціалізації (стартовий вектор) .
Алгоритм використовує наступні змінні.
частина послідовності , що ще не була задіяна у попередніх ітераціях.
- поточне значення геш-коду.
- поточне значення т. зв. контрольної суми (за операцією ).
- лічильник (у бітах) поточної довжини вже обробленої у попередніх ітераціях частини повідомлення.
Алгоритм складається з трьох етапів.
Основний етап - це етап 3, який використовується у більшості операцій.
На кожній такий ітерації обчислюється проміжний геш-код, для чого обробляються останні 256 бітів послідовності , що розглядається як . Після обробки блок з послідовності забирається.
Етап 2 подібний до етапу 3, але виконується тільки для блоку (довжини ) - залишку послідовності , що залишається після відповідної кількості проходів етапу 3. Якщо потрібно, перед обробкою доповнюється зліва нулями до довжини 256 бітів.
Опис алгоритму.
Етап 1. Присвоєння початкових значень.
; ; ; .
Етап 2. Якщо , перейти на етап 3, інакше, провести заключні обчислення, що приведені нижче.
- переобчислити довжину обробленої послідовності.
- доповнити короткий блок нулями зліва.
- обчислити праві 256 бітів звичайної суми двох великих чисел.
- перше змішування проміжного геш-коду.
- друге змішування проміжного геш-коду.
- останнє змішування проміжного геш-коду.
Кінець алгоритму, результат: .
Етап 3. (). Вибрати крайнє праве підслово довжини 256 бітів з повідомлення та виконати наступну послідовність обчислень.
- змішування проміжного геш-коду з блоком повідомлення.
- обчислити нову довжину обробленої послідовності.
- обчислити праві 256 бітів звичайної суми двох великих чисел (потрібно для етапу 2).
- відкинути праві 256 бітів послідовності та перейти на етап 2.