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

О криптологии и криптоанализе: некоторые классические шифры и методы их вскрытия. Шифр Атбаш и Цезаря. Рекуррентные последовательности для генерации длинных циклов псевдослучайных чисел. Особенности языка программирования Python и описание методов.

Рубрика Математика
Вид дипломная работа
Язык русский
Дата добавления 01.12.2019
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ

«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»

Московский институт электроники и математики

Воднев Александр Андреевич

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

Выпускная квалификационная работа

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

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

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

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

Задание

на выпускную квалификационную работу

студенту Водневу Александру Андреевичу

Образовательной программы «Прикладная математика»

Тема работы

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

сообщения.

Цель работы

Применение прикладных свойств цикличности орбит аттракторов

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

Содержание работы

Исследование необходимого материала по криптологии.

Исследование математических свойств циклов треугольных аттракторов.

На основе изученного материала разработка алгоритма шифрования.

Реализация разработанного алгоритма.

Аннотация

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

В ходе работы были изучены: математическая статья Четверикова В.М по теме треугольных аттракторов и множество статей и книг по криптографии и криптоанализу таких авторов как: Е.Г. Плужник, В.Н. Шашихин, В.В.Ященко, В.А. Романов, Х.К.Ф. ван Тилборг и многих других. После изучения представленного материала был разработан алгоритм и написаны программы, при помощи программных средств языка программирования Python и Wolfram Mathematica, для его реализации.

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

Abstract

The aim of the work is: Using Cycles of Attractors of Tent Mapping to Encode a Message. To achieve this goal, the work was divided into several parts: the study of the necessary material in cryptology; research of mathematical properties of cycles of triangular attractors; the development of an encryption algorithm based on the material studied; implementation of the developed algorithm.

So, in the course of the work, the mathematical article of V. Chetverikov on the topic of tent mapping attractors and many articles and books on cryptography and cryptanalysis of many authors such as: E.G. Pluzhnik, V.N. Shashikhin, V.V. Yaschenko, V.A. Romanov, H.K.F. Van Tilborg, etc. After studying the presented material, an algorithm was developed and programs were written using the software tools of the Python programming language and Wolfram Mathematica for its implementation.

As a result, we received a new efficient text encryption algorithm based on pseudo-random numbers. The algorithm allows you to encrypt text without using the same characters to encode repeated elements of the alphabet. This fact eliminates the possibility of using frequency analysis when trying to decrypt without knowing the key.

Содержание

Введение

1. О криптологии и криптоанализе

1.1 Некоторые классические шифры и методы их вскрытия

1.2 Шифр Атбаш и шифр Цезаря

1.3 Полиалфавтные криптосистемы. Шифр Тритемиуса и таблица Виженера

1.4 Используемые криптологические термины

2. Рекуррентные последовательности для генерации длинных циклов псевдослучайных чисел

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

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

3. Компьютерные средства

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

3.2 Особенности специализированного программного обеспечения Wolfram Mathematica

3.3 Наглядный пример работы алгоритма. Проверка его работоспособности

Заключение

Список литературы

Приложение 1

Приложение 2

Приложение 3

Приложение 4

Приложение 5

Приложение 6

Введение

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

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

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

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

Подробное описание алгоритмов шифрования и дешифрования приведены в разделе 5. Там же подробно описаны все элементы построения программного кода. Описание используемых программных средств (языка программирования Python и специализированного программного обеспечения Wolfram Mathematica) приведено в разделах 7 и 8. Там же приведены аргументы в пользу выбора указанных компьютерных средств. В разделе 9 приведен пример шифрования текста, содержащего 25 слов (150 знаков и 24 пробела).

Явный вид шифрограммы этого текста приведен в приложении.

1. О криптологии и криптоанализе

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

Введение в научный оборот термина криптография (от древнегреческих слов «скрытый» и «пишу») приписывают Джону Валлису (1616-1703), хотя известно использование криптографических инструментов для защиты информации уже начиная с IV века до нашей эры. Криптология, как учебная дисциплина появилась в гражданских вузах России в начале 90-х годов прошлого века. Появились переводные учебники и стали общедоступными монографии и учебные пособия отечественных авторов [1-4].

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

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

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

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

количество всех возможных ключей;

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

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

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

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

1.1 Некоторые классические шифры и методы их вскрытия

Окунемся в историю. Первые методы шифрования появились еще до н.э. Древние шифры можно разделить на два класса: шифры подстановки и шифры перестановок. В данной работе рассматриваются лишь возможности шифров подстановки.

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

1.2 Шифр Атбаш и шифр Цезаря

В шифре Атбаш, который использовали древние иудеи около 500 года до нашей эры, происходит замена первой буквы алфавита на последнюю, второй буквы - на предпоследнюю и т.д. В шифре Цезаря каждая буква открытого текста заменяется буквой, стоящей на некотором постоянном числе позиций (сдвиг) левее или правее него в том же алфавите. Величина этого сдвига и была ключом шифра. Не знающим этого ключа требовалось много времени для подбора величины сдвига при желании узнать содержание секретного послания. Но уже в IX веке арабский философ и математик Аль Кинди издал трактат «О дешифровке криптологических сообщений», в котором он описывал способ их вскрытия, используя частотный анализ. Наиболее известным случаем применения частотного анализа в реальной жизни является дешифровка египетских иероглифов Ж.Ф.Шампольоном в 1822 г.

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

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

