Технология разработки программного обеспечения




Задание

Для курсового проекта по дисциплине

Технология разработки программного обеспечения

Вариант № 11

Темы:

1)Структурное программирование

2)Стиль программирования

3)Надёжность программного обеспечения

4)Тестирование и отладка программ

5)Документирование программ

6)Этапы жизненного цикла программы

 

Порядок выполнения проекта:

1)Постановка задачи

2)Разработка эскизного проекта

3)Разработка технического проекта

4)Проектирование тестовых примеров

5)Разработка модулей программы

6)Отладка и тестирование программного продукта

7)Разработка программной документации

8)Оформление пояснительной записки и графической части проекта

 

Условие задачи:

1) Реализовать шифры: сдвига, афинную систему подстановок Цезаря, систему Цезаря с ключевым словом, простую замену. Для передачи ключа использовать одну из ассиметричных криптосистем (Диффи-Хеллмана, RSA, Шамира, Эль-Гамаля)

Пользуясь изложенным способом

1. Зашифровать данный текст;

2. Расшифровать данный текст.

Содержание   Введение……………………………………………………………………………………. 1.ТЕОРЕТИЧЕСКАЯ ЧАСТЬ……………………………………………………………………… 1.1 Что такое криптография………………………………………………………………… 1.2 Передача ключа методом Диффи-Хеллмана………………………………………….. 1.3 Шифр сдвига……………………………………………………………………………… 1.4 Шифр «Афинная система подстановок Цезаря»………………………………………. 1.5 Шифр «Система Цезаря с ключевым словом»………………………………………….. 1.6 Шифр простой замены……………………………………………………………………. 2.ПРАКТИЧЕСКИЙ РАЗДЕЛ………………………………………………………………………. 2.1 Расширенная постановка задачи…………………………………………………………. 2.2 Эскизный проект………………………………………………………………………….. 2.3 Технический проект алгоритма………………………………………………………….. 3.ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ……………………………………………………………….. Заключение……………………………………………………………………………………………. Список использованной литературы………………………………………………………………… ПРИЛОЖЕНИЕ А Листинг программы…………………………………………………………….. ПРИЛОЖЕНИЕ Б Результат работы программы……………………………………………………  
Утв.
Н. контр.
Пров.
Разраб.
Изм
Лист
№ докум.
Подпись
Дата
Лит.
Лист
Листов
Т
ТТИТ
КП.14.230115.331С.18.ПЗ  
Вершинина Е.3
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

 

 


 

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

 

 

 
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
1.ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ 1.1Что такое криптография? Криптография (от др.-греч.κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации. Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию. Криптография не занимается: защитой от обмана, подкупа или шантажа законных абонентов, кражи ключей и других угроз информации, возникающих в защищенных системах передачи данных. Криптография — одна из старейших наук, её история насчитывает несколько тысяч лет.  
 
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ

 

1.2 Передача ключа методом Диффи-Хеллмана Протокол Диффи-Хеллмана — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования. Схема открытого распределения ключей, предложенная Диффи и Хеллманом, произвела настоящую революцию в мире шифрования, так как снимала основную проблему классической криптографии — проблему распределения ключей В чистом виде алгоритм Диффи-Хеллмана уязвим для модификации данных в канале связи, в том числе для атаки «Человек посередине», поэтому схемы с его использованием применяют дополнительные методы односторонней или двусторонней аутентификации. При работе алгоритма каждая сторона: 1. генерирует случайное натуральное число aзакрытый ключ 2. совместно с удалённой стороной устанавливает открытые параметры p и g (обычно значения p и g генерируются на одной стороне и передаются другой), где p является случайным простым числом (p-1)/2 также должно быть случайным простым числом (для повышения безопасности)[7] g является первообразным корнемпо модулю p 3. вычисляет открытый ключ A, используя преобразование над закрытым ключом A = ga mod p 4. обменивается открытыми ключами с удалённой стороной 5. вычисляет общий секретный ключ K, используя открытый ключ удаленной стороны B и свой закрытый ключ a K = Ba mod p К получается равным с обеих сторон, потому что: Ba mod p = (gb mod p) a mod p = gab mod p= (ga mod) b mod p = Ab mod p  
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
1.3 Шифр сдвига Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования. Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее. Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами. Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и все ещё имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет практически никакого применения на практике. Рисунок 1- пример шифрования сдвигом     Шифр Цезаря со сдвигом на 3: A заменяется на D B заменяется на E и так далее Z заменяется на С Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами модульной арифметики: где — символ открытого текста, — символ шифрованного текста, — мощность алфавита, а — ключ.    
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ

 

1.4 Шифр «Афинная система подстановок Цезаря» Аффинный шифр — это частный случай более общего моноалфавитного шифра подстановки. К шифрам подстановки относятся также шифр Цезаря, ROT13 и Атбаш. Поскольку аффинный шифр легко дешифровать, он обладает слабыми криптографическими свойствами. В аффинном шифре каждой букве алфавита размера ставится в соответствие число из диапазона . Затем при помощи модульной арифметики для каждого числа, соответствующего букве исходного алфавита, вычисляется новое число, которое заменит старое в шифротексте. Функция шифрованиядля каждой буквы: где модуль m– размер алфавита,а пара a иb - ключ шифра. Значение должно быть выбрано таким, что a и m - взаимно простые числа. Функция расшифрования: где — обратное к aчисло по модулю m. Примеры шифрования и расшифрования В следующих примерах используются латинские буквы от A до Z, соответствующие им численные значения приведены в таблице.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
                                                   

Шифрование

В этом примере необходимо зашифровать сообщение "ATTACK AT DAWN", используя упомянутое выше соответствие между буквами и числами, и значения , и , так как в используемом алфавите 26 букв. Только на число наложены ограничения, так как оно должно быть взаимно простым с 26. Значение может быть любым, только если не равно единице, так как это сдвиг шифра.

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

Теперь, для каждого значения найдем значение . После нахождения значения для каждого символа возьмем остаток от деления на 26.

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

 

Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
В этом примере шифротекст будет "EJJEKIEJNESR". Таблица ниже показывает все шаги по шифрованию сообщения аффинным шифром.
сообщение A T T А C K A T D A W N
                       
                       
                       
шифротекст E J J E K I E J N E S R

Расшифрование

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

Теперь рассчитаем для каждого необходимо рассчитать и взять остаток от деления этого числа на 26.

Последний шаг операции расшифрования для шифротекста — поставить в соответствие числам буквы. Сообщение после расшифрования будет "ATTACKATDAWN". Таблица ниже показывает выполнение последнего шага.

шифротекст E J J E K I E J N E S R
                       
                       
                       
сообщение A T T А C K A T D A W N

 

Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ

 

1.5. Шифр «Система Цезаря с ключевым словом» В этой системе шифрования наряду с числовым ключом K, 0? K? (M-1), задающим смещение, используется ключевое слово для изменения порядка символов в заменяющем алфавите. В качестве ключевого слова необходимо выбирать слово или короткую фразу (не более длины алфавита). Все буквы ключевого слова должны быть различными. Для создания таблицы замены ключевое слово записываем под буквами алфавита, начиная с буквы, числовой код которой совпадает с выбранным числовым ключом K. Оставшиеся буквы алфавита замены записываем в алфавитном порядке (избегая повтора букв) после ключевого слова. При достижении конца таблицы циклически переходим на ее начало и дописываем последние буквы алфавита не встречавшиеся ранее. Пример. Пусть задан ключ K=3, ключевое слово «ШИФРОВКА» и русский алфавит из 32 букв. Необходимо создать таблицу замен для системы шифрования Цезаря с ключевым словом и с ее помощью зашифровать слово «НЕПТУН». Первую букву ключевого слова («Ш») записываем под символом «Г» открытого текста с числовым кодом, определенным ключом K=3. Остальные буквы слова «ШИФРОВКА» записываем подряд. Оставшиеся ячейки заполняем теми буквами алфавита, которые не вошли в ключевое слово: «Б», «Г», «Д», «Е» и т.д. до буквы «Ь». Оставшиеся буквы «Э», «Ю», «Я» вписываем в начало таблицы под буквами «А», «Б» и «В», соответственно (табл. 4). Таблица 4. Таблица замен символов для системы шифрования Цезаря при K=3, M=32 и ключевом слове «ШИФРОВКА» Далее с помощью табл. 4 шифруем побуквенно слово «НЕПТУН». В результате получаем шифротекст: «ДФЖЛМД». Для расшифрования получателю отправляют ключевое слово и ключ К, при помощи которого он создаёт шифротекст и расшифровывает посланную информацию.    
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
1.6. Шифр «Простая замена» К шифрам простой замены относятся многие способы шифрования, возникшие в древности или средневековье, как, например, Атбаш (также читается как этбаш) или Шифр Цезаря. Для вскрытия подобных шифров используется частотный криптоанализ. Атбаш (ивр. אתב"ש‎) — простой шифр подстановки для иврита. Правило шифрования состоит в замене «i»-й буквы алфавита буквой с номером «n» − «i» + 1, где «n» — число букв в алфавите. Шифр простой замены, использованный для еврейского алфавита и получивший оттуда свое название. Шифрование происходит заменой первой буквы алфавита на последнюю, второй на предпоследнюю (алеф (первая буква) заменяется на тав (последнюю), бет (вторая) заменяется на шин (предпоследняя); из этих сочетаний шифр и получил свое название). Шифр Атбаш для английского алфавита:
Исходный алфавит: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Алфавит замены: Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

 

Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ

 

2. ПРАКТИЧЕСКИЙ РАЗДЕЛ 2.1 Расширенная постановка задачи 1) Реализовать шифры: сдвига, аффинную систему подстановок Цезаря, Системы Цезаря с ключевым словом, простую замену. Для передачи ключа использовать одну из ассиметричных криптосистем (Диффи-Хеллмана, RSA, Шамира, Эль-Гамаля) Пользуясь изложенным способом: 1. зашифровать данный текст; 2. расшифровать данный текст. 2) Реализовать окно ввода текста и раздел вывода зашифрованного текста. 3) Также реализовать главное меню, где будут находиться пункты: «О разработчике», «Справка». 4) Меню сохранения и меню открытия текста. 5) Создать кнопки для работы программы.    
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
2.2 Эскизный проект Для решения задачи необходимо реализовать следующие функции: - Функции работы с ключом: _fastcall Tdh::Button2Click (TObject *Sender) _fastcall Tdh::Button3Click (TObject *Sender) _fastcall Tdh::Button4Click (TObject *Sender) - Функция шифрования сдвигом: cod_shift (int key) - Функция расшифрования сдвигом: decod_shift (int key) - Функция шифрования афинной системой подстановок Цезаря: cod_athens (int key) - Функция расшифрования афинной системой подстановок Цезаря: decod_athens (int key) - Функция шифрования системой Цезаря с ключевым словом: cod_cesar_keyword () - Функция расшифрования системой Цезаря с ключевым словом: decod_cesar_keyword () - Функция шифрования простой замены: void cod_atbash () - Функция расшифрования простой замены: decod_atbash () - Функция проверки простых чисел при вводе: check_digit(int digit1, int digit2)    
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ

 

Описание функций программы Модуль-_fastcall Tdh:: Button2Click (TObject *Sender) В этой функции выбирается группа А или В для дальнейшего формирования ключа.   Модуль- _fastcall Tdh:: Button3Click (TObject *Sender) В этой функции флаг приравнивается к 0 и вводятся 3 числа: 2 общих и одно секретное. Далее проверяются числа: если первое число больше 100 или меньше 0, второе больше 10 или меньше 0, то флаг приравнивается к 1. Далее идёт проверка первых двух чисел на простоту: если они не простые, то флаг приравнивается к 1. Потом делается проверка третьего числа: если оно больше 20 или меньше 0, то флаг равен 1. Если флаг равен 0, то второе общее число возводится в степень, которая равна значению первого секретного числа, после этого производится деление по модулю полученного значения на первое общее число, полученное значение приравнивается ко второму секретному числу. Данные действие производятся как для выбранной группы А, так и для группы В.   Модуль - _fastcall Tdh::Button4Click (TObject *Sender) Сначала в этой функции идёт проверка дальнейших действий: шифровка или расшифровка, затем проверка выбора группы. Далее значение второго секретного числа каждый пользователь возводит в степень, которая равна первому секретному числу. После этого производится деление по модулю на первое общее число, получено значение приравнивается к секретному ключу. Далее выполняется функция упорядочивания и заполнения массива. Затем вызываются функции шифровки или расшифровки (сдвиг, аффинная система подстановок Цезаря, система Цезаря с ключевым словом, простая замена).    
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
Модуль-_shift (intkey) Эта функция осуществляет зашифрование текста сдвигом. В поле ввода организуется цикл по строкам и копирование их из поля ввода в переменную. Далее организуется цикл по символам одной строки и определяется индекс текущего символа для шифровки. Затем идёт вычисление символа шифра и замена текущего символа в строке на символ шифровки. После того как текст зашифрован, следует копирование его в поле ввода.   Модуль- decod_shift (int key) Этафункция осуществляет расшифрование текста сдвигом. В поле ввода организуется цикл по строкам и копирование их из поля ввода в переменную. Затем организуется цикл по символам одной строки и определяется индекс текущего символа для расшифровки. Далее идёт замена текущего символа в строке на расшифрованный символ. После того, как текст расшифрован, следует копирование его в поле ввода.  
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ

 

