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