Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1148557150
Fuel997
2006-05-25 15:39
2006.07.09
Перевод приложений с Delphi 7 на Delphi 2006


1-1148300012
Schooler
2006-05-22 16:13
2006.07.09
Как правильно реализовать эффект


2-1150447898
ANB
2006-06-16 12:51
2006.07.09
Как при отправке письма через TIdSMTP указать кодировку письма ?


2-1151049152
Alex_1qaz_2006
2006-06-23 11:52
2006.07.09
Запуск внешнего приложения


6-1141646556
quantum
2006-03-06 15:02
2006.07.09
Картинка и TWebbrowser





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский