Курсовая работа (т): Разработка прикладной программы для криптографической обработки данных шифром Цезаря (язык программирования C++)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

. Алгоритм RSA:- криптографическая система открытого ключа, обеспечивающая такие механизмы защиты как шифрование и цифровая подпись (аутентификация - установление подлинности). Криптосистема RSA разработана в 1977 году и названа в честь ее разработчиков Ronald Rivest, Adi Shamir и Leonard Adleman.относится к так называемым асимметричным алгоритмам, у которых ключ шифрования не совпадает с ключом дешифровки. Один из ключей доступен всем (так делается специально) и называется открытым ключом, другой хранится только у его хозяина и неизвестен никому другому. С помощью одного ключа можно производить операции только в одну сторону. Если сообщение зашифровано с помощью одного ключа, то расшифровать его можно только с помощью другого. Имея один из ключей невозможно (очень сложно) найти другой ключ, если разрядность ключа высока.

Алгоритм RSA состоит из следующих пунктов:

1.      Выбрать два достаточно больших простых числа p и q

2.      Вычислить n = p * q

.        Вычислить m = (p - 1) * (q - 1)

.        Выбрать число d взаимно простое с m

.        Выбрать число e так, чтобы e * d = 1 (mod m)

Числа e и d являются ключами RSA. Шифруемые данные необходимо разбить на блоки - числа от 0 до n - 1. Шифрование и дешифровка данных производятся следующим образом:

· Шифрование: b = ae (mod n)

·              Дешифровка: a = bd (mod n)

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

Алгоритм RSA намного медленнее чем DES и другие алгоритмы блокового шифрования. Программная реализация DES работает быстрее по крайней мере в 100 раз и от 1,000 до 10,000 - в аппаратной реализации (в зависимости от конкретного устройства). Благодаря ведущимся разработкам, работа алгоритма RSA, вероятно, ускорится, но аналогично ускорится и работа алгоритмов блокового шифрования.

. Алгоритм ГОСТ 28147-89:

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

Алгоритм как бы состоит из трех уровней. Основной шаг криптопреобразования - самый нижний уровень, на его основе строятся все более высокие части алгоритма. Отталкиваясь от основных шагов строятся базовые циклы: цикл зашифрования, цикл расшифрования и цикл выработки имитовставки. На самой верхней ступени стоят собственно реальные алгоритмы или циклы (на самом деле стандарт ГОСТ 28147-89 содержит не один, а несколько алгоритмов шифрования), которые строятся на основе базовых циклов.

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

На входе основного шага определяется 64-битный блок данных N = (N1, N2), где N1 - младшая 32-битовая часть, а N2 - старшая 32-битовая часть. Обе части рассматриваются как отдельные 32-битовые числа. На вход основного шага также поступает один из восьми элементов ключа. 32-битовый элемент ключа обозначается за X. Далее производятся следующие действия:

1.   S = N1 + X (mod 232).

2.      Число S разбивается на 8 частей: S0,S1,S2,S3, S4,S5,S6,S7 по 4 бита каждая, где S0 - младшая, а S7 - старшая части числа S.

.        Для всех i от 0 до 7: Si = T(i, Si), где T(a, b) означает ячейку таблицы замен с номером строки a и номером столбца b (счет с нуля).

.        Новое число S, полученное на предыдущем шаге циклически сдвигается в сторону старших разрядов на 11 бит.

.        S = S xor N2, где xor - операция исключающего или.

.        N2 = N1.

.        N1 = S.

Как результат основного шага криптопреобразования возвращается блок данных N = (N1, N2), где N2 равно исходному N1, а N1 - результат преобразований основного шага.

Базовые циклы ГОСТ 28147-89 строятся из основных шагов криптопреобразования путем многократного их повторения с различными элементами ключа. Блок данных, с которым работает базовый цикл, поступает на его вход один раз в начале работы, а результатом базового цикла является преобразованный блок данных. Как и в основном шаге 64-битный блок данных обозначают через N = (N1, N2), а элементы ключа через X с индексом, означающим номер элемента в ключевом массиве. Берут блок данных N и вызывают последовательно процедуру основного шага.

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

ГОСТ 28147-89 определяет три основных режима шифрования: простая замена, гаммирование и гаммирование с обратной связью и один дополнительный режим выработки имитовставки. Данные обрабатываются блоками по 64 бита, на которые разбивается массив, последний блок может быть неполным. В двух последних режимах имеется возможность обрабатывать неполный блок данных, в первом длина данных должна быть кратна 64-м битам.

1.4 Анализ криптографического алгоритма «шифр Цезаря»

В I в до н. э. Гай Юлий Цезарь во время войны с галлами, переписываясь со своими друзьями в Риме, заменял в сообщении первую букву латинского алфавита (А) на четвертую (D), вторую (В) - на пятую (Е), наконец, последнюю - на третью (Рис.1).

Сообщение об одержанной им победе выглядело так: YHQL YLGL YLFL «Veni, vidi, vici» - «Пришел, увидел, победил» (лат.).

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

Шифр Цезаря - это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций левее или правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Г, Б станет Д, и так далее.

Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами. Древнеримский историк Светоний не приводит фактов дешифрования переписки Цезаря. Сам Цезарь всю жизнь ис пользовал один и тот же ключ (сдвиг - 3). Этим шифром он пользовался, в частности, для обмена посланиями с Цицероном.

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

Рис. 1

В 19-ом столетии, личная секция рекламных объявлений в газетах иногда использовалась, чтобы обмениваться сообщениями, зашифрованными с использованием простых шифров. Кан (1967) описывает случаи когда любители участвовали в секретных коммуникациях, зашифрованных с использованием шифра Цезаря в "Таймс". Даже позднее, в 1915, шифр Цезаря находил применение: российская армия использовала это как замену для более сложных шифров, которые оказались слишком сложными для войск; у немецких и австрийских криптоаналитиков были лишь небольшие трудности в расшифровке этих сообщений.

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

Ключевые слова, короче чем сообщение (например, "Complete Victory", используемое Конфедерацией во время гражданской войны в США), вводят циклический образец, который мог бы быть обнаружен с помощью улучшенной версии частотного анализа.

В апреле 2006, беглый босс Мафии Бернардо Провенцано был пойман в Сицилии частично из-за криптоанализа его сообщений, написанных с использованием вариации шифра Цезаря. Шифр Провенцано использовал числа, так, чтобы "A" была написана как "4", "B" как "5", и так далее.

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

Например, если внутреннее колесо повернуть так, чтобы символу A внешнего диска соответствовал символ D внутреннего диска, то мы получим шифр со сдвигом 3 влево.

Рис. 2

.5 Постановка задачи

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

Разрабатываемая прикладная программа должна решать следующие задачи:

§  Шифрование введенного пользователем сообщения.

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

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

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

Прикладная программа использует следующий алгоритм действий:

.        Ввод цифры 1 и 2 для выбора режима работы программы (1 - шифрование, 2 - дешифрование).

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

.        Если выбран режим дешифрования, то пользователь вводит сообщение, которое нужно дешифровать и нажимает клавишу enter. Ниже на экран выводится дешифрованное сообщение. Для выхода из программы - нажать enter.

2. Проектная часть

.1 Математическое обеспечение

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


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

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

Блок-схема общего алгоритма работы прикладной программы представлена ниже. (Рис.3)

























Рис.3

.2 Информационное обеспечение

Информационная модель - модель <#"784412.files/image009.gif">

Рис.4

Рис.5

Рис.6

Рис.7

Рис.8

Листинг прикладной программы «шифр Цезаря» на языке программирования C++:

#include "stdafx.h"

#include "iostream"

#include "stdio.h"

#include "string.h"

#include "conio.h"

#include "windows.h"namespace std;buffalpha[34]="абвгдеёжзийклмнопрстуфхцчшщъыьэюя";main()

{(1251); SetConsoleOutputCP(1251);i,x,y,rr,k=3; buff[100]="";

puts("Выберите действие :\n");

puts("1.Шифрование\n");("2.Дешифрование\n");

scanf_s("%i",&rr);(rr==1)

{<<"Введете сообщение для шифрования:"<<endl;

cin>>buff;(int i=0;i<strlen(buff);i++)

{(int l=0;l<strlen(buffalpha);l++)(buff[i]==buffalpha[l]) x=l;j;=(x+k)%(strlen(buffalpha));[i]=buffalpha[j];

}<<"Зашифрованное сообщение:\n"<<endl;<<buff<<endl;system("break");

}

{<<"Введите сообщение для дешифрования:"<<endl;>>buff;<<"Дешифрованное собщение: "<<endl;

for(i=0;i<strlen(buff);i++)

{(int l=0;l<strlen(buffalpha);l++)(buff[i]==buffalpha[l]) y=l;j;=((y+(strlen(buffalpha))-(k%(strlen(buffalpha)))))%(strlen(buffalpha)) ;[i] = buffalpha[j];

}<<buff<<endl;system("break");

}

_getch();

}

Источник: https://www.bibliofond.ru/detail.aspx?id=784412