Модуль-cod_athens (int key) Эта функция осуществляет шифрование текста афинной системы подстановок Цезаря. Определяется количество слов в алфавите. Заносится в переменную второе секретное число, необходимое для метода афинной подстановки. Организуется цикл по строкам в поле ввода. В данном цикле происходит копирование строки из поля ввода в переменную, для дальнейшего использования. Определяется количество символов в строке. В цикле по строкам, в поле ввода, создаётся цикл по символам одной строки. В цикле происходит шифрование символа с помощью метода афинной подстановки. После того как символ был зашифрован, происходит копирование в поле ввода зашифрованной строки.   Модуль-decod_athens (int key) Эта функция осуществляет расшифрование текста афинной системой подстановок Цезаря. Определяется количество слов в алфавите. Заносится в переменную второе секретное число, необходимое для метода афинной подстановки. Организуется цикл по строкам в поле ввода. В данном цикле происходит копирование строки из поля ввода в переменную, для дальнейшего использования. Определяется количество символов в строке. В цикле по строкам, в поле ввода, создаётся цикл по символам одной строки. В цикле происходит дешифрование символа с помощью метода афинной подстановки. После того как символ был расшифрован, происходит копирование в поле ввода расшифрованной строки.  
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
Модуль - void cod_atbash () Эта функция осуществляет расшифрование текста простой замены (Атбаш). Определяется количество слов в алфавите. Создаётся новая переменная с размером алфавита, исключающие символ перехода на следующую строку. Создаётся цикл по строкам в поле ввода. В цикле происходит копирование строки из поля ввода и определяется количество символов в строке. Создаётся цикл по символам в одной строке. В этом цикле для корректной шифровки этот символ пропускается. Затем определяется индекс текущего символа для шифровки и текущий символ в строке заменяется на зашифрованный символ. Копируем в поле ввода зашифрованную строку.   Модуль - void decod_atbash () Эта функция осуществляет расшифрование текста простой замены (Атбаш). Определяется количество слов в алфавите. Создаётся новая переменная с размером алфавита, исключающие символ перехода на следующую строку. Создаётся цикл по строкам в поле ввода. В цикле происходит копирование строки из поля ввода и определяется количество символов в строке. Создаётся цикл по символам в одной строке. В этом цикле для корректной шифровки этот символ пропускается. Затем определяется индекс текущего символа для расшифровки и текущий символ в строке заменяется на расшифрованный символ. Копируем в поле ввода расшифрованную строку.      
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ

 

