Программная реализация алгоритма шифрования Рюкзак
Характеристика особенностей ассиметричных криптографических систем. Рассмотрение системы распределения ключей Диффи-Хеллмана. Ознакомление с примером шифрования. Исследование алгоритма Диффи-Хеллмана. Анализ программной реализации изучаемого алгоритма.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.01.2019 |
Размер файла | 433,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
БАРНАУЛ 2019
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Алтайский государственный технический университет им. И.И. Ползунова»
Факультет Информационных технологий
Кафедра Информатики, вычислительной техники и информационной безопасности
Курсовой проект по дисциплине: «Криптографические методы защиты информации»
Тема: «Программная реализация алгоритма шифрования Рюкзак»
КР 10.03.01.19.000 ПЗ
Студент группы ИБ-51И.А. Толстопятова
Преподаватель доцент А.В. Санников
Министерство науки и высшего образования Российской Федерации
Федеральное государственное образовательное учреждение высшего образования
«Алтайский государственный технический университет им. И. И. Ползунова»
Факультет информационных технологий
Кафедра ИВТ и ИБ
Задание на курсовую работу по направлению 10.03.01 Информационная безопасность
направленность (профиль) Организация и технология защиты информации
студенту группыИБ-51 Толстопятовой И.А.
фамилия имя отчество
На тему: Программная реализация алгоритма шифрования Рюкзак
По дисциплине: «Криптографические методы защиты информации»
Календарный план выполнения задания
Наименование задач, составляющих задание |
Дата выполнения задачи |
|
Описание предметной области |
1-2 недели семестра |
|
Ассиметричные криптографические системы |
3-8 недели семестра |
|
Идея криптосистемы с открытым ключом |
9-10 недели семестра |
|
Виды ассиметричных шифров |
11-12 недели семестра |
|
Алгоритм шифрования Рюкзак |
13-14 недели семестра |
|
Защита курсовой работы |
15-17 недели семестра |
Дата выдачи задания: 10.09.2018
Оглавление
Введение
1. Ассиметричные криптографические системы
2. Идея криптосистемы с открытым ключом
3. Виды ассиметричных шифров
3.1 Система распределения ключей Диффи-Хеллмана
3.2 Алгоритм RSA
4. Алгоритм шифрования Рюкзак
Заключение
Список использованных источников
Приложение
Введение
Основной целью построения криптографических систем всегда была защита информации при ее передаче и хранении. Эта проблема остается актуальной и до сегодняшнего дня. Сетевые компьютерные системы могут включать в себя сотни и даже тысячи пользователей; в такой ситуации классическая симметричная схема оказывается неэффективной. Новым требованием к криптосистемам также является обеспечение аутентификации сообщения - доказательство того, что пользователь1 получил именно то сообщение, которое ему отправил пользователь2, и что оно не было подделано или изменено злоумышленником в процессе передачи. Кроме того, приходится мириться с тем, что к зашифрованной информации потенциально может иметь доступ довольно большое количество людей - например, маршрут любого сообщения, проходящего через Internet, в принципе невозможно предсказать, оно может пройти через несколько десятков узлов прежде чем попадет к своему адресату. Так что, если прежде наиболее надежным подходом к защите информации был все-таки амбарный замок, то теперь задача все более усложняется противоречивыми требованиями одновременно надежности и секретности передачи и легкости доступа к информации.
Традиционная криптографическая схема выглядит следующим образом. Александр и Борис оба знают некий ключ, с помощью которого они могут обмениваться зашифрованными сообщениями так, что любое третье лицо, даже если ему удастся перехватить шифровку, не сможет ничего в ней понять. Такая схема называется симметричной, так как и адресат, и отправитель используют один и тот же ключ для шифрования и дешифрования.
Теперь давайте представим себе сеть из, например, ста пользователей и сервера баз данных. Между пользователями и сервером происходит некий обмен информацией, причем всем пользователям совершенно необязательно и, более того, нежелательно знать информацию, хранимую и запрашиваемую на сервере другими пользователями. Разумеется, необходимо защитить сам сервер - так, чтобы каждый пользователь имел доступ только к своей информации. Но ведь все это происходит в одной сети, и все данные передаются по одним и тем же проводам, а если это, скажем, что-нибудь типа Token Ring, то информация от сервера до владельца последовательно проходит через все станции, находящиеся между ними в кольце. Следовательно, ее необходимо шифровать. Можно ввести для каждого пользователя свой пароль, которым и шифровать весь информационный обмен с сервером. Но как отличить одного пользователя от другого? Один вариант - перед началом работы спрашивать у пользователя этот самый пароль и сверять с хранящимся на сервере. Но тогда он с легкостью может быть перехвачен в том же самом канале связи. Другой вариант - пароль не спрашивать, а верить тому, что пользователь говорит о себе. Так как пароль секретный, то даже, сказав серверу, “Я - Александр!”, злоумышленник не сможет расшифровать получаемые данные. Но зато он сможет получить столько материала для взлома шифра, сколько ему захочется - при этом часто можно предсказать ответ сервера на какой-то специфический вопрос и получить сразу шифр и соответствующий оригинальный текст. Согласитесь, это очень продвигает нас в взломе сервера.
Данная проблема носит название проблемы распределения ключей. Ее наличие делает симметричную схему неприспособленной для задач обмена данными с большим количеством пользователей, так как в ней для шифрования и дешифрования используется один и тот же ключ.
1. Ассиметричные криптографические системы
Криптографическая система с открытым ключом (разновидность асимметричного шифрования, асимметричного шифра) -- система шифрования и/или электронной подписи (ЭП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу и используется для проверки ЭП и для шифрования сообщения. Для генерации ЭП и для расшифровки сообщения используется закрытый ключ. Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности, в протоколах TLS и его предшественнике SSL (лежащих в основе HTTPS), в SSH. Также используется в PGP, S/MIME[1].
Концепция криптосистем с открытым ключом была предложена в 1976 году Уайтфилдом Диффи и Мартином Хеллманом в качестве решения проблемы распределения ключей. В соответствии с ней, каждая сторона получает пару ключей - открытый и закрытый. Открытый ключ распространяется свободно, в то время как закрытый держится в тайне. Исходный текст шифруется открытым ключом адресата и передается ему. Обратный процесс в принципе не может быть выполнен с помощью открытого ключа, для расшифровки получатель использует закрытый ключ, который известен только ему. Таким образом, кто угодно может посылать шифрованные сообщения, для этого ему не надо знать ничего тайного, но при этом только владелец закрытого ключа сможет их прочитать.
Алгоритмы криптосистемы с открытым ключом можно использовать:
- как самостоятельное средство для защиты передаваемой и хранимой информации;
- как средство распределения ключей (обычно с помощью алгоритмов криптосистем с открытым ключом распределяют ключи, малые по объёму, а саму передачу больших информационных потоков осуществляют с помощью других алгоритмов;
- как средство аутентификации пользователей.
Преимущества асимметричных шифров перед симметричными:
- не нужно предварительно передавать секретный ключ по надёжному каналу;
- только одной стороне известен ключ дешифрования, который нужно держать в секрете (в симметричной криптографии такой ключ известен обеим сторонам и должен держаться в секрете обеими);
- в больших сетях число ключей в асимметричной криптосистеме значительно меньше, чем в симметричной.
Недостатки алгоритма несимметричного шифрования в сравнении с симметричным:
- в алгоритм сложнее внести изменения;
- более длинные ключи;
- шифрование-расшифровывание с использованием пары ключей проходит на два-три порядка медленнее, чем шифрование-расшифрование того же текста симметричным алгоритмом;
- требуются существенно большие вычислительные ресурсы, поэтому на практике асимметричные криптосистемы используются в сочетании с другими алгоритмами:
1. для ЭЦП сообщение предварительно подвергается хешированию, а с помощью асимметричного ключа подписывается лишь относительно небольшой результат хеш-функции;
2. для шифрования они используются в форме гибридных криптосистем, где большие объёмы данных шифруются симметричным шифром на сеансовом ключе, а с помощью асимметричного шифра передаётся только сам сеансовый ключ.
2. Идея криптосистемы с открытым ключом
Идея криптографии с открытым ключом очень тесно связана с идеей односторонних функций, то есть таких функций f(x), что по известному x довольно просто найти значение f(x), тогда как определение x из f(x), невозможно за разумный срок.
Но сама односторонняя функция бесполезна в применении: ею можно зашифровать сообщение, но расшифровать нельзя. Поэтому криптография с открытым ключом использует односторонние функции с лазейкой. Лазейка -- это некий секрет, который помогает расшифровать. То есть существует такой y, что зная f(x), и y, можно вычислить x. Например, если разобрать часы на множество составных частей, то очень сложно собрать вновь работающие часы. Но если есть инструкция по сборке (лазейка), то можно легко решить эту проблему.
Получатель информации формирует открытый ключ и «лазейку» (другими словами, открытую и закрытую часть ключа), затем передает открытый ключ отправителю, а «лазейку» оставляет у себя. Отправитель шифрует информацию на основе открытого ключа: такую зашифрованную информацию просто расшифровать, лишь имея одновременно и открытый ключ, и «лазейку». В терминах функции, получатель формирует f(), с лазейкой y, затем передает информацию о параметрах функции f(), отправителю (при этом, даже зная параметры функции f(), невозможно обнаружить «лазейку» за разумный срок). После этого отправитель формирует шифрованное сообщение f(x), а получатель извлекает x из f(x), зная y.
Понять идеи и методы криптографии с открытым ключом помогает следующий пример -- хранение паролей в удалённом компьютере, к которому должны подключаться пользователи. Каждый пользователь в сети имеет свой пароль. При входе он указывает имя и вводит секретный пароль. Но если хранить пароль на диске удалённого компьютера, то кто-нибудь его может считать (особенно легко это сделать администратору этого компьютера) и получить доступ к секретной информации. Для решения задачи используется односторонняя функция. При создании секретного пароля в компьютере сохраняется не сам пароль, а результат вычисления функции от этого пароля и имени пользователя. Например, пользователь Алиса придумала пароль «Гладиолус». При сохранении этих данных вычисляется результат функции f(АЛИСА_ГЛАДИОЛУС), пусть результатом будет строка РОМАШКА, которая и будет сохранена в системе.
Когда Алиса вводит «секретный» пароль, компьютер проверяет, даёт или нет функция, применяемая к АЛИСА_ГЛАДИОЛУС, правильный результат РОМАШКА, хранящийся на диске компьютера. Стоит изменить хотя бы одну букву в имени или в пароле, и результат функции будет совершенно другим. «Секретный» пароль не хранится в компьютере ни в каком виде. Файл паролей может быть теперь просмотрен другими пользователями без потери секретности, так как функция практически необратимая.
В предыдущем примере используется односторонняя функция без лазейки, поскольку не требуется по зашифрованному сообщению получить исходное. В следующем примере рассматривается схема с возможностью восстановить исходное сообщение с помощью «лазейки», то есть труднодоступной информации. Для шифрования текста можно взять большой абонентский справочник, состоящий из нескольких толстых томов (по нему очень легко найти номер любого жителя города, но почти невозможно по известному номеру найти абонента). Для каждой буквы из шифруемого сообщения выбирается имя, начинающееся на ту же букву. Таким образом букве ставится в соответствие номер телефона абонента. Отправляемое сообщение, например «КОРОБКА», будет зашифровано следующим образом:
Рисунок 1 - Пример шифрования
Криптотекстом будет являться цепочка номеров, записанных в порядке их выбора в справочнике. Чтобы затруднить расшифровку, следует выбирать случайные имена, начинающиеся на нужную букву. Таким образом исходное сообщение может быть зашифровано множеством различных списков номеров (криптотекстов).
Примеры таких криптотекстов:
Рисунок 2 - Возможные криптотексты
Чтобы расшифровать текст, надо иметь справочник, составленный согласно возрастанию номеров. Этот справочник является лазейкой (секрет, который помогает получить начальный текст), известной только получателю. Без данных из обоих справочников расшифровать текст в общем случае невозможно, однако для шифровки достаточно лишь первого справочника. При этом получатель может заранее легко сформировать оба справочника, передав лишь первый из них отправителю для шифровки.
3. Виды ассиметричных шифров
Ниже представлены основные ассиметричные шифры, рассмотрим подробно некоторые из них.
- RSA (Rivest-Shamir-Adleman)
- DSA (Digital Signature Algorithm)
- Elgamal (Шифросистема Эль-Гамаля)
- Diffie-Hellman (Обмен ключами Диффи -- Хеллмана)
- ECDSA (Elliptic Curve Digital Signature Algorithm) -- алгоритм с открытым ключом для создания цифровой подписи.
- ГОСТ Р 34.10-2012
- Rabin
- Luc
- McEliece
- Криптосистема Уильямса
3.1 Система распределения ключей Диффи-Хеллмана
Алгоритм Диффи-Хеллмана позволяет двум или более пользователям обменяться без посредников (то есть не нужны доверенные посредники - можно использовать ненадёжный канал) ключом, который может быть использован затем для симметричного шифрования.
На рисунке 3 показана схема алгоритма на примере общения Алисы и Боба [2].
Рисунок 3 - Алгоритм Диффи-Хеллмана
1. Существуют два числа g и p - (p должно быть достаточно большим) - эти два числа можно пересылать в открытом виде (для конкретности - пусть g и p сформирует Алиса - и вышлет их Бобу).
2. Далее Алиса формирует свое секретное число а - это число тоже должно быть большим. Затем Алиса вычисляет значение А таким образом высылаем полученное А Бобу.
3. Боб же получает от Алисы g и p и формирует своё секретное число b, и на основе b малого (как ранее Алиса на основе "а" малого) вычисляет после чего данное число B отправляется Алисе.
4. Итак, после проведения вышеописанных операций у Алисы есть число Боба B, а у Боба есть число Алисы А. После этого обмена и Боб и Алиса уже готовы вычислить значение общего секретного ключа.
5. Чтобы вычислить значение общего секретного ключа Алиса вычисляет (на основе данных присланных Бобом - B и с использованием своего секретного числа a) , а Боб вычисляет значение ,которое окажется точно таким же, но на основе данных ,которые прислала Алиса + используя своё секретное число .
6. Теперь оба - и Алиса и Боб получили общий секретный ключ К , при этом противник не сможет за разумное время вычислить его на основе перехваченных А и B (которые ранее передавались по недоверенному каналу, а потому могли быть считаны).
3.2 Алгоритм RSA
Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других[3].
На рисунке 4 показана процедура создания ключей.
Рисунок 4 - Процедура создания ключей в алгоритме RSA
На рисунке 5 приведен пример работы данного алгоритма.
Рисунок 5 - Пример создания ключей
На рисунке 6 показаны способы расчета функции Эйлера.
Рисунок 6 - Расчет функции Эйлера
Примечания:
1. Простое число -- натуральное число, большее единицы и не имеющее других натуральных делителей, кроме самого себя и единицы.
2. Результат расчета функции Эйлера ц(n) равен количеству положительных чисел, не превосходящих n и взаимно простым с n.
3. Взаимно простые числа - числа, не имеющие общих делителей, кроме 1, т.е. наибольший общий делитель которых равен 1.
4. Обратными числами по модулю m называются такие числа n и n-1, для которых справедливо выражение (n * n-1) mod m = 1. Для вычисления обратных чисел по модулю обычно используется расширенный алгоритм Евклида. В безмодульной математике обратное число n-1 (обратное значение, обратная величина) - число, на которое надо умножить данное число n, чтобы получить единицу (n * n-1 = 1). Пара чисел, произведение которых равно единице, называются взаимно обратными. Например: 5 и 1/5, -6/7 и -7/6.
Процедуры шифрования и дешифрования выполняются по следующим формулам:
,
,
где Т, C - числовые эквиваленты символов открытого и шифрованного сообщения.
Следует отметить, что p и q выбираются таким образом, чтобы n было больше кода любого символа открытого сообщения. В автоматизированных системах исходное сообщение переводиться в двоичное представление, после чего шифрование выполняется над блоками бит равной длины. При этом длина блока должна быть меньше, чем длина двоичного представления n.
Алгоритм RSA требует много машинного времени и очень мощных процессоров. До 1980-х гг. только правительства, армия и крупные предприятия имели достаточно мощные компьютеры для работы с RSA. В результате у них была фактически монополия на эффективное шифрование. Летом 1991 г. Филипп Циммерман, американский физик и борец за сохранение конфиденциальности, предложил бесплатную систему шифрования PGP (англ. Pretty Good Privacy -- «достаточно хорошая степень конфиденциальности»), алгоритм которой мог работать на домашних компьютерах. PGP использует классическое симметричное шифрование, что и обеспечивает ей большую скорость на домашних компьютерах, но она шифрует ключи по асимметричному алгоритму RSA.
4. Алгоритм шифрования Рюкзак
В 1978 г. Меркл и Хеллман предложили использовать задачу об укладке ранца (рюкзака) для асимметричного шифрования [3]. Она относится к классу NP-полных задач и формулируется следующим образом. Дано множество предметов различного веса. Спрашивается, можно ли положить некоторые из этих предметов в ранец так, чтобы его вес стал равен определенному значению? Более формально задача формулируется так: дан набор значений M1, M2, ..., Мn и суммарное значение S; требуется вычислить значения bi такие что
,
где n - количество предметов; bi - бинарный множитель. Значение bi = 1 означает, что предмет i кладут в рюкзак, bi = 0 - не кладут.
Например, веса предметов имеют значения 1, 5, 6, 11, 14, 20, 32 и 43. При этом можно упаковать рюкзак так, чтобы его вес стал равен 22, использовав предметы весом 5, 6 и 11. Невозможно упаковать рюкзак так, чтобы его вес стал равен 24.
В основе алгоритма, предложенного Мерклом и Хеллманом, лежит идея шифрования сообщения на основе решения серии задач укладки ранца. Предметы из кучи выбираются с помощью блока открытого текста, длина которого (в битах) равна количеству предметов в куче. При этом биты открытого текста соответствуют значениям b, a текст является полученным суммарным весом. Пример шифрограммы, полученной с помощью задачи об укладке ранца, показан на рисунке 7.
Рисунок 7 - Пример шифрования на основе задачи об укладке ранца
Суть использования данного подхода для шифрования состоит в том, что на самом деле существуют две различные задачи укладки ранца - одна из них решается легко и характеризуется линейным ростом трудоемкости, а другая, как принято считать, нет. Легкий для укладки ранец можно превратить в трудный. Раз так, то можно применить в качестве открытого ключа трудный для укладки ранец, который легко использовать для шифрования, но невозможно - для дешифрования. А в качестве закрытого ключа применить легкий для укладки ранец, который предоставляет простой способ дешифрования сообщения.
В качестве закрытого ключа (легкого для укладки ранца) используется сверхвозрастающая последовательность. Сверхвозрастающей называется последовательность, в которой каждый последующий член больше суммы всех предыдущих. Например, последовательность {2, 3, 6, 13, 27, 52, 105, 210} является сверхвозрастающей, а {1, 3, 4, 9, 15, 25, 48, 76} - нет.
Решение для сверхвозрастающего ранца найти легко. В качестве текущего выбирается полный вес, который надо получить, и сравнивается с весом самого тяжелого предмета в ранце. Если текущий вес меньше веса данного предмета, то его в рюкзак не кладут, в противном случае его укладывают в рюкзак. Уменьшают текущий вес на вес положенного предмета и переходят к следующему по весу предмету в последовательности. Шаги повторяются до тех пор, пока процесс не закончится. Если текущий вес уменьшится до нуля, то решение найдено. В противном случае, нет.
Например, пусть полный вес рюкзака равен 270, а последовательность весов предметов равна {2, 3, 6, 13, 27, 52, 105, 210}. Самый большой вес - 210. Он меньше 270, поэтому предмет весом 210 кладут в рюкзак. Вычитают 210 из 270 и получают 60. Следующий наибольший вес последовательности равен 105. Он больше 60, поэтому предмет весом 105 в рюкзак не кладут. Следующий самый тяжелый предмет имеет вес 52. Он меньше 60, поэтому предмет весом 52 также кладут в рюкзак. Аналогично проходят процедуру укладки в рюкзак предметы весом 6 и 2. В результате полный вес уменьшится до 0. Если бы этот рюкзак был бы использован для дешифрования, то открытый текст, полученный из значения шифртекста 270, был бы равен 10100101.
Открытый ключ представляет собой не сверхвозрастающую (нормальную) последовательность. Он формируется на основе закрытого ключа и, как принято считать, не позволяет легко решить задачу об укладке ранца. Для его получения все значения закрытого ключа умножаются на число n по модулю m. Значение модуля m должно быть больше суммы всех чисел последовательности, например, 420 (2+3+6+13+27+52+105+210=418). Множитель n должен быть взаимно простым числом с модулем m, например, 31. Результат построения нормальной последовательности (открытого ключа) представлен на рисунке 8.
Рисунок 8 - Пример получения открытого ключа
Для шифрования сообщение сначала разбивается на блоки, по размерам равные числу элементов последовательности в рюкзаке. Затем, считая, что единица указывает на присутствие элемента последовательности в рюкзаке, а ноль -- на его отсутствие, вычисляются полные веса рюкзаков - по одному рюкзаку для каждого блока сообщения.
В качестве примера возьмем открытое сообщение «АБРАМОВ», символы которого представим в бинарном виде в соответствии с таблицей кодов символов Windows 1251. Результат шифрования с помощью открытого ключа {62, 93, 186, 403, 417, 352, 315, 210} представлен на рисунке 9.
Рисунок 9 - Пример шифрования
Для расшифрования сообщения получатель должен сначала определить обратное число n-1, такое что (n * n-1) mod m = 1. После определения обратного числа каждое значение шифрограммы умножается на n-1 по модулю m и с помощью закрытого ключа определяются биты открытого текста.
В нашем примере сверхвозрастающая последовательность равна {2, 3, 6, 13, 27, 52, 105, 210}, m = 420, n = 31. Значение n-1 равно 271 (31*271 mod 420 = 1). На рисунке 10 показан пример расшифрования.
Рисунок 10 - Пример расшифрования
В своей работе авторы рекомендовали брать длину ключа, равную 100 (количество элементов последовательности). Следует отметить, что задача вскрытия данного способа шифрования успешно решена Шамиром и Циппелом в 1982 г.
Далее реализуем данный алгоритм шифрования. Для реализации выбран язык программирования C# и программная среда Microsoft Visual C# 2010. На рисунке 11 представлено окно программы.
Рисунок 11 - Окно программы
Рисунок 12 - Пример работы программы
Заключение
Асимметричные алгоритмы используют сложный математический аппарат, вследствие чего являются более ресурсоемкими и медленными по сравнению с симметричными алгоритмами, однако они позволяют преодолеть недостаток, присущий симметричным алгоритмам, за счет использования двух ключей - открытого ключа и секретного ключа. Открытый ключ предназначен для шифрования информации. Любой желающий может получить доступ к открытому ключу и зашифровать при помощи этого ключа информацию. Расшифровать эту информацию можно только при помощи секретного ключа, доступ к которому должен иметь только владелец. Очевидно, что сохранить в секрете единственный ключ, без необходимости его передачи кому-либо, намного проще, чем организовать безопасную систему распределения секретных ключей, как в симметричных алгоритмах. Существует угроза подмены открытого ключа, и это приводит к тому, что вся корреспонденция, направленная владельцу ключа, будет проходить через руки злоумышленника со всеми вытекающими отсюда последствиями. Для борьбы с подменой открытых ключей создаются центры сертификации. программный криптографический шифрование
Ранцевая криптосистема Меркла-Хеллмана, была одна из первых криптосистем с открытым ключом, но она оказалась криптографически нестойкой и, как следствие, не приобрела популярности.
Список использованных источников
1. Википедиа [Электронный ресурс]. - Режим доступа: https://ru.wikipedia.org/wiki
2. Студентам&программистам [Электронный ресурс]. - Режим доступа: http://fkn.ktu10.com/?q=node/4411
3. Учебно-методические рекомендации Дальневосточного государственного университета путей сообщения Владимира Викторовича Анисимова [Электронный ресурс]: учебное пособие / ДВФУ. - Владивосток. - Режим доступа: https://sites.google.com/site/anisimovkhv/learning/kripto/
Приложение
Ниже приведена программная реализация алгоритма Рюкзак.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Зи_ras
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public long f_evclid(long x, long y) // нахожедение взаимно простого числа методом Евклида *Взято у В.Е.Маркина*
{
while (x != 0 && y != 0)
{
if (x >= y) x = x % y;
else y = y % x;
}
return x + y;
}
public string f_to16bit(string bin) // когда число уже переведено в двоичный код стандартной процедурой Convert то приводим код символа к 16 битам
{
string bin16 = "";
if (bin.Length < 16)
{
int lack = 16 - bin.Length;
for (int i = 0; i < lack; i++)
{
bin16 += '0';
}
bin16 += bin;
}
return bin16;
}
public double f_bintodec(string bin)// перевод двоичного кода в десятичный
{
double dec = 0;
for (int i = bin.Length - 1; i >= 0; i--)
{
if (bin[i] == '1')
{
dec += Math.Pow(2, (bin.Length - i - 1));
}
}
return dec;
}
int pp = 0;
long[] a_cyp = new long[300];
long m, n;
long[] priv_key = new long[16]; //a
public string f_cod(string text16)
{
long[] publ_key = new long[16]; //d
for (int i = 0; i < 16; i++)
{
publ_key[i] = (priv_key[i] * n) % m; //открытый ключ
}
string bin = text16;
long cyp = 0;
//непосредственно шифрование
for (int i = 0; i < 16; i++)
{
if (bin[i] == '1')
{
cyp += publ_key[i];
}
}
a_cyp[pp] = cyp; pp++;
richTextBox2.AppendText(cyp.ToString()+" ");
return cyp.ToString();
}
public long f_mult(long m1, long n1) // ищем мультипликативно обратное число n^-1
{
long mult_inv = 0;
for (int i = 0; i <= m1; i++)
{
if ((i * n1) % m1 == 1)
{
mult_inv = i;
break;
}
}
return mult_inv;
}
public string f_decod(string text)
{
// string decod_text="";
string t=richTextBox1.Text;
int len =t.Length ;
/* for (int i=0; i<len; i++ )
{*/
Int64 kk = Convert.ToInt64(text);
long M = (kk * f_mult(m, n)) % m;
string[] text_dec = new string[16];
string dec = "";
for (int o = 15; o >= 0; o--)
{
if (M >= priv_key[o])
{
M -= priv_key[o];
text_dec[o] = "1";
dec = "1" + dec;
}
else
{
text_dec[o] = "0";
dec = "0" + dec;
}
}
return dec; /*return decod_text;*/
}
private void button1_Click(object sender, EventArgs e)
{
int seed = 10;
Random rnd = new Random(DateTime.Now.Millisecond); //случайное число
priv_key[0] = rnd.Next(1, seed); //генерирует число
long sum = priv_key[0];
for (int i = 0; i < 16; i++)
{
priv_key[i] = sum + rnd.Next(1, seed);
sum += priv_key[i];
}
m = sum + rnd.Next(1, seed);
n = 2;
long mod = 0;
while (mod != 1) //ищем взаимно простое число
mod = f_evclid(m, n++);
n--;
string text = richTextBox1.Text;
string textBin = "";
//считываем стоку из поля, и переводим ее в двоичный код, каждый символ приводится к 16 битам
for (int i = 0; i < text.Length; i++)
{
int j = text[i];
string output = Convert.ToString(j, 2);// переводит в двоичный код
output = f_to16bit(output); // приводит к 16 битам
textBin += output;
}
int len = text.Length; //== len= textBin.length/16 *аналогичные записи*
for (int i = 0; i < len; i++)
{
string text_path = textBin.Substring(0, 16);
textBin = textBin.Remove(0, 16);
string cyp = "";
cyp += f_cod(text_path); //кодируем и выводим на экран результат кодирования
// string textDeCod = f_decod(cyp);
}
}
private void button2_Click(object sender, EventArgs e) // декоридование
{
string cyp = richTextBox2.Text;
string text = richTextBox1.Text;
string[] ar_cyp = cyp.Split(' ');
string textDeCod = "";
for (int i = 0; i < text.Length; i++)
{
long bl= (long)f_bintodec(f_decod(ar_cyp[i]));
textDeCod += (char)bl;
}
richTextBox3.AppendText(textDeCod);
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
}
}
Размещено на Allbest.ru
...Подобные документы
Исследование системы распределения ключей на основе линейных преобразований. Описание компонентов сети конфиденциальной связи. Характеристика отечественного алгоритма шифрования данных. Обзор результатов расчетов криптостойкости алгоритма шифрования.
контрольная работа [56,5 K], добавлен 26.09.2012Симметричные криптосистемы; алгоритмы шифрования и дешифрования данных, их применение в компьютерной технике в системах защиты конфиденциальной и коммерческой информации. Основные режимы работы алгоритма DES, разработка программной реализации ключа.
курсовая работа [129,6 K], добавлен 17.02.2011Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Описание компонентов сети конфиденциальной связи. Система распределения ключей на основе линейных преобразований. Описание разработанных программ. Криптостойкость алгоритма распределения ключей. Алгоритм шифрования данных в режиме обратной связи.
курсовая работа [98,3 K], добавлен 26.09.2012История возникновения алгоритма симметричного шифрования, условия и особенности его применения на современном этапе. Принципы и функции исследуемой технологии. Анализ главных преимуществ и недостатков использования алгоритма, оценка его уязвимости.
курсовая работа [301,9 K], добавлен 29.10.2017Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.
курсовая работа [812,6 K], добавлен 27.03.2012Реализация алгоритма DES и режимов шифрования для любой длины сообщения и любой длины ключа. Шифрование сообщений различной длины и ключа с замериванием времени и скорости шифрования. Реализация алгоритма RSA. Сохранение зашифрованного файла на диск.
курсовая работа [398,4 K], добавлен 26.01.2010Сущность и история разработки алгоритма криптозащиты Эль-Гамаля. Основы этого типа шифрования, особенности генерации ключей. Специфика реализации системы криптозащиты средствами процессора ADSP-2181 в расширенных полях Галуа. Блок-схемы программирования.
контрольная работа [1,0 M], добавлен 13.01.2013Формирование ключей для шифрования сообщения. Описание алгоритма RSA: шифрование и дешифрование. Понятие и история изобретения криптосистемы с открытым ключом. Свойства односторонней функции и сложность раскрытия шифра. Сущность цифровой подписи.
лабораторная работа [326,0 K], добавлен 04.11.2013Симметричные криптосистемы как способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ. Разбор и реализация шифрования алгоритма: простая и двойная перестановка, перестановка "магический квадрат".
курсовая работа [3,3 M], добавлен 11.03.2013Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.
курсовая работа [1010,4 K], добавлен 10.08.2014Симметрическое шифрование как способ шифрования, в котором применяется один и тот же криптографический ключ. Функции стандартного диалогового окна открытия и сохранения файла. Характерная схема действий при генерации подписи. Цифровая подпись файла.
курсовая работа [641,5 K], добавлен 14.06.2011Основы криптографических систем. Алгоритм создания открытого и секретного ключей. Схема передачи шифрованной информации и алгоритм для цифровой подписи. Преимущества и недостатки системы RSA. Основные формулы для создания RSA-ключей шифрования.
курсовая работа [683,6 K], добавлен 18.12.2011Электронная цифровая подпись. Асимметричные алгоритмы шифрования. Сценарий распределения открытых ключей, обмен сертификатами. Выбор программных средств. Математическая модель. Скорости Эль-Гамаля для различных длин модулей. Программная реализация.
дипломная работа [461,7 K], добавлен 22.09.2011Принцип программной реализации классических криптографических методов. Метод шифрования с использованием таблицы Виженера. Создание текстового редактора "Блокнот", содержащего методы шифрования. Вербальный алгоритм и программа для методов шифрования.
курсовая работа [2,0 M], добавлен 20.01.2010Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.
курсовая работа [101,1 K], добавлен 09.03.2009Спецификация требований к разрабатываемому приложению. Разработка структурной схемы интерфейса. Описание алгоритма шифрования DES. Разработка программного кода приложения "DES". Проведение исследования основных шагов для генерации ключей и шифрования.
курсовая работа [398,4 K], добавлен 13.12.2022Разработка криптографического алгоритма программы ручного шифра по таблице Виженера. Разработка программы, выполняющей шифрование и расшифрование. Особенности использования в качестве ключа самого открытого текста. Алгоритмы решения "обратных" задач.
курсовая работа [45,0 K], добавлен 13.11.2009Процесс и основные этапы реализации алгоритма формирования ключей в процессе функционирования DES с помощью языка программирования C++. Особенности работы программного алгоритма и его пошаговая реализация. Листинг получившейся программы, пример ее работы.
лабораторная работа [383,9 K], добавлен 26.08.2009Разработка программы шифрования данных с использованием алгоритма DES. Структура алгоритма, режимы его работы. Электронный шифровальный блокнот. Цепочка цифровых блокнотов. Цифровая и внешняя обратная связь. Структура окна: функции основных кнопок.
лабораторная работа [830,3 K], добавлен 28.04.2014