Программное средство шифрования данных

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    778,91 Кб
  • Опубликовано:
    2012-11-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программное средство шифрования данных

Постановка задачи по курсовому проекту

В данном курсовом проекте по курсу «Языки программирования» по теме «Программное средство шифрования данных» будут реализованы следующие поставленные задачи:

.        Роторная криптосистема на основании криптографической машины «Энигма» времен второй мировой войны:

.1.      Шифратор произвольного файла

.2.      Дешифратор

.        Криптосистема RSA:

.1. Шифратор произвольного файла

.2. Дешифратор.

Обозначения и сокращения

КП - курсовой проект;

КР - курсовая работа;

рис. - рисунок;

см. - смотреть;

лат. - латинский;

сх. - схема;

бл. - блок;

стр. - строка;

п. - пункт;

Введение

Любой человек сталкивается хоть раз в жизни с такой ситуацией, когда ему необходимо передать какую-либо информацию другому человеку таким образом, что бы никто другой не узнал передаваемое сообщение. То есть у нас появляется необходимость зашифровать наше сообщение, а, соответственно, при его получении - дешифрировать его.

На сегодняшний день существует множество способов проделывать данные операции. Я в данной курсовой работе (КР) остановлюсь лишь на нескольких из них.

Шифрование - это способ преобразования информации, применяемый для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи.

Шифрование данных помогает избежать утечек важной и конфиденциальной информации.

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

Одним из древнейших шифров является шифр Цезаря. Этот шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами. Идея данного шифрования заключается в замене всех букв послания на буквы, находящиеся на n позиций от текущей в алфавите, то есть выполняется сдвиг на фиксированное количество позиций, а соответственно при дешифрировании - противоположный сдвиг на то же количество позиции. Тогда значение количества позиции и есть ключ данного метода шифрования. Но этот метод довольно таки легко взламываем, даже методом полного перебора это вполне осуществимо.

Со временем изобретались новые криптосистемы, которые становились все сложнее и сложнее, и так же подвергались атакам. Этот круг пока что неразрывен. С каждым днем и годом люди пытаются изобрести и пустить в ход все более и более изощренные алгоритмы шифрования и защиты данных. При этом где-то идут потери в производительности, а где-то и в качестве выполненного шифрования.

В данном курсовом проекте (КП) я рассмотрю роторную криптосистему и алгоритм шифрования RSA, которые представляют собой достаточно эффективные алгоритмы.

Одной из наиболее известных роторных криптосистем является «Энигма» («Загадка»), которая в свое время служила для защиты связи между командованием и подводными лодками немецкой армии в годы второй мировой войны.

А алгоритм RSA был предложен в 1977 году тремя учёными: Роном Ривестом, Ади Шамиром и Леонардом Адлеманом. Собственно, он и получил название от первых букв фамилий своих составителей:

Riverst -> R-> S ->A.

В свою очередь, роторные криптосистемы являются симметричными, а криптосистема RSA - ассиметричной.

Далее они будут рассмотрены более подробно, включая некоторые модификации криптосистемы «Энигма».

1. Роторные криптосистемы

.1 «Энигма»

Как уже упоминалось в данном КП криптосистема «Энигма» в свое время служила для защиты связи между командованием и подводными лодками немецкой армии в годы второй мировой войны. А происходило это по следующей схеме:

Рис.1

Тут (см. рис.1) отображена работа криптосистемы «Энигма», где А - это символ исходного текста, а G - символ зашифрованного текста.

Данная криптосистема основывается на системе из трех роторов, каждый из которых состоит из 26 входных контактов на одной стороне и 26 выходных контактов на другой стороне. Внутри каждого ротора проходили провода, связывавшие входные и выходные контакты между собой. Выходные контакты первого ротора соединялись с входными контактами второго ротора.

