Данная исследовательская работа была с успехом представлена на межшкольной конференции г. Самара "Я - Исследователь". Ее отметили как лучшую работу и она получила номинацию "Исследовательское мастерство". На заочном Всероссийском конкурсе исследовательских работ "Шаги в науку" ей присвоили лауреатство II степени.
В работе рассматривается вопрос шифрования информации. Ученик запрограммировал три широко известных шифра: шифр Атбаш, шифр Цезаря, шифр с помощью ключа. Он также придумал свой шифр простой замены и запрограммировал его. К работе прилагается автореферат, презентация защиты работы и написанные программы. Эти программы учителя могут использовать для объяснения соответствующей темы на уроках.
Вложение | Размер |
---|---|
nikitin_vadim_samara_gimnaziyano1.zip | 1.2 МБ |
ИССЛЕДОВАТЕЛЬСКИХ РАБОТ УЧАЩИХСЯ
«ШАГИ В НАУКУ»
Направление «Программирование»
Создание программ в среде Delphi
для шифрования текстовой информации
Выполнил:
Никитин Вадим,
ученик 7В класса
МБОУ гимназия №1 г.о. Самара
Кировского района
Руководитель:
Шурыгина С.В.
учитель информатики
г. Обнинск, 20014/2015 учебный год
Оглавление
Криптология на современном этапе
На уроках информатики изучаются такие темы, как шифрование и кодирование информации. Я думаю, что большинству учащихся эти темы очень интересны. Я – не исключение. Меня они тоже очень заинтересовали. Я решил изучить поглубже тему шифрование информации, а за одно применить знания по программированию для создания шифрующих компьютерных программ.
Во все века и времена существовала информация, которую определенная группа лиц не хотела бы разглашать. Для таких ситуаций введены специальные понятия: государственная тайна, военная тайна, коммерческая тайна и т.д. В таком случае имеются законные пользователи, которым необходимо обмениваться информацией, а также существует противник, который стремится овладеть этой информацией. Наука, которая занимается защитой информации как раз и рассматривает такую ситуацию. Эта наука называется Криптологией.
Я решил написать программы, которые позволили бы автоматически, разными способами шифровать сообщения.
Цель работы: разработать алгоритмы и написать программы, с помощью которых можно зашифровать сообщения.
Задачи:
Я понимаю, что выбранная мною тема очень популярна и если покопаться в интернете то, скорее всего, можно найти готовые алгоритмы шифрования и, возможно даже, не одним способом. Но моя цель – написать и отладить программы самостоятельно, так как я ХОЧУ НАУЧИТЬСЯ ПРОГРАММИРОВАТЬ и прилагаю для этого много усилий. Поэтому приложенные к данной работе программы вы нигде в Интернете не найдете, я их писал и отлаживал самостоятельно. Возможно, что они у меня получились не очень профессиональные, а в каких-то программах использовался не очень рациональный алгоритм. Но я хожу на кружки по программированию и постоянно узнаю что-то новое. Так что в будущем рассчитываю писать более качественные и сложные программы.
Проблема защиты информации путем её преобразования, исключающего её прочтение посторонним лицом, волновала человеческий ум с давних времен. История криптологии (kryptos — тайный, logos — наука) — ровесница истории человеческого языка.
Большинство современных исследователей связывают появление криптографии с появлением письменности, указывая, что эти процессы произошли почти одновременно. Методы секретной переписки были изобретены независимо в различных государствах древнего Востока, таких как Египет, Китай и Шумер, хотя сегодня очень трудно судить об уровне развития криптологии в этих обществах. Клинопись, рисуночное и иероглифическое письмо само по себе было крайне сложно и требовало длительного обучения, так что вопрос о шифровании сообщений часто попросту не поднимался, так как круг грамотных лиц был весьма ограничен.
Нельзя судить и о широте распространения различных криптографических систем и тайнописи, так как число дошедших до нас памятников очень невелико. Всю сложность данного вопроса иллюстрирует один пример: найдено множество глиняных табличек с клинописными знаками, записанными в несколько слоев (первоначальная запись замазывалась глиной и поверх нее наносилась новая). Подобные действия могли быть вызваны как применением тайнописи, так и просто удобством использования. Так или иначе, в древневосточных государствах, основу письменности которых составляли сложные системы клинописи, иероглифов и других условных обозначений, а круг грамотных лиц был ограничен, применение криптографии если и было, то скорее всего на весьма примитивном уровне.
Однако с развитием фонетического письма и значительным упрощением письменности, криптология получает значительный стимул к развитию. Развитию этой области знаний способствовали и развитие торговли, военного дела и дипломатической деятельности, которые создавали необходимый спрос на «продукцию» криптографов. Наибольшее развитие в это время криптография получает в Древней Греции, а позже в Риме. Это было обусловлено и своеобразным общественно-политическим строем этих обществ, так как при тирании любое сообщение, которое попытались бы скрыть криптографическими методами негосударственные органы, само по себе могло рассматриваться как преступление против государства, от которого ничто не должно скрыться.
Основные криптографические системы, многие из которых используются вплоть до наших дней были разработаны в Древней Греции и получили широкое практическое применение в Риме. В Древней Греции использовались как шифры замены, так и шифры перестановки. Так наиболее распространенным и получившим широкую известность в античном мире шифром замены является так называемый шифр Цезаря. Для того чтобы зашифровать сообщение, каждую его букву заменяли на другую букву латинского алфавита, но со сдвигом влево или вправо. Цезарь в своих посланиях к сенату заменял все буквы на три отстоящие слева, Август применял тот же шифр, но со сдвигом в четыре знака. Класс шифров, к которым относится и шифр Цезаря, называется шифрами замены.
Наибольших успехов в криптографии в античный период добилась Спарта, где активно использовались все известные виды шифров и были созданы первые, дошедшие до нас шифровальные устройство. Первым таким прибором, реализующим шифр перестановки, была так называемая «сциталла» (ококо VI-V вв. до н.э.), созданная в Спарте и позже активно использовавшаяся в большинстве античных государств. На цилиндр определенного диаметра по спирали наматывался ремень, на который наносили буквы вдоль оси цилиндра. В результате в развернутом виде все буквы смешивались, а если намотать ремень на цилиндр того же диаметра, то сообщение вновь становилось понятным. Этот нехитрый способ часто использовался из-за своей простоты и возможности оперативного расшифрования сообщения. В то же время стойкость данного шифра была невелика, а позже Архимед предложил устройство (так называемая антисциталла), с помощью которого расшифровка подобного сообщения без нужного цилиндра была весьма простой и быстрой. Ремень наматывали на коническое «копье» и сдвигали вверх и вниз до тех пор, пока не находили нужный диаметр и текст сообщения становился понятным.
Отметим, что в этом шифре преобразование открытого текста в шифрованный заключается в определенной перестановке букв открытого текста. Поэтому класс шифров, к которым относится и шифр «Сцитала», называется шифрами перестановки.
Существовали и другие способы «механизации» криптографического дела, связанные прежде всего с именем древнегреческого полководца Энея Тактики. Он создал так называемый «диск Энея», получивший в Древней Греции широкое применение. В небольшом диске высверливались отверстия, соответствующие буквам алфавита, через которые продевалась нить, в соответствии с буквами шифруемого текста. Для расшифровки нить вытягивали, получая обратную последовательность букв. Этот крайне примитивный на первый взгляд способ шифрования, был весьма эффективен, так как противнику, перехватившему сообщение было неизвестно, какая буква соответствует каждому отверстию. Кроме того, если возникала опасность перехвата сообщения, нить можно было легко порвать, тем самым уничтожив его.
Существовала также и «линейка Энея», использовавшая тот же принцип, что и диск. Значительным вкладом Энея стал и изобретенный им так называемый «книжный шифр», активно использовавшийся вплоть до ХХ века. В своем трактате «Об обороне укрепленных мест», Эней предлагал прокалывать малозаметные дырки над буквами текста какой-либо книги. Сложив вместе отмеченные буквы адресат получал исходное сообщение. Римляне усовершенствовали диск Энея, создав первую многодисковую шифрующую систему. На общую ось одевали два диска с хаотичным расположением букв. Каждой букве первого диска соответствовала буква второго, что и составляло шифр. [2]
Криптология разделяется на два направления — криптографию и криптоанализ. Цели этих направлений прямо противоположны.
Криптография занимается поиском и исследованием методов шифрования информации. Она даёт возможность преобразовывать информацию таким образом, что её прочтение (восстановление) возможно только при знании ключа.
Сфера интересов криптоанализа — исследование возможностей расшифровки информации без знания ключей.
Ключ — информация, необходимая для беспрепятственного шифрования и дешифрования текста.
Основные направления использования этих методов — передача конфиденциальной информации по каналам связи (например, по электронной почте), установление подлинности передаваемых сообщений, хранение информации (документов, баз данных) на носителях в зашифрованном виде.
Проблема использования криптографических методов в современных информационных системах становится в настоящее время особенно актуальной.
С одной стороны, расширилось использование телекоммуникационных сетей, по которым передаются большие объёмы информации государственного, коммерческого, военного и частного характера, не допускающего возможность доступа к ней посторонних лиц.
С другой стороны, появление новых мощных аппаратных и программных средств, эффективных технологий дешифрования снизило надёжность криптографических систем, ещё недавно считавшихся практически нераскрываемыми.
Еще раз заметим, что задача шифрования возникает только для информации, которая нуждается в защите. Обычно в таких случаях говорят, что информация содержит тайну или является защищаемой, приватной, конфиденциальной, секретной. Для наиболее типичных, часто встречающихся ситуаций такого типа введены даже специальные понятия:
Далее мы будем говорить о защищаемой информации, имея в виду следующие признаки такой информации:
Для простоты мы вначале ограничимся рассмотрением только одной угрозы - угрозы разглашения информации.
Теперь мы можем изобразить ситуацию, в которой возникает задача ТП, следующей схемой.
Здесь A и B - удаленные законные пользователи защищаемой информации; они хотят обмениваться информацией по общедоступному каналу связи. П - незаконный пользователь (противник), который может перехватывать передаваемые по каналу связи сообщения и пытаться извлечь из них интересующую его информацию. Эту схему можно считать моделью типичной ситуации, в которой применяются криптографические методы защиты информации.
Таким образом, шифрование — это способ сокрытия исходного смысла сообщения или другого документа, обеспечивающей искажение его первоначального содержимого. Преобразование обычного, понятного содержимого в код называется кодированием. При этом подразумевается, что имеется взаимное однозначное соответствие между символами текста и кода – в этом и заключается основополагающее отличие кодирования от шифрования. Часто кодирование и шифрование ошибочно принимают за одно и тоже, забыв о том, что для восстановления закодированного сообщения, достаточно знать правило замены, в то время как для расшифровки уже зашифрованного сообщения помимо знания правил шифрования, требуется ключ к шифру. Под ключом в данном случае подразумевается конкретное секретное состояние параметров алгоритмов шифрования и дешифрования. [6]
Многие шифры, не отличающиеся сложным алгоритмом, могут быть расшифрованы специалистами и без наличия ключа, для этого существуют некоторые специальные методы, называемые методами криптоанализа. Один из таких способов — это частотный анализ.
Этот метод предполагает, что каждая буква алфавита того или иного языка в довольно длинном тексте встречается с определенной частотой, к примеру, для русского языка известно, что буквы «О», «П», «Р» встречаются очень часто, а вот «Й», «Ъ» — редко. Как же работает данный метод? К примеру, имеется зашифрованный текст, полученный методом какой-либо перестановки букв по определенному алгоритму, и аналитикам требуется его расшифровать. Для этого берется открытый текст, желательно довольно длинный, затем подсчитывается в нем частота каждой буквы, причем, чем больше будет текст, тем точнее получится расшифровка.
Следующий шаг – то же самое проделывается с зашифрованным текстом, подсчитывается частота каждого символа. Собственно говоря, весь процесс расшифровки сводится к тому, что сопоставляются частоты двух текстов. Например, в открытом тексте буква «О» встречается с частотой 33%, то есть от общего количества букв текста, буква «О» составляет 33%, а в зашифрованном тексте с частотой 33% встречается буква «П», значит, с большей вероятностью под буквой «П» подразумевается «О».
Диаграмма частот букв русского языка
Стоит отметить, что, чем больше будут оба текста, тем точнее получится расшифровка текста. Однако, нельзя сказать, что это эффективный метод – существует множество таблиц распределения частот, но ни одна из них не является самой точной – в зависимости от стиля текста будет своя частотная диаграмма.
Имеется ли возможность использовать обыкновенные шифры, но не опасаться, что зашифрованное сообщение будет рассекречено? Да, можно, частотный анализ можно обмануть, причем довольно просто. Для этого используются шифры-омофоны, где одной букве исходного текста соответствует целый набор букв шифра. Количество символов в этом наборе равно частоте исходной буквы, при шифровании необходимо просто выбрать один символ из набора. Этот простой метод сведет пользу частотного анализа к нулю.
Кстати, некоторые методы частотного криптоанализа основываются не только на подсчете букв, но и буквосочетаний. Например, «ся» в русском языке встречается гораздо чаще, чем «ац», а «оь» вообще не встречается.
После первых попыток написать алгоритмы к таким программам, я понял, что даже для самых простых шифров, они получаются достаточно сложными. Поэтому я решил для начала остановиться на шифрах замены, шифре Цезаря, шифре Атбаш и на шифровании с помощью ключа.
Итак, если имеются два человека, которые хотели бы обмениваться секретными сообщениями, то они могли бы взять одну из моих программ, описанных ниже. Одна и та же программа шифрует сообщение и дешифрует его.
Если информация действительно секретная, то ее шифровать лучше с помощью ключа. Так как шифр Цезаря и Атбаш легко поддадутся взламыванию.
Один из наиболее простых способов шифрования. Первая буква алфавита заменяется на последнюю, вторая – на предпоследнюю и т.д.
Пример: Криптология = Хпчрнсфсьча
Программа шифрования и дешифрования:
procedure TForm1.Button1Click(Sender: TObject);
var k, x, l: integer;
p, e: string;
begin
k:=0;
e:='';
p:=Edit1.Text;
l:=length(p);
for x:=1 to l do
begin
if ((p[x]>='А') and (p[x]<='Я')) or ((p[x]>='а') and (p[x]<='я'))
then
begin
k:=ord(p[x])+31;
if (k = ord('я')) or (k = ord('Я')) then e:=e+chr(k)
else
if ((p[x]>='а') and (p[x]<='я')) then
e:=e+chr(ord('я')-(k-ord('я')))
else
e:=e+chr(ord('Я')-(k-ord('Я')))
end
else
e:=e+p[x];
end;
Edit2.Text:=e;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
end;
end.
Работоспособную программу (Атбаш.exe) смотрите в электронном приложении.
Этот шифр является шифром перестановки. Как известно, для того чтобы зашифровать сообщение, каждую его букву заменяли на другую букву латинского алфавита, но со сдвигом влево или вправо. Цезарь в своих посланиях к сенату заменял все буквы на три отстоящие слева, Август применял тот же шифр, но со сдвигом в четыре знака.
Я написал программу, (см. электронное приложение) с помощью которой можно закодировать любую фразу, используя при этом любой сдвиг. Для того, чтобы «сдвигать» буквы с помощью программы, мне понадобились знания: что такое таблица ASCII и команды, которые находят порядковый номер по этой таблице (ORD) и наоборот, по номеру возвращают букву (CHR).
Программа шифрования:
procedure TForm1.Button1Click(Sender: TObject);
var i, l, c, h, j, y: integer;
t, k, g, v, p: string;
begin
z:=0;
t:=Edit1.Text;
k:=Edit2.Text;
l:=length(t);
h:=strtoint(k);
if (h < 1) or (h > 32)then
begin
Edit2.font.color:=$0000FF;
Edit2.Text:='Ошибка! Неверно введен сдвиг!';
z:=1;
end
else
begin
for i:=1 to l do
begin
y:=ord(t[i])+h;
case t[i] of
'а'..'я': begin
if y>ord('я') then y:=y-32;
g:=g+chr(y);
end;
'А'..'Я': begin
if y>ord('Я') then y:=y-32;
g:=g+chr(y);
end;
'a'..'z': begin
if y>ord('z') then y:=y-26;
g:=g+chr(y);
end;
'A'..'Z': begin
if y>ord('Z') then y:=y-26;
g:=g+chr(y);
end
else
g:=g+t[i];
end;
Edit3.Text:=g;
end;
end;
end;
Программа дешифрования:
procedure TForm1.Button3Click(Sender: TObject);
var i, l, c, h, j, y, v: integer;
t, k, g: string;
p: char;
begin
z:=0;
t:=Edit4.Text;
k:=Edit5.Text;
l:=length(t);
h:=strtoint(k);
if (h < 1) or (h > 32)then
begin
Edit5.font.color:=$0000FF;
Edit5.Text:='Ошибка! Неверно введен сдвиг!';
z:=1;
end
else
begin
for i:=1 to l do
begin
case t[i] of
'а'..'я':
begin
z:=ord(t[i])-h;
if z
then g:=g+chr(z+32)
else g:=g+chr(z);
end;
'А'..'Я':
begin
z:=ord(t[i])-h;
if z
then g:=g+chr(z+32)
else g:=g+chr(z);
end;
'a'..'z':
begin
z:=ord(t[i])-h;
if z
then g:=g+chr(z+26)
else g:=g+chr(z);
end;
'A'..'Z':
begin
z:=ord(t[i])-h;
if z
then g:=g+chr(z+26)
else g:=g+chr(z);
end;
else
g:=g+t[i];
end;
end;
Edit6.Text:=g;
end;
end;
Кроме того, я написал программу, (см. электронное приложение) которая шифрует фразу с помощью шифра простой замены. В моей программе каждая буква шифруется своим порядковым номером из таблицы кодов. Этот шифр – моя находка. Я долго думал, какой шифр можно придумать самому. И мне пришла в голову именно эта мысль. Конечно, этот шифр не очень сложный с точки зрения криптостойкости, но я придумал его сам, а потом написал программу без чьей либо помощи и подсказки, поэтому этот шифр и программа – моя особенная гордость.
Программа шифрования:
procedure TForm1.Button1Click(Sender: TObject);
begin
f:='';
t:= Edit1.text;
l:=length(t);
for i:=1 to l do
begin
if ord(t[i])>=ord('a') then
begin
g:=0;
g:=g+ord(t[i]);
v:=inttostr(g);
f:=f+v;
end
else
begin
if (ord(t[i])<>ord('.')) and (ord(t[i])<>ord(',')) and (ord(t[i])<>ord('!')) and (ord(t[i])<>ord('?')) and (ord(t[i])<>ord(' ')) and (ord(t[i])<>ord('"')) and (ord(t[i])<>ord('(')) and (ord(t[i])<>ord(')')) then
f:=f+''
else
f:=f+t[i];
end;
end;
Edit2.Text:=f;
end;
Программа дешифрования:
procedure TForm1.Button3Click(Sender: TObject);
begin
f:='';
t:=Edit3.Text;
l:=length(t);
i:=1;
while i
begin
if (ord(t[i])=ord('.')) or (ord(t[i])=ord(',')) or (ord(t[i])=ord('!')) or (ord(t[i])=ord('?')) or (ord(t[i])=ord(' ')) or (ord(t[i])=ord('"')) or (ord(t[i])=ord('(')) or (ord(t[i])=ord(')')) then
begin
f:=f+t[i];
i:=i+1;
end;
if (ord(t[i])=ord('1')) or (ord(t[i])=ord('2')) then
begin
v:=t[i]+t[i+1]+t[i+2];
g:=strtoint(v);
f:=f+chr(g);
i:=i+3;
end;
if ord(t[i])=ord('9') then
begin
v:=t[i]+t[i+1];
g:=strtoint(v);
f:=f+chr(g);
i:=i+2;
end;
end;
Edit4.Text:=f;
end;
Суть шифрования при помощи ключа опять рассмотрим на конкретном примере.
Слово «экран» - это ключ шифра. Зашифровать надо слово ИНФОРМАЦИЯ. Поставим под буквами слова буквы ключа, запишем под каждой буквой ее номер в алфавите и сложим их. Если сумма равна или больше 33, то вычтем 32. Числа теперь заменим на буквы и результат шифрования готов – «ЖШЕПЮКЛЗЙН»
Я написал программу, (см. электронное приложение) с помощью которой можно закодировать любую фразу, используя при этом любой ключ.
Программа шифрования:
procedure TForm1.Button1Click(Sender: TObject);
const a1: array [1..60] of string=('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','.',',','?','!',' ', '-', '+', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '=', '@', '*', ':', '"', '"', '(', ')', '[', ']');
var B: array [1..100] of integer;
T, K, Q: string;
l, i, n, j, z, r, y: integer;
begin
Q:=Edit2.text; {ключ}
T:=Edit1.Text; {текст}
l:=length(Q);
for i:= 1 to l do
for j:= 1 to 60 do
if Q[i]=a1[j] then B[i]:=j;
n:=length(T);
z:=1;{для контроля длины ключа}
for i:= 1 to n do
for j:= 1 to 60 do
begin
if z>l then z:=1;
if T[i]=a1[j] then
begin
r:=j+B[z];
z:=z+1;
if r > 60 then r:= r-60;
K:=K+a1[r];
end;
end;
Edit3.text:=K;
end;
Программа дешифрования:
procedure TForm1.Button3Click(Sender: TObject);
const a1: array [1..60] of string=('а','б','в','г','д','е','ё','ж','з', 'и','й','к', 'л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','.',',','?','!',' ', '-', '+', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '=', '@', '*', ':', '"', '"', '(', ')', '[', ']');
var B: array [1..100] of integer;
T, K, Q: string;
l, i, n, j, z, r, y: integer;
begin
K:='';
T:=Edit4.text;
Q:=Edit5.Text;
l:=length(Q);
for i:= 1 to l do
for j:= 1 to 60 do
if Q[i]=a1[j] then B[i]:=j;
n:=length(T);
z:=1;{}
for i:= 1 to n do
for j:= 1 to 60 do
begin
if z>l then z:=1;
if T[i]=a1[j] then
begin
r:=j-B[z];
z:=z+1;
if r <= 0 then r:= r+60;
K:=K+a1[r];
end;
end;
Edit6.text:=K;
end;
Шифры Цезаря, Атбаш и замены являются достаточно простыми для расшифровки. Чтобы в этом убедиться, на уроках информатики учащимся предлагались тексты, зашифрованные указанными шифрами. Как только ученик догадывался, что данный шифр представляет из себя шифр замены, то оставалось только определить какая буква на что заменяется. Или если ученик догадывался, что текст зашифрован с помощью шифра Цезаря, то осталось только подобрать сдвиг и расшифровать текст.
Я задумался, как повысить устойчивость этих простых шифров. Мне на ум пришла такая идея. Что если совместить шифр замены и шифр с помощью ключа? Я выдвинул такую гипотезу: если к тексту применить последовательно шифр замены и шифр с помощью ключа, то его устойчивость возрастет. Для того, чтобы проверить свою гипотезу на практике, я последовательно зашифровал текст сначала в одной своей программе, потом в другой. И действительно, оказалось, что полученный шифр требует ГОРАЗДО больше времени для расшифровывания. А большинство учащихся совсем не могли его расшифровать. Таким образом, моя гипотеза подтвердилась.
В своей работе я выполнил все поставленные передо мной задачи. Я разработал алгоритмы и написал программы, которые можно использовать для шифрования сообщений. Эти программы я собираюсь усовершенствовать. Например, сделать так, чтобы у пользователя была возможность загружать фразы из файла и сохранять декодированные фразы в текстовый файл.
Кроме того, я придумал свой шифр простой замены и запрограммировал его.
В настоящее время мои программы используются одноклассниками для проведения экспериментов по шифрованию информации при изучении данной темы. И учителями информатики для составления задач по криптографии.
Круговорот воды в пакете
Гораздо больше риска в приобретении знаний, чем в покупке съестного
Астрономический календарь. Январь, 2019 год
Заяц, косач, медведь и весна
Ах эта снежная зима