98929

Исследование и программная реализация шифра Виженера

Курсовая

Информатика, кибернетика и программирование

Исследовать схему шифрования «шифр Виженера» и создать программу на языке программирования высокого уровня, позволяющую зашифровать и дешифровать сообщение. Осуществить ручной пересчет шифрования и подтвердить его работой программы.

Русский

2016-07-14

2.93 MB

1 чел.

Министерство  образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

Российский государственный гидрометеорологический университет

Кафедра ИТ и СБ

Курсовой проект

по дисциплине: «Криптографические методы защиты информации»

на тему:

«Исследование и программная реализация шифра Виженера»

Выполнил: ст. гр. ИБ-Шеванов А.В.

Проверила:

Татарникова Т.М.

Санкт-Петербург.

2013 год.


Задание на курсовое проектирование по дисциплине «Криптографические методы защиты информации»

Исследовать схему шифрования «шифр Виженера» и создать программу на языке программирования высокого уровня, позволяющую зашифровать и дешифровать сообщение. Осуществить ручной пересчет шифрования и подтвердить его работой программы.

Содержание проекта:

  1.  Cведения о криптографии и шифре ;
  2.  Структурная схема алгоритма;
  3.  Пример шифрования;
  4.  Листинг программы;
  5.  Контрольный пример, выполненный данной программой;
  6.  Выводы по использованию шифра;
  7.  Список использованных источников.

Дата выдачи «____»    февраль  2013г.

Дата сдачи «____»    май 2013 г.

Задание выдал                                                                 Татарникова Т.М.

Задание получил                                                              ИБ-429: Шеванов А.В.

                                                                         

Санкт - Петербург

2013 г.


Оглавление

[1]
Введение

[2]
Шифр виженера.

[3]
Демонстрация работы программы

[4]
Общий вывод

[5]
Список используемой литературы


Введение

