Кафедра: АСОИиУ
Лабораторная работа
На тему: "Алгоритм криптографического преобразования в режиме простой замены"
Москва 2009 г.
Алгоритм работы
Основной шаг криптопреобразования
Основной шаг криптопреобразования (рис. 1) по своей сути является оператором, определяющим преобразование 64-битового блока данных. Дополнительным параметром этого оператора является 32-битовый блок, в качестве которого используется какой-либо элемент ключа.

Рис. 1. Схема основного шага криптопреобразования алгоритма ГОСТ 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). Далее значение каждого из восьми блоков заменяется на новое, которое выбирается по таблице замен следующим образом: значение блока Sm заменяется на Sm-ный по порядку элемент (нумерация с нуля) m-ного узла замен (т.е. m-ной строки таблицы замен, нумерация также с нуля). Другими словами, в качестве замены для значения блока выбирается элемент из таблицы замен с номером строки, равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как 4-битового целого неотрицательного числа.
Шаг 3. Циклический сдвиг на 11 бит влево. Результат предыдущего шага сдвигается циклически на 11 бит в сторону старших разрядов и передается на следующий шаг. На схеме алгоритма символом Θ11 обозначена функция циклического сдвига своего аргумента на 11 бит в сторону старших разрядов.
Шаг 4. Побитовое сложение: значение, полученное на шаге 3, побитно складывается по модулю 2 со старшей половиной преобразуемого блока.
Шаг 5. Сдвиг по цепочке: младшая часть преобразуемого блока сдвигается на место старшей, а на ее место помещается результат выполнения предыдущего шага.
Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз,
а первые результаты появляются уже в течение первых 7 дней.
Зарегистрироваться и Начать продвижение
Шаг 6. Полученное значение преобразуемого блока возвращается как результат выполнения алгоритма основного шага криптопреобразования.
Базовые циклы криптографических преобразований
Базовые циклы построены из основных шагов криптографического преобразования, рассмотренного в предыдущем разделе. В процессе выполнения основного шага используется только один элемент ключа, в то время как ключ ГОСТ содержит восемь таких элементов. Следовательно, чтобы ключ был использован полностью, каждый из базовых циклов должен многократно выполнять основной шаг с различными его элементами.
Базовые циклы заключаются в многократном выполнении основного шага с использованием разных элементов ключа и отличаются друг от друга только числом повторения шага и порядком использования ключевых элементов. Ниже приведен этот порядок для различных циклов.
Цикл шифрования 32-З:
K0, K1, K2, K3, K4, K5, K6, K7, K0, K1, K2, K3, K4, K5, K6, K7, K0, K1, K2, K3, K4, K5, K6, K7, K7, K6, K5, K4, K3, K2, K1, K0.
Цикл дешифрования 32-Р:
K0, K1, K2, K3, K4, K5, K6, K7, K7, K6, K5, K4, K3, K2, K1, K0, K7, K6, K5, K4, K3, K2, K1, K0, K7, K6, K5, K4, K3, K2, K1, K0.
Каждый из циклов имеет собственное буквенно-цифровое обозначение, соответствующее шаблону «n-X», где первый элемент обозначения (n), задает число повторений основного шага в цикле, а второй элемент обозначения (X), буква, задает порядок шифрования («З») или дешифрования («Р») в использовании ключевых элементов. Цикл дешифрования должен быть обратным циклу шифрования, то есть последовательное применение этих двух циклов к произвольному блоку должно дать в итоге исходный блок. Для выполнения этого условия для алгоритмов, подобных ГОСТу, необходимо и достаточно, чтобы порядок использования ключевых элементов соответствующими циклами был взаимообратным (рис. 2а, рис. 2б).
Схемы базовых циклов приведены на рисунках 2а, 2б. Каждый из них принимает в качестве аргумента и возвращает в качестве результата 64-битный блок данных, обозначенный на схемах N. Символ Шаг (N, Kj) обозначает выполнение основного шага криптопреобразования для блока N с использованием ключевого элемента K.
| Рис. 2а. Схема цикла шифрования 32-З. |
Рис. 2б. Схема цикла дешифрования 32-Р. |

