Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
577656.rtf
Скачиваний:
58
Добавлен:
08.02.2016
Размер:
9.41 Mб
Скачать

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;