При нажатии на какую-либо букву на клавиатуре машины, электрический ток подавался на входной контакт первого (правого - см. рис.1) ротора, соответствующий этой букве. Ток проходил через первый ротор и поступал на выходной контакт, соответствующий какой-либо другой букве. Затем ток проходил последовательно через второй (средний - см. рис.1) и третий (левый - см. рис.1) роторы и подавался на неподвижный рефлектор (от лат. reflecto - обращаю назад, отражаю). В конструкции рефлектора 26 контактов разбивались на пары, контакты внутри каждой пары были соединены между собой. Таким образом, рефлектор заменял каждую букву на парную ей. Ток, прошедший через рефлектор, подавался назад, на систему роторов. Он вновь проходил через три ротора, но в обратном порядке. То есть ток тек по тем же проводам, но в другую сторону.

По окончанию данной процедуры для входного символа исходного текста на световом табло «Энигмы» загоралась одна из26 лампочек, соответствовавшая зашифрованной букве.

В общем случае, криптосистема на основе роторной машины осуществляет алфавитную подстановку с длинным периодом.

А одним из ее главных свойств является вращение роторов:

.        Первый ротор после каждого преобразования буквы поворачивался на одну позицию.

.        Второй ротор поворачивался на одну позицию после того, как первый ротор совершал полный оборот, т.е. после26-ти преобразованных букв.

.        Третий ротор поворачивался на одну позицию после того, как второй ротор совершал полный оборот, то есть после 676-ти зашифрованных букв.

Таким образом, можно заметить, что криптосистема «Энигма» использует 263 таблиц подстановки, или после подсчета - 676 таблиц подстановок, что является довольно таки внушительным значением.

1.1.1 Шифрование

Для программной реализации данной криптосистемы предоставлю этапы ее реализации, которые приведены на Сх. 1.

Сх. 1: алгоритм реализации криптосистемы «Энигма».

Для начала шифрования пользователю необходимо ввести значения начального состояния роторов, а так же подать на вход произвольный файл, который необходимо зашифровать (блок 1 на Сх.1).

После чего будет формироваться каждый из трех роторов (блок 2 на Сх.1). Наиболее корректно это можно выполнить с помощью генераторов псевдослучайных чисел. Это будет производиться с помощью одного сдвигового регистра с линейной обратной связью LFSR длиной 23 бита (примитивный многочлен P(x) =x23+ x5+ 1).

В программе это можно реализовать, использую сдвиги и логическую операцию исключающего «ИЛИ».

Сх. 2: алгоритм заполнения роторов псевдослучайными значениями.

Самая главная часть криптосистемы «Энигма» при ее программной реализации будет заключаться в бл.5 сх.1. Ее математическая модель будет рассмотрена далее.

В разрабатываемом мной ПС будет реализовано шифрование файла произвольного типа. Соответственно, в отличие от криптографической машины «Энигма», взятый из файла блок данных для шифрования будет равен одному байту, в то время как в классическом варианте брался символ - буква алфавита (реализация была физической, не в машинных кодах).

Для этого, после взятия байта b из поданного на вход файла, будут производиться следующие действия:

1.       Проход по роторам до рефлектора (см. Приложение 1, стр.1);

.        Рефлектор (см. Приложение 1, стр.12);

.        Обратный ход (см. Приложение 1, стр.18).

В п.1 взятый байт b будет являться индексом, следуя которому из ротора 1 будет извлечен элемент, который в свою очередь будет являться индексом извлекаемого элемента из третьего ротора.

В п.2 в рефлектор подается извлеченный из третьего ротора элемент, который является индексом рефлектора, где будет содержаться элемент - байт (в классическом виде - буква), который мы будет отражать согласно следующему выражению:

b = 255-b,

где b, полученное в результате данной операции есть индекс элемента рефлектора, который получится на выходе из рефлектора.

В п.3 будет происходить в обратном порядке процедура из п.1, с тем лишь отличием, что последовательно будет не извлекаться индекс последующего элемента из ротора, а наоборот, по поданному значению будет осуществляться поиск его в роторе (сперва в третьем), при обнаружении которого и будет получен индекс, который будет являться поисковым значением для второго ротора, что будет аналогично и для первого ротора.

