Скачиваний:
18
Добавлен:
29.06.2022
Размер:
901.12 Кб
Скачать

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

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

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

_____________________________________________________________________________

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

Лабораторная работа 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)

Соседние файлы в папке 02_ЛР