Криптогра́фия (от др.-греч. κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.

Потребность шифровать и передавать шифрованные сообщения возникла очень давно. Так, еще в V-IV вв. до н. э. греки применяли специальное шифрующее устройство. Первые придуманные шифры относились к классу шифров «простая замена» или «подстановка». Это  «Квадрат Полибия», «Шифр Цезаря». Это такие шифры, в котором каждой букве алфавита соответствует буква, цифра, символ или какая-нибудь их комбинация. Термин "шифр" арабского происхождения. В начале XV в. арабы опубликовали энциклопедию "Шауба Аль-Аща", в которой есть специальный раздел о шифрах. В этой энциклопедии указан способ раскрытия шифра простой замены. Он основан на различной частоте повторяемости букв в тексте. В этом разделе есть перечень букв в порядке их повторяемости на основе изучения текста Корана. Заметим, что в русском тексте чаще всего встречается буква "О", затем буква "Е" и на третьем месте стоят буквы "И" и "А". Более точно: на 1000 букв русского текста в среднем приходится 90 букв "О", 72 буквы "Е" или "Ё" и по 60 букв "И" и "А" и т.д.

Неудобство шифров типа "подстановка" ("простая замена") в случае использования стандартного алфавита очевидно. Таблица частот встречаемости букв алфавита позволяет определить один или несколько символов, а этого иногда достаточно для дешифрования всего сообщения. Поэтому обычно пользуются разными приемами, чтобы затруднить дешифрование. Для этой цели используют многобуквенную систему шифрования – систему, в которой одному символу отвечает одна или несколько комбинаций двух и более символов. Другой прием – использование нескольких алфавитов. В этом случае для каждого символа употребляют тот или иной алфавит в зависимости от ключа, который связан каким-нибудь способом с самим символом или с его порядком в передаваемом сообщении. В процессе шифрования (и дешифрования) используется таблица ("таблица Виженера"), которая устроена следующим образом: в первой строке выписывается весь алфавит, в каждой следующей осуществляется циклический сдвиг на одну букву. Так получается квадратная таблица, число строк которой равно числу столбцов и равно числу букв в алфавите.


Шифр виженера.

Шифр Виженера — метод полиалфавитного шифрования буквенного текста с использованием ключевого слова.

Этот метод является простой формой многоалфавитной замены. Шифр Виженера изобретался многократно. Впервые этот метод описал Джован Баттиста Беллазо (итал. Giovan Battista Bellaso) в книге La cifra del. Sig. Giovan Battista Bellasо в 1553 году, однако в XIX веке получил имя Блеза Виженера, французского дипломата. Метод прост для понимания и реализации, он является недоступным для простых методов криптоанализа.

Блез Виженер представил своё описание простого, но стойкого шифра перед комиссией Генриха III во Франции в 1586 году, и позднее изобретение шифра было присвоено именно ему. Давид Кан в своей книге «Взломщики кодов» отозвался об этом осуждающе, написав, что история «проигнорировала важный факт и назвала шифр именем Виженера, несмотря на то, что он ничего не сделал для его создания».

Шифр Виженера имел репутацию исключительно стойкого к «ручному» взлому. Известный писатель и математик Чарльз Лютвидж Доджсон (Льюис Кэрролл) назвал шифр Виженера невзламываемым в своей статье «Алфавитный шифр» англ. The Alphabet Cipher, опубликованной в детском журнале в 1868 году. В 1917 году Scientific American также отозвался о шифре Виженера, как о неподдающемся взлому. Это представление было опровергнуто после того, как Касиски полностью взломал шифр в XIX веке, хотя известны случаи взлома этого шифра некоторыми опытными криптоаналитиками ещё в XVI веке.

Шифр Виженера достаточно прост для использования в полевых условиях, особенно если применяются шифровальные диски. Например, «конфедераты» использовали медный шифровальный диск для шифра Виженера в ходе Гражданской войны.

 Описание алгоритма

В шифре Цезаря каждая буква алфавита сдвигается на несколько строк; например в шифре Цезаря при сдвиге +3, A стало бы D, B стало бы E и так далее. Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига. Для зашифровывания может использоваться таблица алфавитов, называемая tabula recta или квадрат (таблица) Виженера. Применительно к латинскому алфавиту таблица Виженера составляется из строк по 26 символов, причём каждая следующая строка сдвигается на несколько позиций. Таким образом, в таблице получается 26 различных шифров Цезаря. На разных этапах кодировки шифр Виженера использует различные алфавиты из этой таблицы. На каждом этапе шифрования используются различные алфавиты, выбираемые в зависимости от символа ключевого слова. 

Расшифровывание производится следующим образом: находим в таблице Виженера строку, соответствующую первому символу ключевого слова; в данной строке находим первый символ зашифрованного текста. Столбец, в котором находится данный символ, соответствует первому символу исходного текста. Следующие символы зашифрованного текста расшифровываются подобным образом.

Если буквы A-Z соответствуют числам 0-25, то шифрование Виженера можно записать в виде формулы:

Расшифровка:

Криптоанализ

 Шифр Виженера «размывает» характеристики частот появления символов в тексте, но некоторые особенности появления символов в тексте остаются. Главный недостаток шифра Виженера состоит в том, что его ключ повторяется. Поэтому простой криптоанализ шифра может быть построен в два этапа:

  1.  Поиск длины ключа. Можно анализировать распределение частот в зашифрованном тексте с различным прореживанием. То есть брать текст, включающий каждую 2-ю букву зашифрованного текста, потом каждую 3-ю и т. д. Как только распределение частот букв будет сильно отличаться от равномерного (например, по энтропии), то можно говорить о найденной длине ключа.
  2.  Криптоанализ. Совокупность l шифров Цезаря (где l — найденная длина ключа), которые по отдельности легко взламываются.

Таблица Виженера для кириллицы:

Таблица Виженера для латиницы:

 


Листинг программы

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls;

type

 TForm1 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Edit1: TEdit;

   Label3: TLabel;

   Edit2: TEdit;

   Button1: TButton;

   Button2: TButton;

   Label4: TLabel;

   Edit3: TEdit;

   Button3: TButton;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 i, z, n, l, p : integer;

 s, k, e :string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);//---Кнопка зашифровки

begin

s:=Edit1.Text;  /--исходный текст

k:=Edit2.Text;     /--ключ

Edit3.Text:='';

for i:=1 to length(s) do

 begin

 z:=ord(s[i]);       /--перевод в ASCII код

 l:=length(k);

 p:=i;

  //--Циклическое считывание ключа

 if p>l then

   begin

    p:=(p)mod(l);

    if p=0 then p:=l

    else p:=p;

    end

   else p:=p;

 n:=ord(k[p]);

 //--Кириллица заглавные

 if ((z>=192) and (z<=223)) and ((n>=192) and (n<=255)) then

 begin

 z:=(z-191);

   if n>=224 then n:=n-223

   else n:=n-191;

 z:=((z+n)mod(32))+191-1;

 if z<192 then z:=z+32

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Кириллица строчнык

 else if ((z>=224) and (z<=255)) and ((n>=192) and (n<=255)) then

 begin

 z:=(z-223);

 if n>=224 then n:=n-223

 else n:=n-191;

 z:=223-1+(z+n)mod(32);

 if z<224 then z:=z+32

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Латиница заглавные

 else if ((z>=65) and (z<=90)) and (((n>=65) and (n<=90)) or ((n>=97) and (n<=122))) then

 begin

 z:=(z-64);

 if n>=97 then n:=n-96

 else n:=n-64;

 z:=64-1+(z+n)mod(26);

 if z<65 then z:=z+26

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Латиница сточные

 else if ((z>=97) and (z<=122)) and (((n>=65 )and (n<=90)) or ((n>=97) and (n<=122))) then

 begin

 z:=(z-96);

 if n>=97 then n:=n-96

 else n:=n-64;

 z:=96-1+(z+n)mod(26);

 if z<97 then z:=z+26

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Если шифруемое сообщение не входит в алфавит (.,! ? и т.д.)

 else if (z<65) or ((z>90) and (z<97)) or ((z>122) and (z<192)) and (((n>64) and (n<91)) or ((n>96) and (n<123)) or (n>191)) then

 Edit3.Text:= Edit3.Text+chr(z)

 //--Если в ключ входят символы не из алфавита (.,! ? и т.д.)

 else if (n<65) or ((n>90) and (n<97)) or ((n>122) and (n<192)) then

 begin

 ShowMessage('Введен некорректный ключ. Ключ не должен содержать символы');

 Edit3.Text:='';

 break;

 end

 //---Использование разных алфавитов

 else

 begin

 ShowMessage('Ключ и текст должны содержать символы из одного алфавита');

 Edit3.Text:='';

 break;

 end;

