mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · web viewМы...

53
Государственное образовательное учреждение средняя общеобразовательная школа «Гимназия № 1517» ИССЛЕДОВАТЕЛЬСКАЯ РАБОТА ОПЫТ СОЗДАНИЯ КРИПТОАЛГОРИТМА И КОМПЬЮТЕРНОЙ ПРОГРАММЫ ДЛЯ ШИФРОВАНИЯ ТЕКСТОВЫХ СООБЩЕНИЙ Авторы: Бочкова Дарья, 10-З Мамедова Майя, 9-И Руководитель: Кравцова Ирина Михайловна

Upload: others

Post on 06-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

Государственное образовательное учреждение средняя общеобразовательная школа

«Гимназия № 1517»

ИССЛЕДОВАТЕЛЬСКАЯ РАБОТА

ОПЫТ СОЗДАНИЯ КРИПТОАЛГОРИТМА И

КОМПЬЮТЕРНОЙ ПРОГРАММЫ ДЛЯ

ШИФРОВАНИЯ ТЕКСТОВЫХ СООБЩЕНИЙ

Авторы: Бочкова Дарья, 10-ЗМамедова Майя, 9-И

Руководитель: Кравцова Ирина Михайловна

Москва 2017

Page 2: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

2

Page 3: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

3

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 3

1.ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 6

1.1. ПРИМЕНИМЫЕ ПОЛОЖЕНИЯ КРИПТОГРАФИИ 6

1.2. ОПИСАНИЕ СОЗДАННОГО ШИФРА 10

1.3. СОВЕРШЕНСТВОВАНИЕ СОЗДАННОГО ШИФРА 13

1.ПРАКТИЧЕСКАЯ ЧАСТЬ 14

2.1. ПРОГРАММНЫЙ КОД (JAVA) 14

БЛОК ЗАШИФРОВЫВАНИЯ 14

БЛОК РАСШИФРОВЫВАНИЯ 18

2.2. ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ 21

2.2. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ 23

ЗАКЛЮЧЕНИЕ 27

ИСТОЧНИКИ 29

Приложение 1.  Традиционные шифры замены (подстановки) 30

Приложение 2.  Шифр Вижинера 33

Приложение 3.  Примеры применения программы (Java) 34

Page 4: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

4

Non enim est aliquid absconditum, nisi ut manifestitur, nec factum est

occultum, nisi ut in palam veniat

(Нет ничего тайного, что не сделалось бы явным; и ничего не

бывает потаенного, что не вышло бы наружу)

(Мк. 4.22)

ВВЕДЕНИЕ

Решение провести данное исследование пришло в процессе

обсуждения и оценки придуманного одним из авторов алгоритма

шифрования. «Изобретателю» этот алгоритм казался идеальным. Однако

казался чисто интуитивно. Каких-либо конкретных теоретических знаний

в области криптографии никто из нас не имел, поэтому и дискуссия по

данному вопросу была больше эмоциональной, чем объективной и

аргументированной.

Мы решили получить больше знаний по этому вопросу. Уже

первоначальное ознакомление с основами криптографии показало, что

человечество изобретает и использует шифры и способы их взлома сотни

и даже тысячи лет. Что «изобретенный» алгоритм очень похож на

алгоритм, использовавшийся еще римским императором и получившим

название шифра Цезаря. Оказалось, что современная криптография

затрагивает многие области знаний: математику и информатику, логику,

историю, лингвистику, программирование и др.

В процессе изучения источников и обсуждения конкретного

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

Page 5: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

5

вопросом и решили придать нашей деятельности форму

исследовательского проекта.

Хочется отметить, что подобная форма имеет ряд преимуществ, в

частности: позволяет придать работе плановый и системный характер;

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

время, мотивирует; способствует более глубокому усвоению материала,

так как требуется его осмысленная переработка и структурирование.

Были сформулированы следующие цели исследования:

1) Теоретическая часть:

описание созданного алгоритма шифрования в терминах теории

криптографии и криптоанализа;

оценка свойств и пределов применимости созданного алгоритма.

2) Практическая часть:

написание компьютерных программ на языках программирования

Java и C++, реализующих данный алгоритм шифрования.

оценка полученной компьютерной программы, в том числе,

возможностей ее применения на практике как приложения для

шифрования.

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

следующих задач:

изучение применимых основ криптографии и криптоанализа для

получения научного языка описания и анализа созданного алгоритма

шифрования;

изучение основ объектно-ориентированного программирования и

получение опыта практического написания программного кода на языках

Java и C++;

получение оценки созданного алгоритма и программного кода со

стороны экспертов-профессионалов.

Page 6: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

6

Учебная цель проекта может быть сформулирована как

приобретение опыта целенаправленного получения предметных

теоретических знаний и их практического применения к конкретному

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

Актуальность проекта состоит в том, что он представляет собой

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

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

