Шифрование и дешифрация по алгоритму ГОСТ 28147-89 в режиме гаммирования
Использование цифровых методов передачи и хранения информации. Методы и алгоритмы для защиты дискретной и непрерывной информации. Применение методов шифрования. Стандарт симметричного шифрования. Тестирование подмены ключей, символа шифр-текста.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 25.10.2012 |
Размер файла | 572,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
СОДЕРЖАНИЕ
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
ВВЕДЕНИЕ
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
1.1 Обзор симметричных методов шифрования
1.2 Алгоритм ГОСТ 28147-89
2. КОНСТРУКТОРСКАЯ ЧАСТЬ
2.1 Архитектура программной системы
2.2 Обоснование выбора инструментальных средств разработки
2.3 Алгоритмическое конструирование
2.4 Программная реализация
3. ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
3.1 Тестирование правильности работы программы
3.2 Тестирование подмены ключей
3.3 Тестирование подмены символа шифр-текста
3.4 Тестирование на сообщении с повторяющимися блоками
3.5 Тестирование различия шифр-текстов
3.6. Выводы
ЗАКЛЮЧЕНИЕ
СПИСОК ЛИТЕРАТУРЫ
ПРИЛОЖЕНИЕ
задание на курсовую работу
В ходе выполнения курсовой работы необходимо проанализировать и изучить схему шифрации и дешифрации алгоритма ГОСТ 28147-89 в режиме гаммирования, а также разработать программу, реализующую заданный алгоритм.
введение
Одной из основных ценностей всегда считалась информация. ХХ век - век информатики и информатизации. Технология дает возможность передавать и хранить все большие объемы информации. Это благо имеет и оборотную сторону. Информация становится все более уязвимой по разным причинам:
· возрастающие объемы хранимых и передаваемых данных;
· расширение круга пользователей, имеющих доступ к ресурсам ЭВМ, программам и данным;
· усложнение режимов эксплуатации вычислительных систем.
Поэтому все большую важность приобретает проблема защиты информации от несанкционированного доступа (НСД) при передаче и хранении.
Методы и средства защиты обеспечивают:
· исключение НСД к ресурсам ЭВМ, программам и данным;
· проверку целостности информации;
· исключение несанкционированного использования программ (защиту программ от копирования).
Использование цифровых методов передачи и хранения информации позволяет применять унифицированные методы и алгоритмы для защиты дискретной (текст, факс, телекс) и непрерывной (речь) информации.
Данная работа направлена на анализ некоторых современных средств защиты информации и возможностей их реализации. В работе рассматриваются методы и алгоритмы криптографической защиты информации, а также реализуются те из них, которые указаны в задании.
1. аналитическая часть
Одним из основных методов защиты информации является шифрование. Шифрование информации - это обратимое преобразования открытого (исходного) текста на основе секретного алгоритма или ключа в шифрованный (закрытый) текст [2]. Под ключом понимается параметр шифра, определяющий выбор конкретного преобразования данного текста. Основной характеристикой криптографического алгоритма шифрования является его способность противостоять возможным атакам (нарушениям конфиденциальности и целостности информации) - криптографическая стойкость. В современной криптографии известно более десятка проверенных алгоритмов шифрования, которые при использовании ключа достаточной длины и корректной реализации алгоритма криптографически стойки.
Применение методов шифрования информации позволяет решать следующие задачи [4]:
· защита информации от разглашения и искажения при хранении в ненадёжных источниках;
· защита данных от разглашения и искажения при передаче по открытому каналу связи;
· защита от отказа от факта получения сообщения;
· обеспечение юридической значимости электронных документов.
К алгоритмам шифрования предъявляются определенные требования [5]:
· высокий уровень защиты данных против дешифрования и возможной модификации;
· защищенность информации должна основываться только на знании ключа и не зависеть от того, известен алгоритм или нет (правило Керкхоффа);
· малое изменение исходного текста или ключа должно приводить к значительному изменению шифрованного текста (эффект «обвала»);
· область значений ключа должна исключать возможность дешифрования данных путем перебора значений ключа;
· экономичность реализации алгоритма при достаточном быстродействии;
· стоимость дешифрования данных без знания ключа должна превышать стоимость данных.
Криптографические алгоритмы шифрования с ключом делятся на:
1. Алгоритмы шифрования с секретным ключом (симметричные)
Алгоритмы данного типа представляют собой способ шифрования, в котором для шифрования и дешифрования применяется один и тот же криптографический ключ. Ключ алгоритма должен сохраняться в секрете обеими сторонами. Главным принципом при применении такого рода алгоритмов является условие, что передатчик и приемник заранее знают алгоритм шифрования, а также ключ к сообщению, без которых информация представляет собой всего лишь набор символов, не имеющих смысла.
1.1.Обзор симметричных методов шифрования
Симметричные алгоритмы шифрования основаны на том, что отправитель и получатель информации используют один и тот же ключ. Этот ключ должен храниться в тайне и передаваться способом, исключающим его перехват.
Обмен информацией осуществляется в 3 этапа:
1. отправитель передает получателю ключ;
2. отправитель, используя ключ, зашифровывает сообщение, которое пересылается получателю;
3. получатель получает сообщение и расшифровывает его.
Классификация симметричных алгоритмов представлена на рис. 1.1.
Рис. 1.1. Классификация симметричных алгоритмов шифрования
В зависимости от размера блока шифруемой информации симметричные криптоалгоритмы подразделяются на блочные и поточные шифры. Единицей кодирования в поточных шифрах является один бит. Результат кодирования не зависит от прошедшего ранее входного потока. Схема применяется в системах передачи потоков информации, то есть в тех случаях, когда передача информации начинается и заканчивается в произвольные моменты времени и может случайно прерываться. Для блочных шифров единицей кодирования является блок из нескольких байтов. Результат кодирования зависит от всех исходных байтов этого блока. Схема применяется при пакетной передаче информации и кодировании файлов.
Критерием классификации симметричных блочных криптоалгоритмов является тип выполняемых преобразований над блоками открытого текста. По этому критерию криптоалгоритмы разделяют на подстановочные и перестановочные. В перестановочных шифрах блоки информации не изменяются сами по себе, но изменяется их порядок следования, что делает информацию недоступной стороннему наблюдателю. Подстановочные шифры (шифры замены) изменяют сами блоки информации по определенным законам. В современных криптографических системах, как правило, используются оба способа шифрования. Такой шифратор называют составным. Он является более стойким, чем шифратор, использующий только замены или перестановки [5].
Деление криптоалгоритмов на моноалфавитные и многоалфавитные характерно для подстановочных шифров. Моноалфавитные криптоалгоритмы заменяют блок входного текста (символ входного алфавита) на один и тот же блок шифротекста (символ выходного алфавита). В многоалфавитных шифрах одному и тому же блоку входного текста могут соответствовать разные блоки шифротекста, что существенно затрудняет криптоанализ.
К итеративным блочным алгоритмам относят:
1. DES. Федеральный стандарт шифрования США в 1977-2001 годах. DES имеет блоки по 64 бита и 16 цикловую структуру сети Фейстеля, для шифрования использует ключ с длиной 56 бит. Алгоритм использует комбинацию нелинейных (S-блоки) и линейных (перестановки E, IP, IP-1) преобразований. В декабре 2001 года утратил свой статус в связи с введением в действие нового стандарта. В настоящее время может быть взломан полным перебором.
2. Triple-DES. Вариация алгоритма DES, в которой базовый DES выполняется трижды на одном блоке данных, за счет чего стойкость ключа повышается в два (три) раза.
3. AES. В настоящее время является федеральным стандартом шифрования США. Обладает простым дизайном, который облегчает его анализ, малым размером исполняемого кода и требованиям к памяти, высокой скоростью и некоторыми другим параметрам, отличающим его от конкурентов. Несмотря на незначительно меньший «запас прочности» (то есть способность противостоять атакам в своих ослабленных вариантах с меньшим числом раундов), тем не менее, такой дизайн не несет практической угрозы безопасности алгоритма.
4. CAST. Существуют CAST-128 и CAST-256. Канада, где был разработан алгоритм, рассматривает его в качестве государственного стандарта шифрования. Дизайн основан на формальной архитектуре DES с доказанной стойкостью. Не имеет слабых ключей. Совершенно устойчив к линейному и дифференциальному криптоанализу, может быть взломан только полным перебором.
5. IDEA. Считается одним из лучших опубликованных шифров, отчасти благодаря своей прочной теоретической базе. Имеет класс слабых ключей. Ряд групп академических и военных исследователей не опубликовали свои результаты криптоанализа алгоритма, что может означать достижение успеха в его взломе.
6. Blowfish. Сложная схема выработки ключевых элементов существенно затрудняет атаку на алгоритм методом перебора, однако делает его непригодным для использования в системах, где ключ часто меняется, и на каждом ключе шифруется небольшие по объему данные. Алгоритм лучше всего подходит для систем, в которых на одном и том же ключе шифруются большие массивы данных.
7. Twofish. Обладает сравнительно низкой скоростью и сложностью, затрудняющей формальный анализ. По мнению некоторых криптографов, алгоритм неустойчивым к атакам, организованным по принципу «разделяй и властвуй». Однако при анализе пока никому не удалось провести ни одну из подобных атак.
8. ГОСТ 28147-89 [1]. Стандарт Российской Федерации на шифрование данных. Обладает сравнительно большим классом слабых ключей.
Основные параметры рассмотренных алгоритмов итеративного блочного шифрования представлены в таблице 1.1.
Таблица 1.1
Сравнение основных параметров итеративных блочных алгоритмов
Алгоритм |
Ключ, бит |
Блок, бит |
|
DES |
56 |
64 |
|
Triple-DES |
168 |
64 |
|
AES |
128, 192, 256 |
128 |
|
CAST |
128 |
64 |
|
IDEA |
128 |
64 |
|
Blowfish |
max 448 |
64 |
|
Twofish |
256 |
128 |
|
ГОСТ 28147-89 |
256 |
64 |
1.2 Алгоритм ГОСТ 28147-89
ГОСТ 28147-89 -- советский и российский стандарт симметричного шифрования, введённый в 1990 году, также является стандартом СНГ. Полное название -- «ГОСТ 28147-89 Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования». Блочный шифроалгоритм. При использовании метода шифрования с гаммированием, может выполнять функции поточного шифроалгоритма.
По некоторым сведениям, история этого шифра гораздо более давняя. Алгоритм, положенный впоследствии в основу стандарта, родился, предположительно, в недрах Восьмого Главного управления КГБ СССР (ныне в структуре ФСБ), скорее всего, в одном из подведомственных ему закрытых НИИ, вероятно, ещё в 1970-х годах в рамках проектов создания программных и аппаратных реализаций шифра для различных компьютерных платформ.
С момента опубликования ГОСТа на нём стоял ограничительный гриф «Для служебного пользования», и формально шифр был объявлен «полностью открытым» только в мае 1994 года. История создания шифра и критерии разработчиков по состоянию на 2010 год не опубликованы.
ГОСТ 28147-89 -- блочный шифр с 256-битным ключом и 32 циклами преобразования, оперирующий 64-битными блоками. Основа алгоритма шифра -- Сеть Фейстеля. Базовым режимом шифрования по ГОСТ 28147-89 является режим простой замены (определены также более сложные режимы гаммирование, гаммирование с обратной связью и режим имитовставки).
Достоинства алгоритма
1. Бесперспективность силовой атаки (XSL-атаки в учёт не берутся, так как их эффективность на данный момент полностью не доказана).
2. Эффективность реализации и соответственно высокое быстродействие на современных компьютерах.
3. Наличие защиты от навязывания ложных данных (выработка имитовставки) и одинаковый цикл шифрования во всех четырех алгоритмах ГОСТа.
4. В режиме гаммирования все элементы гаммы различны для реальных шифруемых массивов и, следовательно, результат зашифрования даже двух одинаковых блоков в одном массиве данных будет различным.
5. Элементы гаммы вырабатываются одинаковыми порциями в 64 бита, но использоваться может и часть такого блока с размером, равным размеру шифруемого блока.
Недостатки алгоритма
Основные проблемы ГОСТа связаны с неполнотой стандарта в части генерации ключей и таблиц замен. Тривиально доказывается, что у ГОСТа существуют «слабые» ключи и таблицы замен, но в стандарте не описываются критерии выбора и отсева «слабых». Также стандарт не специфицирует алгоритм генерации таблицы замен (S-блоков). С одной стороны, это может являться дополнительной секретной информацией (помимо ключа), а с другой, поднимает ряд проблем:
1. Нельзя определить криптостойкость алгоритма, не зная заранее таблицы замен;
2. Реализации алгоритма от различных производителей могут использовать разные таблицы замен и могут быть несовместимы между собой;
3. Возможность преднамеренного предоставления слабых таблиц замен лицензирующими органами РФ;
4. Потенциальная возможность (отсутствие запрета в стандарте) использования таблиц замены, в которых узлы не являются перестановками, что может привести к чрезвычайному снижению стойкости шифра.
2. конструкторская часть
2.1 Архитектура программной системы
Под архитектурой программного обеспечения понимают набор внутренних структур программного обеспечения, их связей и возможных взаимодействий между компонентами, а также доступных извне свойств этих компонентов [6].
Архитектура программного средства представлена на рис. 2.1.
Рис.2.1. Архитектура системы
Данная архитектура включает следующие подсистемы:
1. Подсистема интерфейса пользователя. Данная подсистема отвечает за внешний вид приложения и общение с пользователем. Через нее происходит ввод данных и последующий их вывод после обработки.
2. Блок выбора действия. Данная подсистема выполняет генерацию случайных ключей, либо ввод ключа пользователем и сохранение/загрузку файлов исходного текста. Этот блок непосредственно связан с модулем, реализующим схему работы алгоритма ГОСТ 28147-89.
К достоинствам такой архитектуры следует отнести простоту разработки, а из недостатков отметить необходимость организации взаимодействия разрабатываемых модулей.
2.2 Обоснование выбора инструментальных средств разработки
Для разработки программы будет использоваться язык программирования C# и платформа .NET [7]. Выбор данных средств разработки связан с их большой распространённостью, наличием большого числа справочной информации, мощными языковыми средствами для упрощения разработки программ. Также не последнюю роль играет знакомство с ними.
К преимуществам платформы .NET следует отнести:
1. Возможность создания приложений с графическим интерфейсом пользователя для системы Windows на основе стандартных классов, что упрощает разработку.
2. Наличие «сборщика мусора», который освобождает ресурсы. С его помощью приложения защищены от утечки памяти и от необходимости освобождать ресурсы, что делает программирование более легким и более безопасным.
3. Взаимодействие приложения, написанном на .NET языке, с единой моделью обработки ошибок, что значительно упрощает процесс отладки.
Использование языка C# и платформы .NET даёт возможность сконцентрироваться на глобальных аспектах разработки системы, нежели сосредотачиваться на мелочах.
2.3 Алгоритмическое конструирование
Рассмотрим основные шаги реализации алгоритма шифрования ГОСТ 28147.
Основной шаг криптопреобразования
Рис.2.2. Схема основного шага криптопреобразования алгоритма ГОСТ 28147-89.
информация цифровой шифрование ключ
Основной шаг криптопреобразования по своей сути является оператором, определяющим преобразование 64-битового блока данных. Дополнительным параметром этого оператора является 32-битовый блок, в качестве которого используется какой-либо элемент ключа. Схема алгоритма основного шага приведена на рисунке 2.2.
Шаг 0
Определяет исходные данные для основного шага криптопреобразования:
N - преобразуемый 64-битовый блок данных, в ходе выполнения шага его младшая (N 1) и старшая (N 2) части обрабатываются как отдельные 32-битовые целые числа без знака. Таким образом, можно записать N=(N 1,N 2).
X - 32-битовый элемент ключа;
Шаг 1
Сложение с ключом. Младшая половина преобразуемого блока складывается по модулю 232 с используемым на шаге элементом ключа, результат передается на следующий шаг;
Шаг 2
Поблочная замена. 32-битовое значение, полученное на предыдущем шаге, интерпретируется как массив из восьми 4-битовых блоков кода: S=(S 0, S 1, S 2, S 3, S 4, S 5, S 6, S 7), причем S 0 содержит 4 самых младших, а S 7 - 4 самых старших бита S.
Далее значение каждого из восьми блоков заменяется новым, которое выбирается по таблице замен следующим образом: значение блока Si меняется на Si -тый по порядку элемент (нумерация с нуля) i-того узла замены (т.е. i-той строки таблицы замен, нумерация также с нуля). Другими словами, в качестве замены для значения блока выбирается элемент из таблицы замен с номером строки, равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как 4-битового целого неотрицательного числа. Отсюда становится понятным размер таблицы замен: число строк в ней равно числу 4-битовых элементов в 32-битовом блоке данных, то есть восьми, а число столбцов равно числу различных значений 4-битового блока данных, равному как известно 24, шестнадцати.
Шаг 3
Циклический сдвиг на 11 бит влево. Результат предыдущего шага сдвигается циклически на 11 бит в сторону старших разрядов и передается на следующий шаг. На схеме алгоритма символом обозначена функция циклического сдвига своего аргумента на 11 бит влево, т.е. в сторону старших разрядов.
Шаг 4
Побитовое сложение: значение, полученное на шаге 3, побитно складывается по модулю 2 со старшей половиной преобразуемого блока.
Шаг 5
Сдвиг по цепочке: младшая часть преобразуемого блока сдвигается на место старшей, а на ее место помещается результат выполнения предыдущего шага.
Шаг 6
Полученное значение преобразуемого блока возвращается как результат выполнения алгоритма основного шага криптопреобразования.
Базовый цикл криптографического преобразования
ГОСТ относится к классу блочных шифров, то есть единицей обработки информации в нем является блок данных. Следовательно, вполне логично ожидать, что в нем будут определены алгоритмы для криптографических преобразований, то есть для зашифрования, расшифрования и «учета» в контрольной комбинации одного блока данных. Именно эти алгоритмы и называются базовыми циклами ГОСТа, что подчеркивает их фундаментальное значение для построения этого шифра.
Базовые циклы построены из основных шагов криптографического преобразования, рассмотренного в предыдущем разделе. В процессе выполнения основного шага используется только один 32-битовый элемент ключа, в то время как ключ ГОСТа содержит восемь таких элементов. Следовательно, чтобы ключ был использован полностью, каждый из базовых циклов должен многократно выполнять основной шаг с различными его элементами. Вместе с тем кажется вполне естественным, что в каждом базовом цикле все элементы ключа должны быть использованы одинаковое число раз, по соображениям стойкости шифра это число должно быть больше одного.
Все сделанные выше предположения, опирающиеся просто на здравый смысл, оказались верными. Базовые циклы заключаются в многократном выполнении основного шага с использованием разных элементов ключа и отличаются друг от друга только числом повторения шага и порядком использования ключевых элементов. В режиме гаммирования используется только алгоритм зашифрования (рис. 2.3), так как шифруются не сами данные, а гамма, накладываемая на них операцией побитового сложения по модулю 2.
Рис.2.3. Схема цикла зашифрования 32-З
Гаммирование
Гаммирование - это наложение (снятие) на открытые (зашифрованные) данные криптографической гаммы, то есть последовательности элементов данных, вырабатываемых с помощью некоторого криптографического алгоритма, для получения зашифрованных (открытых) данных. Для наложения гаммы при зашифровании и ее снятия при расшифровании должны использоваться взаимно обратные бинарные операции, например, сложение и вычитание по модулю 264 для 64-битовых блоков данных. В ГОСТе для этой цели используется операция побитового сложения по модулю 2, поскольку она является обратной самой себе и, к тому же, наиболее просто реализуется аппаратно. Гаммирование решает обе упомянутые проблемы: во-первых, все элементы гаммы различны для реальных шифруемых массивов и, следовательно, результат зашифрования даже двух одинаковых блоков в одном массиве данных будет различным. Во-вторых, хотя элементы гаммы и вырабатываются одинаковыми порциями в 64 бита, использоваться может и часть такого блока с размером, равным размеру шифруемого блока.
Гамма для этого режима получается следующим образом: с помощью некоторого алгоритмического рекуррентного генератора последовательности чисел (РГПЧ) вырабатываются 64-битовые блоки данных, которые далее подвергаются преобразованию по циклу 32-З, то есть зашифрованию в режиме простой замены, в результате получаются блоки гаммы. Благодаря тому, что наложение и снятие гаммы осуществляется при помощи одной и той же операции побитового исключающего или, алгоритмы зашифрования и расшифрования в режиме гаммирования идентичны, их общая схема приведена на рисунке 2.4.
РГПЧ, используемый для выработки гаммы, является рекуррентной функцией: - элементы рекуррентной последовательности, f - функция преобразования. Следовательно, неизбежно возникает вопрос о его инициализации, то есть об элементе В действительности, этот элемент данных является параметром алгоритма для режимов гаммирования, на схемах он обозначен как S, и называется в криптографии синхропосылкой , а в нашем ГОСТе - начальным заполнением одного из регистров шифрователя. По определенным соображениям разработчики ГОСТа решили использовать для инициализации РГПЧ не непосредственно синхропосылку, а результат ее преобразования по циклу 32-З: . Последовательность элементов, вырабатываемых РГПЧ, целиком зависит от его начального заполнения, то есть элементы этой последовательности являются функцией своего номера и начального заполнения РГПЧ: где fi (X)=f(fi -1(X)), f 0(X)=X. С учетом преобразования по алгоритму простой замены добавляется еще и зависимость от ключа:
где Гi - i-тый элемент гаммы, K - ключ.
Таким образом, последовательность элементов гаммы для использования в режиме гаммирования однозначно определяется ключевыми данными и синхропосылкой. Естественно, для обратимости процедуры шифрования в процессах за- и расшифрования должна использоваться одна и та же синхропосылка. Из требования уникальности гаммы, невыполнение которого приводит к катастрофическому снижению стойкости шифра, следует, что для шифрования двух различных массивов данных на одном ключе необходимо обеспечить использование различных синхропосылок. Это приводит к необходимости хранить или передавать синхропосылку по каналам связи вместе с зашифрованными данными, хотя в отдельных особых случаях она может быть предопределена или вычисляться особым образом, если исключается шифрование двух массивов на одном ключе.
Теперь подробно рассмотрим РГПЧ, используемый в ГОСТе для генерации элементов гаммы. Прежде всего, надо отметить, что к нему не предъявляются требования обеспечения каких-либо статистических характеристик вырабатываемой последовательности чисел. РГПЧ спроектирован разработчиками ГОСТа исходя из необходимости выполнения следующих условий:
· период повторения последовательности чисел, вырабатываемой РГПЧ, не должен сильно (в процентном отношении) отличаться от максимально возможного при заданном размере блока значения 264;
· соседние значения, вырабатываемые РГПЧ, должны отличаться друг от друга в каждом байте, иначе задача криптоаналитика будет упрощена;
· РГПЧ должен быть достаточно просто реализуем как аппаратно, так и программно на наиболее распространенных типах процессоров, большинство из которых, как известно, имеют разрядность 32 бита.
Исходя из перечисленных принципов, создатели ГОСТа спроектировали весьма удачный РГПЧ, имеющий следующие характеристики:
· в 64-битовом блоке старшая и младшая части обрабатываются независимо друг от друга:; фактически, существуют два независимых РГПЧ для старшей и младшей частей блока.
· рекуррентные соотношения для старшей и младшей частей следующие:
, где C 0=101010116;
, где C 1=101010416;
Шаг 0
Определяет исходные данные для основного шага криптопреобразования:
T о(ш) - массив открытых (зашифрованных) данных произвольного размера, подвергаемый процедуре зашифрования (расшифрования), по ходу процедуры массив подвергается преобразованию порциями по 64 бита;
S - синхропосылка , 64-битовый элемент данных, необходимый для инициализации генератора гаммы;
Шаг 1
Начальное преобразование синхропосылки, выполняемое для ее «рандомизации», то есть для устранения статистических закономерностей, присутствующих в ней, результат используется как начальное заполнение РГПЧ;
Шаг 2
Один шаг работы РГПЧ, реализующий его рекуррентный алгоритм. В ходе данного шага старшая (S 1) и младшая (S 0) части последовательности данных вырабатываются независимо друг от друга;
Шаг 3
Гаммирование. Очередной 64-битовый элемент, выработанный РГПЧ, подвергается процедуре зашифрования по циклу 32-З, результат используется как элемент гаммы для зашифрования (расшифрования) очередного блока открытых (зашифрованных) данных того же размера.
Шаг 4
Результат работы алгоритма - зашифрованный (расшифрованный) массив данных.
2.4 Программная реализация
Алгоритм шифрования ГОСТ 28147-89 реализован в одноимённом классе. В нём имеются следующие поля:
· private byte[] key - ключ используемый при шифровании в байтовом массиве;
· private BitArray baKey - ключ в битовом виде;
· ulong SyncMessage - синхропосылка;
· private List<byte> cryptMessage - список байтов сообщения для шифрования;
· private byte[,] matrixH - таблица замен;
Методы класса:
· public string Key() - возвращает ключ в виде строки;
· public byte[] KeyByte() - возвращает ключ в виде байтового массива;
· public GOST2814789(byte[] key) и public GOST2814789() - конструкторы класса;
· public byte[] Crypt(string source) и public void Crypt(FileStream fs) - методы шифрующие строку и файл соответственно;
· public string Decrypt(byte[] source) и public void Decrypt(FileStream fs) - методы расшифровывающие байтовый массив и файл соответственно;
· private byte[] MainStep(BitArray N, BitArray X) - основной шаг криптографического преобразования. Принимает 64-битный блок шифруемых данных и 32-битный элемент ключа;
· private byte[] CryptStep(BitArray N) - процедура шифрования. Принимает 64-битный блок данных для зашифровки и итеративно выполняет с ним основной шаг криптопреобразования меняя элементы ключа;
· private byte[] DoCrypt(byte[] source) - метод принимает шифруемый байтовый массив, делит его на блоки, генерирует для каждого блока элемент гаммы и выполняет операцию наложения гаммы. Возвращает зашифрованный байтовый массив;
· private byte[] DoDecrypt(byte[] source) - метод принимает расшифровываемый байтовый массив, делит его на блоки, генерирует для каждого блока элемент гаммы и выполняет операцию наложения гаммы. Возвращает расшифрованный байтовый массив;
· public void GenerateKey() - метод генерации ключа;
· public byte[] Xoring(byte[] first, byte[] second) - метод принимает два байтовых массива. Возвращает результат наложения первого на второй операцией исключающего или в виде массива байт;
· private BitArray Exchange(BitArray source) - метод реализующий обмен частей в блоке данных.
Реализация перечисленных методов на языке C# с комментариями представлена в приложении.
3. Экспериментальная часть
Целью тестирования системы является выявление ошибок в работе, связанных с обработкой данных, общего функционирования программной системы; проверка функциональных характеристик разработанной системы
В данном разделе приводится описание тестов проверки работы приложения, реализующего шифрование по алгоритму Blowfish, а также результат данных тестов.
3.1 Тестирование правильности работы программы
Описание: Выбираем для шифрования сообщение небольшого размера (рис. 3.1).
Рис.3.1. Условия теста 1
Информация в сообщении:
Hello, world! How are you?
Информация после прохождения цикла шифрования/расшифрования:
Hello, world! How are you?
Результат: Полученное дешифрованное сообщение совпадает с исходным.
3.2 Тестирование подмены ключей
Описание: Выбираем для шифрования текстовое сообщение небольшого размера. Задаем исходный ключ.
Информация в файле:
Hello, world! How are you?
Шифр-текст:
јі_СR‘*MЈ^йCњSЊl›†сэЧБG©^¶_э Ш3
На этапе расшифрования меняем ключ. Результат цикла расшифрования:
'?No<???}*!?J9?n?e!?????
Результат: Полученное дешифрованное сообщение не совпадает с исходным.
3.3. Тестирование подмены символа шифр-текста
Описание: Выбираем для шифрования сообщение небольшого размера. Задаем исходный ключ.
Информация в сообщении:
Hello, world! How are you?
Шифр-текст:
У} RЃВщФЌшњLЋ:р5юЦЃТ¶‰ эLю
На этапе расшифрования подменяем один символ шифр-текста:
A} RЃВщФЌшњLЋ:р5юЦЃТ¶‰ эLю
Результат цикла расшифрования:
ј§ЪЃЈOь¬Г“^>›Ѓ,wH!L©Nю;’ъr
Результат: Полученное дешифрованное сообщение не совпадает с исходным.
3.4 Тестирование на сообщении с повторяющимися блоками
Описание: Выбираем для шифрования сообщение небольшого размера. Задаем исходный ключ: kskfje1384jsw.
Информация в сообщении:
HELLO!!!HELLO!!!HELLO!!!HELLO!!!HELLO!!!HELLO!!!HELLO!!!
Шифр-текст:
ј‡ъј-
Ч„xЬ„’7p¤д=]Iy”4ІwЭЫS%ґ·D)°ЉL6!ќ JЄТ¦;}sf°Т[ФІЪј
Результат цикла расшифрования:
HELLO!!!HELLO!!!HELLO!!!HELLO!!!HELLO!!!HELLO!!!HELLO!!!
Результат: Мы видим, что результат зашифрования даже двух одинаковых блоков в одном массиве данных будет различным.
3.5 Тестирование различия шифр-текстов
Описание: Выбираем для шифрования сообщение небольшого размера. Задаем поочерёдно два различных ключа. Сравнение шифр-текстов на этапах шифрования/дешифрования приведено в таблице 3.1.
Таблица 3.1
Сравнение шифр-текстов
Первый ключ |
Второй ключ |
|
ЬuЉЕGoжХь§2§_Z_4Й_»ћуVK¦лі___Н1 |
ЕЊj_З/bКYё\ZЁљ‘ВzvDѓ.б‹ра 9џP¬љж |
|
Hello, World! How are you? |
Hello, World! How are you? |
Результат: Шифр-тексты не совпадают, но результирующие значения совпадают с начальным и друг с другом.
3.6 Выводы
Выполнив все этапы тестирования, можно с высокой долей вероятности утверждать, что система работает стабильно.
заключение
В данной курсовой работе были рассмотрены различные методы шифрования, их особенности. Особое внимание было уделено алгоритму ГОСТ 28147-89.
На практике был реализован алгоритм ГОСТ 28147-89 в режиме гаммирования. Результатом работы является программа, осуществляющая шифрование/расшифрование текстовых файлов указанным методом.
ПРИЛОЖЕНИЕ
namespace GOST
{
public class GOST2814789
{
private byte[] key = new byte[8];
private BitArray baKey;
ulong SyncMessage = 6413657231357313579; // синхропосылка
/// <summary>
/// Ключ
/// </summary>
public string Key
{
get
{
return this.ToStringFromByteArray(this.key);
}
}
public byte[] KeyByte
{
get
{
return this.key;
}
}
private List<byte> cryptMessage;
/// <summary>
/// Таблица замен 8 на 16 состоящая из 4битовых чисел, то есть от 0 до 15.
/// </summary>
private byte[,] matrixH = new byte[8, 16] {
{4,10,9,2,13,8,0,14,6,11,1,12,7,15,5,3},
{14,11,4,12,6,13,15,10,2,3,8,1,0,5,7,9},
{5,8,1,13,10,3,4,2,14,15,12,7,6,0,9,11},
{7,13,10,1,0,8,9,15,14,4,6,12,11,2,5,3},
{6,12,7,1,5,15,13,8,4,10,9,14,0,3,11,2},
{4,11,10,0,7,2,1,13,3,6,8,5,9,12,15,14},
{13,11,4,1,3,15,5,9,0,10,14,7,6,8,2,12},
{1,15,13,0,5,7,10,4,9,2,3,14,6,11,8,12} };
public GOST2814789(byte[] key)
{
this.key = key;
this.baKey = new BitArray(key);
}
public GOST2814789()
{
// Генерируем Ключ
GenerateKey();
}
/// <summary>
/// Шифровать строку
/// </summary>
/// <param name="source">Строка для зашифровки</param>
/// <returns>Шифр</returns>
public byte[] Crypt(string source)
{
Encoding enc = System.Text.Encoding.GetEncoding("utf-8");
return DoCrypt(enc.GetBytes(source));
}
/// <summary>
/// Шифрует файл
/// </summary>
/// <param name="fs">Files strem</param>
/// <returns>В той же папке создаётся файл с расширением crypt</returns>
public void Crypt(FileStream fs)
{
BinaryWriter bw;
BinaryReader br = new BinaryReader(fs);
byte[] crypt = DoCrypt(br.ReadBytes((int)fs.Length));
// save crypt file
FileStream fsc = new FileStream(fs.Name+".crypt", FileMode.CreateNew);
bw = new BinaryWriter(fsc);
bw.Write(crypt);
bw.Close();
fsc.Close();
fs.Close();
// save key
FileStream fsk = new FileStream(fs.Name + ".key", FileMode.CreateNew);
bw = new BinaryWriter(fsk);
bw.Write(this.key);
bw.Close();
fsk.Close();
}
/// <summary>
/// Расшифровывает строку
/// </summary>
/// <param name="source">Строка для расшифровки</param>
/// <returns>Расшифрованная строка</returns>
public string Decrypt(byte[] source)
{
return System.Text.UTF8Encoding.UTF8.GetString(DoDecrypt(source));
}
/// <summary>
/// Расшифровывает файл
/// </summary>
/// <param name="fs">Files strem</param>
/// <returns>В той же папке создаётся файл с расширением decrypt</returns>
public void Decrypt(FileStream fs)
{
BinaryReader br;
FileStream fsk = new FileStream(fs.Name.Replace(".crypt","") + ".key", FileMode.Open);
br = new BinaryReader(fsk);
byte[] key = br.ReadBytes((int)fs.Length);
br.Close();
fsk.Close();
br = new BinaryReader(fs);
byte[] dcrypt = DoDecrypt(br.ReadBytes((int)fs.Length));
FileStream fsc = new FileStream(fs.Name + ".decrypt", FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fsc);
bw.Write(dcrypt);
bw.Close();
fsc.Close();
fs.Close();
}
Размещено на Allbest.ru
Подобные документы
Алгоритм ГОСТ 28147-89 симметричного шифрования на основе сети Фейстеля, основные режимы его работы. Атаки на системы защиты информации. Метод грубой силы. Атаки класса "встреча посередине". Характеристики ГОСТ 28147-89 и американского шифра Rijndael.
курсовая работа [510,7 K], добавлен 17.01.2012Исследование системы распределения ключей на основе линейных преобразований. Описание компонентов сети конфиденциальной связи. Характеристика отечественного алгоритма шифрования данных. Обзор результатов расчетов криптостойкости алгоритма шифрования.
контрольная работа [56,5 K], добавлен 26.09.2012Криптография и шифрование. Симметричные и асимметричные криптосистемы. Основные современные методы шифрования. Алгоритмы шифрования: замены (подстановки), перестановки, гаммирования. Комбинированные методы шифрования. Программные шифраторы.
реферат [57,7 K], добавлен 24.05.2005Комбинированное использование симметричного и асимметричного шифрования. Зависимость между открытым и закрытым ключами. Основные недостатки симметричного шифрования. Схема двухстороннего конфиденциального обмена. Концепция шифрования по алгоритму DES.
презентация [1,4 M], добавлен 20.12.2012Статистический анализ текстов, созданных программой симметричного шифрования. Реализация симметричного криптоалгоритма. Основные шаги в использовании криптосистемы PGP. Генерация ключей, шифрование и расшифровка сообщений. Защита от сетевых атак.
лабораторная работа [1,7 M], добавлен 06.07.2009Методы шифрования данных. Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования. Визуальное представление, схема приемника и передатчика. Расшифровывание зашифрованных данных в режиме гаммирования. Стойкость и возможности обхождения шифра.
реферат [823,8 K], добавлен 26.12.2011Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.
курсовая работа [101,1 K], добавлен 09.03.2009История появления симметричных алгоритмов шифрования. Роль симметричного ключа в обеспечении степени секретности сообщения. Диффузия и конфузия как способы преобразования бит данных. Алгоритмы шифрования DES и IDEA, их основные достоинства и недостатки.
лабораторная работа [335,9 K], добавлен 18.03.2013Криптографические методы обеспечения конфиденциальности, невозможности прочтения информации посторонним. Современные методы шифрования информации как обратимого преобразования открытого текста в шифрованный на основе секретного алгоритма или ключа.
презентация [514,3 K], добавлен 06.02.2016Особенности шифрования данных, предназначение шифрования. Понятие криптографии как науки, основные задачи. Анализ метода гаммирования, подстановки и метода перестановки. Симметрические методы шифрования с закрытым ключом: достоинства и недостатки.
курсовая работа [564,3 K], добавлен 09.05.2012