end;

 end;

procedure TForm1.Button2Click(Sender: TObject);//-- Кнопка расшифровки

begin

Edit3.Text:='';  

s:=Edit1.Text;

k:=Edit2.Text;

for i:=1 to length(s) do

 begin

 z:=ord(s[i]);

 l:=length(k);

 p:=i;

  //--Циклическое считывание ключа

 if p>l then

   begin

    p:=(p)mod(l);

    if p=0 then p:=l

    else p:=p;

    end

   else p:=p;

 n:=ord(k[p]);

 //--Кириллица заглавные

 if ((z>=192) and (z<=223)) and ((n>=192) and (n<=255)) then

 begin

 z:=(z-191);

   if n>=224 then n:=n-223

   else n:=n-191;

 z:=((z-n)mod(32))+191+1;

 if z<192 then z:=z+32

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Кириллица строчнык

 else if ((z>=224) and (z<=255)) and ((n>=192) and (n<=255)) then

 begin

 z:=(z-223);

 if n>=224 then n:=n-223

 else n:=n-191;

 z:=223+1+(z-n)mod(32);

 if z<224 then z:=z+32

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Латиница заглавные

 else if ((z>=65) and (z<=90)) and (((n>=65) and (n<=90)) or ((n>=97) and (n<=122))) then

 begin

 z:=(z-64);

 if n>=97 then n:=n-96

 else n:=n-64;

 z:=64+1+(z-n)mod(26);

 if z<65 then z:=z+26

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Латиница сточные

 else if ((z>=97) and (z<=122)) and (((n>=65 )and (n<=90)) or ((n>=97) and (n<=122))) then

 begin

 z:=(z-96);

 if n>=97 then n:=n-96

 else n:=n-64;

 z:=96+1+(z-n)mod(26);

 if z<97 then z:=z+26

 else z:=z;

 Edit3.Text:= Edit3.Text+chr(z);

 end

 //--Если шифруемое сообщение не входит в алфавит (.,! ? и т.д.)

 else if (z<65) or ((z>90) and (z<97)) or ((z>122) and (z<192)) and (((n>64) and (n<91)) or ((n>96) and (n<123)) or (n>191)) then

 Edit3.Text:= Edit3.Text+chr(z)

 //--Если в ключ входят символы не из алфавита (.,! ? и т.д.)

 else if (n<65) or ((n>90) and (n<97)) or ((n>122) and (n<192)) then

 begin

 ShowMessage('Введен некорректный ключ. Ключ не должен содержать символы');

 Edit3.Text:='';

 break;

 end

 //---Использование разных алфавитов

 else

 begin

 ShowMessage('Ключ и текст должны содержать символы из одного алфавита');

 Edit3.Text:='';

 break;

 end;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Close();

end;

end.

//-------------------------------------------------------------------------


Демонстрация работы программы

 Рис.1 Диалоговое окно программы.

Для начала работы программы в поле «Исходный текст» следует записать открытое сообщение, в поле «Ключ» записать ключ шифрования. Нажать кнопку «Зашифровать». В качестве контрольного примера выбрана цитата «Дайте человеку цель, ради которой стоит жить, и он сможет выжить в любой ситуации», а в качестве ключа используется имя автора этих слов «ИоганнГете».

Открытое сообщение: «Дайте человеку цель, ради которой стоит жить, и он сможет выжить в любой ситуации».

Ключ: «ИоганнГете».

 Рис.2 Пример шифрования

Получено зашифрованное сообщение: «Момтт ъкэукуну гиро, югдх нудушьм юяснд оцхь, л ат япоутх фаоцхь п рржцч схяцеинр».  Для дешифрования зашифрованный текст следует записать в поле «Текст» и нажать кнопку «Расшифровать»

 