являясь с одной стороны очень простым и легко автоматизируемым, с

другой - обеспечивает высочайший уровень стойкости к взлому и

позволяет осуществлять шифрование на любых алфавитах.

Page 7: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

7

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

ПРИМЕНИМЫЕ ПОЛОЖЕНИЯ КРИПТОГРАФИИ

Основные термины и понятия: шифр (cipher), шифрсистема,

зашифрование (encryption), расшифрование (deciphering), дешифрование

(decryption), открытый текст (plaintext), шифртекст (ciphertext), алгоритм

шифрования, ключ (key), криптография (cryptography), криптоанализ

(cryptanalysis), криптостойкость, атака шифра.

Классификация шифров по типу ключа. Шифрование с

симметричным ключом - система шифрования, в которой ключи

зашифрования и расшифрования совпадают, либо легко определяются

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

абонентам необходимо заранее договариваться о едином секретном

ключе.

Шифрование с ассиметричным ключом – система шифрования, в

которой используются ключи двух видов — открытые ключи и секретные

ключи. Открытый ключ применяется в процессе зашифрования и, как

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

процессе расшифрования сообщения и должен храниться в тайне

получателем сообщения. Абонентам не нужно заранее договариваться об

общем секретном ключе.

В рамках данной работы рассматриваются традиционные шифры с

симметричным ключом1.

1 До 1976 года все шифрсистемы относились к симметричной криптографии. См. Токарева Н. Н. Симметричная криптография. Краткий курс: учебное пособие / Новосиб. гос. ун-т. Новосибирск, 2012. 234 с. - С. 51 - [Электронный ресурс] - http://www.math.nsc.ru/~tokareva/lib/crypto-online.pdf.

Page 8: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

8

Шифры с симметричным ключом в зависимости от вида

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

замены (подстановки) и шифры перестановки.

В шифре перестановки меняются местами позиции символов в

исходном тексте, но сами символы не меняются. Поскольку

анализируемый алгоритм не использует перестановку в данной работе

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

существует много алгоритмов шифров перестановки (транспозиция,

скитала, сдвиг, одиночная перестановка по ключу, маршрутная и др.),

которые подробно описаны в различных источниках2.

В шифре замены (подстановки) один символ в зашифрованном тексте

заменяется на другой символ, но элементы шифруемого текста не меняют

свою последовательность. Это так называемые аддитивные шифры (от

лат. аdditio - прибавление) или шифры сдвига, к числу которых относится

шифр Цезаря, алгоритмы ROT1, 2, 3 и т.д., а также аффинные шифры. К

шифрам подстановки относится также шифр Вижинера, алгоритм

которого приводится в приложении.

В обоих типах шифров в зашифрованном тексте сохраняется такой

параметр как частота встречаемости символов, характерная для

конкретного языка. Например, в русском языке чаще всего встречается

буква «о» (её относительная частота, равная 0,090, означает, что на 1000

букв русского текста в среднем приходится 90 букв «о»3).

2 См., например, http://nozdr.ru/games/quest/crypt/cipher/perestanovka#sdvig.

3 Существуют множество различных таблиц о распределении букв в том или ином языке, но ни одна из

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

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

в книге Пилиди В. С. Криптография. Вводные главы. // Ростов-на-Дону, 2009. — C. 34, указана частота 11,08%

или 0,11, а работе Аршинов Н. М., Садовский Л. Е. Коды и математика. – М.: Наука, 1983, информация из

которой использована на сайте http://cryptographya.narod.ru/Articles/CodingAndHistory.htm, частота буквы «о»

указана как 0,09.

Page 9: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

9

Для криптостойкости шифра подстановки это имеет существенное

значение, а для шифра перестановки нет.

Так, в шифре подстановки последовательность символов в тексте

текста остается неизменной, а новые символы встречаются так же часто

как замененные. На этом основана уязвимость таких шифров и

соответственно метод их взлома частотный анализ, в рамках которого,

анализируя частоту появления тех или иных знаков и их сочетаний4,

можно с большой уверенностью восстановить буквы зашифрованного

текста.

Например, зашифруем предыдущий абзац шифром Цезаря со сдвигом

35:

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

Имеем 40 букв «с» на 334 символа (без пробелов и знаков

препинания). Частота встречаемости буквы «с» составила 0,1 (на 1000

символов букв приходится 100 букв «с»). Согласно частоте встречаемости

в исходном тексте ей соответствует буква «о».

А вот в шифре перестановки частота встречаемости символа не

позволяет ничего сказать об исходном тексте. Например, словосочетание

«Частотный анализ», зашифрованное путем его записи с конца в начало

4 Важными характеристиками текста являются повторяемость букв, пар букв (биграмм) и вообще m-грамм, сочетаемость букв друг с другом, чередование гласных и согласных и др. Для этого есть соответствующие таблицы. См., например, http://statistica.ru/local-portals/data-mining/analiz-tekstov/.