Исходный
текст
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math, Grids, Dre_Proc_Common;
Сервис онлайн-записи на собственном Telegram-боте
Попробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно.
Зарегистрироваться в сервисе
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Button1: TButton;
StringGrid1: TStringGrid;
procedure Button1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
i: integer;
j: integer;
k: integer;
a: integer;
b: integer;
y: integer;
c: integer;
d: integer;
e: integer;
f: integer;
g: integer;
x: integer;
m: integer;
t: integer;
l: integer;
q: integer;
u: integer;
z: integer;
p: integer;
kol: integer;
st: string;
str: string;
hr: string;
hr1: integer;
kod: string;
kod1: string;
kod_64_1: string;
kod_64_2: string;
full: string;
kluch: string;
plus: string;
plus1: string;
full1: string;
slovo: string;
decod: string;
step: int64;
blok: string;
stolbec: integer;
sdv: string;
plus2: string;
plus3: string;
h: integer;
k_slovo: string;
implementation
{$R *.dfm}
procedure TForm1. Button1Click (Sender: TObject);
begin
randomize;
st:='абвгдежзиклмнопрстуфхцчшщьыъэюя1234567890_., ';
ShowMessage('Алфавит: ' + st);
// Проверка длины фразы
if (length (Edit1. Text) > 100) or (length (Edit1. Text) < 1) then
begin
ShowMessage ('Превышаетзаданноезначение');
exit;
end;
StringGrid1. ColCount:=16;
StringGrid1. RowCount:=8;
// генерацияматрицы
for b:= 0 to 7 do
for c:= 0 to 15 do
begin
repeat
f:=0;
hr:=DEC2BIN (random(16));
while length(hr) < 4 do hr:='0' + hr;
for g:=0 to c-1 do
if hr=StringGrid1. Cells [g, b] then f:=1;
until f=0;
StringGrid1. Cells [c, b]:=hr;
end;
// 32 степень 2
step:=1;
for i:=1 to 32 do
step:=step*2;
k_slovo:='';
// Кодирование
for i:= 1 to length (Edit1. Text) do
begin
full:='';
for j:= 1 to length(st) do
begin
if Edit1. Text[i] = st[j] then
begin
full:= full + DEC2BIN(j);
while length(full) < 8 do full:='0' + full;
kod:=kod + full;
end;
end;
end;
ShowMessage ('Слово в 2 виде'+kod);
a:= length(kod) div 64;
for i:= 1 to length (Edit2. Text) do
begin
full1:='';
for j:= 1 to length(st) do
begin
if Edit2. Text[i] = st[j] then
begin
full1:= full1 + DEC2BIN(j);
while length(full1) < 8 do full1:='0' + full1;
kod1:=kod1 + full1;
end;
end;
end;
ShowMessage ('Ключ в 2 виде'+kod1);
m:=1;
l:=1;
for i:=1 to a do
begin
kod_64_1:='';
kod_64_2:='';
kluch:='';
plus:='';
for j:=1 to 32 do
begin
kod_64_1:=kod_64_1 + kod [m+j-1];
kluch:=kluch + kod1 [l+j-1];
end;
for j:=33 to 64 do
kod_64_2:=kod_64_2 + kod [m+j-1];
ShowMessage ('N1-'+kod_64_1);
ShowMessage ('N2-'+kod_64_2);
plus:=DEC2BIN((BIN2DEC (kod_64_1) + BIN2DEC(kluch)) mod step);
while length(plus) < 32 do plus:='0' + plus;
ShowMessage ('32-х битный блок ключа'+kluch);
ShowMessage('Результат 1-го шага-'+plus);
q:=1; plus1:='';
for y:=0 to 7 do
begin
blok:='';
for j:=1 to 4 do
blok:=blok+ plus [q+j-1];
stolbec:=BIN2DEC(blok);
plus1:=plus1 + StringGrid1. Cells [stolbec, y];
q:=q+4;
end;
ShowMessage ('Замена по таблице'+plus1);
for y:=1 to 11 do
begin
plus2:='';
sdv:=plus1 [1];
for j:=2 to 32 do
plus2:=plus2+plus1 [j];
plus2:=plus2+sdv;
plus1:=plus2;
end;
ShowMessage ('сдвиг на 11 бит влево-'+plus1);
plus3:='';
for y:=1 to 32 do
begin
if (plus1 [y]='1') and (kod_64_2 [y]='1') then h:=0;
if (plus1 [y]='1') and (kod_64_2 [y]='0') then h:=1;
if (plus1 [y]='0') and (kod_64_2 [y]='1') then h:=1;
if (plus1 [y]='0') and (kod_64_2 [y]='0') then h:=0;
plus3:= plus3+ IntToStr(h);
end;
ShowMessage ('Побитное сложение N2 и S-'+plus3);
kod_64_2:=kod_64_1;
kod_64_1:= plus3;
k_slovo:=k_slovo+ kod_64_1+ kod_64_2;
ShowMessage ('Шифр – '+k_slovo);
m:=m+64;
l:=l+32;
end;
end;
end.
Пример выполнения




 






Литература
1)Методы и средства защиты информации. Бородин В.Б.: ЭКОМ, 1999.
|