Рис.3 Пример дешифрования.

Для корректной работы программы должны выполняться следующие условия:

  1.  Исходный текст и ключ должны быть из одного алфавита.
  2.  Ключ не должен содержать сиволов не из алфавита, т.е не должен содержать знаков препинания, пробелов и т.п.

При не выполнении условий появятся сообщения (Рис.4, Рис.5).

Рис.4. Использование разных алфавитов

Рис. 5. Использование пробела в ключе шифрования.


Общий вывод

В проделанной работе был программно реализован шифр «Виженера». Данная программа написана в программной среде Delphi 7. Программа осуществляет шифрование и дешифрование текста написанного на одном из двух алфавитов – кириллица, латиница. Для корректной работы программы шифруемое сообщение и ключ должны содержать в себе символы из одного алфавита. Так же ключ не должен содержать в себе пробелов, знаков пунктуации и иных символов не входящих в алфавит. Данный шифр долго считался криптоскойким к ручному взлому так как метод шифрования скрывает частоту появления символов связанную с особенностями языка. Это обусловлено тем что один символ может быть заменен на любой символ алфавита в зависимости от ключа. Так же стойкость этого алгоритма повышается с длинной ключа. Максимально стойким алгоритм будет при соизмеримости ключа и исходного текста.

 


Список используемой литературы

  1.  Курс лекций «Криптография» Татарникова Т.М.
    1.  http://www.ddt.cs.vsu.ru/?q=system/files/03.pdf.
    2.  http://ru.wikipedia.org/wiki/ Шифр_Виженера .


 

А также другие работы, которые могут Вас заинтересовать

58818. Розробка циклу уроків з теми «Системні утиліти» 539 KB
  Комп’ютерні віруси. Під час роботи з інформацією на комп’ютері можуть виникати такі проблеми: збій роботи під час читання або записування файлів на дискету; виникнення помилок у файловій структурі при некоректній роботі з технікою та програмами; уповільнення роботи комп’ютера через невпорядкованість даних на жорсткому диску. ВАМ ПОТРІБНО: дати визначення операції; розібратися що відбувається на диску під час виконання операції; з’ясувати як запустити потрібну програму; визначити які недоліки в роботі комп’ютера усуває задана...
58820. Українське відродження (кінець ХVIII – перша половина ХІХ ст.) 153.5 KB
  У межах цієї теми учні знайомляться з багатовіковими державотворчими традиціями українського народу. Але у процесі проведення уроку за темою у вчителя виникають певні труднощі: фрагментарність знань які учні отримують через брак часу...
58821. Урок ґендерної грамотності 92 KB
  Мета уроку: ознайомити учнів: з поняттями: ґендер ґендерна рівність ґендерна рівноправність; з міжнародними правовими документами про рівноправність жінок і чоловіків; з становищем жінок в різних державах та ставленням до ролі жінки...
58822. London sightseeing tour 115 KB
  Bank of England, Buckingham Palace, Big Ben, British Museum, bury C: crown, church, Covent Garden, column, Changing the Guards F: financial, fashionable, fortress, famous H: Houses of Parliament, Horse Guards, Hyde Park, House of Lords, House of Commons
58823. Подвійні зорі. Фізичні змінні зорі 68.5 KB
  Мета уроку: дати загальні уявлення про подвійні та фізичні змінні зорі їхні фізичні характеристики та процеси що в них проходять; про метод цефеїд визначення відстаней до галактик; розвивати вміння робити висновки; виховувати в учнів інтерес до астрономії; формувати науковий світогляд.
58824. Іменники-синоніми, іменники-антоніми. Багатозначні іменники. Пряме і переносне значення іменників 55 KB
  Вміти влучно використовувати слова в прямому і переносному значенні застосовувати в мовленні багатозначні іменники. Хвилинка каліграфії зашифроване слова праця з творчим завданням. Підберіть будьласка спільнокореневі слова до слова праця таким чином щоб вони були різними частинами мови...
58825. Дієслова-синоніми, дієслова-антоніми. Розпізнавання дієслів у реченнях 42 KB
  Мета: Закріплювати вміння відрізняти дієслова від інших частин мови правильно вживати їх у мовленні. Чи потрібні дієслова у нашому мовленні Прочитаємо текст. Визначіть дієслова в тексті і спробуйте прочитати його без дієслів.
58826. Свято Миколая: виховний захід для учнів 1-5кл 70 KB
  Ведучий2: Сядьно тихо мій глядаче І прислухайся на мить: Правда ж чути десь неначе Дивна музика бринить Звідки звуки долинають Здогадався ти чи ні Так звичайно витинають Музиканти чарівні . звучить пісня бременських музик...