5 Для шифрования использован сайт https://mindhalls.ru/caesar-code-online.

Page 10: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

10

превращается в «зилана йынтотсач». Тут вообще нет задачи определения

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

тексте.

Шифры подстановки в свою очередь подразделяются на

моноалфавитные и многоалфавитные. Первые производят замену в

рамках одного набора символов (при этом конкретные символы всегда

кодируются одинаково, например «а» в «г»). Вторые - для каждого

символа в тексте предполагают различную замену из различных

алфавитов (поэтому один и тот же символ, как правило, кодируется

различно, один раз «а» перекодируется в «г», другой раз в «е» и т.п.).

Разобравшись в основах можно создавать свои шифры, комбинируя и

изменяя классические алгоритмы. Например, даже шифр Цезаря можно

изменить так, что нахождения одного соответствия и величины сдвига

будет недостаточно для дешифровки. Если переставить символы в

исходном алфавите. Например, не А-0, Б-1, В-2, Г- 3, Д-4 и т.д., а А-12, Б-

10, В-22, Г-3, Д-20. Тогда при сдвиге 2 в первом алфавите Б заменится на

Г а, а во втором – на А. То есть сразу дешифровать узнав сдвиг в

классическом шифре Цезаря можно будет только если шифрующим и

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

алфавите.

Таблица, в которой сравниваются наиболее характерные

традиционные шифры подстановки, а также пример работы алгоритма

шифра Вижинера приводятся в приложениях.

Page 11: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

11

ОПИСАНИЕ СОЗДАННОГО ШИФРА

Реализованный в данной работе алгоритм шифрования представляет

собой традиционный моноалфавитный шифр замены (подстановки) с

симметричным ключом, длина которого равна длине шифруемого текста.

От классического шифра Цезаря остался принцип «сдвига» символа

на определенное число от его порядкового номера в исходном алфавите.

Однако сдвиг каждый раз происходит на случайное число (в нашем

случае выбираемого генератором случайных чисел из диапазона от 1 до

9). Таким образом, символы исходного текста зашифрованы с помощью

ключа, выбранного случайно из некоторой области ключей. Например,

символ А может в одном случае сдвигаться на 1, в другом на 4, 6 и т.п.

позиций.

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

Частотность символов исходного текста не сохраняется, поскольку

каждый раз величина сдвига меняется случайным образом и один и тот

же символ может быть закодирован не тем же символом, что перед этим

(рандомизированный алгоритм генерации ключа). Длина ключа равна

длине текста, поэтому ключ также не оставляет каких-либо следов в

структуре зашифрованного текста.

Очевидно, что в подобном шифре зашифрованный текст не

воспроизводит никаких закономерностей зашифрованного текста.

Изучая литературу мы обнаружили, что именно такой подход

обеспечивает идеальную секретность.

«Исследования Шеннона показали, что идеальная секретность может

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

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

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

Page 12: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

12

используется один и тот же ключ. Но даже и этот шифр может быть

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

символа, выбран случайно из множества ключей (00, 01, 02.... 25): если

первый символ зашифрован с помощью ключа 04, второй символ — с

помощью ключа 02, третий — с помощью ключа 21, и так далее… Если

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

последовательность целых чисел, никакие известные типы атак становятся

невозможны.»6.

Оказалось также, что у придуманного алгоритма есть аналог в

истории - шифр называемый одноразовым блокнотом, который еще в 1917

году изобрел американский инженер Гилберт Вернам (Gilbert S. Vernam).

Именно данный тип шифра приводился К.Шенноном в качестве примера

совершенно стойкого шифра7.

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

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

использование принципиально не раскрываемых шифров (симметричныех

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

Вернама). Защита больших объемов информации требует больших затрат

связанных с производством распределением, хранением и уничтожением

материалов с ключами. Использование их в компьютерных системах

также требует больших объемов защищенной памяти для хранения

ключей.

В силу высокой ̆ ресурсозатратности абсолютно секретные шифры

обычно применяются при небольших объемах передаваемой̆ информации,

обладающей высокой степенью важности. 6 А.Бехроуз. Математика криптографии и теория шифрования. Курс лекций. Лекция 4. [Электронный ресурс] – https://www.intuit.ru/studies/courses/552/408/lecture/9355?page=5#sect34. Клод Элвуд Шеннон (1916-2001) - американский математик, впервые сформулировавший понятие совершенно стойкого шифра.

7 Интересно, что многие результаты Шеннона независимо были получены советским ученым В. А. Котельниковым еще в 1941 году, но они были строго засекречены.

Page 13: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

13

СОВЕРШЕНСТВОВАНИЕ СОЗДАННОГО ШИФРА

Использование компьютера позволило автоматизировать генерацию

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

Вместе с тем необходимо отметить, что в представленном виде сама

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

