Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

крипта_4

.docx
Скачиваний:
0
Добавлен:
17.06.2026
Размер:
666.87 Кб
Скачать

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

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

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

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

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

(СПбГУТ)

Факультет Кибербезопасность

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

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

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

Тестирование простых чисел и нахождение квадратных вычетов

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

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

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

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

_________

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

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

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

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

Цель работы

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

Часть 1

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

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

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

U:100+random(900);

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

311 – Простое число.

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

U:10+random(90);

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

power_mod(a,m-1,m);

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

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

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

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

gcd(a’,561);

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

Аналогичным способом проверим числа 1105 и 1729:

Для 1105:

Для 1729:

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

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

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

После выполнения теста можно сделать вывод, что числа 561, 1105, 1729 составные

По результатам теста Миллера-Рабина число 311 простое

Часть 2

Задание 1

Провести ручное генерирование 16-битного простого числа на основе заданного четырехбитнного с помощью алгоритма теоремы Диемитко.

Вариант – 5

Вар

5

16

13

ε1 = 0.34;

ε2 = 0.84

Дано 4-битное число 13, построим восьмибитное число Итерация 1

  1. N =

  2. – кандидат в простые

  3. Проверим условия теоремы Диемитко:

2156 mod 157 = 1 и 212 mod 157 ≠ 1

2^156 = 2^128 + 2^16 + 2^8 + 2^4

2^2 mod 157 = 4

2^4 mod 157 = 2^2*2^2 mod 157 = 4*4 mod 157 = 16 mod 157 = 16

2^8 mod 157 = 2^4*2^4 mod 157 = 16*16 mod 157 = 256 mod 157 = 99

2^16 mod 157 = 2^8*2^8 mod 157 = 99*99 mod 157 = 9801 mod 157 = 67

2^32 mod 157 = 2^16*2^16 mod 157 = 67*67 mod 157 = 4489 mod 157 = 93

2^64 mod 157 = 2^32*2^32 mod 157 = 93*93 mod 157 = 8649 mod 157 = 14

2^128 mod 157 = 2^64*2^64 mod 157 = 14*14 mod 157 = 196 mod 157 = 39

2^156 mod 157 = 2^4 * 2^8 * 2^16 * 2^128 = 16 * 99 * 67 * 39 mod 157 = 1

212 mod 157 = 4096 mod 157 = 14 ≠ 1

Оба условия выполнились, идём на выход.

  1. p = 157

Итерация 2

Заменяем значение на новое, полученное на предыдущем шаге. ε = 0,84

  1. = – нечетное => 383 + 1 = 384

  2. .

  3. – кандидат в простые.

  4. Проверим, что 260288 mod 60289 = 1 и 2384 mod 60289 ≠ 1

Проверка 260288 mod 60289:

2^60288 = 2^32768 + 2^16384 + 2^8192 + 2^2048 + 2^512 + 2^256 + 2^128

2^2 mod 60289 = 4

2^4 mod 60289 = 2^2*2^2 mod 60289 = 4*4 mod 60289 = 16 mod 60289 = 16

2^8 mod 60289 = 2^4*2^4 mod 60289 = 16*16 mod 60289 = 256 mod 60289 = 256

2^16 mod 60289 = 2^8*2^8 mod 60289 = 256*256 mod 60289 = 65536 mod 60289 = 5247

2^32 mod 60289 = 2^16*2^16 mod 60289 = 5247*5247 mod 60289 = 27531009 mod 60289 = 39225

2^64 mod 60289 = 2^32*2^32 mod 60289 = 39225*39225 mod 60289 = 1538600625 mod 60289 = 25345

2^128 mod 60289 = 2^64*2^64 mod 60289 = 25345*25345 mod 60289 = 642369025 mod 60289 = 50019

2^256 mod 60289 = 2^128*2^128 mod 60289 = 50019*50019 mod 60289 = 2501900361 mod 60289 = 27439

2^512 mod 60289 = 2^256*2^256 mod 60289 = 27439*27439 mod 60289 = 752898721 mod 60289 = 9689

2^1024 mod 60289 = 2^512*2^512 mod 60289 = 9689*9689 mod 60289 = 93876721 mod 60289 = 6748

2^2048 mod 60289 = 2^1024*2^1024 mod 60289 = 6748*6748 mod 60289 = 45535504 mod 60289 = 17309

2^4096 mod 60289 = 2^2048*2^2048 mod 60289 = 17309*17309 mod 60289 = 299601481 mod 60289 = 25440

2^8192 mod 60289 = 2^4096*2^4096 mod 60289 = 25440*25440 mod 60289 = 647193600 mod 60289 = 51474

2^16384 mod 60289 = 2^8192*2^8192 mod 60289 = 51474*51474 mod 60289 = 2649572676 mod 60289 = 51993

2^32768 mod 60289 = 2^16384*2^16384 mod 60289 = 51993*51993 mod 60289 = 2703272049 mod 60289 = 33867

2^60288 mod 60289 = 2^128 * 2^256 * 2^512 * 2^2048 * 2^8192 * 2^16384 * 2^32768 = 50019 * 27439 * 9689 * 17309 * 51474 * 51993 * 33867 mod 60289 = 1

Проверка 2384 mod 60289:

2^2 mod 60289 = 4

2^4 mod 60289 = 2^2*2^2 mod 60289 = 4*4 mod 60289 = 16 mod 60289 = 16

2^8 mod 60289 = 2^4*2^4 mod 60289 = 16*16 mod 60289 = 256 mod 60289 = 256

2^16 mod 60289 = 2^8*2^8 mod 60289 = 256*256 mod 60289 = 65536 mod 60289 = 5247

2^32 mod 60289 = 2^16*2^16 mod 60289 = 5247*5247 mod 60289 = 27531009 mod 60289 = 39225

2^64 mod 60289 = 2^32*2^32 mod 60289 = 39225*39225 mod 60289 = 1538600625 mod 60289 = 25345

2^128 mod 60289 = 2^64*2^64 mod 60289 = 25345*25345 mod 60289 = 642369025 mod 60289 = 50019

2^256 mod 60289 = 2^128*2^128 mod 60289 = 50019*50019 mod 60289 = 2501900361 mod 60289 = 27439

2384 mod 60289 = 2^128 * 2^256 = 50019 * 27439 = 52545

2384 mod 60289 = 52545 mod 60289 ≠ 1

Оба условия выполнились, идём на выход.

  1. p = 60289

Таким образом, начав алгоритм с четырехбитнного числа числа 13, мы смогли сгенерировать шестнадцатибитнное число 60289

Проверим с помощью программы:

Расчёты выполнены верно.

Проверим, с помощью теста Рабина-Миллера, что полученное число действительно простое:

Задание 2.

С помощью программы «PrimeNumberGenerator.exe» сгенерировать число размером 256-1024 бит.

Начальные данные:

t0 = 2

t = 512

Выберем значение . Поскольку должно быть размером 2 бит, возьмем = 3.

Для генерации дальнейших простых чисел используем программу:

Выполним проверку полученного числа на простоту. Для этого запустим приложение «Rabin-Miller_Test.exe», вставим туда сгенерированное простое число и введём количество раундов.

n=12876993882345121490747327895386875718327882438802284493564053907432613962266517786169193096836451683586438135094366616266697807593328387354635555792146561

Вывод

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

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

2026

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