крипта_4
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Кибербезопасность
Кафедра Защищенных систем связи
Дисциплина Криптографические протоколы
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №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
N =
– кандидат в простые
Проверим условия теоремы Диемитко:
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
Оба условия выполнились, идём на выход.
p = 157
Итерация 2
Заменяем значение на новое, полученное на предыдущем шаге. ε = 0,84
=
– нечетное => 383 + 1
= 384.
– кандидат в простые.
Проверим, что 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
Оба условия выполнились, идём на выход.
p = 60289
Таким образом, начав алгоритм с четырехбитнного числа числа 13, мы смогли сгенерировать шестнадцатибитнное число 60289
Проверим с помощью программы:
Расчёты выполнены верно.
Проверим, с помощью теста Рабина-Миллера, что полученное число действительно простое:
Задание 2.
С помощью программы «PrimeNumberGenerator.exe» сгенерировать число размером 256-1024 бит.
Начальные данные:
t0 = 2
t = 512
Выберем значение . Поскольку должно быть размером 2 бит, возьмем = 3.
Для генерации дальнейших простых чисел используем программу:
Выполним проверку полученного числа на простоту. Для этого запустим приложение «Rabin-Miller_Test.exe», вставим туда сгенерированное простое число и введём количество раундов.
n=12876993882345121490747327895386875718327882438802284493564053907432613962266517786169193096836451683586438135094366616266697807593328387354635555792146561
Вывод
В ходе выполнения лабораторной работы были закреплены знания по разделам «Квадратичные вычеты» и «Генерирование и тестирование простых чисел».
Санкт-Петербург
2026
