Реализация двоичного поточного зашифрования/расшифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием
Разработка алгоритма шифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием для больших степеней полинома. Разработка программы-приложения, которая реализует заданный алгоритм.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 16.06.2016 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru//
Размещено на http://www.allbest.ru//
МИИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ
РАДИОЭЛЕКТРОНИКИ
Факультет Компьютерной инженерии и управления
Кафедра Безопасности информационных технологий
КУРСОВАЯ РАБОТА
Дисциплина: «Технологии программирования»
Тема: «Реализация двоичного поточного зашифрования/расшифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием»
Выполнил:
Босенко Ярослав Вадимович
Научный руководитель:
Мельникова Оксана Анатольевна
Харьков 2014
РЕФЕРАТ
Отчет по курсовой работе: 27 страниц, 3 рисунка, 1 приложение, 4 источника.
Объект исследования -- двоичное поточное шифрование файла с генератором на генератора со сжатием.
Цель работы -- изучение схемы шифрования и дешифрования алгоритма двоичного гаммирования, анализ требований к паролю для генератора со сжатием, а также разработка программы, которая реализует заданный алгоритм. сжатие алгоритм шифрование ключ
Метод исследования - изучение литературы, составление и отладка программы на компьютере.
ШИФРОВАНИЕ, ГАММИРОВАНИЕ, ПРИМИТИВНЫЙ ПОЛИНОМ, PIN-КОД, ЛРР.
ВВЕДЕНИЕ
Современные методы обработки, передачи и накопления информации способствовали появлению угроз, связанных с возможностью потери, искажения и раскрытия данных, адресованных или принадлежащих конечным пользователям.
Чтобы этого избежать, нужно использовать средства защиты информации, технические программные средства, применяемые для решения различных задач по защите информации, в том числе предупреждения утечки и обеспечения безопасности защищаемой информации. Именно это и гарантирует конфиденциальность информации, которая реализуется за счет шифрования.
Шифрование -- преобразование информации в целях сокрытия от неавторизованных лиц, с предоставлением, в это же время, авторизованным пользователям доступа к ней.
Важной особенностью любого алгоритма шифрования является использование ключа, который утверждает выбор конкретного преобразования из совокупности возможных для данного алгоритма.
Шифры бывают симметричные и асимметричные, в состав симметричных входят элементарные и составные, последние в свою очередь делятся на блочные и поточные. Именно к поточным относится шифр двоичного гаммирования, которое рассматривается в данной работе.
Данная работа направлена на изучение некоторых современных средств защиты информации и возможностей их реализации. В работе рассматриваются алгоритм шифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием для больших степеней полинома (от 163), а также разработка программы, которая реализует заданный алгоритм.
1.МЕТОДЫ АЛГОРИТМИЗАЦИИ НЕОБХОДИМЫЕ ДЛЯ РЕАЛИЗАЦИИ ПРОГРАММЫ
1.1 Шифрование
Одним из основных методов защиты информации является шифрование.
Шифр -- какая-либо система преобразования текста с секретом (ключом) для обеспечения секретности передаваемой информации. Шифры применяются для тайной переписки дипломатических представителей со своими правительствами, в вооруженных силах для передачи текста секретных документов по техническим средствам связи, банками для обеспечения безопасности транзакций, а также некоторыми интернет-сервисами по различным причинам.
Шифр может представлять собой совокупность условных знаков (условная азбука из цифр или букв) либо алгоритм преобразования обычных цифр и букв. Процесс засекречивания сообщения с помощью шифра называется шифрованием. Наука о создании и использовании шифров называется криптографией. Криптоанализ -- наука о методах получения исходного значения зашифрованной информации.
Важным параметром любого шифра является ключ -- параметр криптографического алгоритма, обеспечивающий выбор одного преобразования из совокупности преобразований, возможных для этого алгоритма. В современной криптографии предполагается, что вся секретность криптографического алгоритма сосредоточена в ключе, но не деталях самого.
Шифрование применяется для хранения важной информации в ненадёжных источниках и передачи её по незащищенным каналам связи. Такая передача данных представляет из себя два взаимно обратных процесса:
Перед отправлением данных по линии связи или перед помещением на хранение они подвергаются зашифрованию.
Для восстановления исходных данных из зашифрованных к ним применяется процедура расшифрования.
Шифрование изначально использовалось только для передачи конфиденциальной информации. Однако, впоследствии, шифровать информацию начали с целью ее хранения в ненадежных источниках. Шифрование информации с целью ее хранения применяется и сейчас, это позволяет избежать необходимости в физически защищенном хранилище.
Шифром называется пара алгоритмов, реализующих каждое из указанных преобразований. Эти алгоритмы применяются к данными с использованием ключа. Ключи для шифрования и для расшифрования могут различаться, а могут быть одинаковыми. Секретность второго (расшифровывающего) из них делает данные недоступными для несанкционированного ознакомления, а секретность первого (шифрующего) делает невозможным внесение ложных данных.
Как было сказано, шифрование состоит из двух взаимно обратных процессов: зашифрование и расшифрование. Оба этих процесса на абстрактном уровне представимы математическими функциями, к которым предъявляются определенные требования. Математически данные, используемые в шифровании, представимы в виде множеств, над которыми построены данные функции. Иными словами, пусть существуют два множества, представляющее данные -- M, и C; и каждая из двух функций(шифрующая и расшифровывающая) является отображением одного из этих множеств в другое.[1]
Шифрующая функция E: M>C
Расшифровывающая функция D: C>M
Элементы этих множеств -- m и являются аргументами соответствующих функций. Так же в эти функции уже включено понятие ключа. То есть тот необходимый ключ для шифрования или расшифрования является частью функции. Это позволяет рассматривать процессы шифрования абстрактно, вне зависимости от структуры используемых ключей. Хотя, в общем случае, для каждой из этих функций аргументами являются данные и вводимый ключ.
Если для шифрования и расшифрования используется один и тот же ключ , то такой алгоритм относят к симметричным. Если же из ключа шифрования алгоритмически сложно получить ключ расшифрования, то алгоритм относят к асимметричным, то есть к алгоритмам с открытым ключом.
Для применения в целях шифрования эти функции, в первую очередь, должны быть взаимно обратными.
Шифр использованный в данной работе детально рассмотрен в следующем пункте.
1.2 Гаммирование
Гаммирование - это наложение (снятие) на открытые (зашифрованные) данные криптографической гаммы, то есть последовательности элементов данных, вырабатываемых с помощью некоторого криптографического алгоритма, для получения зашифрованных (открытых) данных.
Гаммирование - это такое преобразование текста, при котором символы исходного текста, при котором символы исходного текста складываются с символами псевдослучайной последовательности (гаммы), вырабатываемой по некоторому правилу.
В качестве гаммы может быть использована любая последовательность случайных символов. Процедуру наложения гаммы на исходный текст можно осуществить двумя способами.
При первом способе символы исходного текста и гаммы заменяются цифровыми эквивалентами, которые затем складываются по модулю m, где m - число символов в алфавите. При втором методе символы исходного текста и гаммы представляются в виде двоичного кода, затем соответствующие разряды складываются по модулю 2.
Процесс наложения на исходный текст некоторой последовательности кодов, называемых гаммой осуществляется следующим образом:
Символы исходного текста и гамма представляются в двоичном коде и располагаются один под другим;
Каждая пара двоичных знаков заменяется одним двоичным знаком шифрованного текста в соответствии с принятым алгоритмом;
Полученная последовательность двоичных знаков шифрованного текста заменяется символами в соответствии с выбранным кодом;
Таким образом, букву надо представить целым числом, а целое число затем перевести в двоичную систему.
Стандартные операции над битами: 0 0 = 0, 0 1 = 1, 1 0 = 1, 1 1 = 0.
Этот алгоритм шифрования является симметричным. Поскольку двойное прибавление одной и той же величины по модулю 2 восстанавливает исходное значение, шифрование и расшифрование выполняется одной и той же программой.
Стойкость шифрования методом гаммирования определяется главным образом свойствами гаммы - длительностью периода и равномерностью статистических характеристик.
Последнее свойство обеспечивает отсутствие закономерностей в появлении различных символов в пределах периода.
Режим шифрования однократного гаммирования реализуется следующим образом:
Размещено на http://www.allbest.ru//
Размещено на http://www.allbest.ru//
Рисунок 1.1 - Схема гаммирования в случае сложения по модулю 2
Задача нахождения шифротекста при известном ключе и открытом тексте состоит в применение следующего правила к каждому символу открытого текста:
, [2]
где Ci - i-тый символ получившегося зашифрованного послания, Mi - i-тый символ открытого текста, Keyi - i-тый символ ключа, где i = 1, 2, … , m. Размерности открытого текста и ключа должны совпадать, и полученный шифртекст будет идентичной длины.
Задача нахождения ключа по известному шифротексту и открытому тексту может быть решена, исходя из предыдущего уравнения. Обе части равенства сложим по модулю 2 с Mi.
,
,
Необходимые и достаточные условия абсолютной стойкости шифра:
полная случайность ключа;
равенство длин ключа и открытого текста;
однократное использование ключа.
Сложение по модулю m. Перед шифрованием символы сообщения заменяются их номерами в алфавите. Основание модуля определяет количество символов в используемом алфавите. Шифрование выполняется по формуле
Дешифрирование выполняется по формуле
где ,- i-ый символ открытого и шифрованного сообщения; m - количество символов в алфавите; - i-ый символ гаммы (ключа). Если длина гаммы меньше, чем длина сообщения, то она используется повторно.
1.3 Требования к ключам
Алгоритмы данного типа представляют собой способ шифрования, в котором для шифрования и дешифрования применяется один и тот же криптографический ключ. Ключ алгоритма должен сохраняться в секрете обеими сторонами.
Главным принципом при применении такого рода алгоритмов является условие, что передатчик и приемник заранее знают алгоритм шифрования, а также ключ к сообщению, без которых информация представляет собой всего лишь набор символов, не имеющих смысла.
Криптографические ключи различаются по своей длине и, следовательно, по силе: ведь чем длиннее ключ, тем больше число возможных комбинаций. Также ключ зависит от символов которые в него входят т.е. наличия цифр, букв разных языков.
1.4 ЛРР и его свойства
Рассмотрим сдвиговый регистр с обратной связью (Linear Feedback Shift Register, сокращённо LFSR) - логическое устройство, схема которого изображена на рис. 1.2.
Сдвиговый регистр представляет собой последовательность битов. (Количество битов определяется длиной сдвигового регистра. Если длина равна n битам, то регистр называется n-битовым сдвиговым регистром.) Всякий раз, когда нужно извлечь бит, все биты сдвигового регистра сдвигаются вправо на 1 позицию. Новый крайний левый бит является функцией всех остальных битов регистра. На выходе сдвигового регистра оказывается один, обычно младший значащий, бит.
Рисунок 1.2 - Схема ЛРР
В качестве начального содержимого регистра битов (S m _ 1 , S m _ 2 , …, S 1 , S 0 ) 2 задается случайный (псевдослучайный) двоичный m _ разрядный вектор (запрещенной является только нулевая комбинация).
Бит обратной связи ЛРР формируется согласно следующему соотношению:
гдеSjсодержимое ячеек регистра;
ciкоэффициенты образующего полинома (причем c 0 = 1).
ЛРР состоит из n ячеек памяти, двоичные состояния которых в момент времени t = 0, 1, … характеризуются значениями S0(t), S1(t), … , Sn-1(t) A = {0, 1}. Выходы ячеек памяти связаны не только последовательно друг с другом, но и с сумматорами в соответствии с коэффициентами передачи a0, a1, … , an-1 A: если ai = 1, то значение Si(t) i-ой ячейки передается на один из входов i-го сумматора; если же ai = 0, то такая передача отсутствует. Обычно коэффициенты передачи задаются с помощью полинома:
Состояние ЛРР в текущий момент времени t задается двоичным n-вектор-столбцом S(t) = (Sn-1(t), … , S0(t))'.
Содержание ячеек ЛРР с течением времени изменяется следующим образом, определяя тем самым динамику состояний ЛРР:
Текущие значения нулевой ячейки регистра используются в качестве элементов порождаемой ЛРР двоичной псевдослучайной последовательности Sy = S0(t) (см. рис. 3).
Дополнительно кратко рассмотрим основные свойства ЛРР и ЛРПМ (на периоде).[3]
Функционирование ЛРР однозначно определяется используемым образующим полиномом f (t) :
f (t) = c m t m + c m - 1 t m _ 1 + . . . + c 2 t 2 + c 1 t 1 + 1 , f (t) Z 2 [t ] .
Здесь mстепень полинома (deg(f (t)));
ci коэффициенты ci {0, 1}, c0 = 1.
Период ЛРПМ (линейной рекуррентной последовательности максимального периода) T = 2 m - 1.
ЛРПМ может быть получена только при использовании примитивного образующего полинома f (t) . В противном случае период формируемой последовательности будет заведомо меньшим.
Расстояние единственности l 0 = 2 m .
То есть закон функционирования ЛРР (вид образующего полинома) может быть однозначно восстановлен по 2m безошибочно полученным подряд расположенным битам ЛРПМ. Это и следующее (связанное с ним) свойство являются основными недостатками ЛРР, из - за которых они не могут использоваться в изолированном виде в качестве ГКП.
Структурная скрытность Sc = l 0 / T = 2m / (2 m - 1 ) .
То есть структурная скрытность для ЛРР достаточно низкая закон функционирования ЛРР легко раскрываем.
Количество нулей (на периоде ЛРПМ) на один меньше количества единиц: N0 = 2 m - 1 - 1 и N1 = 2 m - 1 соответственно.
Длина максимальной серии из единиц m, из нулей (m _ 1).
Цикличность: циклом называют непрерывную последовательность одинаковых двоичных чисел. Появление иной двоичной цифры автоматически начинает новый цикл. Длина цикла равна количеству одинаковых цифр в нем. Необходимо, чтобы половина всех «полосок» (подряд идущих идентичных компонентов последовательности) имела длину 1, одна четвертая - длину 2, одна восьмая - длину 3 и т.д. Свойства псевдослучайности: из общего количества серий на периоде ЛРПМ
1 / 2 всех длин имеют длину 1;
1 / 4 длину 2;
. . .
1 / 2 k длину k.
На периоде ЛРПМ по одному разу встречаются все m - разрядные комбинации от 1 до 2 m - 1 (свойство “окна”).
Количество изоморфизмов ЛРПМ N И = (T ) / m (здесь (T ) значение функции Эйлера) .
То есть для данной степени m существует N И примитивных полиномов и, соответственно, N И ЛРПМ, отличающихся тонкой структурой и не являющихся циклическими сдвигами друг относительно друга.
Сумма двух ЛРПМ, отличающихся только циклическим сдвигом, также является ЛРПМ, отличающейся от двух исходных только циклическим сдвигом.
То есть комбинирование (линейное) нескольких отрезков одной и той же ЛРПМ не дает увеличения структурной скрытности.
Примитивный (базовый) многочлен степени n по модулю 2 - это неприводимый многочлен, который является делителем , но не является делителем для всех d, являющихся делителями .
Неприводимый многочлен степени n нельзя представить в виде умножения никаких других многочленов, кроме него самого и единичного.
При больших значениях степени n число примитивных полиномов весьма велико. В настоящее время имеются подробные таблицы примитивных полиномов, в том числе и больших степеней. Имеются также алгоритмы, которые позволяют проверить, является ли случайно сгенерированный полином, даже весьма высокой степени, примитивным.
Таким образом, не существует проблемы выбора примитивного полинома обратной связи h(x) для ЛРР достаточно большой длины n, т.е. такого полинома, который обеспечит достаточно большой период выходной последовательности T = 2n - 1 при любом начальном заполнении. Отметим также, что с целью сокращения числа отводов в конструкции ЛРР среди примитивных полиномов данной степени используют полиномы с наименьшим числом ненулевых коэффициентов.
Выходная последовательность линейного рекуррентного регистра сдвига, реализованного на примитивном полиноме, обладает свойствами «баланса» и «окна». Свойство «баланса» состоит в том, что число нулей на периоде T = 2n - 1 точно равно 2n - 1 - 1, а число единиц равно 2n - 1. Свойство «окна» гарантирует, что во всех 2n - 1 «окнах» из n символов, расположенных друг за другом на периоде, все возможные 2n - 1 ненулевые двоичные последовательности появятся только по одному разу.
Перечисленные свойства ЛРР, а также некоторые другие, приводят к тому, что последовательность символов на выходе ЛРР может быть принята за чисто случайную. Она практически не отличается от последовательностей, получаемых при бросании симметричной монеты. Однако в действительности выходная последовательность ЛРР является строго детерминированной. Она однозначно задана начальным заполнением aj {0,1}, j = 0, 1,..., n - 1, и полиномом обратной связи h(x), в силу чего ее называют псевдослучайной последовательностью (ПСП).
1.5 Использование пароля
Пароль -- это секретное слово или набор символов, предназначенный для
получения закрытой информации. Пароли часто используются для защиты информации от несанкционированного доступа.
Пользователь вводит некоторый пароль, на основе которого с использованием, генерируется ключ шифрования. Фактически надёжность системы в этом случае определяется только сложностью и длиной пароля. Использование надёжных паролей неудобно: запомнить бессмысленный набор из 10-15 символов и вводить его каждый для получения доступа к данным не так просто. А если таких паролей несколько (допустим, для доступа к разным приложениям), то и вовсе невозможно. Парольная защита также подвержена атакам методом прямого перебора, а установленный клавиатурный шпион легко позволит злоумышленнику получить доступ к данным.
Сложность пароля -- мера эффективности, с которой пароль способен противостоять его угадыванию или методу полного перебора.[4] В своей обычной форме сложность пароля является оценкой того, как много попыток в среднем потребуется взломщику, без прямого доступа к паролю, для его угадывания. Другое определение термина -- функция от длины пароля, а также его запутанности и непредсказуемости.
Использование сложных паролей снижает риск наличия бреши в защите, но сложные пароли не замещают собой необходимость наличия других эффективных мер безопасности. Эффективность пароля заданной силы строго зависит от проектирования и реализации программного обеспечения систем аутентификации, в частности, насколько быстро атакующий может проверить догадку пароля, и как надёжно информация о пароле пользователя хранится и передаётся. Риски также представлены некоторыми способами взлома безопасности компьютера, не относящимися к сложности пароля. Это такие методы как фишинг, кейлоггинг, телефонная прослушка, социальная инженерия, поиск полезной информации в мусоре, атака по сторонним каналам, уязвимости в программном обеспечении.
Существуют два фактора, определяющих сложность пароля: лёгкость, с которой атакующий может проверить истинность угадываемого пароля и среднее количество попыток, которые атакующий должен сделать, чтобы найти правильный пароль. Первый фактор определяется тем, как пароль хранится и тем, для чего он используется, в то время как второй фактор определяется длиной пароля, набором используемых символов и тем, как он был создан.
Рекомендации по выбору хорошего пароля составлены для того, чтобы сделать пароль более стойким к разнообразным ухищрениям взломщиков.
Минимальная длина пароля в пределах от 4 до 10 символов. Увеличение пароля всего на 2 символа дает в 500 раз больше вариантов, чем увеличение алфавита на 18 символов
Генерирование случайных паролей, если это возможно.
Избегать пароли, основанные на повторении, словарных словах, буквенных или числовых последовательностях, имени пользователя, именах родственников или домашних животных, романтических отсылках (нынешних или прошлых), биографической информации.
Включение в пароль цифр, если это разрешено системой.
1.6 Постановка задачи
Задача нашей программы выполнить моделирование функционирования ЛРР для полиномов больших размерностей, которые используются на практике в криптографических приложениях.
Для начала нам нужно реализовать упрощенную схему разворачивания поточного ключа из пароля (небольшой длины), используя его в качестве начального заполнения ЛРР.
Выполняем формирование одного бита ЛРП (один такт функционирования ЛРР) и на основе этого выполнить формирование одного байта ЛРП.
Далее мы генерируем ЛРП, то есть выполняем формирование заданного количества псевдослучайных байт, являющихся выходом ЛРР. При этом отбрасываем первые выходные биты, являющиеся повтором начального состояния ЛРР. В качестве начального заполнения используем пароль.
Рисунок 1.3 - Схема реализации программы
Совмещаем полученную схему с программой зашифрования/расшифрования двоичного поточного шифрования. Т.е. при шифровании некоторого файла, выполняем формирование ключа с использованием разработанной схемы разворачивания поточного ключа из пароля. Как результат получаем зашифрованные данные.
2.ОПИСАНИЕ ПРОГРАММЫ
2.1 Общие сведения
В данной курсовой работе реализован алгоритм двоичного поточного шифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием.
Алгоритм реализован на языке С++ и может быть откомпилирован любым современным компилятором. Программе требуется актуальная операционная система из линеек Windows, Linux, Unix или других, для которых существует компилятор С++, поддерживающий стандарт.
2.2 Функциональное назначение
Данная программная реализация предназначается для шифрования и расшифрования данных методом гаммирования.
2.3 Описание логической структуры
2.3.1 Алгоритм программы
Выполняется инициализация генератора случайных чисел.
Вводится PIN-код.
Вводится имя файла, который нужно зашифровать и если файл не найден, пишется “Не могу открыть файл”.
Вводится имя файла для записи результатов и если файл не найден, пишется “Не могу открыть файл”.
Генерируется состояние на основе PIN-кода.
Выполняется цикл чтения, шифрования и записи данных.
2.3.2 Используемые методы
Программа состоит из основной функции (main) и шести вспомогательных: функции генерации одного бита ЛРП (OneTakt), функции генерации одного байта ЛРП (genByte), функции генерации состояния ЛРП (genState), функции гаммирования (gamm), функции формирования ключа из PIN-кода (GenKey_G2), функции выполняющую проверку заданного ключа (BitTestKey_G2).
1. Функция OneTakt. Входные параметры: unsigned __int32* State - текущее состояние ЛРР (ссылка), int LenS - длина текущего состояния ЛРР, unsigned int*K - массив коэффициентов образующего полинома. Как результат получим один сгенерированный бит.
2. Функция genByte. Входные параметры: unsigned int *State - текущее состояние ЛРР (ссылка), int LenS - длина текущего состояния ЛРР, unsigned int*K - массив коэффициентов образующего полинома.
3. Функция genState. Входные параметры: int len - длина (байт) формируемой ЛРП, int *coeffs - степень параметра при которых стоят единичные коэффициенты. Генерирует состояние ЛРР.
4. Функция gamm. Входные параметры: unsigned char*M - адрес массива сообщения, bool Incr - направление шифрования, unsigned char*K - адрес массива ключа, int LenM - длина сообщения, int LenK - длина ключа, unsigned char*C - адрес массива, где хранится зашифрованый текст. Как результат получаем шифрование файла.
5. Функция GenKey_G2. Входные параметры: unsigned char *K - адрес массива для сохранения ключа(который необходимо сгенерировать), int LenK - заданная длина ключевых данных K, int pin - заданный PIN-код.
6. Функция BitTestKey_G2. Входные параметры: unsigned char *K - адрес массива с заданным ключом(который необходимо проверить), int LenK - заданная длина ключевых данных K.
2.4 Используемые технические средства
Программа не требует особых технических средств или устройств и работает на любых х86 совместимых системах с ОС Windows.
2.5 Вызов и загрузка
Программа «1(2013).exe» размером 77 кб запускается из командной строки.
При запуске программы пользователю предлагается ввести пароль состоящий из цифр и букв. Далее пользователь вводит имя файла, который нужно зашифровать(в имени файла, который мы будем шифровать и пути к нему не должно быть пробелов), после чего нужно ввести имя файла, в который записывается результат. Как результат файл зашифрован. Дешифрование выполняется аналогично.
2.6 Входные и выходные данные
Входными данными являются файл с данными, которые нужно шифровать и пароль, необходимый для шифрования/расшифрования. На выходе мы получаем зашифрованный/расшифрованный файл.
ВЫВОДЫ
В курсовой работе было рассмотрено зашифрование/расшифрование данных, их особенности. Также было проанализировано схему работы линейно рекуррентного регистра, были изучены его свойства. Исследовали требования к паролям и на их основе осуществили проверку. На практике был реализован данный алгоритм. Результатом работы является программа, осуществляющая зашифрование/расшифрование любого документа.
ПЕРЕЧЕНЬ ССЫЛОК
1. Шнайер Б. Прикладная криптография: Протоколы, алгоритмы, исходные тексты на языке Си. [Текст] / Б. Шнайер - М., 2006 р. - 613 с.
2. Захист інформації в інформаційно-телекомунікаційних системах: Навч. посібник. Ч. 1. Криптографічний захист інформації. [Текст] / І.Д. Горбенко --Харків: ХНУРЕ, 2004 р. -- 368 c.
3. Электронный конспект лекций к лабораторной №3. Упрощенные программные модели ЛРР и основанных на нем комбинированных генераторов. - 2009 г. - 14 с.
4. Сложность пароля [Электронный ресурс]/Википедия - Режим доступа: http://uk.wikipedia.org/wiki/Сложность_пароля.
ПРИЛОЖЕНИЕ А
Код программы
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <time.h>
using namespace std;
unsigned __int8 OneTakt(unsigned __int32* State, int*K, int LenS) //генерирует один бит лрп
{
int a = State[0] & 0x1; //результирующий бит
int Sj = a; //сумма битов
Sj = Sj ^ (State[(K[0] - K[1]) / 32] >> ((K[0] - K[1]) % 32) & 1); //прибавляем
if (K[2] && K[3])
{
Sj = Sj ^ (State[(K[0] - K[2]) / 32] >> ((K[0] - K[2]) % 32) & 1);
Sj = Sj ^ (State[(K[0] - K[3]) / 32] >> ((K[0] - K[3]) % 32) & 1);
}
State[0] = State[0] >> 1; //сдвиг состояния
for (int i = 1; i<LenS; i++)
{
unsigned char bit = State[i] & 1; //бит, который переносится из одного куска в другой
State[i] = State[i] >> 1; //сдвиг
State[i - 1] = State[i - 1] | (bit << 31); //записываем бит в следующий кусок
}
State[K[0] / 32] = State[K[0] / 32] | (Sj << (K[0] % 32 - 1)); //записываем сумму в самый левый бит
return a;
}
unsigned char genByte(unsigned __int32* State, int*K, int LenS) //генерирует один байт лрп
{
unsigned char res = 0;
for (int i = 0; i<8; i++) //цикл по битам
res |= OneTakt(State, K, LenS) << i; //устанавливаем каждый бит по отдельности
return res;
}
int BitTestKey_G2(unsigned int*K, int LenK)
{
int N1 = 0;
for (int i = 0; i<LenK; ++i)
{
for (unsigned char mask = 1; mask != 0; mask <<= 1)
if (K[i] & mask)N1++;
}
return N1;
}
void GenKey_G2(unsigned int*K, int LenK, int pin)
{
double left = LenK*9725.0 / 20000,
right = LenK*10275.0 / 20000;
int n = 0;
srand(pin);
do {
for (int i = 0; i < LenK; i++)
{
K[i] = rand();
}
n = BitTestKey_G2(K, LenK);
} while (left >= n || n <= right);
}
void genState(unsigned __int32 **state_ptr, int &len, int *coeffs, int pin) //генерирует состояние лрр
{
len = coeffs[0] % 32 == 0 ? coeffs[0] / 32 : coeffs[0] / 32 + 1; //длинна состояния
unsigned __int32 *state = new unsigned __int32[len];
GenKey_G2(state, len, pin);//генерация ключа из PIN-кода
*state_ptr = state;
}
void gamm(unsigned char *data, int datalen, unsigned __int32 *state, int len, int *coeffs) //двоиное гаммрование
{
for (int i = 0; i<datalen; i++)
{
data[i] ^= genByte(state, coeffs, len); //двоичное гаммирование с байтом лрп
}
}
int main()
{
srand(time(NULL));
setlocale(0, "");
int coeffs[] = { 10, 7, 6, 2 }; //полином
FILE *infile, *outfile;
int pin;
cout << "Введите пинкод: ";
cin >> pin;
char filename[20];
do
{
cout << "Введите имя файла, который нужно зашифровать: ";
cin >> filename;
if ((infile = fopen(filename, "rb")) == NULL)
cout << "Не могу открыть файл. ";
else
break;
} while (true);
do
{
cout << "Введите имя файла для записи результатa: ";
cin >> filename;
if ((outfile = fopen(filename, "wb")) == NULL)
cout << "Не могу открыть файл. ";
else
break;
} while (true);
unsigned char data[1024 * 8];
unsigned __int32 *state;
int len;
genState(&state, len, coeffs, pin); //генерирцуем состояние на основе пинкода
while (!feof(infile)) //цикл чтения-шифрования-записи
{
int n = fread(data, 1, sizeof(data), infile); //чтение
gamm(data, n, state, len, coeffs); //шифрование
fwrite(data, 1, n, outfile); //запись
}
delete[] state;
fcloseall();
system("pause");
return 0;
}
ПРИЛОЖЕНИЕ Б
Скриншоты работы программы
Размещено на Allbest.ru
...Подобные документы
Реализация алгоритма DES и режимов шифрования для любой длины сообщения и любой длины ключа. Шифрование сообщений различной длины и ключа с замериванием времени и скорости шифрования. Реализация алгоритма RSA. Сохранение зашифрованного файла на диск.
курсовая работа [398,4 K], добавлен 26.01.2010Разработка криптографического алгоритма программы ручного шифра по таблице Виженера. Разработка программы, выполняющей шифрование и расшифрование. Особенности использования в качестве ключа самого открытого текста. Алгоритмы решения "обратных" задач.
курсовая работа [45,0 K], добавлен 13.11.2009Спецификация требований к разрабатываемому приложению. Разработка структурной схемы интерфейса. Описание алгоритма шифрования DES. Разработка программного кода приложения "DES". Проведение исследования основных шагов для генерации ключей и шифрования.
курсовая работа [398,4 K], добавлен 13.12.2022Разработка метода создания защищенных программ. Необходимость запуска процедуры дешифрации данных после загрузки исполняемого файла в оперативную память и проверки пароля. Составление алгоритма и программы расшифровки образа защищенного приложения.
курсовая работа [1,7 M], добавлен 15.01.2013Симметричные криптосистемы; алгоритмы шифрования и дешифрования данных, их применение в компьютерной технике в системах защиты конфиденциальной и коммерческой информации. Основные режимы работы алгоритма DES, разработка программной реализации ключа.
курсовая работа [129,6 K], добавлен 17.02.2011Шифрование - широко используемый криптографический метод сохранения конфиденциальности информации. Описание схемы шифрования и расшифрования. Структура алгоритмов на основе сети Фейстеля. Скриншоты работающей программы. Скорость работы алгоритмов.
курсовая работа [545,2 K], добавлен 29.11.2010Определение понятия "алгоритм". Изображение схемы алгоритма. Разработка схемы действий и этапы решения задач. Рассмотрение функции разрабатываемого приложения. Распределение исходного кода по файлам проекта. Контрольный пример и описание результатов.
реферат [695,9 K], добавлен 28.09.2014Создание программного обеспечения с использованием принципа посредника. Разработка интерфейса и исходного кода главного окна. Обработчики событий нажатия на кнопки формы. Принципы решения задач по проверке валидности XML-файла с помощью DTD-файла.
лабораторная работа [139,2 K], добавлен 04.12.2013Разработка программы, представляющей собой простой текстовый редактор, использующий структуру данных для промежуточного хранения редактируемого файла. Функциональное описание разработки. Внутренняя структура двоичного файла нового класса "bin_file".
курсовая работа [254,6 K], добавлен 26.01.2013Количественная оценка стойкости пароля. Создание программы на базе разработанного алгоритма. Экспериментальная проверка количественных оценок стойкости пароля. Понятие и назначение интерфейса. Методы защиты от несанкционированного доступа к информации.
курсовая работа [22,8 K], добавлен 13.11.2009Реализация программы-конвертера для создания на основе передаваемых dbf файлов файла формата XML (по заданному пользователем шаблону). Создание шаблонов при помощи кода и при помощи конструктора. Проектирование архитектуры программного продукта.
дипломная работа [1,6 M], добавлен 27.06.2013Разработка программного кода и алгоритма действий приложения "калькулятор". Использование функций в программе Matlab. Разработка кнопок, опций, интерфейса, оформление. Части кода Matlab и тестовый набор. Инструкция пользователя по работе программы.
курсовая работа [527,1 K], добавлен 27.09.2014Алгоритм и код программы для создания исходного двоичного файла чисел с произвольным количеством элементов, чтения из файла действительных восьмибайтных элементов и подсчёта общего количества элементов файла. Вывод результата работы программы на экран.
контрольная работа [1,0 M], добавлен 23.11.2014Назначение алгоритма "Blowfish", особенности длины ключа и степени криптостойкости. Обоснование программной реализации расширения ключа и сцепления блоков шифра "Blowfish". Проверка использования инициализирующего вектора и распространения ошибок шифра.
курсовая работа [1,3 M], добавлен 30.01.2014Реализация схемы минимума матрицы в среде САПР- Active HDL (Aldec) и разработка VERILOG-кода схемы. Описание модуля и числовые примеры работы схемы. Разработка и описание фрагментов кода. Разработка временных диаграмм и рассмотрение их примеров.
курсовая работа [291,4 K], добавлен 11.11.2021Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.
курсовая работа [101,1 K], добавлен 09.03.2009Процесс создания программы, разработка проекта программы и программирование. Лексическая обработка, синтаксический анализ, поэтапная генерация кода, использование библиотечного файла и кода. Стандартные функции библиотечного кода, математические ошибки.
курсовая работа [26,4 K], добавлен 01.12.2009Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.
курсовая работа [812,6 K], добавлен 27.03.2012Симметрическое шифрование как способ шифрования, в котором применяется один и тот же криптографический ключ. Функции стандартного диалогового окна открытия и сохранения файла. Характерная схема действий при генерации подписи. Цифровая подпись файла.
курсовая работа [641,5 K], добавлен 14.06.2011Реализация работы автомата подачи звонков в учебном заведении с использованием персонального компьютера. Создание файла прошивки для устройства. Сборка собственной схемы. Симулирование полученного устройства. Алгоритмы работы программы, ее листинг.
курсовая работа [1,2 M], добавлен 28.04.2014