X = (x0, x1, …, xn–1) = x0 + 21 · x1 + … + 2n–1· xn–1.
Таким образом, для ГОСТа принята так называемая «little-en- dian» нумерация разрядов, то есть внутри многоразрядных слов данных отдельные двоичные разряды и их группы с меньшими номерами являются менее значимыми. Об этом прямо говорится в пункте 1.3 стандарта: «При сложении и циклическом сдвиге дво- ичных векторов старшими разрядами считаются разряды нако- пителей с большими номерами». Далее, пункты стандарта 1.4,
и другие предписывают начинать заполнение данными ре- гистров-накопителей виртуального шифрующего устройства с младших, то есть менее значимых разрядов. Точно такой же поря- док нумерации принят в микропроцессорной архитектуре Intel x86, именно поэтому при программной реализации шифра на данной архитектуре никаких дополнительных перестановок разрядов внутри слов данных не требуется.
Если над элементами данных выполняется некоторая опера- ция, имеющая логический смысл, то предполагается, что данная операция выполняется над соответствующими битами элемен- тов. Иными словами A • B = (a0• b0, a1• b1, …, an–1• bn–1), где
n = |A| = |B|, а символом «•» обозначается произвольная бинар-
цикл выработки имитовставки (16-З).
В свою очередь, каждый из базовых циклов представляет со- бой многократное повторение одной единственной процедуры, на- зываемой основным шагом криптопреобразования.
В ГОСТе ключевая информация состоит из двух структур данных. Помимо собственно ключа, необходимого для всех шиф- ров, она содержит еще и таблицу замен. Ниже приведены основ- ные характеристики ключевых структур ГОСТа.
Ключ является массивом из восьми 32-битовых элементов кода, далее в настоящей работе он обозначается символом K: K = {Kj}, 0 ≤ j ≤ 7. В ГОСТе элементы ключа используются как 32-разрядные целые числа без знака: 0 ≤ Kj< 232. Таким образом, размер ключа составляет 32 · 8 = 256 бит или 32 байта.
Таблица замен является вектором, содержащим восемь узлов замены. Каждый узел замены, в свою очередь, является вектором, содержащим шестнадцать 4-битовых элементов замены, которые можно представить в виде целых чисел от 0 до 15, все элементы одного узла замены обязаны быть различными. Таким образом, таблица замен может быть представлена в виде матрицы размера 8 × 16 или 16 × 8, содержащей 4-битовые заменяющие значения. Для языков программирования, в которых двумерные массивы расположены в оперативной памяти по строкам, естественным яв- ляется первый вариант (8 × 16), его-то мы и возьмем за основу. То- гда узлы замены будут строками таблицы замен. В настоящей
ная логическая операция; как правило, имеется в виду операция
статье таблица замен обозначается символом H:
H {H
i, j 0 i 7
,
}
0 j 15
0 Hi, j 15. Таким образом, общий объем таблицы замен равен: 8
узлов ∙ 16 элементов/узел · 4 бита/элемент = 512 бит = 64 байта.
Основной шаг криптопреобразования
Основной шаг криптопреобразования является оператором, определяющим преобразование 64-битового блока данных. До- полнительным параметром этого оператора является 32-битовый блок, в качестве которого используется какой-либо элемент клю- ча. Схема алгоритма основного шага приведена на рис. 7.1.
Шаг 1 Сложение с ключом. Младшая половина преобразуемого бло- ка складывается по модулю 232 с используемым на шаге элемен- том ключа, результат передается на следующий шаг.