Алгоритм возведения целого числа в степень по модулю

Задание

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

2. Изучить процедуру возведения целого числа в целую степень по модулю и создание на ее основе односторонних функций с секретом (при желании выполнить программную реализацию процедуры). Выполнить два примера по индивидуальному заданию.

3. Изучить протокол обмена ключами Диффи–Хеллмана (подготовка исходных данных, последовательность действий абонентов при получении общего ключа и выполняемые ими процедуры); открытая и секретная информация. Выполнить индивидуальное задание в соответствии со своим вариантом вручную.(первообразный корень выбрать минимально возможным ).

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

По желанию дополнительно (+2 балла)

5 Программно реализовать и продемонстрировать процедуры шифрования – дешифрования RSA.

Выбор варианта: студент выбирает № варианта задачи, определив значение t,где t = [N/ 13] – остаток от деления нацело числа N (порядковый номер в основном списке группы).

Таблица 1 – Индивидуальные задания к лабораторной работе 6

№ вар. Задание к п. 2 Задание к п. 3 Задание к п. 4
x y mod n p a b p q e m
5,11
7, 15
8,17
23,9
17,8
4,21
6,14
9,22
15,8
13,6
7,17
9,23
7,12

Контрольные вопросы

1 Теоретические основания асимметричных схем шифрования (сведения из теории чисел и модулярной арифметики).

2 Алгоритм возведения целого числа в степень по модулю.

3 Протокол обмена ключами.

4 Алгоритм RSA, подготовка открытого и секретного ключа; порядок действий при обмене информацией.

5 Каковы достоинства и недостатки асимметричных криптоалгоритмов ?

Краткие теоретические сведения

Модулярная арифметика

 

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

Определение При заданных целых числах x ,и n> 0 операция x (mod n) «деление по модулю» возвращает r – остаток от деления числа x на число n ( и удовлетворяет условию x= k n + r , где k – целое число).

Теорема (свойства операции «деление по модулю»)

Пусть x, y и n > 0 – целые числа, причем НОД (y, n) = 1 (НОД – наибольший общий делитель; если НОД (y, n) = 1, то y и n называют взаимно простыми числами).

1. (x + y) mod n = [(x ) mod n + (y) mod n] (mod n).

2. ( – x ) mod n = (n – x ) mod n = n – (x mod n) .

3. (x x y) mod n = [(x ) mod n x (y) mod n] (mod n).

4. Обозначим через y-1 mod n величину, обратную к y по модулю n. Она является единственным числом из интервала [1,n –1], удовлетворяющем условию (y-1 x y )mod n = 1.

Как и при делении рациональных чисел, деление чисел по модулю можно заменить на умножение делимого на число обратное делителю (если оно существует). Для любого y, если НОД (y, n) = 1, выражение (x x y-1) mod n можно заменить на (x / y) mod n .

Замечание В операции «деление по модулю» x mod n величина k не важна. Следовательно в тождестве x mod n = y mod n числа x и y могут отличаться на величину, кратную n. Тогда это уравнение можно записать так x ≡ y mod n или y ≡ x mod n . Эта операция называется сравнение чисел по модулю, а числа x и y называют сравнимыми по модулю.

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

а) коммутативны (перестановка операндов не меняет результата);

б) ассоциативны (изменение последовательности выполнения операций результата не меняет).

Возведение в степень по модулю

Определение x y (mod n) при x , y > 0 совпадает с определением обычной степени целого числа (т.е = x x x … x(y раз) (mod n)).

Введем операцию целочисленного деления на 2 (y÷ 2):

 

y÷ 2 = y /2, если y – четно
(y –1)/2, если y – нечетно

Тогда:

 

 

x y= (x 2) (y ÷ 2), если y – четно
x (x 2) (y ÷ 2), если y – нечетно

 

Алгоритм возведения целого числа в степень по модулю

 

ВХОД : x, y , n : целые числа x> 0, y≥ 0 n > 1

ВЫХОД : x, y (mod n).

Е (x, y , n )

1. if y = 0 return ( 1 );

2. if y (mod 2) = 0 return ( E (x2(mod n)), (y ÷ 2), n );

3. return (x ∙E (x2(mod n)), (y ÷ 2), n ) (mod n).

Операция return (значение) возвращает процесс вычисления в точку вызова функции Е (т.е. если выполнен шаг 2, то шаг 3 не будет реализован).

Пример 1 Вычислить 221(mod 23).

221(mod 23) = Е (2, 21, 23) = 2∙ Е (4, 10, 23) = 2∙ Е (16, 5, 23) = 2∙ 16∙Е (162, 2, 23) =

= (2∙ 16)(mod 23) ∙Е (162(mod 23), 2, 23) = 9∙Е (3, 2, 23) = 9∙Е (9, 1, 23) = 81∙Е (9, 0, 23) =

=81 (mod 23) = 12.

Ответ: 221(mod 23) ≡ 12.