После выполнения данных трех пунктов, на выходе бл.5 сх.2 будет получен зашифрованный байт исходного текста.

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

·        первый ротор, как было описано выше, совершает циклический сдвиг после шифрования каждого байта;

·        второй - после того, как первый ротор будет совершать полный оборот, т.е. после шифрования количества байт кратного 256;

·        третий же лишь после того, как второй ротор будет совершать полный оборот, то есть после шифрования количества байт равного для первого оборота 2562 байт.

Данные операции будут повторяться до тех пор, пока не будут зашифрованы все байты исходного файла.

.2 Усовершенствованная «Энигма»

Усовершенствование «Энигмы» заключается в том, что увеличивается периода ключа. Для этого в каждом роторе может быть организовано шифрование с обратной связью по шифротексту, когда символ, полученный в результате шифрования на предыдущем шаге, используется для шифрования следующего символа (рис. 2).

Рис.2

На данном рисунке (рис.2) приведены следующие обозначения:

RS - состояние ротора (rotorstate);

C - байт шифротекста;

I - индекс элемента таблицы подстановки;

p - входной байт исходного текста;

RCB - байт управления положением (RotorControlByte);

Для работы данного алгоритма, необходимо значение RCB. Для того, что бы его получить, используется генератор на основе одного сдвигового регистра с линейной обратной связью LFSR длиной80 бит (примитивный многочлен):

(x) = x80+ x79+ x43+ x42+ 1.

Из значения, полученного генератором, случайным образом выбираются три позиции, которые и составляют переменную RCB, используемую для управления положением ротора. Также они будут являться частью ключа данного алгоритма.

Таблица подстановки R заполняется предварительно. В разрабатываемом мной ПС это происходит аналогично заполнению роторов из криптосистемы «Энигма».

Для получения состояния ротора, необходимо вычислить следующее выражение:

RS = (RS + c + RCB) mod 256.

При первом вычислении значения RS, значения RSиc обнуляются. То есть при начале работы RSвычисляется как:

RS = RCBmod 256.

Далее, для вычисления индекса таблицы подстановки необходимо выполнить такое выражение:

i = (p + RS) mod 256.

После вычисления которого, мы можем получить значение зашифрованного байта из таблицы подстановки, воспользовавшись найденным индексом подстановки:

= R[i].

При шифровании следующего байта исходного текста, мы будем использовать значение байта шифротекста полученного на предыдущем шаге.

Длина ключа данного алгоритма составит 784 байтов. Что представляет собой довольно таки внушительное значение. Пользователь не может запомнить такое количество данный, поэтому необходимо предусмотреть возможность генерации ключевых данных на основе пользовательского пароля. Что и осуществляется при помощи требования ввода пользователем начальных значений положения таблицы подстановки Rи генератора на основе одного сдвигового регистра с линейной обратной связью LFSR длиной 80 бит.

Сх.3: усовершенствованная «Энигма»

На сх.3 представлена последовательность выполнения алгоритма, являющегося усовершенствованным, по отношению к классическому алгоритму «Энигма».

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

1.       простота программной и аппаратной реализации;

2.       высокая криптостойкость;

.        высокая скорость шифрования.

Скорость шифрования можно объяснить тем фактом, что для шифрования одного байта файла, поданного на вход, необходимо выполнить лишь три операции сложения и одну операцию адресации по индексу, атакже один такт работы регистраLFSR.

.3 Дешифрирование

.3.1 «Энигма»

Данная криптосистема является симметричной, поэтому для расшифровки сообщения достаточно было вновь пропустить его (сообщение) через машину, восстановив предварительно изначальное положение роторов.

Единственное, что было необходимо предварительно сделать - выставить начальное положение роторов, которое играло роль ключа шифрования.

