98929

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

Курсовая

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

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

Русский

2016-07-14

2.93 MB

5 чел.

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

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

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

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

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

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

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

на тему:

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

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

Проверила:

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

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

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/ Шифр_Виженера .


 

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

23722. Метод проб и ошибок 61 KB
  Какие уравнения мы учились решать на прошлом уроке Уравнения вида x аx = b Что мы использовали при решении уравнений Свойства чисел. Какие уравнения мы ещё получали при переводе текста задачи на математический язык Уравнения вида: x x а = b. Подберите корень уравнения: Объясните способ решения который вы использовали. А есть ли у этого уравнения другие корни 3.
23723. Метод проб и ошибок 69.5 KB
  Основная цель: 1 Тренировать способность к использованию метода проб и ошибок для решения уравнений. Какие уравнения мы учились решать на прошлом уроке Уравнения вида x x а = b Что мы использовали при решении уравнений Метод проб и ошибок. Сегодня мы на уроке проанализируем на сколько хорошо вы усвоили метод проб и ошибок.
23724. Перевод условия задачи на математический язык 55 KB
  Обозначим за x площадь третьей комнаты. Вторая на 3 м2 больше третьей значит её площадь равна x 3 м2. Первая комната в 2 раза меньше второй чтобы найти её площадь надо площадь второй комнаты разделить на 2 т. Общая площадь трёх комнат 42 м2.
23725. Перевод условия задачи на математический язык 53 KB
  Длина в м Ширина в м Площадь в м2 В классе даются разные ответы возможно кто то из учащихся совсем не сможет выполнить задание. Почему в классе разные результаты Что общего и чем отличается данная задача от тех которые мы решали на прошлом уроке Общее то что в этой задаче неизвестна ни длина ни ширина прямоугольника а только известно что длина на 3 м больше ширины а отличаются эти задачи схемой для данной задачи схемой будет таблица. Возможны варианты: Длина в м Ширина в м Площадь в м2 x 3 x xx 3 или 70...
23726. Перевод условия задачи на математический язык 58.5 KB
  Количество детей в одном автобусе Количество автобусов Общее количество детей Большие автобусы Маленькие автобусы 3. Какую формулу нужно использовать для выполнения задания Чтобы найти сколько всего человек поехало на экскурсию надо количество людей в одном автобусе умножить на количество автобусов т. Количество детей в одном автобусе Количество автобусов Общее количество детей Большие автобусы x 6 y 1 x 6y 1 или 252 Маленькие автобусы x y xy или 252 Работу можно организовать в группах или используя подводящий диалог. ...
23727. Перевод условия задачи на математический язык 46.5 KB
  Какими математическими выражениями может быть их перевод Числовое или буквенное выражение уравнение вида ax x = b уравнение вида xx a = b двумя уравнениями с двумя переменными xy = c x ay b = с В каком ещё виде может быть перевод условия задачи на математический язык Возможны разные ответы в том числе и ответ: одно уравнение с двумя неизвестными. Уменьшите число 640 на 76. Запишите на математическом языке сколько всего единиц содержит трехзначное число...
23728. Признаки делимости на 10, на 5, на 2 43.5 KB
  Известно что t нечетное число. Какое число может быть лишним Например 14 у него сумма цифр нечетное число а у остальных четное; 28 кратно 4 а остальные нет; 42 его сумма цифр кратна 3 а у остальных чисел нет и т. Назовите четырехзначное число кратное 2. Сформулируйте гипотезу о том по какому признаку можно определить является данное число четным или нет.
23729. Признаки делимости на 10, на 5, на 2 44.5 KB
  Что общего в числах полученного ряда Все числа кратны 5. Эти числа оканчиваются на 0. Приведите пример четного числа удовлетворяющего неравенству x 80. Какие остатки могут получаться при делении числа на 100.
23730. Свойства и признаки делимости 71.5 KB
  2 а x не делится на 10 т. 2 а x делится на 3; число оканчивается любой цифрой кроме 0; б x делится на 7; б x не делится на 5; в x не делится на 2 т. любое нечётное число; в x делится на 3; г x делится на 9. г x не делится на 9.