Лабораторные и практики / 02_ЛР / 2_ЛР
.pdfМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
_____________________________________________________________________________
Кафедра информационной безопасности телекоммуникационных систем Дисциплина «Основы криптографии с открытыми ключами»
Лабораторная работа 2
«Основы теории чисел»
Выполнила: |
студ. гр. |
|
. |
.
\
Проверил: |
проф. Яковлев В.А.. |
Санкт-Петербург
2021
Цель работы:
Закрепить знания, полученные на лекциях дисциплин «Основы криптографии», «Криптографические методы защиты информации» и приобрести навыки вычислений по блоку занятий «Математический базис криптосистем с открытым ключом».
Задание
1.Выполнить упражнения по определению делимости чисел, нахождению их наибольшего общего делителя (gcd(a,b)) и по нахождению канонического представления gcd и обратного элемента при помощи расширенного алгоритма Евклида.
2.Произвести определение конгруэнтности чисел, проверку утверждений теорем Эйлера и Ферма, убедиться в возможности быстрого вычисления возведения в степень и обращения чисел по модулю.
Ход работы:
1.Проверим, являются ли числа d делителями n, используя следующую команду: integerp(n/d), где n и d - произвольные пятиразрядные числа.
Рис. 1. Выполнение команды integerp(n/d).
2.Найдем делители нескольких пятиразрядных чисел при помощи следующей команды: divisors(n)
Рис. 2. Выполнение команды divisors(n).
Убедимся в правильности расчетов, посчитав “вручную” на примере первой функции.
Число 11111 делится на само себя и на 1, разделим число на 41 и 271.
11111 |
|
41 |
11111 |
|
271 |
|
_82 |
|
271 |
|
1084 |
|
41 |
291 |
|
|
271 |
|
|
|
287 |
|
|
|
271 |
|
|
41 |
|
|
0 |
|
|
|
41 |
|
|
|
|
|
|
0
Проверка проведена успешно, расчёт функции верен.
3.Для нескольких пар пяти разрядных чисел и одной пары четырех разрядных чисел используем команду: gcd(a,b) .
Рис. 3. Выполнение команды gcd(a,b).
Убедимся в правильности расчетов “вручную”, выполнив следующее задание:
Найти наибольший общий делитель для пары чисел. Четные номера. Найти НОД(8888,24NN),
Нечетные номера. Найти НОД(4848,12(NN+1)),
где NN –двузначный номер по журналу. Например, если номер 29, то второе число 1230.
Вариант №6. НОД(8888, 2406)=?
Решение:
8888 = 2406 ∙ 3 + 1670
2406 = 1670 + 736
1670 = 736 ∙ 2 + 198
736 = 198 ∙ 3 + 142
198 = 142 + 56
142 = 56 ∙ 2 + 30
56 = 30 + 26
30 = 26 + 4
26 = 4 ∙ 6 + 2
4 = 2 ∙ 2
НОД: d=2
Результат: НОД(8888, 2406)=2.
4.Для найденных в п.3 пяти gcd(a,b), найдем их канонические представления при помощи расширенного алгоритма Евклида при помощи следующей команды: gcdex(a,b).
Рис. 4. Выполнение команды gcdex(a,b).
Проверим правильность канонических представлений для всех случаев. Если функция отображает верный результат, то должно соблюдаться равенство (z1*a+z2*b)mod(b)= c, где z1, z2 - коэффициент перед большим числом a и коэффициент перед меньшим числом b соответственно, c равно НОД(a, b).
z1 |
z2 |
|
(z1*a+z2*b)mod(b) |
c |
Равенство |
|
|
|
|
|
|
704 |
-153 |
(704*5678 - 15*1234)mod 5678=2 |
2 |
соблюдается |
|
|
|
|
|
|
|
11 |
-2 |
(11 *67890 - 2*12345)mod 67890=15 |
15 |
соблюдается |
|
|
|
|
|
|
|
19802 |
-3601 |
(19802 * 67891 - 3601*12346)mod 67891=1 |
1 |
соблюдается |
|
|
|
|
|
|
|
-7714 |
1403 |
(1403 |
*12348 - 7714*67892)mod 67892=4 |
4 |
соблюдается |
|
|
|
|
|
|
9319 |
-1695 |
(9319 |
* 67894 - 3601*12349)mod 67894=1 |
1 |
соблюдается |
|
|
|
|
|
|
Проверка проведена успешно, программа сработала верно.
5.Для одного четырехразрядного числа и не менее чем для четырех произвольно выбранных пятизначных чисел a сделаем их приведение по модулям произвольных меньших чисел m при помощи команды: mod(a,m)
Рис. 5. Выполнение команды mod(a,m).
Убедимся в правильности расчетов для чисел “вручную”.
1000 900 = (900 + 100) 900 = 100
90001 10000 = (9 ∙ 10000 + 1) 10000 = 1
12345 123 = (123 ∙ 100 + 45) 123 = 45
14444 12 = (1203 ∙ 12 + 8) 12 = 8
6.Найдем мультипликативно обратные элементы к одному двухразрядному числу и не менее чем к четырем девятизначным числам a по простым двузначным модулям m при помощи следующей команды: power_mod(a,-1,m)
Рис. 6. Выполнение команды power_mod(a,-1,m).
Убедимся в правильности расчетов “вручную”, выполнив следующее задание:
Найти обратный элемент к числу а по modb,
где a соответствует числу в таблице 1, порядковый номер которого совпадает с Вашим номером по журналу, b с номером большим на 10 порядковый номер числа а.
Например, если NN=29, то a=157 b=211
|
|
|
|
|
|
|
Таблица1. |
||
|
|
|
|
|
|
|
|
|
|
23 |
29 |
31 |
37 |
41 |
43 |
47 |
53 |
59 |
61 |
|
|
|
|
|
|
|
|
|
|
67 |
71 |
73 |
79 |
83 |
89 |
97 101 |
103 |
107 |
Вариант №6.
a=43, b=89
= −1 (mod b) = 43−1 (mod 89) =?
Решение:
Найдем обратный элемент
89 = 43 ∙ 2 + 3 |
|
3 = 89 − 43 ∙ 2 |
|
43 = 3 ∙ 14 + 1 |
|
1 = 43 − 3 ∙ 14 |
|
1 |
= 43 − 3 ∙ 14 = 43 − (89 − 43 ∙ 2) ∙ 14 = 43 ∙ 29 − 89 ∙ 14 |
||
d |
= 29 |
|
|
Проверка (29 ∙ 43) 89 = (89 ∙ 14 + 1) 89 = 1, верно рассчитали
Результат: 43−1 (mod 89) = 29
7.Рассчитаем функцию Эйлера для одного двухразрядного числа и не менее чем четырех четырехзначных чисел, используя команду: totient(m)
Рис. 7. Выполнение команды totient(m).
Убедимся в правильности расчетов для первого числа “вручную”.
(23) = 23 − 1 = 22
Проверка проведена успешно, расчёт функции верен.
8.Для двух пар произвольных четырехзначных, но взаимно простых чисел a и m, проверим справедливость теоремы Эйлера при помощи следующей команды: mod(a^ totient(m),m).
Рис. 8. Выполнение команды mod(a^ totient(m),m).
9.Произведем возведение 5-значного произвольного числа a в степень произвольного 15-значного числа b по произвольному 4-х значному модулю m, используя команду: power_mod(a,b,m)
Рис. 9. Выполнение команды divisors(n).
Убедимся, что возведение в степень выполняется быстрым алгоритмом, а не b–кратным перемножением числа a самого на себя с приведением по модулю, рассчитав примерное время вычислений на данном компьютере при использовании метода перемножения.
Рис. 10. Перемножение числа a самого на себя, с приведением по модулю.
Данная команда была прервана спустя 15 минут расчётов.
Первым способом результат был получен в течении минуты, вторым способом результат не удалось получить в течении 15 минут. Таким образом, мы убедились, что ранее проводился расчет быстрым алгоритмом.
Используя алгоритм быстрого возведения в степень, вычислить вручную: Четные номера. 31NN(mod7).
Нечетные номера. 51NN(mod7).
Например, если номер 3, то показатель степени 103.
Вариант №6.
3106 mod7 =?
Решение:
106 = 26 ∙ 25 ∙ 23 ∙ 21 = 64 + 32 + 8 + 2
3106 mod7 = 364+32+8+2mod7 = 364 ∙ 332 ∙ 38 ∙ 32mod7 32 mod7 = 9 7 = 2
38 mod7 = 32 ∙ 32 ∙ 32 ∙ 32 mod7 = 2 ∙ 2 ∙ 2 ∙ 2 mod7 = 2 332 mod7 = 38 ∙ 38 ∙ 38 ∙ 38 mod7 = 2 ∙ 2 ∙ 2 ∙ 2 mod7 = 2 364 mod7 = 332 ∙ 332 mod7 = 2 ∙ 2 mod7 = 4
3106mod7 = 364 ∙ 332 ∙ 38 ∙ 32 mod7 = 2 ∙ 2 ∙ 2 ∙ 4 mod7 = 4
Результат: 3106 mod7=4.
10. Решить систему уравнений на основе использования китайской теоремы об остатках.
x x x
a1 mod m1
a2 mod m2
a3 mod m3
,
где a1, a2 , a3 и m1, m2 , m3 |
заданы таблицей |
|
|
|||
|
|
|
|
|
|
|
№ вар |
|
|
ai |
|
mi |
|
6 |
|
4,5,6 |
|
13,19,7 |
|
|
Решение: |
|
|
|
|
|
|
mi и mj взаимно простые числа: |
|
|
||||
НОД(13,19)=1 |
НОД(19,7)=1 |
НОД(7,13)=1 |
||||
19 = 13 + 3 ∙ 2 |
19 = 7 ∙ 2 + 5 |
13 = 7 + 3 ∙ 2 |
||||
13 = 3 ∙ 4 + 1 |
7 = 5 + 2 |
7 = 3 ∙ 2 + 1 |
||||
3 = 1 + 2 |
|
5 = 2 ∙ 2 + 1 |
3 = 2 + 1 |
|||
1 = 1 |
|
|
2 = 1 + 1 |
2 = 1 + 1 |
||
|
|
|
1 = 1 |
|
1 = 1 |
|
Тогда = m1 ∙ m2 ∙ m3 = 13 ∙ 19 ∙ 7 = 1729 |
|||||||||||||||||||
|
Найдем x0 |
по формуле x0 = M1y1a1 + M2y2a2 + M3y3a3, |
||||||||||||||||||
|
где M |
|
|
= |
|
M |
, M y = 1( m |
). |
|
|
||||||||||
|
i |
|
|
|
|
|
||||||||||||||
|
|
|
|
|
mi |
|
|
|
i |
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
Найдем , , |
|
|
|
|
|
||||||||||||||
|
M1 |
= |
|
M |
= |
1729 |
|
|
= 133 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
m1 |
|
|
|
|
13 |
|
|
|
|
|
|
|
|
|||
|
M2 |
= |
|
M |
= |
1729 |
|
= 91 |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
m2 |
|
|
|
|
19 |
|
|
|
|
|
|
|
|
|||
|
M3 |
= |
|
M |
= |
1729 |
|
= 247 |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
m3 |
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|||
|
Найдем , |
, |
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
133y1 = 1 13 |
|
|
|
|
13 = 3 ∙ 4 + 1 |
|
1 = 13 − 3 ∙ 4 |
|||||||||||||
130y1 + 3y1 = 1 13 |
3 = 1 ∙ 2 + 1 |
1 = 3 − 2 ∙ 1 |
||||||||||||||||||
3y1 = 1 13 |
|
|
|
|
||||||||||||||||
y |
= 3−1 13 |
|
|
|
|
1 = 3 − 2 ∙ 1 = 3 − (13 − 3 ∙ 4) ∙ 2 = 3 ∙ − 13 ∙ 2 |
||||||||||||||
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91y2 = 1 19 |
|
|
|
|
19 = 15 + 4 |
|
4 = 19 − 15 |
|||||||||||||
76y2 + 15y2 = 1 19 |
15 = 4 ∙ 3 + 3 |
3 = 15 − 4 ∙ 3 |
||||||||||||||||||
15y2 = 1 19 |
|
|
|
|
||||||||||||||||
y |
= 15−1 19 |
|
|
|
|
4 = 3 + 1 |
1 = 4 − 3 |
|||||||||||||
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y2 = (−5) 19 = 14 |
1 = 4 − 3 = 4 − 15 + 4 ∙ 3 = 4 ∙ 19 − ∙ 15 |
|||||||||||||||||||
|
= |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
247y3 = 1 7 |
|
|
|
|
7 = 2 ∙ 3 + 1 |
1 = 7 − 2 ∙ 3 |
||||||||||||||
245y3 + 2y3 = 1 7 |
|
2 = 1 + 1 1 = 2 − 1 |
||||||||||||||||||
2y3 = 1 7 |
|
|
|
|
|
|
|
|
||||||||||||
y |
= 2−1 7 |
|
|
|
|
1 = 2 − 1 = 2 − (7 − 2 ∙ 3) = 2 ∙ − 7 |
||||||||||||||
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M1 = 133, |
|
M2 = 91, M3 = 247 |
|
|
|||||||||||||||
|
y1 = 9, |
y2 = 14, |
y3 = 4 |
|
|
|
|
|||||||||||||
|
a1 = 4, |
a2 = 5, a3 = 6, |
M = 1729 |
|
x0 = (M1y1a1 + M2y2a2 + M3y3a3) M
x0 = (4 ∙ 9 ∙ 133 + 5 ∙ 14 ∙ 91 + 4 ∙ 6 ∙ 247) 1729 =
= 17086 mod 1729 = (9 ∙ 1729 + 1525)mod 1729 = 1525 Ответ: =
11. Решить контрольный пример.
(a b) |
mod k |
, где |
|||
|
(k 1) |
||||
(b a) |
|
|
|
|
|
k=31, |
b a |
1 |
mod k |
||
|
а=№вар+10.
Примечание. Если получаетcя b=а, положить b=25.
Вариант №6.
= 6 + 10 = 16
Решение:
= −1 (mod k) = 16−1 (mod 31) = 2
Ищем обратный элемент
31 = 16 |
+ 15 |
|
15 |
= 31 − 16 |
||
16 = 15 |
+ 1 |
|
|
1 = 16 − 15 |
||
1 |
= 16 − 15 |
= 16 − (31 |
− 16 ) = 16 ∙ 2 − 31 |
|||
|
= 2 |
|
|
|
|
|
Проверка (16 ∙ 2) 31 = 32 31 = 1, верно рассчитали
φ(k − 1) = φ(30) = φ(2 ∙ 3 ∙ 5) = 2 ∙ 4 = 8
( − ) (16 − 2) 14
( − )φ(k−1) k = (2 − 16)8 mod 31 = (−14)8 31 = 14−7 31
= 14−1 (mod 31) = (−11)
Ищем обратный элемент
31 = 14 ∙ 2 + 3 3 = 31 − 14 ∙ 2 14 = 3 ∙ 4 + 2 2 = 14 − 3 ∙ 4 3 = 2 + 1 1 = 3 − 2
1 = 3 − 2 = 3 − (14 − 3 ∙ 4 ) = 31 − 14 ∙ 2 − 14 + 31 ∙ 4 − 14 ∙ 2 ∙ 4 = = 31 ∙ 2 − 14 ∙ 11= (−11)