1
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
_____________________________________________________________________________
Кафедра защищенных систем связи
Дисциплина «Криптографические протоколы»
Лабораторная работа 1
«Основы теории чисел»
Выполнил: студ. гр. ИКБ-95.
Проверил: проф. Яковлев В.А..
Санкт-Петербург
2022
Цель работы:
Закрепить знания, полученные на лекциях дисциплин «Основы криптографии», «Криптографические методы защиты информации» и приобрести навыки вычислений по блоку занятий «Математический базис криптосистем с открытым ключом».
Задание
1.Выполнить упражнения по определению делимости чисел, нахождению их наибольшего общего делителя (gcd(a,b)) и по нахождению канонического представления gcd и обратного элемента при помощи расширенного алгоритма Евклида.
2.Произвести определение конгруэнтности чисел, проверку утверждений теорем Эйлера и Ферма, убедиться в возможности быстрого вычисления возведения в степень и обращения чисел по модулю.
Ход работы:
Проверим, являются ли числа d делителями n, используя следующую команду: integerp(n/d), где n и d - произвольные пятиразрядные числа.
Выполнение команды integerp(n/d).
Найдем делители нескольких пятиразрядных чисел при помощи следующей команды: divisors(n)
Выполнение команды divisors(n).
Убедимся в правильности расчетов, посчитав “вручную”.
Проверка проведена успешно, расчёт функции верен.
Для нескольких пар пяти разрядных чисел и одной пары четырех разрядных чисел используем команду: gcd(a,b) .
Выполнение команды gcd(a,b).
Убедимся в правильности расчетов “вручную”, выполнив следующее задание:
Найти наибольший общий делитель для пары чисел.
Вариант №28, Найти НОД(8888,2428).
Решение:
8888 = 2428*3 + 1604
2428 = 1604*1 + 824
1604 = 824*1 + 780
824 = 780*1 + 44
780 = 44*17 + 32
44 = 32*1 + 12
32 = 12*2 + 8
12 = 8*1 + 4
8 = 4*2 + 0
Результат: НОД(8888, 2428)=4.
Для найденных в п.3 пяти gcd(a,b), найдем их канонические представления при помощи расширенного алгоритма Евклида при помощи следующей команды: gcdex(a,b).
Выполнение команды gcdex(a,b).
8888 * (-221) + 2428 * 809 = -1964248 + 1964252 = 4
12345 * 11 + 67890 * (-2) = 135795 + (-135780) = 15
12346 * 19802 + 67891 * (-3601) = 244475492 + (-244475491) = 1
12348 * (-7714) + 67892 * 1403 = -95252472 + 95252476 = 4
12349 * 9319 + 67894 * (-1695) = 115080331 + (-115080330) = 1
Проверка проведена успешно, программа сработала верно.
Для одного четырехразрядного числа и не менее чем для четырех произвольно выбранных пятизначных чисел a сделаем их приведение по модулям произвольных меньших чисел m при помощи команды: mod(a,m)
Выполнение команды mod(a,m).
Убедимся в правильности расчетов для чисел “вручную”.
Найдем мультипликативно обратные элементы к одному двухразрядному числу и не менее чем к четырем девятизначным числам a по простым двузначным модулям m при помощи следующей команды:
power_mod(a,-1,m)
Выполнение команды power_mod(a,-1,m).
Убедимся в правильности расчетов “вручную”, выполнив следующее задание:
Найти обратный элемент к числу а по modb,
Вариант №28. a=151, b=199
Решение:
Найдем обратный элемент
199 = 151*1 + 48 48 = 199 – 151
151 = 48*3 + 7 7 = 151 – 48*3 = 151 – (199 – 151)*3 = 151*4 – 199
48 = 7*6 + 6 6 = 48 – 7*6 =199–151–(151*4 – 199)*6=199*7–151*25
7 = 6*1 + 1 1 = 7 – 6 = 151*4–199–(199*7–151*25)=151*29–199*8
Проверка , верно рассчитали
Рассчитаем функцию Эйлера для одного двухразрядного числа и не менее чем четырех четырехзначных чисел, используя команду: totient(m)
Выполнение команды totient(m).
Убедимся в правильности расчетов для первого числа “вручную”.
Проверка проведена успешно, расчёт функции верен.
Для двух пар произвольных четырехзначных, но взаимно простых чисел a и m, проверим справедливость теоремы Эйлера при помощи следующей команды: mod(a^ totient(m),m).
Выполнение команды mod(a^ totient(m),m).
Произведем возведение 5-значного произвольного числа a в степень произвольного 15-значного числа b по произвольному 4-х значному модулю m, используя команду: power_mod(a,b,m)
Выполнение команды divisors(n).
Убедимся, что возведение в степень выполняется быстрым алгоритмом, а не b–кратным перемножением числа a самого на себя с приведением по модулю, рассчитав примерное время вычислений на данном компьютере при использовании метода перемножения.
Перемножение числа a самого на себя, с приведением по модулю.
Данная команда была прервана ошибкой расчётов.
Таким образом, мы убедились, что ранее проводился расчет быстрым алгоритмом.
Используя алгоритм быстрого возведения в степень, вычислить вручную:
Вариант №28.
Решение:
Результат: = 2.
10. Решить систему уравнений на основе использования китайской теоремы об остатках.
,
где заданы таблицей
№ вар |
ai |
mi |
28(3) |
3,4,5 |
13,7,11 |
Решение:
и взаимно простые числа:
НОД(13,7)=1 |
НОД(7,11)=1 |
НОД(13,11)=1 |
|
|
|
Тогда
Найдем по формуле ,
где , .
Найдем , ,
Найдем , ,
|
à |
|
à 1
|
|
à 2 à
|
, ,
, ,
, , , M = 1001
Ответ:
Проверка:
445 mod 13 = 3
445 mod 7 = 4
445 mod 11 = 5
11. Разложить в цепную дробь 17/11.
17 = 11*1 + 6
11 = 6*1 + 5
6 = 5*1 + 1
5 = 1*5 + 0
Цепная дробь: [1, 1, 1, 5]
Подходящие дроби:
При k=1:
При k=2:
При k=3:
При k=4:
12. Решить контрольный пример.
, где
k=37,
Вариант №28.
Решение:
à
Обратного элемента 37 по mod 37 не существует.
Вывод:
В ходе лабораторной работы мы закрепили знания, полученные на лекциях дисциплин «Основы криптографии», «Криптографические методы защиты информации» и приобрели навыки вычислений по блоку занятий «Математический базис криптосистем с открытым ключом».