Таблица 1 - Русский алфавит с числовым эквивалентом , определенным фиксированным порядком следования

Исходный алфавит

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Порядковый номер

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Исходный алфавит

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Щ

Ъ

Ы

Ь

Э

Ю

Я

Порядковый номер

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

Сдвиг в классическом шифре Цезаря является одним и тем же для всех букв алфавита. На математическом языке это означает, что буква, стоящая на -той позиции открытого сообщения и имевшая порядковый номер в алфавите была заменена в шифрограмме на букву, имеющую порядковый номер , где -величина сдвига, а - длина алфавита. В шифротексте на русском языке, например, буква У имеет стандартный номер в русском алфавите 21 (если считать 33 буквы в алфавите). Так известно, что наибольшая частота букв русского языка приходится на букву О, имеющая номер 16. Следовательно, можно предположить, что сдвиг в шифре Цезаря в этом примере равен 5. Даже если шифрограмма короткая, то воспользовавшись тем, что величина может принимать лишь целочисленные значения в интервале , можно путем перебора добиться осмысленного текста после дешифрования.

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

Таблица 2 - Пример использования ключевое слово КОМАР для модифицированного шифра Цезаря

Исходный алфавит

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Алфавит замен

Х

Ц

Ч

Ш

Щ

Ъ

Ы

Ь

Э

Ю

Я

К

О

М

А

Р

Б

Исходный алфавит

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Щ

Ъ

Ы

Ь

Э

Ю

Я

Алфавит замен

В

Г

Д

Е

Ё

Ж

З

И

Й

Л

Н

П

С

Т

У

Ф

Достоинство модифицированного шифра Цезаря является практически неисчерпаемое количество ключей. Это делает частотный анализ затруднительным, но все же возможным, поэтому надежность этого метода не очень велика. Классический шифр Цезаря - это модифицированный шифр Цезаря в случае, когда ключевое слово состоит из одной буквы. Если в приведенном выше примере заменить слово КОМАР одной буквой К, имеющей номер 12, то это будет классический шифр Цезаря со сдвигом 12.

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

Появившиеся в XVIII веке шифры по книге и по шифровальному блокноту можно рассматривать как дальнейшее усовершенствование шифра Цезаря. Шифровальный блокнот представляет собой пример нераскрываемого шифра.

1.3 Полиалфавтные криптосистемы. Шифр Тритемиуса и таблица Виженера

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

Таблица 3 - Шифр Тритемиуса на примере шифрования фразы операция начинается при использовании ключевого слова ГОМЕЛЬ.

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

О

П

Е

Р

А

Ц

И

Я

Н

А

Ч

И

Н

А

Е

Т

С

Я

Числовой эквивалент букв алфавита

16

17

6

18

1

24

10

33

15

1

25

10

15

1

6

20

19

33

Ключевое слово

г

о

м

е

л

ь

г

о

м

е

л

ь

г

о

м

е

л

ь

Числовой эквивалент букв слова

4

16

14

6

13

30

4

16

14

6

13

30

4

16

14

6

13

30

Новый

числовой эквивалент букв

20

33

20

24

14

21

14

16

29

7

5

7

19

17

20

26

32

30

Шифровка

Т

Я

Т

Ц

М

У

М

О

Ы

Ё

Д

Ё

С

П

Т

Ш

Ю

Ь

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

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

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

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

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

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

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

1.4 Используемые криптологические термины

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

Определение 1. Алфавитом будем называть последовательность, основанную на наборе букв, цифр и знаков препинания, выстроенных в определенном порядке.

Примером подобных последовательностей можно считать последовательность знаков кодировки ASCII.

Рис. 1 - Сводная таблица кодов ASCII

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

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

Определение 3. Переводной таблицей - таблица из А столбцов и M +1 строк. 1-я строка содержит элементы алфавита, остальные строки содержат индексы элементов цикла.

Пример переводной таблицы для M=2.

….

1

2

….

А

A+1

A+2

2A

Где , - элементы Алфавита; A - длинна алфавита; М - наибольшая частота элемента текста;

2. Рекуррентные последовательности для генерации длинных циклов псевдослучайных чисел

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

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

Последовательность орбиты задается рекуррентно:

(1)

(2)

является простейшим отображением из [0,1) в [0,1). Предполагается, что все вычисления, связанные с отображением (2), выполняются точно без округления.

Данная возможность предоставляется математическим пакетом «Wolfram Mathematica». Это программное обеспечение позволяет работать с обыкновенной дробью, не вычисляя ее, что позволяет проводить вычисления точно.

Определение 4. Множество ={0}. Множество - это набор чисел вида где целое число от 0 до 9 и . Множество состоит из всех чисел множества для которых .

Определение 5. Множество . Очевидно, что если , то и , так как является одномерным кусочно-линейным отображением. Легко доказать, что число элементов этого множества: если и . Количество элементов множества : , тогда количество элементов : .

Определение 6. Последовательность чисел, определяемая рекуррентным соотношением (1), называется орбитой отображения (2), индуцированная величиной .

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

Определение 8. Назовем циклом длинной отображения множество элементов , для которых справедливо следующее свойство: отображение .

Утверждение 1. Пусть отображения индуцируется элементом . Тогда:

Если выглядит как , тогда и все будущие элементы орбиты будут принадлежать множеству .

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

Утверждение 2. Длина цикла определяется числом по формуле

(3)

Минимум и максимум элементов цикла определяется по формуле

(4)

Утверждение 3. Поскольку число элементов во множестве составляет и цикл аттрактор этих элементов содержит элементов, степень сжатия информации:

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

Размещено на http://www.allbest.ru/

Рис. 2 - Орбиты, проходящие через элементы , а также переходы от к и от к как результат преобразования (1)

На рисунке 1 показана схема всех возможных орбит, инициируемых различными значениями . Жирные линии обозначают связи между двумя элементами цикла Есть десять элементов из начального набора , которые идут на уровень и только элемент 0.5 переводит уровень в уровень

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

, (5)

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

Однако можно предложить использовать схему, предложенную в [13] для детерминированной последовательности (1), (2), имеющей систему определенных циклов, если вычисления (1), (2) выполнены символически. В дополнение к вышеупомянутым циклам, построенным на десятичных числах, существует большое количество циклов, построенных на различных других знаменателях. Введем обозначение для циклов на основе дроби со знаменателем q, где число m обозначает длину цикла (количество элементов в цикле), а l - номер цикла длины m. Если цикл данного периода является единственным, то верхний индекс не упоминается. Некоторые из них перечислены ниже.

Три из этих циклов часто встречаются в литературе

,

.

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

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

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

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

Описание алгоритма начнем с алгоритма шифрования.

Рис. 3 - Общая схема алгоритма шифрования.

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

Введем обозначения:

Файл (1) - файл, содержащий частоту наиболее встречающегося элемента исходного текста.

Файл (2) - файл, содержащий искомый цикл для шифрования.

Файл (3) - файл с шаблоном переводной таблицы.

Файл (4) - файл с проверочной таблицей использованных индексов.

Замечание:

Файлы (i), где i=1, 2, 3, 4, временные рабочие файлы, являющиеся побочным продуктом работы алгоритма шифрования.

Файл (S) - файл с исходным текстом.

Файл (K) - файл закрытого составного ключа.

Файл (Sht) - файл с шифрограммой.

Исходный текст, записанный в файле (S), проходит частотный анализ, с целью сортировки элементов по возрастанию частоты их появления в тексте. Для этого файл поступает на вход Программы 1:

Считывает файл (S).

f = open('F:/PF/Starts_files/Start_text.txt')

start_text = f.read()

f.close()

Проводит частотный анализ элементов текста.

chastota = list(Counter(start_text).most_common(1))

chastota_n1 = chastota[0][1]

Выписывает наибольшую частоту в отдельный файл (1).

f_mc = open('F:/PF/Shifrator_files/Most_common.txt', 'w')

f_mc.write("%s" % chastota_n1)

f_mc.close()

Результат выполнения Программы 1: Получение файла (1).

Полученный файл (1), поступает на вход Программы 2. Целью данной программы является определение основного цикла для шифрования. Для этого выполняются следующие шаги:

Файл (1) считывается, записанная в нем частота запоминается.

workfile = OpenRead["F:\\PF\\Starts_files\\Most_common.txt"];

soderjimoe = ReadList[workfile];

Close[workfile];

Из формулы:

(6)

где

A - размер алфавита;

М - частота наиболее встречаемого элемента текста;

k -порядок числа;

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

col = Max[Select[soderjimoe, NumberQ]];

k = IntegerPart[(Log[((160*col)/2)]/Log[5])+1]+1;

Поиск числа задающего последовательность.

randchis = RandomInteger[{1, 10^k}];

While[FractionalPart[randchis/5] == 0,

randchis = RandomInteger[{1, 10^k}]];

Вычисление длины цикла.

dlinnacikla = 2*5^(k - 1);

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

nachalootcheta = randchis/10^k;

delaemdo = IntegerPart[dlinnacikla + (0.1*dlinnacikla)];

seq1 = RecurrenceTable[{a1[n + 1] == 1 - 2*Abs[a1[n] - 1/2],

a1[1] == nachalootcheta}, a1, {n, 1, delaemdo}];

nomerkey = 1;

While[(seq1[[nomerkey + dlinnacikla]] - seq1[[nomerkey]]) != 0, nomerkey++];

osnovnayaseq =

RecurrenceTable[{a1[n + 1] == 1 - 2*Abs[a1[n] - 1/2],

a1[1] == seq1[[nomerkey]]}, a1, {n, 1, dlinnacikla }];

Запись цикла в файл (2).

osnovnayaseq[[1]]>>"F:\\PF\\Shifrator_files\\osnovnayaseq_vrsshfr.txt";

For[i= 2, i<dlinnacikla+1,i++,

osnovnayaseq[[i]]>>>

"F:\\PF\\Shifrator_files\\osnovnayaseq_vrsshfr.txt"];

Запись длинны цикла и задающего последовательность числа как частей составного закрытого ключа в файл (K).

nachalootcheta>>"F:\\PF\\Sends_files\\key.txt"

dlinnacikla>>>"F:\\PF\\Sends_files\\key.txt"

Результат выполнения Программы 2: Получение файла (2), получение файла (K).

Следующим шагом шифруем текст элементами заданного цикла. Для этого используем Программу 3:

Содержимое файлов (S) и (1) считывается и запоминается.

f1 = open('F:/PF/Starts_files/Start_text.txt')

text1 = f1.read()

f1.close()

x1 = list(text1)

f2 = open('F:/PF/Shifrator_files/Most_common.txt')

text2 = f2.read()

f2.close()

N = int(text2)

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

f = open('F:/PF/Shifrator_files/Shablon_alphavita.txt')

stroka = f.read()

f.close()

x = stroka.split('\t')

A = len(x)

wb = openpyxl.Workbook()

ws = wb.active

ws.title = "New Title"

for i in range(1, A+1):

ws.cell(column=i, row=1, value=x[i-1])

#print (x[i-1])

for j in range(2, N+2):

ws.cell(column=i, row=j, value=i+(A*(j-2)))

wb.save('F:/PF/Shifrator_files/id_table.xlsx')

Шифрование текста из файла (S) индексами из переводной таблицы файла (3) и формирование проверочной таблицы, на основе переводной таблицы из файла (3), и запись ее в файл (4).

schet1 = 0

for elem in x1:

for i in range(1, A+1):

if elem == ws.cell(column=i, row=1).value:

for j in range(N):

if ws.cell(column=i, row=2+j).value != 0:

x1[schet1] = ws.cell(column=i, row=2+j).value

ws.cell(column=i, row=2+j, value=0)

break

break

schet1+=1

wb.save('F:/PF/Shifrator_files/id_table_without_st.xlsx')

Из файла (2) берем элементы цикла по индексам из измененного текста файла (S).

f3 = open('F:/PF/Shifrator_files/osnovnayaseq_vrsshfr.txt')

czikl1 = f3.read().split('\n')

f3.close()

schet = 0

x2 = []

for elem in x1:

x2.append(czikl1[x1[schet]])

schet+=1

Полученную шифрограмму записываем в файл (Sht).

f4 = open('F:/PF/Sends_files/Shifrotext.txt', 'w')

for elem in x2: f4.write("%s " % elem)

f4.close()

Результат выполнения Программы 3: Получение файла (3), получение файла (4), получение файла (Sht).

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

Файл (K).

Файл (Sht).

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

Переходим к алгоритму дешифрования.

Рис. 4 - Общая схема алгоритма дещифровки

Введем обозначения:

Файл (5) - файл, содержащий искомый цикл для шифрования, этот файл является временным рабочим файлом.

Файл (F) - файл с восстановленным текстом.

Файл (Sht), содержащий шифрограмму, и файл (K) содержащий закрытый составной ключ поступают на вход алгоритма дешифровки.

В начале алгоритма необходимо восстановить цикл, для этого воспользуемся Программой 4:

Файл (K) считывается, содержимое запоминается.

workfile1 = OpenRead["F:\\PF\\Sends_files\\key.txt"];

soderjimoe1 = ReadList[workfile1];

Close[workfile1];

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

key = Select[soderjimoe1, NumberQ];

delaemdo = IntegerPart[key[[2]] + (0.1*key[[2]])];

seq1 = RecurrenceTable[{a1[n + 1] == 1 - 2*Abs[a1[n] - 1/2],

a1[1] == key[[1]]}, a1, {n, 1, delaemdo}];

Вычленение цикла шифрования из построенной последовательности и запись его в файл (5)

nomerkey = 1;

While[(seq1[[nomerkey + key[[2]]]] - seq1[[nomerkey]]) != 0,

nomerkey++];

osnovnayaseq =

RecurrenceTable[{a1[n + 1] == 1 - 2*Abs[a1[n] - 1/2],

a1[1] == seq1[[nomerkey]]}, a1, {n, 1, key[[2]]}];

osnovnayaseq[[1]] >>

"F:\\PF\\Deshiftator_files\\osnovnayaseq_vrsdshfr.txt";

For[i = 2, i < key[[2]] + 1, i++,

osnovnayaseq[[i]] >>>

"F:\\PF\\Deshiftator_files\\osnovnayaseq_vrsdshfr.txt"];

Результат выполнения Программы 4: Получение файла (5).

Восстановив цикл, можно перейти к восстановлению текста, для этого обратимся к Программе 5:

На вход поступают три файла:

Файл (5)

Файл (K)

Файл (Sht)

Все файлы считываются, а содержимое запоминается.

f1 = open('F:/PF/Deshifrator_files/osnovnayaseq_vrsdshfr.txt')

cickle = f1.read()

f1.close()

f2 = open('F:/PF/Sends_files/Shifrotext.txt')

shifrotext = f2.read()

f2.close()

f3 = open('F:/PF/Deshifrator_files/Shablon_alphavita.txt')

alphabet = f3.read()

f3.close()

f4 = open('F:/PF/Sends_files/key.txt')

key = f4.read()

f4.close()

Из содержимого файла (K) вычленяется длина цикла.

x = alphabet.split('\t')

A = len(x)#длинна алфавита

key = key.split('\n')

dlina_cickla = int(key[1])

count_rows = int(dlina_cickla/A)

Формирование шаблона переводной таблицы.

wb = openpyxl.Workbook()

ws = wb.active

ws.title = "New Title"

for i in range(1, A+1):

ws.cell(column=i, row=1, value=x[i-1])

for j in range(2, count_rows+2):

ws.cell(column=i, row=j, value=i+(A*(j-2)))

wb.save('F:/PF/Deshifrator_files/id_table.xlsx')

Замена элементов шифрограммы на индексы соответствующих элементов цикла и последующий перевод индексов в символы с помощью переводной таблицы.

shifrotext = shifrotext.split(' ')

cickle = cickle.split('\n')

for c in range(len(shifrotext)-1):

for i in range(dlina_cickla-1):

if shifrotext[c]==cickle[i]:

shifrotext[c]=i