Во времена второй мировой войны каждый оператор имел специальную книгу, задававшую положение роторов для каждого дня. В этом и заключалась очевидная слабость данной системы шифрования: достаточно было завладеть книгой и машиной, чтобы раскрыть все секреты. Что и произошло осенью 1942 года, когда войсками союзников была захвачена немецкая подводная лодкаU-571.

Для программной дешифрации файла, зашифрованного алгоритмом шифрования «Энигма» будет необходимо лишь подать ключ, который использовался при шифровании этого файла. Это обусловлено тем, что данная криптосистема симметрична, как упоминалось выше.

Таки образом так же, в той же последовательности будут выполняться операции в той же последовательности, но на выходе будет получен исходный байт файла.

1.3.2 Усовершенствованная «Энигма»

В данной модификации «Энигмы» алгоритм дешифрации будет отличаться от алгоритма шифрования.

Для дешифрирования файла, который был зашифрован по усовершенствованному алгоритму «Энигма» будет необходимо пройти обратным ходом по схеме шифрования (см. рис. 2).

Алгоритм реализации будет заключаться в следующих шагах:

.        получение первого значения RCB, который будет восстановлен после того, как будет выбран тот же случайный байт из выходного значения сдвигового регистра с линейной обратной связью LFSR длиной 80 бит;

.        поиск в таблице подстановки Rбайта зашифрованного файла;

.        вычисление значения состояния ротора:

RS = (RS + c + RCB) mod 256,

где при дешифрировании первого байта файла будет применяться выражение:

= RCBmod 256;

.        в текущем шаге вычисления усложнятся тем фактом, что необходимо решить уравнение вида:

(x + RS) mod 256= i,

где х является искомым байтом, то есть расшифрованным байтом.

.        Данные операции (с п.2 по п.4) повторяются до тех пор, пока не будет достигнут конец поданного на вход файла.

Реализация данной криптосистемы приведена в приложении 3.

1.4 Сравнение результатов шифрования криптосистемы «Энигма» с полученными результатами шифрования усовершенствованной «Энигмы»

Для того, что бы выполнить сравнительный анализ двух вышеприведенных криптосистем, необходимо выполнить частотный анализ зашифрованных файлов «Энигмой» и усовершенствованной «Энигмой».

Для проведения частотного анализа необходимо:

.        Подсчитать количество вхождений каждого из 256 байта в зашифрованном тексте;

.        Определить общую длину зашифрованного файла;

.        Найти отношение для каждого из 256 байта к общему количеству байт в файле, что и будет являться частотой встречаемости байта в шифротексте.

Данная оценка является весьма эффективной с точки зрения оценки качества шифрования, так как она явно выявляет возможность атаки на данный шифр методом частотного анализа.

Такая атака основана на том факте, что в естественных языках частоты встречаемости различных букв могут существенно отличаться. Так, в английском языке наиболее часто встречаемой является буква«e», а наименее встречаемой- буква«z». А в русском языке наиболее часто встречаемой буквой является «о», а наименее часто встречаемой - «ъ».

Зная типичную частоту встречаемости каждого из символов алфавита исходного текста, можно воссоздать использованную при шифровании таблицу постановки, ставя каждому из символов исходного текста в соответствие символ шифротекста, частота встречаемости которого в зашифрованном тексте является наиболее близкой к типичной частоте встречаемости символа алфавита исходного текста.

Частотность всех символов русского и английского алфавитов можно посмотреть в приложении 5.

Изначально я рассмотрю частотную диаграмму исходного файла:

Исходный файл представлял собой текстовый файл, изложенный на английском языке.

Рис.3

Далее представлена диаграмма зашифрованного файла при помощи криптосистемы «Энигма»:

Рис.4

Далее представлена диаграмма зашифрованного файла при помощи криптосистемы усовершенствованная «Энигма»:

Рис.5

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

2. Криптосистема RSA

.1 Шифрование

Криптосистема RSA представляет собой ассиметричную систему шифрования.

