![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Криптография (гост 28 147-89) [D6]
navinaiv © (2006-05-25 23:00:00)Уважаемые мастера помогите разобраться с написанием процедуры основного шага к алгоритму ГОСТ 28147-89.
Последовательность шагов излагаю ниже.
Шаг 0. Определяет исходные данные для основного шага криптопреобразования:
• N – преобразуемый 64-битовый блок данных, в ходе выполнения шага его младшая (N1) и старшая (N2) части обрабатываются как отдельные 32-битовые целые числа без знака. Таким образом, можно записать N=(N1,N2).
• X – 32-битовый элемент ключа;
Шаг 1. Сложение с ключом. Младшая половина преобразуемого блока складывается по модулю 232 с используемым на шаге элементом ключа, результат передается на следующий шаг;
Шаг 2. Поблочная замена. 32-битовое значение, полученное на предыдущем шаге, интерпретируется как массив из восьми 4-битовых блоков кода: S=(S0,S1,S2,S3,S4,S5,S6,S7).
Далее значение каждого из восьми блоков заменяется на новое, которое выбирается по таблице замен следующим образом: значение блока Si заменяется на Si-тый по порядку элемент (нумерация с нуля) i-того узла замен (т.е. i-той строки таблицы замен, нумерация также с нуля). Другими словами, в качестве замены для значения блока выбирается элемент из таблицы замен с номером строки, равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как 4-битового целого неотрицательного числа. Теперь становится понятным размер таблицы замен: число строк в ней равно числу 4-битных элементов в 32-битном блоке данных, то есть восьми, а число столбцов равно числу различных значений 4-битного блока данных, равному как известно 24, шестнадцати.
Шаг 3. Циклический сдвиг на 11 бит влево. Результат предыдущего шага сдвигается циклически на 11 бит в сторону старших разрядов и передается на следующий шаг. На схеме алгоритма символом 11 обозначена функция циклического сдвига своего аргумента на 11 бит в сторону старших разрядов.
Шаг 4. Побитовое сложение: значение, полученное на шаге 3, побитно складывается по модулю 2 со старшей половиной преобразуемого блока.
Шаг 5. Сдвиг по цепочке: младшая часть преобразуемого блока сдвигается на место старшей, а на ее место помещается результат выполнения предыдущего шага.
Шаг 6. Полученное значение преобразуемого блока возвращается как результат выполнения алгоритма основного шага криптопреобразования.
palva (2006-05-26 20:58:00) [1]Здесь реализация на паскале
http://pa123.nm.ru/
Правда, основной шаг в основном на ассемблерных вставках.
han_malign (2006-05-26 12:42:00) [2]все переменные 32-бит целые, со знаком или без - по барабану(лучше явно LongInt, LongWord, чем generic Integer/Cardinal)...
step1:= N1 + key;//модуль 2^32, обеспечивается, собственно, 32-бит размером
step2:= 0;
for i:= 0 to 7 do begin
step2:= step2 or ((rtbl[i,step1 and $F] and $F) shl i*4);
step1:= step1 shr 4;
end;
step3:= (step2 shl 11) or (step2 shr 21);//дабы не отходить от нотации Delphi
//или step3:= step2; asm rol step3,11 end;
step4:= step3 xor N2;
{5}
N2:= N1; N1:= step4;
{6}
Надеюсь с 64-бит блоком сам разберешься?
Лишние промежуточные stepX, естественно, можно выкинуть, они тут для наглядности...