while shifrotext[c] > 160 :

shifrotext[c] = shifrotext[c] - 160

shifrotext[c] = x[shifrotext[c]-1]

Восстановление исходного текста и запись его в файл (F).

f5 = open('F:/PF/Deshifrator_files/Deshifrotext.txt', 'w')

for elem in shifrotext:

f5.write("%s" % elem)

f5.close()

После окончания алгоритма дешифровки на выходе имеем файл (F) с восстановленным текстом.

3. Компьютерные средства

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

Итак, реализация алгоритма представлена в виде нескольких программ, написанных на языке программирования Python и специализированном программном обеспечении Wolfram Mathematica. Эти программные средства были выбраны из-за их особенностей, которые необходимы для более стабильной реализации предложенного алгоритма.

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

Начнем с описаний особенностей языка программирования Python и объяснения причин выбора данного языка. Python --язык программирования высокого уровня общего назначения. Ориентирован Python на повышение производительности разработчика и читаемости кода. Библиотеки Python-а включают большой объём полезных функций.[9]

Класс языка Python:

мультипарадигмальный:

объектно-ориентированный,

рефлективный,

императивный,

функциональный,

аспектно-ориентированный,

динамический.

Именно аспекты функциональности и модульности дают языку программирования Python, преимущества перед остальными.

Возможности и особенности языка Python необходимые для реализации алгоритма:

Функциональное программирование

Поддерживание парадигм функционального программирования, а именно:

функция является объектом;

функции высших порядков;

рекурсия;

развитая обработка списков (списочные выражения, операции над последовательностями, итераторы);

аналог замыканий;

частичное применение функции;

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

Модули и пакеты

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

Модули могут быть двух типов по своему происхождению:

модули, написанные на Python (чистом)

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

Например, в стандартной библиотеке есть модуль pickle и его аналог на C: cPickle. Модуль оформляется в виде отдельного файла, а пакет -- в виде отдельного каталога. Подключение модуля к программе осуществляется оператором import. После импорта модуль представлен отдельным объектом, дающим доступ к пространству имён модуля.

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

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

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

В первую очередь Стандартная библиотека Python.

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

Один из самых интересных модулей, которым мне пришлось пользоваться при написании работы - Модуль collections. [10]

Модуль collections - предоставляет специализированные типы данных (контейнеров), дополняющих стандартные типы словарей, кортежей, множеств и списков.

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

collections.Counter - вид словаря, который позволяет нам считать количество неизменяемых объектов (в большинстве случаев, строк). И использованный в моей работе метод most_common(n), который возвращает n чаще всего встречающихся элементов строки, в порядке возрастания. В частности в Программе 1 встречается:

chastota = list(Counter(start_text).most_common(1))

Этой строчкой я создаю список (chastota) всего из одного элемента - пары из наиболее встречающегося элемента и его частоты.

Перейдем к библиотеке NumPy. [11]

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

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

Итак, мы подобрались к библиотеке, которая заслуживает отдельного внимания: openpyxl.[5]

openpyxl - библиотека Python для чтения / записи файлов Excel, т.е формата xlsx / xlsm. Данная библиотека родилась из-за отсутствия адекватных библиотек для чтения / записи из Python в таблицы Exel-я.

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

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

wb = openpyxl.Workbook()

Таким образом мы создали Exel книгу с одним рабочим листом, для того чтобы обратиться к нему необходимо использовать свойство Workbook.active

ws = wb.active

Также мы можем создавать новые рабочие листы и переименовывать имеющиеся.

Делать это возможно с помощью метода Workbook.create_sheet() для создания новых и свойство Workbook.title для переименования старых.

Существует так же метод Worksheet.cell(), который обеспечивает доступ к ячейкам с использованием обозначений строк и столбцов

x = ws.cell(column=i, row=2+j, value=0)