Асимметричное шифрование подразумевает под собой тот факт, что посторонним лицам может быть известен алгоритм шифрования, и, возможно открытый ключ, но неизвестен закрытый ключ, известный только получателю. Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности, в протоколах TLS и его предшественнике SSL (лежащих в основе HTTPS), а так же SSH, PGP, S/MIME и т. д.

То есть для шифрования и дешифрирования необходимы различные ключи:

·        Открытый;

·        Закрытый.

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

Так же стоит учесть тот факт, что алгоритм шифрования RSA рассчитан на работу с длинной арифметикой, что соответственно объясняет невозможность подбора ключа для дешифрирования.

Шифрование исходного файла Х в RSA производится путем возведения в степень, равную открытому ключу Kо по модулю большого числа r, где 0<X<r.

То есть получаем следующее выражение для шифрования:

Y= EKо(X) = XKо mod r.

В приведенном выше выражении, ЕКо  алгоритм шифрования.

r - является результатом умножения двух простых больших чисел pи q.

Использование такого выражения для шифрования есть использование, так называемых, односторонних функций, которые обладают следующим свойством:

)        Если известно, то вычислить относительно просто

)        Если известно, то для вычисления нет простого (эффективного) пути.

Под односторонностью понимается не теоретическая однонаправленность, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства, за обозримый интервал времени.

Процедура формирования параметров алгоритма RSA выглядит следующим образом:

)        генерируются два больших простых числа: p и q, p≠ q;

)        вычисляется произведение данных чисел: r= p·q;

)        находится функция Эйлера от r: φ(r) = (p-1)·(q-1);

4)      генерируется значение открытого ключа Kо, исходя из следующих условий: Kо<φ(r), (Kо, φ(r)) = 1;

5)      вычисляется мультипликативное инверсное по модулю φ(r) для Kо.

Полученное значение будет являться закрытым ключом Kс.

Условия и ограничения для данных, вводимых пользователем (дополнительные проверки):

1)      p и q - должны быть простыми числами;

2)      rи Kc - должны быть взаимнопростыми числами.

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

.        алгоритм Евклида;

.        алгоритм быстрого возведения в степень по модулю.

Общий вид алгоритма:


В бл.4 и осуществляется получение секретного ключа, при шифровании, на основании которого файл можно будет дешифрировать.

Получение секретного ключа K cосуществляется следующим образом:

находится значение функции Эйлера от r, которое далее передается в функцию Евклида вместе со значением открытого ключа Ко (см. приложение 4).

2.2 Дешифрирование

Для расшифрования шифротекста необходимо воспользоваться значением Кс, а также необходимо знать значение r. То есть ключом будет являться пара значений - (Кс, r).

Другие же значения: pи q - хранятся в секрете. Так же пользователь, который будет пытаться произвести дешифрацию файла, будет иметь при себе значение открытого ключа Ко.

Дешифрирование производится путём возведения шифротекста в степень закрытого ключа Kс по модулю r.

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

(Kо·Kс)mod φ(r) = 1,

где φ(r) - функция Эйлера от r.

Если же какой-либо пользователь решит взломать данный шифр, то он столкнётся с необходимостью методом подбора определять искомое значение функции Эйлера, то есть раскладывать на простые множители большое число r.

На сегодняшний день данная задача не имеет эффективного решения, а использование традиционных методов поиска множителей для чисел размерностью порядка22048 не позволяет осуществить взлом криптосистемы за разумное время.

Именно числа порядка 22048рекомендуется использовать в данном алгоритме.

3. Сравнительный анализ

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

Так же следует отметить, что кроме различия в применении ключей, так же существует такой вид отличия, как сферы применения. Например, RSA применяется для получения цифровой подписи, где не применяется, рассмотренная выше криптосистема «Энигма».

шифрование криптосистема симметричный

4. Руководство пользователя

Для того, что выполнить шифрование или дешифрирование Вашего файла произвольного формата, необходимо после запуска приложения отметить галочкой предпочитаемый вид действия:

Рис.6

Нажать кнопку «Продолжить».

После этого перед Вами появится окошко, с дальнейшим предложением действий в выбранном ранее разделе.

Это будет либо окошко «Роторные криптосистемы»:

Рис.7

Тут Вам необходимо заполнить следующие поля:

·        для выбора «Энигма»:

o   Заполнить три поля, отведённых под ключ, числовыми значениями, например такими: 258, 159, 27.

o   Нажать кнопку «Открыть файл», и выбрать в открывшемся окне файл, необходимый файл для шифрования или дешифрирования.

o   Нажать кнопку «Выполнить».

·        для выбора «LFSR+» (усовершенствованная «Энигма»):

o   Заполнить два поля, отведённых под ключ, числовыми значениями, например такими: 58, 171.

o   Нажать кнопку «Открыть файл», и выбрать в открывшемся окне файл, необходимый файл для шифрования или дешифрирования.

o   Нажать кнопку «Выполнить».

·        для выбора «LFSR+__Decipher»:

o   Заполнить два поля, отведённых под ключ, числовыми значениями, например такими: 58, 171.

o   Нажать кнопку «Открыть файл», и выбрать в открывшемся окне файл, необходимый файл для шифрования или дешифрирования.

o   Нажать кнопку выполнить.

·        для выбора «Диаграмма распределения»:

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

После нажатия кнопки «Открыть файл» перед Вами будет окно такого вида:

Рис.8

Где Вы через «Проводник» можете выбрать необходимый Вам файл.

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

Либо окошко «Криптосистема RSA»:

Рис.8

Тут функции кнопок «Открыть файл» и «Выполнить» имеют тот же смысл и те же действия, что и в предыдущей криптосистеме.

Отличие состоит в заполняемых полях:

·        при выборе «Зашифровать»:

o   необходимо заполнить поле Ко, поле q и поле p. Так же при заполнении полей qи pне простыми числами, Вы увидите окно сообщения, о неверности заполнения данных полей (см. рис.9).

o   Нажать кнопку «Открыть файл», и выбрать в открывшемся окне файл, необходимый файл для шифрования или дешифрирования.

o   Нажать кнопку выполнить.

·        при выборе «Дешифрировать»:

o   необходимо заполнить поле Кс и поле r.Так же при заполнении полей Кс и r не взаимно простыми числами, Вы увидите окно сообщения, о неверности заполнения данных полей (см. рис.10).

o   Нажать кнопку «Открыть файл», и выбрать в открывшемся окне файл, необходимый файл для шифрования или дешифрирования.

o   Нажать кнопку выполнить.

·        при выборе «Взломать»:

o   необходимо заполнить поле Ko и поле r. (Взлом возможен только при достаточно небольших значениях r).

o   Нажать кнопку «Открыть файл», и выбрать в открывшемся окне файл, необходимый файл для шифрования или дешифрирования.

o   Нажать кнопку выполнить.

Рис.9

Рис. 10

Верно проследовав инструкции Вы сможете успешно зашифровать и дешифрировать необходимый Вам файл.

Заключение

В данном КП по теме «Программное средство шифрования данных» были изучены, рассмотрена и реализованы следующие алгоритмы:

·        «Энигма»;

·        Усовершенствованная «Энигма»;

·        RSA.

Данные алгоритмы широко известны и постоянно используются. «Энигма» получает новые модификации, а RSA объединяется с симметричными криптосистемами и в итоге образует гибридные криптосистемы. Так же алгоритм RSA получил широкое распространение в популярной на сегодняшний день отрасли криптографии - цифровая подпись.

На сегодняшний день все люди постоянно используют цифровую документацию, которую они имеют необходимость передавать по открытым каналам связи, что соответственно постоянно подталкивает дальнейшее развитие криптографии.

