Скачиваний:
38
Добавлен:
10.04.2023
Размер:
1.14 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

_____________________________________________________________________________

Кафедра защищенных систем связи

Дисциплина «Криптографические протоколы»

Лабораторная работа 1

«Основы теории чисел»

Выполнил: студ. гр. ИКБ-95.

Проверил: проф. Яковлев В.А..

Санкт-Петербург

2022

Цель работы:

Закрепить знания, полученные на лекциях дисциплин «Основы криптографии», «Криптографические методы защиты информации» и приобрести навыки вычислений по блоку занятий «Математический базис криптосистем с открытым ключом».

Задание

1.Выполнить упражнения по определению делимости чисел, нахождению их наибольшего общего делителя (gcd(a,b)) и по нахождению канонического представления gcd и обратного элемента при помощи расширенного алгоритма Евклида.

2.Произвести определение конгруэнтности чисел, проверку утверждений теорем Эйлера и Ферма, убедиться в возможности быстрого вычисления возведения в степень и обращения чисел по модулю.

Ход работы:

  1. Проверим, являются ли числа d делителями n, используя следующую команду: integerp(n/d), где n и d - произвольные пятиразрядные числа.

  1. Выполнение команды integerp(n/d).

  1. Найдем делители нескольких пятиразрядных чисел при помощи следующей команды: divisors(n)

  1. Выполнение команды divisors(n).

Убедимся в правильности расчетов, посчитав “вручную”.

Проверка проведена успешно, расчёт функции верен.

  1. Для нескольких пар пяти разрядных чисел и одной пары четырех разрядных чисел используем команду: gcd(a,b) .

  1. Выполнение команды 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.

  1. Для найденных в п.3 пяти gcd(a,b), найдем их канонические представления при помощи расширенного алгоритма Евклида при помощи следующей команды: gcdex(a,b).

  1. Выполнение команды 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‬‬‬‬

Проверка проведена успешно, программа сработала верно.

  1. Для одного четырехразрядного числа и не менее чем для четырех произвольно выбранных пятизначных чисел a сделаем их приведение по модулям произвольных меньших чисел m при помощи команды: mod(a,m)

  1. Выполнение команды mod(a,m).

Убедимся в правильности расчетов для чисел “вручную”.

  1. Найдем мультипликативно обратные элементы к одному двухразрядному числу и не менее чем к четырем девятизначным числам a по простым двузначным модулям m при помощи следующей команды:

power_mod(a,-1,m)

  1. Выполнение команды 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

Проверка , верно рассчитали

  1. Рассчитаем функцию Эйлера для одного двухразрядного числа и не менее чем четырех четырехзначных чисел, используя команду: totient(m)

  1. Выполнение команды totient(m).

Убедимся в правильности расчетов для первого числа “вручную”.

Проверка проведена успешно, расчёт функции верен.

  1. Для двух пар произвольных четырехзначных, но взаимно простых чисел a и m, проверим справедливость теоремы Эйлера при помощи следующей команды: mod(a^ totient(m),m).

  1. Выполнение команды mod(a^ totient(m),m).

  1. Произведем возведение 5-значного произвольного числа a в степень произвольного 15-значного числа b по произвольному 4-х значному модулю m, используя команду: power_mod(a,b,m)

  1. Выполнение команды divisors(n).

Убедимся, что возведение в степень выполняется быстрым алгоритмом, а не bкратным перемножением числа a самого на себя с приведением по модулю, рассчитав примерное время вычислений на данном компьютере при использовании метода перемножения.

  1. Перемножение числа 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 не существует.

Вывод:

В ходе лабораторной работы мы закрепили знания, полученные на лекциях дисциплин «Основы криптографии», «Криптографические методы защиты информации» и приобрели навыки вычислений по блоку занятий «Математический базис криптосистем с открытым ключом».

Соседние файлы в предмете Криптографические протоколы