И, наконец, самое главное это сохранить необходимый документ. Для этого нам понадобиться свойство Workbook.save(`filename'). Оно сохранит рабочую книгу как `filename'.

wb.save('F:/PF/Shifrator_files/id_table_without_st.xlsx')

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

class openpyxl.workbook.workbook.Workbook(write_only=False, iso_dates=False) - объект Рабочая книга, который является контейнером для всех других частей документа.

active - получение текущего активного листа.

create_sheet(title=None, index=None) - Создание рабочего листа по необязательному индексу.

title (unicode) - необязательный заголовок листа.

index ( int ) - необязательная позиция в которую будет вставлен лист.

save(filename)- сохраняет текущую рабочую книгу в прописанный файл

class openpyxl.worksheet.worksheet.Worksheet(parent, title=None)- объект Рабочий лист.

title - получение текущего имени листа.

class openpyxl.cell.cell.Cell(worksheet, row=None, column=None, value=None, style_array=None) - объект Ячейка.

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

Таким нерабочим был целый комплекс библиотек xlrd/xlwt/xlutils.[6-8]

Набор из этих библиотек позволяет:

Читать файлы Exel.

Создавать, заполнять и изменять файлы Exel.

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

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

Это все, что касается языка программирования Python, перейдем к пакету Mathematica.

3.2 Особенности специализированного программного обеспечения Wolfram Mathematica

Описание использованных методов

Mathematica --специализированное программное обеспечение, широко используемое в различных технических областях (инженерных, математических, компьютерных). [12]

Основные возможности пакета:

решение систем полиномиальных и тригонометрических уравнений и неравенств, а также трансцендентных уравнений, сводящихся к ним;

решение рекуррентных уравнений;

упрощение выражений;

нахождение пределов;

интегрирование и дифференцирование функций;

нахождение конечных и бесконечных сумм и произведений;

решение дифференциальных уравнений и уравнений в частных производных;

преобразования Фурье и Лапласа, а также Z-преобразование;

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

вейвлетный анализ.

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

Более того, язык программирования в пакете Mathematica относится к языкам функционального программирования, хотя поддерживает и процедурное программирование и объектно-ориентированное.

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

RecurrenceTable [ eqns , expr , { n , n max } ] - генерирует список значений ехрr для n значений, основанного на решение рекуррентных уравнений eqns.

RandomInteger[{imin,imax}] - случайное число в диапозоне {imin,imax}.

3.3 Наглядный пример работы алгоритма. Проверка его работоспособности

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

Итак, начнем с текста, содержащего: 25 слов, 150 знаков и 24 пробела.

В четверг четвертого числа в четыре с четвертью часа лигурийский регулировщик регулировал в Лигурии, но тридцать три корабля лавировали, лавировали, да так и не вылавировали.

Данный текст будет записан файл Start_text.txt, после чего данный файл поступит на вход 1-й программы проводящей частотный анализ.

В итоге мы получаем следующую статистику по этому тексту:

[(' ', 24), ('и', 19), ('р', 16), ('в', 14), ('а', 14), ('л', 12), ('е', 11), ('т', 10), ('о', 9), ('ч', 6), ('г', 6), ('с', 4), ('у', 4), ('к', 4), (',', 3), ('ы', 2), ('ь', 2), ('й', 2), ('н', 2), ('д', 2), ('В', 1), ('ю', 1), ('щ', 1), ('Л', 1), ('ц', 1), ('б', 1), ('я', 1), ('.', 1)]

Таким образом, мы видим, что 1-е место занимает пробел с частотой в 24 в этом тексте. На выходе программа создает файл Most_common.txt, предназначенный для внутреннего пользования. Содержимое файла всего одно число - частота самого встречающегося элемента текста. Этот файл подается на вход следующей программы, по окончанию которой мы получим 2 файла:

Файл osnovnayaseq_vrsshfr.txt, в файле содержится цикл шифрования.

4814/15625, 9628/15625, 11994/15625…

Файл key.txt, содержащий ключ для дешифровки сообщения.

(846157/1000000, 6250)

Следующий шаг это поступление файла osnovnayaseq_vrsshfr.txt на вход программы 3.

В ходе работы программы 3 получаем несколько рабочих файлов:

Шаблон переводной таблицы. Таблица вынесена в отдельный файл id_table.xlsx.

Рис. 5 - Часть шаблона переводной таблицы

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

И последним мы получаем шифрограмму, записанную в файл Shifrotext.txt. Так как шифрограмма длиннее, то запись ее в текст работы не целесообразно, поэтому текст шифрограммы был вынесен в раздел Приложение пункт 6.

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

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

Полученный файл key.txt, поступает на вход программы 4. Где мы из имеющегося ключа, вычленяя начальное значение для последовательности и длину цикла, должны восстановить исходный цикл шифрования.

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

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

файл key.txt из, которого нам необходимо вычленить длину цикла;

файл osnovnayaseq_vrsdshfr.txt, из которого мы узнаем индексы, по которым будем восстанавливать элементы шифрограммы;

файл Shifrotext.txt с текстом шифрограммы

На выходе программы 5 имеем файл Deshifrotext.txt , в котором содержится текст в точности совпадающий с исходным.

Заключение

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

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

Список литературы

1. Тилборг Х.К.А. Основы криптологии. Профессиональное руководство и интерактивный учебник. М.: Мир, 2006, 471с. Tilborg Henk C.A. Fundamentals of cryptology. Kluwer Academic Publishers. 2001

2. Ященко В.В. Введение в криптографию. М.: МЦНМО, 2012, 348 с.

3. Романьков В.А. Введение в криптографию. Курс лекций. М.: ФОРУМ, 2012, 240 с.

4. Деза Е.И., Котова Л.В. Введение в криптографию: Теоретико-числовые основы защиты информации. Учебное пособие. М.: ЛЕНАНД, 2018, 376 с.

5. Chetverikov V. M. Properties of the Tent map for decimal fractions with fixed Precision, 2017.

6. А. П. Алферов, А. Ю. Зубов, А. С. Кузьмин, А. В. Черемушкин, Основы криптографии, Москва, “Гелиос АРВ”, 2002.

7. https://openpyxl.readthedocs.io/en/stable/index.html, Документация для библиотеки для языка программирования Python, позволяющей работать с Exсel файлами.

8. https://xlrd.readthedocs.io/en/latest/, Документация для библиотеки для языка программирования Python, позволяющей работать с файлами типа xls/xlsx/csv/txt, только на чтение.

9. https://xlwt.readthedocs.io/en/latest/, Документация для библиотеки для языка программирования Python, позволяющей работать с файлами типа xls/xlsx/csv/txt, только на запись.

10. https://xlutils.readthedocs.io/en/latest/, Документация для библиотеки для языка программирования Python, позволяющей работать с библиотеками xlrd/xlwt.

11. https://ru.wikipedia.org/wiki/Python, Описание языка программирования Python.

12. https://pythonworld.ru/moduli/modul-collections.html, Описание модуля collections, и всех его методов.

13. https://ru.wikipedia.org/wiki/NumPy, Описание библиотеки Python, разработанной для работы с массивами и матрицами.

14. https://ru.wikipedia.org/wiki/Mathematica, Описание системы компьютерной алгебры Wolfram Mathematica.

15. Baptista M S 1998 Cryptography with chaos Physics Letters A, 240 (12) 50-54

Приложение 1

Программа 1: Частотный анализ текста.

Программа написана на языке программирования Python, является частью алгоритма шифрования.

from collections import Counter

f = open('F:/PF/Starts_files/Start_text.txt')

start_text = f.read()

f.close()

chastota = list(Counter(start_text).most_common(1))

chastota_n1 = chastota[0][1]

f_mc = open('F:/PF/Shifrator_files/Most_common.txt', 'w')

f_mc.write("%s" % chastota_n1)

f_mc.close()

Приложение 2

Программа 2:

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

Программа написана с помощью пакета Mathematica, является частью алгоритма шифрования.

workfile = OpenRead["F:\\PF\\Shifrator_files\\Most_common.txt"];

soderjimoe = ReadList[workfile];

Close[workfile];

col = Max[Select[soderjimoe, NumberQ]];

k = IntegerPart[(Log[((160*col)/2)]/Log[5])+1]+1;

randchis = RandomInteger[{1, 10^k}];

While[FractionalPart[randchis/5] == 0,

randchis = RandomInteger[{1, 10^k}]];

dlinnacikla = 2*5^(k - 1);

nachalootcheta = randchis/10^k;

delaemdo = IntegerPart[dlinnacikla + (0.1*dlinnacikla)];

seq1 = RecurrenceTable[{a1[n + 1] == 1 - 2*Abs[a1[n] - 1/2],

a1[1] == nachalootcheta}, a1, {n, 1, delaemdo}];

nomerkey = 1; While[(seq1[[nomerkey + dlinnacikla]] - seq1[[nomerkey]]) != 0, nomerkey++];

osnovnayaseq =

RecurrenceTable[{a1[n + 1] == 1 - 2*Abs[a1[n] - 1/2],

a1[1] == seq1[[nomerkey]]}, a1, {n, 1, dlinnacikla }];

osnovnayaseq[[1]] >>

"F:\\PF\\Shifrator_files\\osnovnayaseq_vrsshfr.txt";

For[i = 2, i < dlinnacikla + 1, i++,

osnovnayaseq[[i]] >>>

"F:\\PF\\Shifrator_files\\osnovnayaseq_vrsshfr.txt"];

nachalootcheta >> "F:\\PF\\Sends_files\\key.txt"

dlinnacikla >>> "F:\\PF\\Sends_files\\key.txt"

Приложение 3

Программа 3:

Создание шифрограммы из текста, с помощью элементов цикла.

Программа написана на языке программирования Python, является частью алгоритма шифрования.

import numpy as np

import openpyxl

#Разбить исходный текст на символы

f1 = open('F:/PF/Starts_files/Start_text.txt')

text1 = f1.read()

f1.close()

x1 = list(text1)

#Вытаскиваем число с наиболее встречающегся элемента

f2 = open('F:/PF/Shifrator_files/Most_common.txt')

text2 = f2.read()

f2.close()

N = int(text2)

#Формирование переводной таблицы

f = open('F:/PF/Shifrator_files/Shablon_alphavita.txt')

stroka = f.read()

f.close()

x = stroka.split('\t')

A = len(x)

wb = openpyxl.Workbook()

ws = wb.active

ws.title = "New Title"

for i in range(1, A+1):

ws.cell(column=i, row=1, value=x[i-1])

#print (x[i-1])

for j in range(2, N+2):

ws.cell(column=i, row=j, value=i+(A*(j-2)))

wb.save('F:/PF/Shifrator_files/id_table.xlsx')

#Шифруем текст идексами из таблицы, и формируем таблицу для проверки

schet1 = 0

for elem in x1:

for i in range(1, A+1):

if elem == ws.cell(column=i, row=1).value:

for j in range(N):

if ws.cell(column=i, row=2+j).value != 0:

x1[schet1] = ws.cell(column=i, row=2+j).value

ws.cell(column=i, row=2+j, value=0)

break

break

schet1+=1

wb.save('F:/PF/Shifrator_files/id_table_without_st.xlsx')

#Переводим индексы в массиве, в дроби из цикла

f3 = open('F:/PF/Shifrator_files/osnovnayaseq_vrsshfr.txt')

czikl1 = f3.read().split('\n')

f3.close()

schet = 0

x2 = []

for elem in x1:

x2.append(czikl1[x1[schet]])

schet+=1

#Получаем шифротекст в отдельном файле

f4 = open('F:/PF/Sends_files/Shifrotext.txt', 'w')

for elem in x2:

f4.write("%s " % elem)

f4.close()

Приложение 4

Программа 4:

Программа восстановления цикла с помощью ключа.

Программа написана с помощью пакета Mathematica, является частью алгоритма дешифрования.

workfile1 = OpenRead["F:\\PF\\Sends_files\\key.txt"];

soderjimoe1 = ReadList[workfile1];

Close[workfile1];

key = Select[soderjimoe1, NumberQ];<...


Подобные документы

  • Способы получения псевдослучайных чисел. Общая характеристика генератора псевдослучайных чисел фон Неймана. Сущность равномерного закона распределения. Понятие о критериях согласия. Анализ критериев Пирсона и Колмогорова.

    курсовая работа [176,9 K], добавлен 28.04.2010

  • Свойства равномерно распределенной псевдослучайной последовательности. Линейный и квадратичный конгруэнтный генератор. Исследование RSA-алгоритма генерации псевдослучайных последовательностей. Универсальный алгоритм статистического тестирования Маурера.

    дипломная работа [2,3 M], добавлен 06.11.2011

  • Классическая последовательность чисел Фибоначчи, определение основных понятий, схематическое изображение этой последовательности, ее свойства. Упорядочивание, вычисление элементов последовательности. Некоторые зависимости между мнимыми тройками.

    реферат [82,2 K], добавлен 07.09.2009

  • Изучение основных подгрупп алгоритмов проверки простоты больших чисел: детерминированные и вероятностные проверки. Исследование методов генерации и проверки на простоту больших чисел с помощью метода Ферма (малая теорема Ферма), составление программы.

    лабораторная работа [11,7 K], добавлен 27.12.2010

  • Некоторые применения производной. Использование основных теорем дифференциального исчисления к доказательству неравенств. Первообразная и интеграл в задачах элементарной математики. Монотонность интеграла. Некоторые классические неравенства.

    курсовая работа [166,4 K], добавлен 11.01.2004

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

    курсовая работа [6,8 M], добавлен 18.07.2014

  • Важная роль простых чисел (ПЧ) в криптографии, генерации случайных чисел, навигации, имитационном моделировании. Необходимость закономерности распределения ПЧ в ряду натуральных чисел. Цель: найти закономерность среди ПЧ + СЧ, а потом закономерность среди

    доклад [217,0 K], добавлен 21.01.2009

  • Понятие конформного отображения и его основные свойства. Основные принципы конформных отображений функций комплексного переменного, их гидродинамические аналогии и интерпретации. Применение метода конформных отображений в механике сплошных сред.

    дипломная работа [2,6 M], добавлен 26.08.2014

  • Математическое описание последовательности чисел Фибоначчи. Представление фрагмента корзины "Гармония Мироздания" как образца формирования числовых рядов. Особенности построения живой спирали "Китовраса", ее практическое применение в древнем мире.

    доклад [6,4 M], добавлен 16.01.2011

  • Соотношения между операторами дифференцирования и конечных разностей. Разностная аппроксимация дифференциальных уравнений. Интерполяционные рекуррентные формулы, метод Эйлера. Интерполяция конечными разностями "назад". Рекуррентные формулы Адамса.

    реферат [156,8 K], добавлен 08.08.2009

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

    курсовая работа [150,0 K], добавлен 18.12.2010

  • Прогрессии многочленов и их матриц. Описание вертикальных рядов. Построение алгебраической трапеции из ограниченного количества чисел ряда последовательности. Свободные члены выражений. Особенности разрешимости Диофантовых уравнений. Расшифровка формул.

    курсовая работа [654,7 K], добавлен 31.12.2015

  • Свойства чисел натурального ряда. Периодическая зависимость от порядковых номеров чисел. Шестеричная периодизация чисел. Область отрицательных чисел. Расположение простых чисел в соответствии с шестеричной периодизацией.

    научная работа [20,2 K], добавлен 29.12.2006

  • Основные особенности решения гидродинамических задач методом конформных отображений. Сущность понятия "конформное отображение". Анализ задачи об обтекании твердого тела потоком жидкости. Знакомство с интегрированными функциями комплексного переменного.

    контрольная работа [1,1 M], добавлен 22.03.2013

  • Понятие возрастающей числовой последовательности. Формула бинома Ньютона. Число положительных слагаемых. Определение ограниченности последовательности чисел. Предел монотонной и ограниченной последовательностей. Показательный рост или убывание.

    презентация [87,1 K], добавлен 21.09.2013

  • Базовые основы системы mn параметров, варианты их значений. Теоремы циклов для треугольников и прямоугольного треугольника. Тайна теоремы Пифагора, предистория ее рождения. Итерационные формулы и их использование. Дисперсия точек ожидаемой функции.

    статья [241,5 K], добавлен 24.11.2011

  • Основные понятия и некоторые классические теоремы теории интерполяции. Определение общих свойств пространств Лоренца. Понятие нормы и спектрального радиуса неотрицательных матриц. Исследование интерполяционных признаков семейств конечномерных пространств.

    курсовая работа [289,9 K], добавлен 12.01.2011

  • Закон сохранения количества чисел Джойнт ряда в натуральном ряду чисел как принцип обратной связи чисел в математике. Структура натурального ряда чисел. Изоморфные свойства рядов четных и нечетных чисел. Фрактальная природа распределения простых чисел.

    монография [575,3 K], добавлен 28.03.2012

  • Основы геометрии чисел. Решетки, подрешетки и их базисы. Основные теоремы геометрии чисел. Связь квадратичных форм с решетками. Методы геометрии чисел для решения диофантовых уравнений. Теорема Минковского о выпуклом теле. Квадратичная форма решетки.

    дипломная работа [884,6 K], добавлен 24.06.2015

  • Дифференциальное уравнение Бесселя и его интегралы. Рекуррентные формулы для данных функций. Применение теоремы Коши к интегралу Пуассона. Некоторые применения функций Бесселя. Задача на тепловое равновесие. Дифференциальное уравнение второго порядка.

    курсовая работа [4,3 M], добавлен 06.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.