Скачиваний:
34
Добавлен:
25.06.2024
Размер:
53.68 Кб
Скачать

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

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

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

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

(СПбГУТ)

Факультет Инфокоммуникационных сетей и систем

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

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

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №2

ТЕСТИРОВАНИЕ ПРОСТЫХ ЧИСЕЛ И НАХОЖДЕНИЕ КВАДРАТИЧНЫХ ВЫЧЕТОВ

(тема отчета)

Направление/специальность подготовки

10.03.01 Информационная безопасность

(код и наименование направления/специальности)

Выполнил студент 3 курса:

Травкина Е.А., ИКБ-14

(Ф.И.О., № группы) (подпись)

Преподаватель:

д.т.н., проф. Яковлев В.А.

(Ф.И.О., № группы) (подпись)

Цель работы

Закрепить знания, полученные на лекциях лисциплины «криптопротоколы» по разделам: “Квадратичные вычеты” и “Генерирование и тестирование простых чисел”.

Задание 1.

1.Перейти к пакету “Maxima”.

2.Рассчитать вероятность попадания на простое число при случайном генерировании чисел разрядности l=100, 300, 500 и 1000 при помощи следующей команды:

(%i2) l:100; lg(x) := log(x)/log(10); EstimateProb:2*(9*l-10)/(9*l*(l-1)*lg(10));

(%o2) 100

(%i3) log(x)

(%o3) lg(x) := -------

log(10)

(%i4) 89

(%o4) ----

4455

(%i5) l:300; lg(x) := log(x)/log(10); EstimateProb:2*(9*l-10)/(9*l*(l-1)*lg(10));

(%o5) 300

(%i6) log(x)

(%o6) lg(x) := -------

log(10)

(%i7) 269

(%o7) -----

40365

(%i8) l:500; lg(x) := log(x)/log(10); EstimateProb:2*(9*l-10)/(9*l*(l-1)*lg(10));

(%o8) 500

(%i9) log(x)

(%o9) lg(x) := -------

log(10)

(%i10) 449

(%o10) ------

112275

(%i11) l:1000; lg(x) := log(x)/log(10); EstimateProb:2*(9*l-10)/(9*l*(l-1)*lg(10));

(%o11) 1000

(%i12) log(x)

(%o12) lg(x) := -------

log(10)

(%i13) 899

(%o13) ------

449550

3.Для проверки числа на простоту тестом Ферма сгенерировать необходимое количество случайных 3-х разрядных чисел при помощи команды:

U:100+random(900);

и отобрать среди них не менее 3 нечетных чисел m, среди которых должно быть одно простое число

(%i17) U:100+random(900);

(%o17) 285

(%i18) U:100+random(900);

(%o18) 745

(%i19) U:100+random(900);

(%o19) 191

Сгенерировать не менее 5 случайных 2-х разрядных чисел a при помощи команды:

U:10+random(90);

(%i23) U:10+random(90);

(%o23) 53

(%i24) U:10+random(90);

(%o24) 35

(%i25) U:10+random(90);

(%o25) 15

(%i26) U:10+random(90);

(%o26) 70

(%i27) U:10+random(90);

(%o27) 16

Произвести проверку чисел m на простоту, используя тест Ферма при помощи команды:

power_mod(a,m-1,m);

(%i28) power_mod(53,284,285);

(%o28) 226

(%i29) power_mod(35,744,745);

(%o29) 195

(%i30) power_mod(15,190,191);

(%o30) 1

Сделать выводы о правильности (или нет) произведенного тестирования. Какова может быть вероятность ошибки в данном случае?

Программа выдала результат, что число 191 простое, а числа 745 и 285 составные.

Можно сделать вывод, что тестирование произведено верно. При использовании теста Ферма вероятность ошибки тестирования будет равна 1/2. Но стоит отметить, что тест Ферма не работает на числах Кармайкла.

4.Произвести тестирования числа Кармайклаm=561 по методу Ферма. Для этого сгенерировать необходимое количество случайных 2-х разрядных чисел по п. 3 и далее выбрать из них не менее 5 чисел a взаимно простых с 561, используя команды:

gcd(a’,561);

(%i33) U:10+random(90); gcd(U,561);

(%o33) 40

(%i34) (%o34) 1

(%i35) U:10+random(90); gcd(U,561);

(%o35) 79

(%i36) (%o36) 1

(%i37) U:10+random(90); gcd(U,561);

(%o37) 74

(%i38) (%o38) 1

(%i39) U:10+random(90); gcd(U,561);

(%o39) 47

(%i40) (%o40) 1

(%i41) U:10+random(90); gcd(U,561);

(%o41) 26

(%i42) (%o42) 1

Проверить число 561, используя тест Ферма по п. 3.

(%i45) power_mod(40,560,561);

(%o45) 1

(%i46) power_mod(79,560,561);

(%o46) 1

(%i47) power_mod(74,560,561);

(%o47) 1

(%i48) power_mod(47,560,561);

(%o48) 1

(%i49) power_mod(26,560,561);

(%o49) 1

Сделать вывод о возможности использования данного теста для таких чисел.