Любой криптографический алгоритм имеет свои достоинства и недостатки. Каждый из алгоритмов имеет ряд преимуществ в той или иной сфере, несмотря на то, что в другой сфере он будет совершенно бессмыслен в применении.

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

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

Используемые материалы

1.       Ярмолик, В.Н. Криптография, стеганография и охрана авторского права: монография / В.Н. Ярмолик, С.С. Портянко, С.В. Ярмолик. - Минск: Изд. центр БГУ, 2007. - 240 с.

2.       «Энигма»: <http://ru.wikipedia.org/wiki/%DD%ED%E8%E3%EC%E0>

3.       Rivest R.L., Shamir A., Adleman L. «A method for obtaining digital signatures and public-key cryptosystems »(англ.) // Communications of the ACM. - New York, NY, USA: ACM, 1978. - Т. 21. - № 2, Feb. 1978. - С. 120-126. - ISSN 0001-0782. - DOI:10.1.1.40.5588

4.       Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. - М.:Триумф, 2002. - 816 с. - 3000 экз. - ISBN 5-89392-055-4

Приложение

Приложение 1

Криптосистема «Энигма»

1.       byte pre_refl(byte b)

2.       {

.       

.        b = rot1[b];

.       

.        b = rot2[b];

.       

.        b = rot3[b];

.        return b;

.        }

.       

12.     byte refl(byte b,byte[] re)

13.     {

.        b = re[255-b];

.        return b;

.        }

.       

18.     byte aft_refl(byte b)

19.     {

20.     b = (byte)where(rot3, b);

.        b = (byte)where(rot2, b);

.        b = (byte)where(rot1, b);

23.     return b;

.        }

.       

26.     public byte[] Enigma_(Int32 S1,Int32 S2, Int32 S3,byte[] file)

27.     {

.        rot1 = newbyte[256];

.        rot2 = newbyte[256];

.        rot3 = newbyte[256];

.        bytetmp;

.        int c1 = 0, c2 = 0, c3 = 0;

.        byte[] re = newbyte[256];

.       

.        for (int j = 0; j < 256; j++)

.        {

.        re[j] = (byte)j;

.        }

.       

.        rot1 = fill(S1);

.        rot2 = fill(S2);

.        rot3 = fill(S3);

.       

44.     for (inti = 0; i<file.Length; i++)

45.     {

.        if (c1 < 256)

.        {

.        c1++;

49.     tmp = pre_refl(file[i]);

50.     tmp = refl(tmp,re);

.        tmp = aft_refl(tmp);

.        }

.        else

.        {

.        c1 = 1;

.        turn(rot1);

.        if (c2 < 256)

.        {

.        c2++;

.        }

.        else

.        {

.        c2 = 1;

.        turn(rot2);

.        if (c3 < 256)

.        {

.        c3++;

.        }

.        else

.        {

.        c3 = 1;

.        turn(rot3);

.        }

.        }

.       

76.     tmp = pre_refl(file[i]);

77.     tmp = refl(tmp,re);

.        tmp = aft_refl(tmp);

.        }

.       

.        file[i] = tmp;

.        }

.       

.        }

Приложение 2

Криптосистема усовершенствованная «Энигма»

1.       public byte[] LFSR__(Int64 S,Int32 S1, byte[] file)

2.       {

.        int RS = 0,c = 0;

.        inti,p;

.        byte[] tt;

.        longttt;

.        byte RCB;

.        byte[] R = newbyte[256];

.       

.        R = fill(S1);

.       

12.     for (p = 0; p <file.Length; p++)

13.     {

.        S = LFSR80(S);

.        ttt = (long)S;

.        tt = BitConverter.GetBytes(ttt);

.       

.        RCB = tt[4];

.       

.        RS = (RS + c + RCB) % 256;

.        i = (file[p] + RS) % 256;

.        c = R[i];

.        file[p] = (byte)c;

.        }

.       

.        returnfile;

.        }

Приложение 3

Усовершенствованная «Энигма». Дешифрирование

