- •Федеральное агентство по образованию
- •Брянск Издательство бгту
- •Введение
- •Часть 1. Арифметика остатков. Элементарные шифры. Шифр Цезаря.
- •Аффинный шифр.
- •Обобщенный алгоритм Евклида
- •Вскрытие аффинного шифра по двум паросочетаниям.
- •Варианты заданий к первой части
- •Возведение в квадрат
- •Символы Лежандра и Якоби, извлечение квадратного корня.
- •Часть 2. Базовые теоретико-числовые алгоритмы. Китайская теорема об остатках.
- •Возведение в степень и нахождение порождающего элемента группы.
- •Генерация простых чисел.
- •Варианты заданий ко второй части
- •Часть 3. Асимметричные криптографические протоколы и системы шифрования с открытым ключом.
- •Протокол Диффи-Хеллмана.
- •Трехпроходный протокол Шамира.
- •Криптосистема rsa.
- •Криптосистема Эль-Гамаля.
- •Криптосистема Рабина.
- •Варианты заданий к третьей части
- •Часть 4. Асимметричные схемы электронно-цифровой подписи.
- •Цифровая подпись rsa.
- •Цифровая подпись Эль-Гамаля.
- •Генерация сильно простого числа и порождающего элемента.
- •Цифровая подпись dsa.
- •Варианты заданий к четвертой части
- •Часть 5. Эллиптические кривые над конечным полем.
- •Протокол Диффи-Хеллмана на эллиптических кривых.
- •Цифровая подпись ec-dsa
- •Варианты заданий для пятой части
- •Заключение
- •Приложение 1.
- •Приложение 2 Листинг программы для решения задач 5.3, 5.4 на языке c#
- •Приложение 3 Листинг программы для решения задач 5.3, 5.4 на языке Pascal
- •Список использованной и рекомендуемой литературы.
Возведение в степень и нахождение порождающего элемента группы.
Приведенный ниже шаблон реализует так называемое «наивное» модульное возведение в степень в конечном поле. Для примера взято поле F19. Заносим его элементы в первую строку таблицы, а в ячейку A2 вводим формулу согласно рис. 7.
Рис. 7. Исходная формула
Распространяем формулу на диапазон ячеек A2:R18
Рис. 8. Таблица Кэли с выделенными примитивными элементами
В результате получилась таблица Кэли для возведения в степень по модулю 19. Особое внимание обратим на столбцы, выделенные серым цветом. В них многократное применение операции умножения к заглавным элементам столбцов образует полную перестановку элементов поля. Такие элементы называют порождающими или примитивными. Кроме того, следует обратить внимание на последнюю строку таблицы (все единицы). Она хорошо иллюстрирует малую теорему Ферма:
На практике наивное возведение в степень оказывается неэффективным. Приведем алгоритм бинарного модульного возведения в степень. В основе алгоритма лежит схема Горнера. Проиллюстрируем ее на конкретном примере [8]:
Что в итоге дает вместо 26 умножений – 4 возведения в квадрат + 3 умножения. Для больших чисел экономия становится еще более значительной. Заметим, что последовательность возведений в квадрат и удвоений соотносится с двоичным представлением показателя степени:
Начиная со второго старшего двоичного разряда 1 – возвести в квадрат и домножить, 0 – возвести в квадрат.
Алгоритм
бинарного модульного экспоненцирования
[1]:
Представить показатель степени в двоичном виде:
Присвоить
Для
i
от 1 до r:
;
Задача 2.3. Возвести число x в степень y по модулю числа N, используя метод бинарного модульного экспоненцирования.
Пример решения.
Дано: x = 134 y = 344 N = 365 |
Решение: |
||
|
|||
|
yi |
|
|
Найти: |
|
0 |
|
xy mod N |
|
1 |
|
|
|
0 |
|
|
|
1 |
|
|
|
1 |
|
|
|
0 |
|
|
|
0 |
|
|
|
0 |
|
Генерация простых чисел.
Детерминированной зависимости распределения простых чисел не существует. Также не существует детерминированного алгоритма их генерации. Наилучшие результаты дают вероятностные тесты числа на простоту из которых на практике наиболее применим тест Рабина-Миллера [13]:
Выбрать для тестирования число p. Вычислить b – число делений p – 1 на 2 (то есть 2b – это наибольшая степень числа 2, на которую делится p – 1). Затем вычислить m, такое, что p = 1 + 2b · m.
Выбрать случайное число a, меньшее p.
Установить j = 0 и z = am mod p.
Если z = 1 или если z = p – 1, то p проходит тест и может быть простым числом.
Если j > 0 и z = 1, то p не относится к простым числам.
Установить j = j + 1. Если j < b и z (p – 1), установить z = z2 mod p и вернуться к шагу 4). Если z = p – 1, то p проходит тестирование и может быть простым числом.
Если j = b и z (p – 1), то p не относится к простым числам.
Считается, что число, прошедшее тест пять раз с вероятностью более 95% является простым.
Задача 2.4. Провести тест простоты Рабина-Миллера для числа p при помощи заданного числа a.
Пример решения.
Дано: p = 241 a = 99 |
Решение:
|
Повести тест простоты |
|
|
|