В ходе проверки программа показала, что число 561 простое, однако оно составное (3*11*17=561). Можно сделать вывод, что данный тест нельзя использовать для чисел Кармайкла.

5.Произвести тестирование на простоту одного из чисел m, сгенерированных в п.3 и число Кармайкла 561, по методу Миллера–Рабина при помощи команды:

(%i60) m:561; f:0; a:m-1; u:random(m-2); x:0; while mod(a,2)=0 do ( f:f+1, a:a/2); printf(false,"a:~d,",a) ; printf(false,"f:~d,",f) ; x:power_mod(u,a,m); for i:0 step 1 thru f do ( printf(true,"i:~d, x: ~d;",i,x), x:mod(x^2,m));

(%o60) 561

(%i61) (%o61) 0

(%i62) (%o62) 560

(%i63) (%o63) 3

(%i64) (%o64) 0

(%i65) (%o65) done

(%i66) (%o66) a:35,

(%i67) (%o67) f:4,

(%i68) (%o68) 78

(%i69) i:0, x: 78;i:1, x: 474;i:2, x: 276;i:3, x: 441;i:4, x: 375;(%o69) done

(%i70) m:745; f:0; a:m-1; u:random(m-2); x:0; while mod(a,2)=0 do ( f:f+1, a:a/2); printf(false,"a:~d,",a) ; printf(fals

e,"f:~d,",f) ; x:power_mod(u,a,m); for i:0 step 1 thru f do ( printf(true,"i:~d, x: ~d;",i,x), x:mod(x^2,m));

(%o70) 745

(%i71) (%o71) 0

(%i72) (%o72) 744

(%i73) (%o73) 185

(%i74) (%o74) 0

(%i75) (%o75) done

(%i76) (%o76) a:93,

(%i77) (%o77) f:3,

(%i78) (%o78) 155

(%i79) i:0, x: 155;i:1, x: 185;i:2, x: 700;i:3, x: 535;(%o79) done

Проделали тест для числа 745 пять раз.

Число 745 простое с вероятность ошибки p=1/45=0,0009765625.

Тест Миллера — Рабина позволяет эффективно определить, является ли число простым или составным, однако данный тест - вероятностный. Вероятность ошибки равна 1/4к.

6.Найти несколько квадратичных вычетов u<m по mod(m), где m одно из простых 3-х разрядных чисел, полученных в п. 5, используя вычисление символа Якоби ( который для простых mсовпадает с символом Лежандра) , при помощи следующей команды:

(%i159) u:233;m:745; jacobi(u,m);

(%o159) 233

(%i160) (%o160) 745

(%i161) (%o161) 1

(%i162) u:23;m:745; jacobi(u,m);

(%o162) 23

(%i163) (%o163) 745

(%i164) (%o164) 1

(%i165) u:14;m:745; jacobi(u,m);

(%o165) 14

(%i166) (%o166) 745

(%i167) (%o167) - 1

(%i168) u:73;m:745; jacobi(u,m);

(%o168) 73

(%i169) (%o169) 745

(%i170) (%o170) - 1

Задание 2

  1. Распределите числа в поле gf(p) на вычеты и невычеты.

р=17 для нечетных вариантов

При С=1

(%i180) C:1; p:17; jacobi(C,p);

(%o180) 1

(%i181) (%o181) 17

(%i182) (%o182) 1

При С=2

(%i177) C:2; p:17; jacobi(C,p);

(%o177) 2

(%i178) (%o178) 17

(%i179) (%o179) 1

вычет

При С=3

(%i183) C:3; p:17; jacobi(C,p);

(%o183) 3

(%i184) (%o184) 17

(%i185) (%o185) - 1

При С=4

(%i186) C:4; p:17; jacobi(C,p);

(%o186) 4

(%i187) (%o187) 17

(%i188) (%o188) 1

При С=5

(%i189) C:5; p:17; jacobi(C,p);

(%o189) 5

(%i190) (%o190) 17

(%i191) (%o191) - 1

При С=6

(%i192) C:6; p:17; jacobi(C,p);

(%o192) 6

(%i193) (%o193) 17

(%i194) (%o194) - 1

При С=7

(%i195) C:7; p:17; jacobi(C,p);

(%o195) 7

(%i196) (%o196) 17

(%i197) (%o197) - 1

При С=8

(%i198) C:8; p:17; jacobi(C,p);

(%o198) 8

(%i199) (%o199) 17

(%i200) (%o200) 1

вычет

При С=9

(%i201) C:9; p:17; jacobi(C,p);

(%o201) 9

(%i202) (%o202) 17

(%i203) (%o203) 1

При С=10

(%i204) C:10; p:17; jacobi(C,p);

(%o204) 10

(%i205) (%o205) 17

(%i206) (%o206) - 1

При С=11

(%i207) C:11; p:17; jacobi(C,p);

(%o207) 11

(%i208) (%o208) 17

(%i209) (%o209) - 1

При С=12

(%i210) C:12; p:17; jacobi(C,p);

(%o210) 12

(%i211) (%o211) 17

