Просмотр содержимого документа
«Методы шифрования»
Криптографический алгоритм, или шифр, — это математическая формула, описывающая процессы зашифрования и расшифрования. Чтобы зашифровать открытый текст, криптоалгоритм работает в сочетании с ключом— словом, числом или фразой. Одно и то же сообщение одним алгоритмом, но разными ключами будет преобразовываться в разный шифртекст. Защищённость шифртекста целиком зависит от двух вещей: стойкости криптоалгоритма и секретности ключа [3]. “Криптография— это наука об использовании математики для зашифрования и расшифрования данных. Криптография позволяет хранить важную информацию или передавать её по ненадёжным каналам связи (таким как Интернет) так, что она не может быть прочитана никем, кроме легитимного получателя [1].” “Криптоанализом (от греческого krypts - "скрытый" и analein - "ослаблять" или избавлять") называют науку восстановления (дешифрования) открытого текста без доступа к ключу [4].” Различные криптографические алгоритмы обладают разной надежностью, чаще называемой стойкостью алгоритма шифрования или стойкостью шифра. Стойкость зависит от того, насколько легко криптоаналитик может взломать шифр [5]. “ Стойкость шифра – это способность шифра противостоять атакам на него. Стойким считается алгоритм, который для успешной атаки требует от 7 противника недостижимых вычислительных ресурсов, недостижимого объёма перехваченных открытых и зашифрованных сообщений или же такого времени раскрытия, что по его истечению защищенная информация будет уже не актуальна, и т. д. [6] ”. Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки. Одно из слабых мест этого метода – низкая сопротивляемость частотному анализу [7]. Неизвестно, насколько эффективным шифр Цезаря был в то время, но, вероятно, он был безопасен благодаря тому, что большинство врагов Цезаря были неграмотными, и многие предполагали, что сообщения были написаны на неизвестном иностранном языке. Даже позднее, в 1915 году, шифр Цезаря находил применение: российская армия использовала его как замену для более сложных шифров, которые оказались слишком сложными для войск [8]. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены [9]. Шифр Цезаря относят к шифрам сдвига, где каждый элемент сообщения сдвигается на одно и то же число позиций. К примеру, если шаг равен 3, А заменяется Г, Б на Е и т.д. Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами: (1), (2), где x — символ открытого текста y — символ шифрованного текста n — мощность алфавита (кол-во символов) k — ключ. Одна из формул используется для шифрования (см. формулу 1), другая для получения исходного символа (см. формулу 2). 8 Шифр Виженера — метод полиалфавитного шифрования буквенного текста с использованием ключевого слова [10]. “Впервые этот метод описал Джованни-Баттиста Беллазо (Giovan Battista Bellaso) в книге La cifra del. Sig. Giovan Battista Bellasо в 1553 году, однако в 19 веке получил имя Блеза Виженера, швейцарского дипломата. Метод прост для понимания и реализации, он является недоступным для простых методов криптоанализа [11].” “Отличием от Шифра Цезаря является то, что шифр Виженера является совокупностью последовательности шифров Цезаря с различными значениями смещения. Для шифрования может быть использована таблица Виженера, которая составляется из строк с числом символом равным размеру алфавита, и каждая следующая строка сдвигается на определенную позицию. Таким образом, в таблице получается несколько различных шифров Цезаря [12].” Шифрование можно записать в виде формулы (см. формулу 3): (3) где Pi – i-ый элемент в одномерном массиве с алфавитом; Ki – i-ый элемент в одномерном массиве с символами кодового слова; Ci –расшифрованный i-ый символ; z – число символов в алфавите от нуля. Расшифрование производится следующим образом: находим в таблице Виженера строку, соответствующую первому символу ключевого слова; в данной строке находим первый символ зашифрованного текста. Столбец, в котором находится данный символ, соответствует первому символу исходного текста. Следующие символы зашифрованного текста расшифровываются подобным образом [13]. (см. формулу 4) (4), где Pi – i-ый элемент в одномерном массиве с алфавитом; 9 Ki – i-ый элемент в одномерном массиве с символами кодового слова; Ci –расшифрованный i-ый символ; z – число символов в алфавите от нуля. Витфилд Диффи и Мартин Хеллман считаются основателями шифрования с открытым ключом. Диффи и Хеллман публиковали работы об обмене открытыми ключами в течение многих лет, и, в частности, в 70-х они обдумывали возможность обмена ключами, которая бы исключала необходимость личной встречи [14]. Протокол Диффи-Хелмана — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного/асимметричного шифрования [15]. Для получения общего закрытого ключа для начала требуется задать общий открытый ключ-заготовку для дальнейших вычислений. Требуются два числа: простое число и первообразный корень по этому числу. Первообразный корень по модулю m — это такое число g, что положительное наименьшее число k, для которого разность gk — 1 делится на m (gk сравнимо с 1 по модулю m), совпадает c φ(m), где φ(m) — число натуральных чисел, меньших m и взаимно простых с m. Далее два пользователя задают 2 любых (желательно больших) числа и вставляют их в “ заготовку”, после чего результат отправляют друг другу. Эти к результатам каждый пользователь добавляет своё созданное число по формуле (см. формулу 5): (5) где a и b – изначальные числа; g – первообразные корень числа p; p – простое число. 10 Получившийся результат и будет закрытым ключом. Рисунок 1. Визуализация работы протокола Диффи-Хеллмана* *Источник: [16] 1.2 Инструменты разработки C# — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии был стандартизирован как ECMA-334[17] и ISO/IEC 23270[18]. C# может быть описан как C++, основанный с упором на ООП (объектно-ориентированное программирование). Создан язык программирования, как аналог Java для платформы .NET Framework. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели 11 на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Delphi, Modula и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (в отличие от Haskell). C# является объектно-ориентированным языком, но поддерживает также и компонентно-ориентированное программирование. Разработка современных приложений все больше тяготеет к созданию программных компонентов в форме автономных и самоописательных пакетов, реализующих отдельные функциональные возможности. Главная особенность таких компонентов в том, что они представляют собой модель программирования со свойствами, методами и событиями. У них есть атрибуты, предоставляющие декларативные сведения о компоненте. Они включают в себя собственную документацию. C# предоставляет языковые конструкции, непосредственно поддерживающие такую концепцию работы. Благодаря этому C# подходит для создания и применения программных компонентов [19]. Огромное количество библиотек с .net идет в базе, плюс к ним множество свободно доступных библиотек, это покрывает практически все первостепенные задачи разработки под Windows. Наличие большого количества стандартных типов почти избавляет от библиотек, где базовые типы переопределены. И в силу того, что библиотеки С# сравнительно молодые, - интерфейсы библиотек, как правило, лучше вписываются в те или иные шаблоны проектирования, что часто упрощает их изучение [20]. С# позволяет стартовать разработку быстрее, а это позволяет быстрее получить прототип решения. Скорость разработки на С# на начальных этапах проекта значительно выше по сравнению с С++ [20].