- •Постановка задачи
- •Обзор современного состояния темы
- •Выбор алгоритмов и атак
- •Критерии выбора алгоритмов
- •Выбор симметричных алгоритмов шифрования
- •Выбор алгоритмов шифрования с открытым ключом
- •Выбор алгоритмов цифровой подписи
- •Выбор криптографических атак
- •Описание использованных криптографических алгоритмов
- •Симметричные алгоритмы шифрования
- •Алгоритм гост
- •Асимметричные алгоритмы шифрования
- •Алгоритмы цифровой подписи
- •Алгоритм гост
- •Описание использованных атак
- •Атака на общий модуль против алгоритмаRsa
- •Атака на выбранный шифртекст против алгоритмаRsa
- •Атака против алгоритмаDsa
- •Особенности реализации алгоритмов
- •Управление ключами
- •Генерация ключей
- •Хранение ключей
- •Длина ключа
- •Особенности реализации асимметричных алгоритмов
- •Модульная арифметика
- •Представление многозначных чисел
- •Сложение многозначных чисел
- •Умножение многозначных чисел
- •Деление многозначных чисел
- •Особенности реализации симметричных алгоритмов
- •Дополнение сообщений
- •Подключи и таблицы подстановки для алгоритмаBlowfish
- •Режим использования блочных шифров
- •Проектирование интерфейса
- •Сценарии использования программы
- •Пошаговое выполнение симметричных алгоритмов
- •Пошаговое выполнение асимметричных шифров
- •Пошаговое выполнение алгоритмов цифровой подписи
- •Демонстрация работы атак
- •Оценка скорости работы алгоритма
- •Структура диалога
- •Архитектура программы
- •Использование объектов-функций
- •Использование потоков
- •Использование генераторов ключей
- •Структура модулей
- •Заключение
- •Список литературы
Умножение многозначных чисел
Умножение также происходит аналогично умножению в столбик. Первый множитель последовательно умножается на отдельные 32-битовые слова второго множителя, а результаты умножения, сдвинутые на соответствующее число разрядов, складываются. Для умножения используется команда mul, которая позволяет не потерять результат умножения, если его длина превышает 32 бита, записывая произведение в регистрыEDX:EAX.
Деление многозначных чисел
Деление числа произвольного размера на число произвольного размера выполнить с помощью команды divвыполнить невозможно. Используется деление в столбик с помощью последовательных вычитаний делителя (сдвинутого влево на соответствующее число разрядов) из делимого, увеличивая соответствующий разряд частного на 1 при каждом вычитании, пока не останется число меньшее делителя.
Если выполняется деление числа произвольного размера на число длиной не больше 32 бит, то можно использовать более простой и быстрый алгоритм, использующий команду div.
Особенности реализации симметричных алгоритмов
Дополнение сообщений
Блочные алгоритмы обрабатывают блоки фиксированного размера, например, 8 байт, но длина открытого текста часто не кратна 8. С этой целью производится дополнение последнего неполного блока нулевыми байтами. Затем добавляется еще один блок, в котором все байты кроме первого нулевые, а первый байт содержит количество байтов в последнем неполном блоке. Этот блок также шифруется и добавляется в конец зашифрованного текста. Он необходим, чтобы при дешифрации открытый текст не содержал лишних нулей в конце. Эта процедура дополнения используется и в том случае, когда длина открытого текста кратна 8. При этом длина зашифрованного текста на 16 байт больше, чем длина открытого.
Таблицы подстановки для алгоритма шифрования ГОСТ 28147-89
Согласно стандарту таблицы подстановок служат дополнительным ключом и должны держаться в секрете [2]. Этот долговременный ключ является общим для всех пользователей сети связи и поставляется в установленном порядке. Стандарт объясняет это тем, что стойкость данного алгоритма критически зависит от качества используемых таблиц подстановок. При правильном выборе даже в случае известных таблиц подстановки стандарт обеспечивает высокую стойкость. Однако критерии выбора таблиц подстановки для этого шифра не приводятся в официальных документах. Такой подход имеет серьезные недостатки.
Требования секретности таблиц подстановок не согласуется с общепринятым принципом Керхкоффа, поскольку данные элементы относятся скорее к алгоритму шифрования, а не к легко сменяемому секретному ключу.
При уходе хотя бы одного пользователя из коллектива, в котором используются секретные таблицы подстановки, требуется смена таблиц подстановки.
Учитывая данные замечания, было решено генерировать таблицы подстановок случайным образом. Конечно, такой подход может привести к резкому снижению стойкости алгоритма, но в данном случае основной задачей было только продемонстрировать учащимся принцип работы данного шифра.
Подключи и таблицы подстановки для алгоритмаBlowfish
Подключи и таблицы подстановки для Blowfishгенерируются следующим образом [3].
В порядке возрастания номера элемента заполнить массив подключей, а затем таблицы подстановки строкой, состоящей из 16-ричных цифр записи числа .
Произвести операцию исключающего ИЛИ с K1и первыми 32 битами ключа и результат занести вK1, повторить ту же операцию сK2и вторыми 32 битами ключа. Повторять эти действия для всехKi.
Зашифровать строку из 64 нулевых бит алгоритмом Blowfish, используя подключи, сгенерированные на шаге 1 и 2.
Заменить K1иK2результатом шифрования на шаге 3.
Зашифровать результат шага 3, используя алгоритм Blowfishс модифицированными подключами.
Заменить K3иK4результатом шага 5.
Продолжать эти процедуры шифрования, последовательно заполняя подключи и таблицы подстановки результатами работы постоянно изменяющегося алгоритма Blowfish.
Такой алгоритм позволяет создать подключи и таблицы подстановки, которые сильно зависят от ключа. Использование числа упрощает реализацию алгоритма, т.к. в противном случае пришлось бы отдельно определять значения для инициализации.
Поскольку в обучающей программе необязательно строго следовать стандартам, подключи и таблицы подстановки заполняются псевдослучайными значениями. Чтобы одному и тому же ключу всегда соответствовали одни и те же таблицы, перед заполнением генератор случайных чисел инициализируется значением секретного ключа.