(%i212) (%o212) - 1

При С=13

(%i213) C:13; p:17; jacobi(C,p);

(%o213) 13

(%i214) (%o214) 17

(%i215) (%o215) 1

При С=14

(%i216) C:14; p:17; jacobi(C,p);

(%o216) 14

(%i217) (%o217) 17

(%i218) (%o218) - 1

При С=15

(%i219) C:15; p:17; jacobi(C,p);

(%o219) 15

(%i220) (%o220) 17

(%i221) (%o221) 1

При С=16

(%i222) C:16; p:17; jacobi(C,p);

(%o222) 16

(%i223) (%o223) 17

(%i224) (%o224) 1

При С=17

(%i225) C:17; p:17; jacobi(C,p);

(%o225) 17

(%i226) (%o226) 17

(%i227) (%o227) 0

  1. Проверьте, является ли число а=(№вар+20)mod31 вычетом по модулю 17, 19. A=39

(%i228) C:39; p:17; jacobi(C,p);

(%o228) 39

(%i229) (%o229) 17

(%i230) (%o230) - 1

(%i231) C:39; p:19; jacobi(C,p);

(%o231) 39

(%i232) (%o232) 19

(%i233) (%o233) 1

  1. Решите уравнение

(Вариант №19)

    1. р=23, a=41

Проверим, что уравнение имеет решение:

P=23=4*5+3, т.к. вид p = 4k + 3, то корень находится просто

    1. р=29, a=36

В данном случае применим алгоритм Чиполлы.

Найдем случайное число b, такое, что b2 – a – невычет.

(%i250) p:29; a:36; b:random(p-1); jacobi(b^2-a,p);

(%o250) 29

(%i251) (%o251) 36

(%i252) (%o252) 27

(%i253) (%o253) - 1

b=27

= 1 + 17

= 11+5

(2046+110 )mod 29= 16+23

(1+17 )(11+5 16+23 )( = 47554716+5489004 mod 29 = 23

X = +23; -23

Проверка:

  1. Решите все решения уравнение

Для n=7*11, для вариантов 13-19, a=81

Вариант №19

=

Получим 4 системы уравнений:

1)

3)

2)

4)

Решение 1-й системы уравнений:

Т.к. модули m1, m2 попарно взаимно простые, система уравнений имеет единственное решение: x=x0 mod M, где М = m1∙ m2.

M = m1m2 = 7∙ 11 = 77

x0 = M1y1a1 + M2y2a2

Miyi = 1mod mi

;

M1y1 = 1 mod m1 M2y2 = 1 mod m2

11y1 = 1 mod 7 7y2 = 1 mod 11 y1 =2 y2 = 8

x0 = 11∙2∙2 + 7∙8∙9 = 548

x = x0 mod M

x = 548 mod 77 = 9

Решение 2-й системы уравнений:

Т.к. модули m1, m2 попарно взаимно простые, система уравнений имеет единственное решение: x = x0 mod M, где М = m1∙ m2

M = m1m2 = 7∙ 11 = 77

x0 = M1y1a1 + M2y2a2

Miyi = 1mod mi

;

M1y1 = 1 mod m1 M2y2 = 1 mod m2

11y1 = 1 mod 7 7y2 = 1 mod 11 y1 =2 y2 = 8

x0 = 11∙2∙(-2) + 7∙8∙(-9) = -548

x = x0 mod M

x = -548 mod 77 = 68

Решение 3-й системы уравнений:

Т.к. модули m1, m2 попарно взаимно простые, система уравнений имеет единственное решение: x = x0 mod M, где М = m1∙ m2

M = m1m2 = 7∙ 11 = 77

x0 = M1y1a1 + M2y2a2

Miyi = 1mod mi

;

M1y1 = 1 mod m1 M2y2 = 1 mod m2

11y1 = 1 mod 7 7y2 = 1 mod 11 y1 =2 y2 = 8

x0 = 11∙2∙2 + 7∙8∙(-9) = -460

x = x0 mod M

x = -460 mod 77 = 2

Решение 4-й системы уравнений:

Т.к. модули m1, m2 попарно взаимно простые, система уравнений имеет единственное решение: x=x0 mod M, где М= m1∙ m2

M = m1m2 = 7∙ 11 = 77

x0 = M1y1a1 + M2y2a2

Miyi = 1mod mi

;

M1y1 = 1 mod m1 M2y2 = 1 mod m2

11y1 = 1 mod 7 7y2 = 1 mod 11 y1 =2 y2 = 8

x0 = 11∙2∙(-2) + 7∙8∙9 = 460

x = x0 mod M

x = 460 mod 77 = 75

Проверка:

x1: 92mod 77 = 81mod 77 =4

x2: 682mod 77 = 4624mod 77 = 4

x3: 22mod 77 = 4mod 77 = 4

x4: 752mod 77 = 5625mod 77 = 4

Ответ: х1 = 9; х2 = 68; х3 = 2; х4 = 75;

Вывод

В ходе выполнения лабораторной работы были закреплены знания по разделам «Квадратичные вычеты» и «Генерирование и тестирование простых чисел».

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