- •Постановка задачи
- •Обзор современного состояния темы
- •Выбор алгоритмов и атак
- •Критерии выбора алгоритмов
- •Выбор симметричных алгоритмов шифрования
- •Выбор алгоритмов шифрования с открытым ключом
- •Выбор алгоритмов цифровой подписи
- •Выбор криптографических атак
- •Описание использованных криптографических алгоритмов
- •Симметричные алгоритмы шифрования
- •Алгоритм гост
- •Асимметричные алгоритмы шифрования
- •Алгоритмы цифровой подписи
- •Алгоритм гост
- •Описание использованных атак
- •Атака на общий модуль против алгоритмаRsa
- •Атака на выбранный шифртекст против алгоритмаRsa
- •Атака против алгоритмаDsa
- •Особенности реализации алгоритмов
- •Управление ключами
- •Генерация ключей
- •Хранение ключей
- •Длина ключа
- •Особенности реализации асимметричных алгоритмов
- •Модульная арифметика
- •Представление многозначных чисел
- •Сложение многозначных чисел
- •Умножение многозначных чисел
- •Деление многозначных чисел
- •Особенности реализации симметричных алгоритмов
- •Дополнение сообщений
- •Подключи и таблицы подстановки для алгоритмаBlowfish
- •Режим использования блочных шифров
- •Проектирование интерфейса
- •Сценарии использования программы
- •Пошаговое выполнение симметричных алгоритмов
- •Пошаговое выполнение асимметричных шифров
- •Пошаговое выполнение алгоритмов цифровой подписи
- •Демонстрация работы атак
- •Оценка скорости работы алгоритма
- •Структура диалога
- •Архитектура программы
- •Использование объектов-функций
- •Использование потоков
- •Использование генераторов ключей
- •Структура модулей
- •Заключение
- •Список литературы
Структура модулей
Компиляционная зависимость между двумя модулями показана стрелкой, выходящей из зависимого модуля.
Диаграмма модулей симметричных шифров
Модуль CryptoObjectsне содержит определений классов. В заголовкеCryptoObjects.hобъявлены имена указателей на объекты классов, которые реализуют криптографические алгоритмы. Объявлены также функцииGenerateKeys() иDestroyAll(), которые обеспечивают размещение этих объектов в динамической памяти и их удаление соответственно. Выделение отдельного модуля для этих целей было необходимо, поскольку:
Создание таких объектов требует генерации ключей, т.е. значительного времени. Поэтому их неконтролируемое создание может привести к сильному снижению скорости работы программы.
Объект для шифрования должен создаваться в одном месте с дешифратором, поскольку их ключи должны быть согласованы.
Для каждого алгоритма в модуле CryptoObjectsопределены указатели на объекты, представляющие шифратор, дешифратор, генератор ключей, а также, если предусмотрено, генератор цифровой подписи.
Модуль LongIntсодержит определение классаLongIntдля работы с многозначными целыми числами, определение всех необходимых арифметических операций над такими числами и процедуры для работы с модульной арифметикой.
Заключение
В результате выполнения работы была создана обучающая программа, которая предназначена помочь освоить некоторые разделы современной криптографии. Программа не содержит электронного учебника. Предполагается, что учащийся уже знаком с материалом, а к программе обращается, чтобы углубить свои знания и сделать выводы. В результате работы с программой студент может узнать:
Принципы работы итеративных блочных шифров.
Принципы работы асимметричных шифров.
Назначение цифровой подписи.
Оценки скорости работы шифров.
Оценки скорости генерации ключей.
Основные стандарты, существующие в современной криптографии: российский стандарт шифрования (ГОСТ 28147-89), российский стандарт цифровой подписи (ГОСТ 34.10-94), американский стандарт цифровой подписи (DSS).
Изучение атак, реализованных в программе, поможет студенту научиться:
Формировать цифровую подпись.
Генерировать и распределять ключи для асимметричных алгоритмов.
В качестве примеров были выбраны одноключевые блочные шифры Blowfishи ГОСТ 28147-89, двухключевые алгоритмы шифрованияRSAи схема Эль-Гамаля, двухключевые алгоритмы цифровой подписи –RSA, схема Эль-Гамаля,DSA, ГОСТ 34.10-94. Все вышеперечисленные алгоритмы были реализованы. Для некоторых алгоритмов длина ключа не соответствует стандартам.
Предложенная структура диалога имеет следующие недостатки:
Основное время пользователь работает с вторичными окнами (окнами диалога). Следовательно, он не может использовать все пространство на экране или даже его большую часть для вывода данных.
Первый недостаток приводит к тому, что все поля для ввода и вывода очень малы.
Структура диалога слишком сложна. Это вызвано тем, что порядок появления диалоговых окон неочевиден.
Структура диалога замедляет работу с программой, особенно опытных пользователей.
Предложенная модель диалога хорошо подходит для того, чтобы помочь пользователю в выполнении сложных и редко встречающихся задач. В качестве основы для построения диалога такая модель подходит плохо.