Автор работы: Пользователь скрыл имя, 22 Апреля 2014 в 12:54, реферат
Еще 30 лет назад криптография использовалась почти исключительно для обеспечения безопасности военной и дипломатической связи, а также для целей разведывательной и контрразведывательной спецслужб. Вместе с тем начавшееся в 80-е годы бурное развитие информационных технологий и внедрение автоматизированных методов и средств обработки информации практически во все сферы деятельности людей привели к необходимости более широкого использования криптографических средств защиты информации. При этом использование таких средств невозможно без знания основных принципов, лежащих в основе их функционирования и определяющих возможности этих средств по защите информации.
Введение
История развития криптологии
Шифрование и расшифрование
Шифры и ключи
Симметричные алгоритмы шифрования
Перестановочные шифры
Простой столбцевой перестановочный шифр
Перестановочный шифр с ключевым словом
Подстановочные шифры
Шифр Цезаря
Аффинная криптосистема
Шифр Цезаря с ключевым словом
Метод полосок
Многоалфавитные системы
Шифр Виженера
Примеры
Заключение
Литература
Приложения
С помощью многоалфавитного шифра сообщение «ГДЕ АББА» можно зашифровать несколькими способами:
19-83-32-48-4-7-12
10-99-15-12-4-14-12 ;
и так далее...
Для каждой буквы исходного алфавита создается некоторое множество символов шифрограммы так, что множества каждой буквы не содержат одинаковых элементов. Многоалфавитные шифры изменяют картину статистических частот появления букв и этим затрудняют вскрытие шифра без знания ключа.
Рассмотрим еще один многоалфавитный шифр замены, который был описан в 1585 году французским дипломатом Блезом де Виженером. Шифрование производится с помощью, так называемой таблицы Виженера. Каждая строка в этой таблице соответствует одному шифру простой замены (типа шифра Цезаря). При шифровании сообщения его записывают в строку, а под ним помещают ключ. В случае, если ключ оказывается короче сообщения, то ключ циклически повторяют. Шифровку получают, находя символ в матрице букв шифрограммы. Символ шифрограммы находится на пересечении столбца с буквой открытого текста и строки с соответствующей буквой ключа.
Предположим, что нужно зашифровать сообщение «ГДЕ АББА». В качестве ключа выберем слово «ДЕВА». В результате получим:
сообщение |
Г |
Д |
Е |
А |
Б |
Б |
А |
ключ |
Д |
Е |
В |
А |
Д |
Е |
В |
шифровка |
З |
Й |
З |
А |
Е |
Ж |
В |
В результате преобразований получится шифровка: ЗЙЗАЕЖВ
Рассмотрим примеры шифрования сообщения методом перестановки.
Идея этого метода криптографии заключается в том, что запись открытого текста и последующее считывание шифровки производится по разным путям некоторой геометрической фигуры (например, квадрата).
Для пояснения идеи возьмем квадрат (матрицу) 8x8, будем записывать текст последовательно по строкам сверху вниз, а считывать по столбцам последовательно слева направо.
Предположим, что требуется зашифровать сообщение:
НА ПЕРВОМ КУРСЕ ТЯЖЕЛО УЧИТЬСЯ ТОЛЬКО ПЕРВЫЕ ЧЕТЫРЕ ГОДА
ДЕКАНАТ
Н А _ П Е Р В О
М_КУРСЕ_
Т Я Ж Е Л 0 _ У
Ч И Т Ь С Я_т
0 Л Ь К 0 _ П Е
Р В Ы Е _ Ч Е Т
Ы Р Е _ Г О Д А
_ Д Е К А Н А Т
В таблице символом «_» обозначен пробел.
В результате преобразований получится шифровка:
НМТЧОРЫ_А_ЯИЛВРД_
Ключом в данном случае является размер матрица, порядок записи открытого текста и считывания шифрограммы. Естественно, что ключ может быть другим. Например, запись открытого текста по строкам может производиться в таком порядке: 48127653, а считывание криптограммы может происходить по столбцам в следующем порядке: 81357642.
Методы замены и перестановки по отдельности не обеспечивают необходимую криптостойкость. Поэтому их используют совместно, а также в сочетании с аддитивным методом.
При шифровании аддитивным методом вначале открытый текст шифруют методом замены, преобразуя каждую букву в число, а затем к каждому числу добавляют секретную гамму (псевдослучайную числовую последовательность).
Значение криптографии в современном информационном обществе трудно переоценить. Новая информационная инфраструктура создает новые опасности для информации. Открытые каналы Internet могут стать серьезной угрозой безопасности передачи данных. Однако и криптография не стоит на месте. Теперь она стала доступна широким массам пользователей. При помощи широкодоступных алгоритмов шифрования, а также цифровых подписей и сертификатов, пользователи могут добиться безопасности и скрытности передачи своих данных. Нужно только уметь всем этим пользоваться.
ПРИЛОЖЕНИЯ
Текст программы
Шифра Цезаря
Program Cezar;
const z=[' ','.',','];
var
nm:integer;
f,f1,f2:text;
s:string; {АЛФАВИТ}
cod:integer;
procedure shifr(var f,f1:text;s:string;k:integer);
var i,j,n:integer;g:char;
begin
{s:='АБВГД...';}
{nm:=length(s);}
repeat
read(f,g);
for i:=1 to nm do
if g=s[i] then begin
j:=i+cod;
if j<=nm then write(f1,s[j])
else begin
j:=j-nm;write(f1,s[j])
end;
write(s[j]);
end;
if g in z then write(f1,g);
if eoln(f) then writeln(f1)
until eof(f);
close(f);
close(f1);
writeln;
end;
procedure deshifr(var f1,f2:text;s:string;cod:
var i,j,n:integer;x:char;
begin
{nm:=length(s);}
repeat
read(f1,x);
for i:=1 to nm do
if x=s[i] then begin
j:=i-cod;
if j>=1 then write(f2,s[j])
else begin
j:=j+nm;
write(f2,s[j]);
end;
write(s[j]);
end;
if x in z then write(f2,x);
if eoln(f1) then writeln(f2)
until eof(f1);close(f1);close(f2);
writeln;
end;
begin
s:='
{s:='
nm:=length(s);
writeln( 'введите код');
read(cod);
while cod>nm do cod:=cod-nm;
assign(f,'text.txt');
assign(f1,'shifr.txt');
reset(f);
rewrite(f1);
shifr(f,f1,s,cod);
assign(f1,'shifr.txt');
assign(f2,'deshifr.txt');
reset(f1);rewrite(f2);
deshifr(f1,f2,s,cod);
end.
Протокол отладки
введите код
3
пгпгпюогугпхтгтгпюоугпхпюпюолУ
мамамыларамупапамылрамумымылиР
Шифр Виженера
Форма в режиме конструирования
Текст программы
uses vcl;
//$VCLDESIGN+
var
Form1: Form;
TextLabel1: TextLabel;
TextLabel2: TextLabel;
TextLabel3: TextLabel;
Edit1: Edit;
Edit2: Edit;
Edit3: Edit;
Button1: Button;
Button2: Button;
Button3: Button;
//$VCLDESIGN-
procedure Button1OnClick;
var
soob,sh___soob,kl: string;
i,j,n,m,k: integer;
kod___soob,kod___kl,kod___sh__
begin
Edit3.Text:='';
Edit1.Text:=uppercase(Edit1.
Edit2.Text:=uppercase(Edit2.
code0 := ord('А');
lenalph := 32;
kl:=Edit1.Text;
soob:=Edit2.Text;
sh___soob:=soob;
n:=ord(soob[0]); {n - длина сообщения}
m:=ord(kl[0]); {m - длина ключа}
j:=1;
for i:=1 to n do
begin
soob[i]:=upcase(soob[i]); {Преобразуем строчные}
kl[i]:=upcase(kl[i]); {буквы в прописные}
kod___soob:=ord(soob[i])-
kod___kl:=ord(kl[j])-code0; {сообщения и ключа}
kod___sh___soob:=(kod___soob+
if kod___sh___soob>lenalph then {эти коды}
kod___sh___soob:=kod___sh___
kod___sh___soob1:=kod___sh___
sh___soob[i]:=char(kod___sh___
k:=j mod m; {Если j-й символ ключа}
if k<>0 then j:=j+1 {является не последним, то}
else j:=1; {увеличиваем j на 1}
{Иначе указатель j=1}
end;
Edit3.Text:=uppercase(sh___
end;
procedure Button2OnClick;
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
end;
procedure Button3OnClick;
var
soob,sh___soob,kl: string;
i,j,n,m,k: integer;
kod___soob,kod___kl,kod___sh__
begin
Edit2.Text:='';
Edit1.Text:=uppercase(Edit1.
Edit3.Text:=uppercase(Edit3.
code0 := ord('А');
lenalph := 32;
kl:=Edit1.Text;
sh___soob:=Edit3.Text;
n:=ord(sh___soob[0]); {n - длина сообщения}
m:=ord(kl[0]); {m - длина ключа}
j:=1;
for i:=1 to n do
begin
kod___sh___soob:=ord(sh___
kod___kl:=ord(kl[j])-code0; {шифросообщения и ключа}
kod___soob:=(kod___sh___soob-
if kod___soob<0 then {из кода шифросообщения}
kod___soob:=(kod___sh___soob+
kod___soob1:=kod___soob+code0; {Преобразовываем полученный}
soob[i]:=char(kod___soob1); {код в символ исходного сообщения}
k:=j mod m; {Если j-й символ ключа}
if k<>0 then j:=j+1 {является не последним, то}
else j:=1; {увеличиваем j на 1}
{Иначе указатель j=1}
end;
Edit2.Text:=soob;
end;
procedure InitControls;
begin
Form1:= Form.Create(0,0,644,460);
Form1.InitControl(True,False,
TextLabel1:= TextLabel.Create(Form1,40,32,
TextLabel1.InitControl(True,
TextLabel2:= TextLabel.Create(Form1,32,88,
TextLabel2.InitControl(True,
TextLabel3:= TextLabel.Create(Form1,32,136,
TextLabel3.InitControl(True,
Edit1:= Edit.Create(Form1,208,24,121,
Edit1.InitControl(True,True,
Edit2:= Edit.Create(Form1,208,80,121,
Edit2.InitControl(True,True,
Edit3:= Edit.Create(Form1,208,128,121,
Edit3.InitControl(True,True,
Button1:= Button.Create(Form1,8,232,81,
Button1.InitControl(True,True,
Button2:= Button.Create(Form1,120,232,
Button2.InitControl(True,True,
Button3:= Button.Create(Form1,232,232,
Button3.InitControl(True,True,
Button1.OnClick:=
Button2.OnClick:=
Button3.OnClick:=
Form1.Position:= poScreenCenter;
Form1.Show;
end;
begin
InitControls;
end.
Форма в режиме выполнения
Информация о работе Криптографические методы и средства защиты информации