система классического одноразового блокнота.

Так, в традиционной системе одноразового блокнота, можно заранее

подготовить множество вариантов ключей и передать их получателю

сообщений до подготовки первого шифрованного текста, после передачи

набора ключей можно наладить обмен сообщениями пока ключи не

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

ключом.

Наша программа создает только один ключ в момент шифрования,

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

необходимо решать две задачи: секретной передачи ключа и передачи

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

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

Вместе с тем можно представить ситуацию, в которой программа

может быть применена в представленном виде. Например, при

организации мероприятия, план которого необходимо сохранить в тайне

от всех до самого начала проведения. В частности, при проведении

специальной или армейской операции (аналог вскрытия пакетов с

приказом перед началом наступления). Каждый участник получает

зашифрованные инструкции, которые сможет расшифровать только после

Page 14: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

14

получения ключа. Либо наоборот получает ключ, который использует

после получения зашифрованной инструкции (данный вариант менее

предпочтителен из за увеличения риска компрометации ключа).

Для приближения к функциональности классического одноразового

блокнота можно доработать программу таким образом, чтобы она

состояла из трех блоков: блока генерации ключей; блока шифрования;

блока расшифрования.

Блок генерации ключей - в соответствии с заданной длиной ключа и

именем файла генерирует набор случайных чисел и сохраняет их в файлы

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

сообщения (аналог листов блокнота с набором ключей).

Блок шифрования - шифрует сообщения, используя указанный

пользователем файл с ключом.

Блок дешифрования - дешифрует сообщения, используя указанный

пользователем файл с ключом.

В таком виде программа будет иметь функциональность

классического алгоритма одноразового блокнота, но позволит

автоматизировать генерацию ключей и ускорить процессы

шифрования/расшифрования.

Возможна еще одна модернизация программы, которая позволит

расширить диапазон численных значений, из которых будет выбираться

ключ.

В настоящее время это числа от 1 до 9, поскольку в программе ключ

записывается в текстовый файл в виде строки чисел никак не разделенных

между собой. Считывание ключа происходит также по одному символу.

Корректно расшифровать можно только символ, зашифрованный

однозначным числом.

Page 15: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

15

Можно изменить программу, например, чтобы значения ключа

записывались в файл построчно. Одно значение - одна строка:

1

12 и т.д.

Тогда можно реализовать построчное считывание любых целых чисел

и их корректное применение к шифротексту.

Page 16: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

16

ПРАКТИЧЕСКАЯ ЧАСТЬ

ПРОГРАММНЫЙ КОД ШИФРАТОРА (JAVA)

Программа написана в среде разработки NetBeans IDE 8.2.

Версия Java: 1.8.0_144.

Список импортированных классов

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Date;

import java.util.Random;

import javax.swing.JFileChooser;

БЛОК ЗАШИФРОВЫВАНИЯ

Блок шифрования состоит из классов CriptoMethods и Cript (главный класс).

Класс CriptoMethods - содержит переменные (txtarray, code, keyarray, decode) и

методы (openFile(), saveFile(String x), setKey(int x) и Coder(char[][] x, int[][] y)), с

помощью которых реализуется алгоритм шифрования.

Класс Cript содержит исполняемый код программы. Он является подклассом

класса CriptoMethods (наследует класс CriptoMethods и все его методы)

ПРОГРАММНЫЙ КОД КЛАССА CriptoMethods:

