Краткое описание основных криптографических методов защиты данных
Симметричный шифр ГОСТ 2814789
Пусть L и R последовательности битов, LR означает их конкатенацию. Под обозначением будет пониматься операция сложения по модулю 2 или логическая операция XOR (исключающая ИЛИ), символом [+] операция сложения по модулю 232 двух 32разрядных чисел. Числа суммируются по следующему правилу:
A[+]B=AB, если AB < 232
A[+]B=AB232, если AB32.
Символом {+} обозначается операция сложения по модуль 2321 двух 32разрядных чисел. Правила суммирования чисел следующие:
A{+}B=AB, если AB < 2321
A{+}B=AB232, если AB2321.
Во всех режимах работы алгоритма используется ключ длиной 256 битов, который представляется в виде восьми 32разрадных чисел X(i). Если обозначить ключ через W, то
W=X(7)X(6)X(5)X(4)X(3)X(2)X(1)X(0).
Дешифрование, как и в любой симметричной криптосистеме осуществляется на том же ключе, что и шифрование. Ниже приводится описание двух наиболее используемых режимов шифра: режима простой замены и режима генерации имитовставки [6].
Описание режима простой замены. Код программы T разбивается на блоки по 64 бита в каждом, которые обозначаются T(j). Очередная последовательность битов T(j) разбивается на две последовательности B(0) (левые или старшие биты) и A(0) (правые или младшие биты), каждая из которых содержит 32 бита. Затем выполняется итеративный процесс шифрования, который описывается следующими формулами:
при i=1,2,.,24; j=i1(mod 8) A(i)=f(A(i1)[+]X(j)(+)B(i1)); B(i)A(i1); при i=25,26,.,31; j=32i A(i)=f(A(i1)[+]X(j)(+)B(i1)); B(i)A(i1); при i=32 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разрядной суммой. Первая операция называется подстановкой K. Блок подстановки K состоит из восьми узлов замены K(1). K(8) с памятью 64 бита каждый. Поступающий на блок подстановки 32разрядный вектор разбивается на 8 последовательно идущих 4разрядных векторов, каждый из которых преобразуется в 4разрядный вектор соответствующим узлом замены, представляющим собой таблицу из 16 целых чисел в диапазоне 0,.,15.
Входной вектор определяет адрес строки в таблице, число из которой является выходным вектором. Затем 4разрядные выходные векторы последовательно объединяются в 32разрядный вектор. Таблицы блока подстановки блока подстановки K содержат редко изменяемые ключевые элементы, общие для некоторой компьютерной системы.
Вторая операция циклический сдвиг влево 32разрядного вектора, полученного в результате подстановки K. 64разрядный блок зашифрованных данных Тш представляется в виде:
Тш=A(32)B(32).
Остальные блоки кода программы в режиме простой замены шифруются аналогично.
Режим генерации имитовставки. Для получения имитовставки код программы представляется в виде 64разрядных блоков T(i), =1,2,.,m. Где m определяет объем кода программы. Первый блок кода программы T(i) подвергается преобразованию, соответствующему первым 16 циклам алгоритма шифрования в режиме простой замены, причем в качестве ключа для выработки имитовставки используется ключ, по которому шифруются данные.
Полученное после 16 циклов работы 64разрядное число суммируется по модулю 2 со вторым блоком открытых данных T(2). Результат суммирования снова подвергается преобразованию, соответствующему 16 циклам алгоритма шифрования в режиме простой замены. Полученное 64разрядной число суммируется по модулю 2 с третьим блоком данных T(3) и т. д. Последний блок T(m), при необходимости дополненный до полного 64разрядного блока нулями, суммируется по модулю 2 с результатом работы на шаге m1, после чего шифруется в режиме простой замены по первым 16 циклам алгоритма. Из полученного 64разрядного числа выбирается отрезок Ир длиной р битов. Данный отрезок и является имитовставкой Ир, полученной для кода программы T.