1.       public byte[] LFSR__dec(Int64 S, Int32 S1, byte[] file)

2.       {

.        int RS = 0, c = 0;

.        int i, p;

.        byte[] tt;

.        longttt;

.        byte RCB;

.        byte[] R = newbyte[256];

.        int x = 0;

.       

.        R = fill(S1);

.       

13.     for (p = 0; p <file.Length; p++)

14.     {

.        S = LFSR80(S);

.        ttt = (long)S;

.        tt = BitConverter.GetBytes(ttt);

.       

.        RCB = tt[4];

.       

21.     i = find_i(file[p], R);

22.     if (p == 0)

.        {

.        RS = (RS + RCB) % 256;

.        }

.        else

.        {

.        RS = (RS + c + RCB) % 256;

.        }

.       

.        while (((x + RS) % 256) != i)

.        {

.        x++;

.        }

.       

.        c = file[p];

.        file[p] = (byte)x;

.        x = 0;

.        }

.       

.        returnfile;

.        }

.        }

Приложение 4

RSA

1.       public intEuklid(int a, int b)

2.       {

3.       int d0, d1, d2, x0, x1, x2, y0, y1, y2, q;

4.       d0 = a;

.        d1 = b;

.        x0 = 1;

.        x1 = 0;

.        y0 = 0;

.        y1 = 1;

.        while (d1 > 1)

.        {

.        q = d0 / d1;

.        d2 = d0 % d1;

.        x2 = x0 - q * x1;

.        y2 = y0 - q * y1;

.        d0 = d1;

.        d1 = d2;

.        x0 = x1;

.        x1 = x2;

.        y0 = y1;

.        y1 = y2;

.        }

.        return y1;

.        }

.       

26.     private intEiler(int r)

27.     {

.        int i, div1 = 0, pq;

29.     for (i = 2; i<= Convert.ToInt32(Math.Sqrt(r)); i++)

30.     {

.        if (r % i == 0)

.        div1 = i;

.        }

.        pq = (div1 - 1) * (r / div1 - 1);

.        returnpq;

.        }

.       

38.     public int K0(intp,intq,intKc)

39.     {

.        intKo = 0;

.        intfi;

.       

.        r = p * q;

.        fi = (p-1)*(q-1);

.       

.        Ko = Euklid(fi, Kc);

.       

.        returnKo;

.        }

.       

51.     public intui(intr,intKo)

52.     {

.        intKc;

54.     Kc = Euklid(Eiler(r), Ko);

55.     returnKc;

.        }

Приложение 5

Частоты встречаемости символов алфавитов

Русский алфавит

А - 0.07821

Б - 0.01732

В - 0.04491

Г - 0.01698

Д - 0.03103

Е - 0.08567

Ё - 0.0007

Ж - 0.01082

З - 0.01647

Английский алфавит

A - 0.08167

B - 0.01492

C - 0.02782

D - 0.04253

E - 0.12702

F - 0.0228

G - 0.02015

H - 0.06094

I - 0.06966

И- 0.06777

Й - 0.01041

К - 0.03215

Л - 0.04813

М - 0.03139

Н - 0.0685

О - 0.11394

П- 0.02754

Р- 0.04234

С - 0.05382

Т - 0.06443

У - 0.02882

Ф - 0.00132

Х - 0.00833

Ц- 0.00333

Ч - 0.01645

Ш - 0.00775

Щ- 0.00331

Ъ - 0.00023

Ы - 0.01854

Ь - 0.02106

Э - 0.0031

Ю - 0.00544

Я - 0.01979

J- 0.00153

K- 0.00772

L- 0.04025

M- 0.02406

N- 0.06749

O- 0.07507

P - 0.01929

Q - 0.00095

R - 0.05987

S - 0.06327

T - 0.09056

U - 0.02758

V - 0.00978

W - 0.0236

X - 0.0015

Y - 0.01974

Z - 0.00074

Похожие работы на - Программное средство шифрования данных

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!