class CriptoMethods{

static char[][] txtarray; //массив для хранения кодируемого текста

Page 17: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

17

static int[][] keyarray; //массив для хранения сгенерированного ключа;static String code; //поле для хранения кодированного текста (значение

//сохраняется в файл);static String decode; //поле для хранения декодированного текста (значение

//сохраняется в файл); /*метод String openFile() возвращает текстовую переменную с текстом,считанным из выбранного текстового файла.*/static String openFile(){ File B = new File("/Users/sergej/newdir"); //определяет наименование

//директории которую откроет //JFileChooser в

следующей команде JFileChooser fch = new JFileChooser(); fch.setCurrentDirectory(B); fch.showOpenDialog(null); File A = fch.getSelectedFile(); String fileinp = ""; BufferedReader infile = null; try { infile = new BufferedReader(new FileReader(A)); String d; while ((d = infile.readLine()) != null) { fileinp += d; //поле инициализируется текстовым значением, считываемым

//из файла-источника } //while infile.close(); }//try catch (IOException e) { System.out.print("Ошибка при обработке файла"); } //catch return fileinp; } //String openFile()

Page 18: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

18

/*метод saveFile(String x) сохраняет текст из переданного аргумента в выбранныйтекстовый файл. Используется объектами Code и Decode*/ static void saveFile(String x) { File C = new File("/Users/sergej/newdir"); JFileChooser fch1 = new JFileChooser(C); fch1.showSaveDialog(null); File B = fch1.getSelectedFile(); BufferedWriter outfile = null; try { outfile = new BufferedWriter (new FileWriter(B + ".txt")); outfile.write(x); outfile.close(); }//try catch (IOException e) { System.out.print("Ошибка при обработке файла"); }//catch } //saveFile(String x)

/*Метод setKey(int x) генерирует ключ для шифрования. Длина ключа равна длине шифруемого текста. Каждое значение задается генератором случайных чисел. Аргументом метода является целочисленная переменная, значение которой равно длине шифруемого текста*/ static int[][] setKey(int x) { Random generator = new Random(new Date().getTime()); int[][] key = new int[1][x]; for (int i = 0; i < x; i++) {

Page 19: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

19

key[0][i] = generator.nextInt(9) + 1; //заполнение массива (значения от 1 до 9) }//for int s = key[0].length; return key; //массив с ключом } //getKey(int x)

/* Метод Coder - один метод для кодирования/декодирования. Это реализовано за счет инвертирования ключа(каждая цифра сгенерированного при создании объекта Code ключа, при создании объекта Decode умноджается на -1 в методе getKey(String txt). */ static String Coder(char[][] x, int[][] y) { int g = x[0].length; int h = x[0].length; String txt = ""; for (int i = 0; i < x[0].length; i++) { x[0][i] += y[0][i]; txt += x[0][i]; }//for return txt; } //Coder(char[][]x,int[][] y)}//class CriptoMethods

ПРОГРАММНЫЙ КОД КЛАССА Cript:

public class Cript extends CriptoMethods{ public static void main(String[] args) { String txt = openFile(); //получение текста для кодирования (из выбранного

//пользователем файла); txtarray = new char [1][txt.length()]; //создан массив для записи кодируемого

//текста из файла; for (int i=0;i<txt.length();i++){

Page 20: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

20

txtarray[0][i]=txt.charAt(i); // посимвольное заполнение массива // кодируемым текстом из файла;

}// for keyarray = setKey(txtarray[0].length); // переменной массива присвоена

//ссылка на массив заполненный //значениями ключа;

code = "" + Coder(txtarray, keyarray); //шифрование; saveFile(code); //сохранение результата шифрования в файл; String key = «"; //переменная для хранения значения ключа в текстовом

//формате; for(int y: keyarray[0]){ key += y; // инициализация переменной key значениями из массива

//keyarray [0][]с помощью цикла for по коллекции; }// for saveFile(key);// сохранение значения ключа в файл; }// main}//Cript

БЛОК РАСШИФРОВЫВАНИЯБлок расшифровывания состоит из классов CriptoMethods и Encript

(главный класс).Класс CriptoMethods - содержит переменные (txtarray, code, keyarray, de-

code) и методы (openFile(), saveFile(String x), getKey(int x) и Coder(char[][] x, int[][] y)), с помощью которых реализуется алгоритм шифрования.

Класс Encript содержит исполняемый код программы. Он является подклассом класса CriptoMethods (наследует класс CriptoMethods и все его методы)

ПРОГРАММНЫЙ КОД КЛАССА CriptoMethods:

Программный код методов Coder(char[][] x, int[][] y), openFile() и saveFile (String x) аналогичен описанным выше методам класса CriptoMethods программы зашифрования. Поэтому тут приводится только код метода getKey(int x).

Page 21: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

21

static int[][] getKey(String txt) { char[] keychar = txt.toCharArray(); // символьный массив заполняется

//значениями ключа int[][] keyint = new int[1][txt.length()]; for (int i = 0; i < txt.length(); i++) { int a; a = Character.getNumericValue(keychar[i]); // элементы символьного массива

//приводятся к целочисленному //типу a *= (-1); //инвертируем ключ keyint[0][i] = a; //заполняем целочисленный массив }//for int f = keyint[0].length; return keyint; } // getKey(String txt)

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

String Coder(char[][] x, int[][] y) { int g = x[0].length; int h = x[0].length; System.out.println("char[][]x = " + g + "\n" + "int[][] = " + h); String txt = ""; for (int i = 0; i < x[0].length; i++) { x[0][i] += y[0][i]; txt += x[0][i]; }//for return txt;

Page 22: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

22

Шифрование и расшифрованное выполняются путем посимвольного сложения текста со значениями ключа (в приведенном программном коде эта часть выделена красным). Только при расшифровании текст складывается с инвертированным ключом. Для инвертирования символа ключа использована операция умножения на -1. Например, (шифрование: 'A'+6; дешифрование ‘A'+(-6)). Инвертирование ключа реализовано в методе int[][] getKey(String txt) в следующих строках кода:

for (int i = 0; i < txt.length(); i++) { int a; a = Character.getNumericValue(keychar[i]); a *= (-1); keyint[0][i] = a; }//for

ПРОГРАММНЫЙ КОД КЛАССА Encript:

public class Encript extends CriptoMethods { public static void main(String[] args) { String txt = openFile(); //получение текста для декодирования (из выбранного

//пользователем файла); /*Нужно создать объект - массив для записи декодируемого текста. У нас пока есть только переменная массива (txtarray), унаследованная от суперкласса Crip-toMethods. Если попытаться присвоить ей значения то получим: "Exception in thread "main" java.lang.NullPointerException */ txtarray = new char [1][txt.length()]; //создан массив для записи декодируемого //текста; for (int i=0;i<txt.length();i++){

Page 23: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

23

txtarray[0][i]=txt.charAt(i); //посимвольное заполнение массива //декодируемым текстом из файла;

}//for String key=openFile();// текстовая переменная для хранения ключа keyarray = new int[1][key.length()]; keyarray = getKey(key);// создание объекта-массив decode = Coder(txtarray, keyarray);//расшифрование; saveFile(decode);//сохранение результата дешифрования в файл; }//main}// Encript

ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ

ПРОГРАММА ЗАШИФРОВЫВАНИЯ

1. Текст из выбранного пользователем файла сохраняется в текстовую

переменную txt.

2. Создается символьный двумерный массив (char [1][txt.length()]) с

длиной строки равной количеству символов в текстовой переменной.

3. Массив посимвольно заполняется текстом из текстовой

переменной.

4. Вызывается метод setKey(), который возвращает двумерный массив

заполненный значениями ключа;

5. Вызывается метод Coder, аргументами в который передается

массив с текстом и массив с ключом.

6. Значение возвращенной методом Coder текстовой переменной

сохраняется в выбранный пользователем файл (результат шифрования).

7. Объявляется текстовая переменная key, которая инициализируется

значениями из массива с ключом.

8. Значение переменной key сохраняется в выбранный пользователем

файл (файл ключа).

Page 24: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

24

9. Работа программы завершается.

ПРОГРАММА РАСШИФРОВЫВАНИЯ

1. Текст из выбранного пользователем файла сохраняется в текстовую

переменную txt.

2. Cоздается символьный двумерный массив (char [1][txt.length()]) с

длиной строки равной количеству символов в текстовой переменной.

3. Массив посимвольно заполняется текстом из текстовой

переменной.

4. Объявляется текстовая переменная key, которая инициализируется

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

5. Создается двумерный целочисленный массив (int[1][key.length()];)

для записи в него значения ключа.

6. Указанный массив инициализируется значениями

инвертированного ключа (в методе getKey() каждая цифра ключа

умножается на -1).

7. Вызывается метод Coder, аргументами в который передается

массив с текстом и массив с ключом.

8. Возвращенная методом Coder текстовая переменная (результат

дешифрования) сохраняется в выбранный пользователем файл.

9. Работа программы завершается.

_____________________________

Page 25: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

25

ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

На компьютерах должны быть сохранены файлы Cript.jar и Encript.-jar. Для удобства работы рекомендуется сохранить их в отдельную папку.

Программа корректно работает с сообщениями в формате простого текста (файлы с расширением .txt).

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

ШИФРОВАНИЕ 1. Запустите файл Cript.jar. В появившемся диалоговом окне

выберите файл, в котором содержится требующий зашифровывания открытый текст. Нажмите кнопку «Open».

Page 26: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

26

2. В появившемся диалоговом окне в поле «Save As" (Сохранить как) введите имя файла, в который будет сохранен шифротекст. Нажмите

кнопку «Save».

Page 27: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

27

3. В появившемся диалоговом окне в поле «Save As" (Сохранить

как) введите имя файла, в который будет сохранен ключ (рекомендуется сразу сохранять файл ключа на съемный носитель). Нажмите кнопку «Save».

4. Удалите файл с ключом с компьютера если файл ключа сохранен на жесткий диск компьютера, а не на съемный носитель (карту памяти, флеш-накопитель), после чего удалите файл с ключом с жесткого диска.

5. Передайте файл с шифротекстом получателю любым способом, в том числе по электронной почте, посредством мессенджеров и др.

6. Передайте файл с ключом лично получателю сообщения.

РАСШИФРОВАНИЕ

Page 28: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

28

1. Подключите носитель с файлом ключа к компьютеру. Запустите файл Encript.jar. В появившемся диалоговом окне выберите файл, в котором содержится шифротекст. Нажмите кнопку «Open».

Page 29: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

29

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

Нажмите кнопку «Open».3. В появившемся диалоговом окне введите имя файла, в который

будет сохранен расшифрованный текст. Нажмите кнопку «Save».4. Удалите файл с ключом.

Page 30: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

30

ЗАКЛЮЧЕНИЕ

Созданный и программно реализованный алгоритм шифрования

представляет собой традиционный моноалфавитный шифр замены с

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

длина которого равна длине шифруемого текста. Ключи шифрования и

расшифрования легко определяются один по другому (заменой каждого

числа в ключе равным ему по модулю отрицательным числом).

В рамках компьютерной программы автоматизирована генерация

ключей и сами процессы шифрования и расшифрования сообщения.

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

переписки с использованием любого алфавита и позволяет шифровать и

расшифровывать сообщения значительно быстрее, чем вручную.

Создаваемый программой шифротекст не поддается атакам методами

современного криптоанализа. Для обеспечения надлежащей секретности в

момент работы программы компьютер не должен быть подключен к сети

(не должен иметь связи с другим компьютером или аналогичным

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

компьютера и компрометации ключа.

Использование средств компьютерной техники, позволяет избавиться

от материальных носителей и существенно упростить использование

систем шифрования, подобных одноразовому блокноту.

Вместе с тем современная криптография ставит задачей построения

шифрсистем, в которых надежность зашифрования больших объемов

информации обеспечивалась бы относительно малым размером ключа.

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

требованием к криптосистеме.

Page 31: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

31

Криптоалгоритмы используются не только для передачи друг другу

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

электронная цифровая подпись, шифрование потоков данных в реальном

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

данных между мобильным телефоном и базовой станцией) - эти и другие

задачи уже мне могут быть реализованы в рамках схемы одноразовых

блокнотов и любых иных классических систем шифрования.

Криптография очень интересная область знания. Серьезная работа в

области криптографии и криптоанализа (криптологии) сегодня

невозможна без серьезной подготовки в области математики, физики,

информатики, радиоэлектроники.

Page 32: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

32

ИСТОЧНИКИ:

Бехроуз А. Фороузан. Математика криптографии и теория

шифрования. Курс лекций. [Электронный ресурс] – https :// www . intuit . ru /

studies / courses /552/408/ info .

Криптография. [Электронный ресурс] – Шифр Вижинера -

https://sites.google.com/site/kriptografics/sifr-vizenera.

Программирование на Java для начинающих. / Алексей Васильев. –

Москва : Издательство «Э», 2017. – 704 с. – (Российский компьютерный

бестселлер).

Словарь криптографических терминов. - [Электронный ресурс] -

http://www.cryptofaq.ru/crypto_glossary.html.

Токарева Н. Н. Симметричная криптография. Краткий курс: учебное

пособие / Новосиб. гос. ун-т. Новосибирск, 2012. 234 с. - [Электронный

ресурс] - http :// www . math . nsc . ru /~ tokareva / lib / crypto - online . pdf .

Шифр Цезаря. Материал из Национальной библиотеки им. Н. Э.

Баумана. [Электронный ресурс] - https://ru.bmstu.wiki/Шифр_Цезаря.

Page 33: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

33

Приложение 1

Сравнение характерных шифров замены (подстановки):

Примеры шифров подстановки

Моноалфавитные Многоалфавитные

Аддитивный шифр (шифр сдвига, код Цезаря, ROT1,

2, 3 и др.)Аффинный шифр Шифр Вижинера

Алгоритм шифрования

Шифрование посимвольное.

1. Каждой букве алфавита размера m ставится в соответствие номер из диапазона [0; m-1].

А-0, Б-1, В-2 , Г-3…Я-32.2. Выбирается величина

сдвига n;3. Буква шифруемого

текста с номером k заменяется на букву с номером k+n.

Шифрование посимвольное.

1. Номеру каждой буквы алфавита размера m ставится в соответствие номер из диапазона [0; m-1].2. По формуле (ах+b)/mгде х – порядковый номер шифруемого символа, а и b – ключи, m – количество символов алфавита вычисляется новый номер буквы, которая заменит старую в шифрованном тексте. Новый номер определяется как остаток от деления на m, поэтому он всегда будет меньше m.3. В качестве ключа используют два числа.

Шифрование посимвольное.

Шифр Виженера состоит из нескольких шифров Цезаря с различными значениями сдвига Применительно к русскому алфавиту таблица составляется из 32 различных шифров Цезаря. Каждый каждый алфавит сдвинут по отношению к предыдущему.

Наиболее удобно использование таблицы алфавитов, называемой tabula recta или квадратом (таблицей) Виженера (см. приложение).

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

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

Ключ Одно простое число.Для русского

алфавита всего 32 возможных значения сдвига, так как 0 и 33 приводят к исходному тексту, а большие значения фактически ведут к циклическому повторению результатов сдвига от 1 до 32).

Два простых числа.В силу требований

метода число a должно быть взаимно простым с m.

В случае шифрования сообщений на русском языке (m = 33) существует всего 20 чисел взаимно простых с 33 и меньших 33 (это возможные значения a). Каждому значению a могут соответствовать 33 разных дополнительных сдвига (значение b). Всего существует 20*33 или 660 возможных ключей.

Любой набор не повторяющихся символов (при повторении шифрование будет неоднозначным т.к. разные символы будут представлены одним).

Page 34: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

34

Пример ROT2 обозначает сдвиг на 2 позиции, то есть, «а» превращается в «в», «б» в «г», и так далее, и в конце «ю» превращается в «а», а «я» — в «б». Число преобразований зависит от длины алфавита. Для русского языка возможно 32 разных преобразования (преобразования ROT0 и ROT33 сохраняют исходный текст, а дальше начинаются уже повторения).

Если линейная зависимость аффинного шифра 2x+8, то символ "А" (порядковый номер символа равен 1) заменяется на "И" т.к. порядковый номер символа будет равен 10 - остатку от деления: (2*1+8)/33. 

Что нужно для расшифровки

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

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

Необходимо знать ключевое слово и используемые алфавиты

Криптостойкость и алгоритмы криптоанализа

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

Нужно только установить соответствие пары символов (угадыванием, полным перебором ключей или с помощью частотного анализа)

Причины:а) сохраняется исходная

последовательность символов текста, а значит и его частотные характеристики;

б)  малое число ключей.3. Установив соответствие

одной пары символов и, соответственно, величину сдвига можно прочитать весть текст.

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

Более криптостойкий шифр за счет:

1)  увеличения количества возможных ключей;

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

Гораздо более криптостойкий шифр, который уже поддается простым методам дешифрования.

а) еще большее число ключей;

б) разные значения сдвига даже для одинаковых символов;

в) следствие предыдущего пункта – изменена частота

появления символовМаксимальной стойкостью к

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

Page 35: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

35

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

Page 36: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

36

Приложение 2

Таблица Вижинера (tabula recta)8.

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

Шифруемый текст (исходный

алфавит)С Е К Р Е Т Н О С Т Ь

Ключ (символы ключа) К Л Ю Ч К Л Ю Ч К Л Ю

Шифрованный текст Ж Щ Л Ш Ь Ж О Ц Ж Ж Ы

Сдвиг 21 20 1 8 21 20 1 8 21 20 1

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

Page 37: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

37

Page 38: mgk.olimpiada.rumgk.olimpiada.ru/media/work/11439/Проект14_01_word.…  · Web viewМы решили получить больше знаний по этому вопросу

38

Приложение 3

Пример результатов шифрования созданной программой

Исходный текст.

Non enim est aliquid absconditum, nisi ut manifestitur, nec factum est occultum, nisi ut in palam veniat", "Нет ничего тайного, что не сделалось бы явным; и ничего не бывает потаенного, что не вышло бы наружу"

Первое шифрование

Шифрованный текст 1

Rqo&htnr%jzw&ftou|mh)di{ksrjm{{u.%tpvq$z}"tjpnjmywnuyy-#snf'kjfu}q%fuz$ufdxm}ys/)urwm)|{$qo#ugpdu# �luph|#2(*Улх'фпънйу&фзппфдф/%?шр"си(цмнрерсшя"жѓ)ђдхётC%л'срямдс'фж!гьжбйы(тпхгйрпумч4(ьъч!ун#ияёнц)вэ$сйщъоь*

Уникальный ключ 1

42163655557365864744937884464768256738459279254863514713593759318451264631319463979449774813564383977778168866377738656276261635962243858855537325893286685374887137711214149831334325998858916836492891244997898

Второе шифрование

Шифрованный текст 2Prr"jsln$gv{%buqt{rl#ccydwqfluzn5(tkvl"v|'vjokijv}lyw{/"whd)nbgw|v(hxu%uki|tyvo1#uq|q$~z#po#tdsds#yipkfx(0')Уйц'хрьидф#щвтццдх/)щшч&ро(ъмжсеуфщё&иь&ѓйрярB)с)фсьоеп#фй%гэйблш(шсцбйцффйц2'эыф&цо'л?ятх$жђ$овщчиъ$

Уникальный ключ 2

23425531423751983698321618323151986233218799123539352932931981437983515686785125378984963713437363342254647764478853163729981739269639898165868567164734479997959213745227166893414976686769669979577745741294272

Третье шифрование

Шифрованный текст 3Sxt!jumq#myu#bqrzvmm'fhtepoeq{xn0'pjwn%~z%vgwkokt{qyvu3"rlh#ngkz|p'nzy&piiyuw|n4"uovm#xz%js&wfnfn)ygokiu$0#(Пйч'цмьзйх(фгнрфлс0#шшп)хн'цекмгфчцє%д?(єжрьфC"р"хкъимр'хм!кэжвоц"шфхднцоску/'эчц'си#ж?ьму$кђ(тзшшнъ)

Уникальный ключ 3

59615744386131599149756121118731472145596596929617851372475386867379756166493718276343365156752519321281243624579452678234368343161988751513995853585431882828233927871924294296348913753765874334541549785785777