Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Криптография / ОБУЧАЮЩИЕ ПРОГРАММЫ / Пояснительная записка.doc
Скачиваний:
39
Добавлен:
01.05.2014
Размер:
411.65 Кб
Скачать
    1. Оценка скорости работы алгоритма

Для обработки достаточно длинных сообщений в программе имеется возможность шифровать или подписывать заданный файл. Структура, содержание и размер файла не имеют значения.

Для шифрования файла требуется задать файл с открытым текстом и файл, в который требуется поместить зашифрованный текст. Это должны быть два разных файла. При этом файл с открытым текстом не изменяется. Точно так же можно провести и дешифрование ранее зашифрованного файла.

При создании цифровой подписи она помещается в отдельный заданный файл. Для проверки подписи требуется задать файл с сообщением и файл с подписью.

После завершения операции с файлом выводятся: время обработки, включая время, затраченное на чтение и запись в файл; размер исходного файла; размер файла с шифртекстом; результат проверки подписи. Для измерения продолжительности операции замеряется системное время до и после выполнения операции.

    1. Структура диалога

Каждый прямоугольник означает экранную форму. Стрелка между формами означает, что пользователь может перейти от одной форме к другой в направлении, показанном стрелкой.

Форма «Выбор алгоритма» предназначена для выбора методов шифрования и цифровой подписи, которые будут использоваться при действиях с файлами.

  1. Архитектура программы

    1. Использование объектов-функций

Одной из основных сущностей в данной программе является криптографический алгоритм. Для представления таких алгоритмов можно использовать функции, но можно и классы. Последнее решение и было использовано, поскольку в таком случае:

  1. Не возникает вопроса о том, где хранить параметры, ключи, подключи и таблицы подстановок. Все это будут члены-данные соответствующих классов. В противном случае их пришлось бы делать глобальными переменными.

  2. Алгоритмы можно расположить в иерархии «обобщение-специализация», например, Blowfish– это вид блочного шифра, а блочный шифр – это шифровальный алгоритм. Это улучшит структурированность программы, не приведет к дублированию кода.

Класс BlockCipherотвечает за хранение ключа и режима использования шифра –ECBилиCBC. Для симметричных шифров возможно хранение ключа в базовом классе, т.к. ключ всегда является последовательностью символов, на структуру которой нет ограничений. Для асимметричных алгоритмов такое представление невозможно.

Класс BlockEncryptionотвечает за разбиение сообщения на блоки фиксированной длины, дополнение сообщений, т.к. эти операции не зависят от конкретного вида шифра. Длина блока получается с помощью чисто виртуальной функцииBlockCipher::GetBlockLength.

Создание двух классов BlockEncryptionиBlockDecryptionвместо одного предусматривает случай, когда алгоритм шифрования существенно отличается от алгоритма дешифрования, хотя в работе таких шифров нет. КлассBlockCipherявляется виртуальным базовым классом, чтобы ключ не дублировался.

В результате, от подклассов, реализующих конкретные шифры, требуется только предоставление информации о длине блока, возможной длине ключа и преобразование отдельного заданного блока.

Каждый из классов Encryption, Decryption, Signature и Verification имеют по одной чисто виртуальной функции Encrypt, Decrypt, Sign, Verify соответственно. Их параметрами являются входное и выходное сообщения.

Хеш-функции также объединены в иерархию, но единственной хеш-функцией в программе является SHA, поэтому у абстрактного классаHashесть только один подкласс.