Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
ВнизКриптография (гост 28 147-89) Найти похожие ветки
← →
navinaiv (2006-05-25 23:00) [0]Уважаемые мастера помогите разобраться с написанием процедуры основного шага к алгоритму ГОСТ 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. Полученное значение преобразуемого блока возвращается как результат выполнения алгоритма основного шага криптопреобразования.
← →
han_malign © (2006-05-26 12:42) [1]все переменные 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, естественно, можно выкинуть, они тут для наглядности...
← →
palva © (2006-05-26 20:58) [2]Здесь реализация на паскале
http://pa123.nm.ru/
Правда, основной шаг в основном на ассемблерных вставках.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c