Модуль – check_digit(int digit1, int digit2) Эта функция осуществляет проверку простых чисел при вводе. Флаги обнуляются. Организуется цикл по массиву с простыми числами, в котором сравниваются введённые числа со значениями массива. Если первое число равно какому-либо значению массива, то флаг1 равен 1, если второе число равно какому-либо значению массива, то флаг2 равен 1.После этого осуществляется проверка на простоту обоих чисел. Если оба числа простые, то возвращается значение 0. Если оба числа непростые, то возвращается значение 1 и флаги равны 0.  
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ  

 


 

Модуль – check_digit(int digit1, int digit2) Эта функция осуществляет проверку простых чисел при вводе. Флаги обнуляются. Организуется цикл по массиву с простыми числами, в котором сравниваются введённые числа со значениями массива. Если первое число равно какому-либо значению массива, то флаг1 равен 1, если второе число равно какому-либо значению массива, то флаг2 равен 1.После этого осуществляется проверка на простоту обоих чисел. Если оба числа простые, то возвращается значение 0. Если оба числа непростые, то возвращается значение 1 и флаги равны 0.  
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ  

 

 


 

2.3. Технический проект алгоритма Функцияпередачиключа__fastcall Tdh:: Button3Click (TObject *Sender)    
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
начало
 
  flag = 0  
digit1>100||digit1<0
  flag = 1  
digit2>10 ||digit2<0  
flag = 1
  flag=check_digit (digit1, digit2)  
key1_1>20||key1_1<0
  flag = 1  
flag ==0  
  key2_1 = 1  
 
   
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
 
RadioGroup1 ->ItemIndex == 0  
да
да
нет
да
нет
нет
 
нет
да
нет
 
да

 

 


 

i=0
  key2_1 *= digit2; key2_1 %= digit1;  
i++
i<key1_1  
 
  flag = 0  
digit1>100||digit1<0
  flag = 1  
 
да
нет
да

 

digit2>10|| digit2<0
  flag = 1  
 
нет
да
нет

 

 

   
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
 
  flag=check_digit(digit1, digit2)  
key1_2>20||key1_2<0
  flag = 1  
flag==0  
  key2_2 = 1  
i=0
  key2_2 *= digit2  
i<key1_2  
конец
  i++  
да
нет
да
да
нет
Функция передачи ключа: получение второго секретного числа и ввод числа партнёра: __fastcall Tdh::Button4Click(TObject *Sender)    
Лист
№ докум.
Подпись
Изм
Дата
Лист
КП.14.230115.331С.18.ПЗ
начало
choose==1
 
 
key2_2 = Edit4->Text.ToInt ();   sec_key1 = 1;  
  i=0  
  sec_key1 *= key2_2  
  i++  
i<key1_1  
 


Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту:

Обратная связь