- •"Криптография. Сравнительный анализ алгоритмов симметричного шифрования"
- •1. Криптография. Сравнительный анализ алгоритмов симметричного шифрования
- •1.1 Простая перестановка
- •1.2 Подстановка
- •1.3 Гаммирование
- •1.4 Сравнительный анализ методов шифрования
- •2. Практический раздел
- •2.1 Идентификация пользователя
- •2.2 Симметричное шифрование
- •2.2.1 Метод подстановки
- •2.2.2 Метод перестановки
- •2.3 Шифрование с открытым ключом
- •2.4 Постановка и верификация эцп
- •2.5 Алгоритм подсчета срс
- •Размещено на Allbest.Ru
2.2.2 Метод перестановки
При шифровании простой перестановкой ключевое слово с неповторяющимися символами или цифровой ключ. Число колонок в таблице задаётся количеством символов в ключе, а число строк может быть фиксировано или может задаваться длиной сообщения. Шифруемый текст записывается последовательными строками под символами ключа. Для заполнения пустых клеток (если объём текста меньше ёмкости таблицы) можно использовать любые символы. Затем текст выписывается колонками в той последовательности, в которой располагаются в алфавите буквы ключа или в порядке следования цифр, если ключ цифровой.
Рисунок 2.2 Экранная форма - Шифрование метом перестановки
Листинг алгоритма шифрования методом перестановки:
procedure TMain.Button1Click(Sender: TObject);
var
k: array [1..20] of integer;
str1, str2 : string;
i, j, kol, x, q: integer;
begin
kol:= length(Kluch2.Text);
for i := 1 to kol do
k[i] := StrToInt(Copy(Kluch2.Text, i, 1));
Result2.Clear();
for i := 0 to Text2.Lines.Count - 1 do
begin
str2:='';
str1 := Text2.Lines[i];
x:=length(str1) mod kol;
if x>0 then
for j:=1 to kol-x do
str1:=str1+' ';
for j:=1 to (length(str1) div kol) do
for q:=1 to kol do
str2 := str2+ copy(str1,k[q]+(kol*(j-1)),1);
Result2.Lines.Add(str2);
end;
end;
2.3 Шифрование с открытым ключом
Алгоритм RSA - (буквенная аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом.
RSA стал первым алгоритмом такого типа, пригодным и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений.
Листинг алгоритма изложен в приложении.
Рисунок 2.3. Экранная форма – шифрование алгоритмом RSA
2.4 Постановка и верификация эцп
Электро́нная цифровая подпись (ЭП) — реквизит электронного документа, позволяющий установить отсутствие искажения информации в электронном документе с момента формирования ЭП и проверить принадлежность подписи владельцу сертификата ключа ЭП. Значение реквизита получается в результате криптографического преобразования информации с использованием закрытого ключа ЭП.
Рисунок 2.4. Экранная форма – постановка ЭЦП
Листинг алгоритма постановки ЭЦП:
procedure TMain.Button6Click(Sender: TObject);
var
s: string;
n, p, q, tmp, i,crc, e : longword;
begin
s:=edit4.text;
n:=Length(S);
CRC:=ord(s[1]);
for i:=2 to N do
CRC:=CRC xor ord(s[i]);
Randomize;
p:=Random(100);
q:=Random(100);
While not p_number(p) do dec(p);
While not p_number(q) do dec(q);
edit1.Text:=IntToStr(p);
edit2.text:=IntToStr(q);
n := p* q;
tmp:=(p-1)*(q-1);
for i:=2 to tmp-1 do
if HOD(tmp,i)=1 then break;
e:=i;
for i:=1 to n do
if (i*e) mod ((p-1)*(q-1))=1 then
break;
edit3.Text:=IntToStr(i);
edit5.Text :='';
FMes := Encrypt(IntToStr(crc), e, n);
for i := 0 to High(FMes) do
edit5.Text := edit5.Text + IntToStr(FMes[i]);
end;
2.5 Алгоритм подсчета срс
Рисунок 2.5. Экранная форма – Алгоритм подсчета СРС
Листинг алгоритма подсчета СРС:
procedure TMain.Button5Click(Sender: TObject);
var
crc,n , i: integer;
s: string;
begin
s:=edtText.text;
n:=Length(S);
CRC:=ord(s[1]);
for i:=2 to N do
CRC:=CRC xor ord(s[i]);
EdtResult.Text := IntToStr(CRC);
end;
Заключение
В практической части необходимо было путем сравнительного анализа выявить достоинства и недостатки симметрических методов шифрования с закрытым ключом.
После проведенного анализа было выявлено, что все методы симметрических методов шифрования с закрытым ключом недостаточно стойкие к расшифровывании. И так, шифрованием методом простой подставки совершенно не эффективные, так как его можно расшифровать после несложного анализа. Алгоритм одиночной перестановки гораздо надежнее подставки, но если ключ используется несколько раз, то его можно проанализировать и взломать. Из трех проанализированных методов, алгоритм методом гаммирования является самым эффективным.
Но у всех методов есть общий недостаток отправитель и получатель должны некоторым тайным образом получить копии секретного ключа и сохранять их в тайне.
В практической части была поставлена задача разработки приложения, в котором реализовать идентификацию пользователя по серийному, алгоритмы шифрования с закрытым и открытым ключом, постановку ЭЦП.
Приложение было разработано с помощью среды программирования Delphi 7, алгоритмы были проверены и отлажены.
Список использованной литературы
1.Защита информации в вычислительных системах./ Сборник. - М.: Знание,1982.
2.Хофман Л. Дж. Современные методы защиты информации. - М.: Советское радио, 1980.
3.Дружинин Г.В. Сергеева И.В. Качество информации. - М.: Радио и связь, 1990.
Приложение
Листинг алгоритма RSA
//Значение бита в двойном слове (32бита)
function Bit(Value, n: Integer): Boolean;
asm
bt eax, edx
setc al
and eax, 0FFh
end;
Function p_number(X: LongInt): boolean;
var i: LongInt;
Begin
if x>1 then
begin
Result:=false;
for i:=2 to trunc(sqrt(x)) do
if x mod i=0 then Exit;
Result:=true;
end
else
Result:=false;
end;
Function HOD(a, b: int64): int64;
var r: int64;
begin
if ((a=0)or(b=0)) then
begin
Result:=abs(a+b);
exit;
end;
r:=a-b*(a div b);
while r<>0 do begin
a:=b;
b:=r;
r:=a-b*(a div b);
end;
Result:=b;
end;
function FastPower(a, b, n: integer): integer;
var i: integer;
ai: extended;
begin
ai := a;
for I := Trunc(log2(b)) - 1 downto 0 do
if Bit(b, i) then ai := Round(sqr(ai) * a) mod n else ai := Round(sqr(ai)) mod n;
result := Round(ai);
end;
function Encrypt(s: string; e, n: integer): TIncodeMes;
var I: Integer;
begin
SetLength(result, length(s));
for I := 0 to Length(s) - 1 do
if s[i+1]<>'0' then
result[i] := FastPower(ord(s[i + 1]), e, n);
end;
function Decrypt(s: array of integer; e, n: integer): string;
var i: Integer;
begin
SetLength(Result, Length(s));
for I := 0 to Length(s) - 1 do
if s[i+1]<>0 then
result[i + 1] := chr(FastPower(s[i], e, n))
end;
procedure TMain.Button3Click(Sender: TObject);
var
n, p, q, tmp, i,e : longword;
begin
Randomize;
p:=Random(100);
q:=Random(100);
While not p_number(p) do dec(p);
While not p_number(q) do dec(q);
edtP.Text:=IntToStr(p);
edtQ.text:=IntToStr(q);
n := p* q;
tmp:=(p-1)*(q-1);
for i:=2 to tmp-1 do
if HOD(tmp,i)=1 then break; e:=i;
edtE.Text:=IntToStr(i);
for i:=1 to n do
if (i*e) mod ((p-1)*(q-1))=1 then
break;
edtD.Text:=IntToStr(i);
Memo2.Clear;
FMes := Encrypt(Memo1.Lines.Text, e, n);
for i := 0 to High(FMes) do
Memo2.Lines.Append(IntToStr(FMes[i])); end;