- •Федеральное агенство по образованию Государственное образовательное учреждение высшего профессионального образования «Санкт-Петербургский государственный электротехнический университет» («лэти»)
- •Введение
- •1. Обзор современного состояния темы
- •2. Алгоритмы и атаки, включенные в состав обучающей программы
- •2.1. Критерии отбора алгоритмов
- •2.2. Симметричные алгоритмы шифрования
- •2.3. Описание симметричных криптографических алгоритмов
- •2.3.1. Алгоритм Blowfish
- •2.3.2. Алгоритм гост
- •3. Алгоритмы шифрования с открытым ключом
- •3.1. Алгоритм rsa
- •3.2. Алгоритм Эль-Гамаля
- •4. Алгоритмы цифровой подписи
- •4.1. Схема rsa
- •4.2. Схема dsa
- •4.3. Схема подписи Эль-Гамаля
- •4.4. Алгоритм гост
- •5. Криптографические атаки
- •5.1. Атака на общий модуль против алгоритма rsa
- •5.2. Атака на выбранный шифртекст против алгоритма rsa
- •5.3. Атака против алгоритма dsa
- •6. Особенности реализации алгоритмов
- •6.1. Управление ключами
- •6.1.1. Генерация ключей
- •6.1.2. Хранение ключей
- •6.1.3. Длина ключа
- •6.2. Особенности реализации асимметричных алгоритмов
- •6.2.1. Модульная арифметика
- •6.2.2. Представление многозначных чисел
- •6.2.3. Сложение многозначных чисел
- •6.2.4. Умножение многозначных чисел
- •6.2.5. Деление многозначных чисел
- •6.3. Особенности реализации симметричных алгоритмов
- •6.3.1. Дополнение сообщений
- •6.3.2. Таблицы подстановки для алгоритма шифрования гост 28147-89
- •6.3.3. Подключи и таблицы подстановки для алгоритма Blowfish
- •6.3.4. Режим использования блочных шифров
- •Проектирование интерфейса
- •7.1. Сценарии использования программы
- •7.2. Пошаговое выполнение симметричных алгоритмов
- •7.3. Пошаговое выполнение асимметричных шифров
- •7.4. Пошаговое выполнение алгоритмов цифровой подписи
- •7.5. Демонстрация работы атак
- •7.5.1. Криптоанализ алгоритма rsa на основе выбранного шифртекста
- •7.5.2. Криптоанализ алгоритма rsa для случая общего модуля
- •8. Оценка скорости работы алгоритма
- •9. Структура диалога
- •10. Заключение
- •Список литературы
6.2.4. Умножение многозначных чисел
Умножение также происходит аналогично умножению в столбик. Первый множитель последовательно умножается на отдельные 32-битовые слова второго множителя, а результаты умножения, сдвинутые на соответствующее число разрядов, складываются. Для умножения используется команда mul, которая позволяет не потерять результат умножения, если его длина превышает 32 бита, записывая произведение в регистрыEDX:EAX.
6.2.5. Деление многозначных чисел
Деление числа произвольного размера на число произвольного размера выполнить с помощью команды divвыполнить невозможно. Используется деление в столбик с помощью последовательных вычитаний делителя (сдвинутого влево на соответствующее число разрядов) из делимого, увеличивая соответствующий разряд частного на 1 при каждом вычитании, пока не останется число меньшее делителя.
Если выполняется деление числа произвольного размера на число длиной не больше 32 бит, то можно использовать более простой и быстрый алгоритм, использующий команду div.
6.3. Особенности реализации симметричных алгоритмов
6.3.1. Дополнение сообщений
Блочные алгоритмы обрабатывают блоки фиксированного размера, например, 8 байт, но длина открытого текста часто не кратна 8. С этой целью производится дополнение последнего неполного блока нулевыми байтами. Затем добавляется еще один блок, в котором все байты кроме первого нулевые, а первый байт содержит количество байтов в последнем неполном блоке. Этот блок также шифруется и добавляется в конец зашифрованного текста. Он необходим, чтобы при дешифрации открытый текст не содержал лишних нулей в конце. Эта процедура дополнения используется и в том случае, когда длина открытого текста кратна 8. При этом длина зашифрованного текста на 16 байт больше, чем длина открытого.
6.3.2. Таблицы подстановки для алгоритма шифрования гост 28147-89
Согласно стандарту таблицы подстановок служат дополнительным ключом и должны держаться в секрете [2]. Этот долговременный ключ является общим для всех пользователей сети связи и поставляется в установленном порядке. Стандарт объясняет это тем, что стойкость данного алгоритма критически зависит от качества используемых таблиц подстановок. При правильном выборе даже в случае известных таблиц подстановки стандарт обеспечивает высокую стойкость. Однако критерии выбора таблиц подстановки для этого шифра не приводятся в официальных документах. Такой подход имеет серьезные недостатки.
Требования секретности таблиц подстановок не согласуется с общепринятым принципом Керхкоффа, поскольку данные элементы относятся скорее к алгоритму шифрования, а не к легко сменяемому секретному ключу.
При уходе хотя бы одного пользователя из коллектива, в котором используются секретные таблицы подстановки, требуется смена таблиц подстановки.
Учитывая данные замечания, было решено генерировать таблицы подстановок случайным образом. Конечно, такой подход может привести к резкому снижению стойкости алгоритма, но в данном случае основной задачей было только продемонстрировать учащимся принцип работы данного шифра.
6.3.3. Подключи и таблицы подстановки для алгоритма Blowfish
Подключи и таблицы подстановки для Blowfishгенерируются следующим образом [3].
В порядке возрастания номера элемента заполнить массив подключей, а затем таблицы подстановки строкой, состоящей из 16-ричных цифр записи числа .
Произвести операцию исключающего ИЛИ с K1и первыми 32 битами ключа и результат занести вK1, повторить ту же операцию сK2и вторыми 32 битами ключа. Повторять эти действия для всехKi.
Зашифровать строку из 64 нулевых бит алгоритмом Blowfish, используя подключи, сгенерированные на шаге 1 и 2.
Заменить K1иK2результатом шифрования на шаге 3.
Зашифровать результат шага 3, используя алгоритм Blowfishс модифицированными подключами.
Заменить K3иK4результатом шага 5.
Продолжать эти процедуры шифрования, последовательно заполняя подключи и таблицы подстановки результатами работы постоянно изменяющегося алгоритма Blowfish.
Такой алгоритм позволяет создать подключи и таблицы подстановки, которые сильно зависят от ключа. Использование числа упрощает реализацию алгоритма, т.к. в противном случае пришлось бы отдельно определять значения для инициализации.
Поскольку в обучающей программе необязательно строго следовать стандартам, подключи и таблицы подстановки заполняются псевдослучайными значениями. Чтобы одному и тому же ключу всегда соответствовали одни и те же таблицы, перед заполнением генератор случайных чисел инициализируется значением секретного ключа.