В нашей стране установлен единый алгоритм криптографического представления данных для систем обработки информации в сетях ЭВМ, отдельных вычислительных комплексов и ЭВМ, который определяется ГОСТ 28147-89.
Этот алгоритм криптографического преобразования данных представляет собой 64-битовый блочный алгоритм с 256-битовым ключом, предназначен для аппаратной и программной реализации, удовлетворяет криптографическим требованиям и не накладывает ограничений на степень секретности защищаемой информации.
При описании алгоритма используются следующие обозначения:
L и R — последовательности битов;
LR — конкатенация последовательностей L и R, в которой биты последовательности R следуют за битами последовательности L;
(+) — поразрядное сложение по модулю 2 (операция исключающее ИЛИ);
[+] — сложение 32-разрядных чисел по модулю 232;
{+} — сложение 32-разрядных чисел по модулю 232-1.
Числа суммируются по следующему правилу:
A [+] B = A + B, если A + B232,
A [+] B = A + B — 232, если A + B = 232.
A {+} B = A + B , если A + B2^32 — 1,
A {+} B = A + B — (2^32 — 1), если A + B = 2^32 — 1.
Алгоритм предусматривает четыре режима работы:
- простая замена;
- гаммирование;
- гаммирование с обратной связью;
- выработка имитовставки.
<p>В любом случае для шифрования данных используется 256-битовый ключ K, который представляется в виде восьми 32-битовых подключей Ki:
K = K7K6K5K4K3K2K1K0.
Расшифрование выполняется по тому же ключу, что и шифрование, но этот процесс является инверсией процесса шифрования данных.
Режим простой замены
Первый и самый простой режим — замена. Данные, подлежащие шифрованию, разбивают на 64-битовые блоки. Процедура шифрования блока открытых данных T0 включает 32 цикла (j=1…32).
Блок T0 разделяется на две последовательности по 32 бита: В(0)A(0), где В(0) — левые или старшие биты, A(0) — правые или младшие биты.
Эти последовательности вводят в накопители N1 и N2 перед началом первого цикла шифрования.
Первый цикл (j=1) процедуры шифрования 64-битового блока данных описывается следующими формулами:
{ | A(1) = f ( A(0) [+] K0 ) (+) B(0), B(1)=A(0). |
Здесь A(1) — заполнение накопителя N1 после 1-го цикла шифрования
{ | A(i) = f ( A(i-1) [+] X(j) ) (+) B(i-1), B(i) = A(i-1), если i=25, 26,…, 31; j=32-i |
{ | A(32) = A(31), B(32) = f ( A(31) [+] X(0) ) (+) B(31), |
Здесь i обозначает номер итерации (i = 1, 2,…, 32).
Функция f называется функцией шифрования. Ее аргументом является сумма по модулю 232 числа A(i), полученного на предыдущем шаге итерации, и числа X(j) ключа (размерность каждого из этих чисел равна 32 знакам).
Функция шифрования включает две операции над полученной 32-разрядной суммой. Первая операция называется подстановкой К. Блок подстановки К состоит из 8 узлов замены К(1) … К(8) с памятью 64 бит каждый. Поступающий на блок подстановки 32-разрядный вектор разбивается на 8 последовательно идущих 4-х разрядных векторов, каждый из которых преобразуется в 4-х разрядный вектор соответствующим узлом замены, представляющим собой таблицу из 16 целых чисел в диапазоне 0…15.
Входной вектор определяет адрес строки в таблице, число из которой является выходным вектором. Затем 4-х разрядные выходные векторы последовательно объединяются в 32-разрядный вектор. Таблицы блока подстановки К содержит ключевые элементы, общие для сети ЭВМ и редко изменяемые.
Вторая операция — циклический сдвиг влево 32-разрядного вектора, полученного в результате подстановки К. 64-разрядный блок зашифрованных данных Тшпредставляется в виде Тш=A(32)B(32).
Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично.
Следует иметь в виду, что режим простой замены допустимо использовать для шифрования данных только в ограниченных случаях. К этим случаям относится выработка ключа и зашифрование его с обеспечением имитозащиты (защиты от навязывания ложных данных) для передачи по каналам связи или хранения в памяти ЭВМ.
Режим гаммирования
Открытые данные, разбитые на 64-разрядные блоки Т(i) (i=1, 2,…, m, где m определяется обьемом шифруемых данных), зашифровываются в режиме гаммирования путем поразрядного сложения по модулю 2 с гаммой шифра Гш, которая вырабатывается блоками по 64 бит, то есть Гш = (Г(1),Г(2),…,Г(i),…,Г(m)).
Число двоичных разрядов в блоке Т(m) может быть меньше 64, при этом неиспользованная для шифрования часть гаммы шифра из блока Г(m) отбрасывается.
Уравнение зашифрования данных в режиме гаммирования может быть представлено в следующем виде:
Ш(i) = A (Y(i-1) [+] C2, Z(i-1) {+} C1) (+) T(i) = Г(i) (+) T(i) .
Здесь Ш(i) — 64-разрядный блок зашифрованного текста,
A — функция шифрования в режиме простой замены (аргументами этой функции являются два 32-разрядных числа),
С1 и С2 — константы, заданные в ГОСТ 28147-89,
Y(i) и Z(i) — величины, которые определяются итерационно по мере формирования гаммы следующим образом:
(Y(0), Z(0)) = A(S), где S — 64-разрядная двоичная последовательность (синхропосылка);
(Y(i), Z(i)) = (Y(i-1) [+] C2, Z(i-1) {+} C1) для i = 1, 2,…,m.
Расшифрование данных возможно только при наличии синхропосылки, которая не является секретным элементом шифра и может храниться в памяти ЭВМ или передаваться по каналам связи вместе с зашированными данными.
Статьи к прочтению:
Доклад N.Courtois про ГОСТ 28147-89 на Rump Session FSE 2012
Похожие статьи:
-
Гост 28147-89 — отечественный стандарт шифрования данных
Внашей стране установлен единый алгоритм криптографического преобразования данных для систем обработки информации в сетях ЭВМ, отделительных комплексах и…
-
Классические алгоритмы шифрования данных
Имеются следующие классические методы шифрования: подстановка (простая – одноалфавитная, многоалфавитная однопетлевая, многоалфавитная многопетлевая);…