Лабораторные и практики / 03_ЛР / 3_ЛР
.pdfМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
_____________________________________________________________________________
Кафедра информационной безопасности телекоммуникационных систем Дисциплина «Основы криптографии с открытыми ключами»
Лабораторная работа 3
«Тестирование простых чисел»
Выполнила: |
студ. гр. |
|
. |
.
Проверил: |
проф. Яковлев В.А.. |
Санкт-Петербург
2021
Цель работы:
Закрепить знания, полученные на лекциях курса “Основы криптографии с открытым ключом“ по разделам: “Квадратичные вычеты” и “Генерирование и тестирование простых чисел”.
Ход работы: Задание 1
1.Рассчитаем вероятность попадания на простое число при случайном генерировании чисел разрядности l=100, 300, 500 и 1000 при помощи следующей команды:
l:…..;
lg(x) := log(x)/log(10); EstimateProb:2*(9*l-10)/(9*l*(l-1)*lg(10));
Вероятность попадания на простое число: 89/4455=1,99%
Вероятность попадания на простое число: 269/40365=0,66%
Вероятность попадания на простое число: 449/112275=0, 39%
Вероятность попадания на простое число: 899/449550=0,19%
2.Для проверки теста Ферма сгенерируем необходимое количество случайных 3-х разрядных чисел при помощи команды: U:100+random(900); и отберем среди них не менее 3 нечетных чисел m, среди которых должно быть одно простое числа. Сгенерируем не менее 5 случайных 2-х разрядных чисел a при помощи команды:
U:10+random(90).
числа m: |
числа a: |
,
где 191 – простое число
Произведем проверку чисел m на простоту, используя тест Ферма при помощи команды: power_mod(a,m-1,m);
Программа выдала результат, что число 191 простое, а числа 429 и 585 составные.
Можно сделать вывод, что тестирование произведено верно. При использовании теста Ферма вероятность ошибки тестирования будет равна 1/2. Но стоит отметить, что тест Ферма не работает на числах Кармайкла.
3.Произведем тестирования числа Кармайкла m=561 по методу Ферма. Для этого сгенерируем необходимое количество случайных 2-х разрядных чисел a’ взаимно простых с 561, используя команды: gcd(a’,561);
Проверим число 561, используя тест Ферма
В ходе проверки программа показала, что число 561 простое, однако оно составное (3*11*17=561).
Можно сделать вывод, что данный тест нельзя использовать для чисел Кармайкла.
4.Произведем тестирование на простоту одного из чисел m и число Кармайкла 561, по методу Миллера–Рабина при помощи команды:
m:533;
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));
Результат выполнения программы: число 561 составное.
1)
Результат выполнения программы: число 191 простое.
Так как число m=191 прошло тест на простоту один раз, повторим расчет еще четыре раза. Если хотя бы в одном случае число m не пройдет тест, то оно составное .
2)
Результат выполнения программы: число 191 простое.
3)
Результат выполнения программы: число 191 простое.
4)
Результат выполнения программы: число 191 простое.
5)
Результат выполнения программы: число 191 простое.
Xисло 191 простое с вероятность ошибки p=1/45=0,0009765625.
Тест Миллера — Рабина позволяет эффективно определить, является ли число простым или составным, однако данный тест - вероятностный. Вероятность ошибки равна 1/4к.
5.Найдем несколько квадратичных вычетов u<m по mod(m), где m одно из простых 3-х разрядных чисел, используя вычисление символа Якоби (который для простых m совпадает с символом Лежандра) , при помощи следующей команды:
u:…..;m:…; jacobi(u,m)
Задание 2
1. Распределение числа в поле GF(p) на вычеты и невычеты.
Для варианта 6: |
p=13,. |
|
||
|
|
|
||
При С=1, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 1 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 16( 13) = 1 , вычет |
|||
|
|
|
||
При С=2, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 2 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 26( 13) = −1, невычет |
|||
|
|
|
||
При С=3, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 3 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 36( 13) = 1 , вычет |
|||
|
|
|
||
При С=4, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 4 2 ( 13) = |
|
|
|
|||
|
|
|
|
= 46( 13) = 1 , вычет
При С=5, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 5 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 56( 13) = −1 , невычет |
|||
|
|
|
||
При С=6, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 6 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 66( 13) = −1 , невычет |
|||
|
|
|
||
При С=7, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 7 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 76( 13) = −1, невычет |
|||
|
|
|
||
При С=8, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 8 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 86( 13) = −1 , невычет |
|||
|
|
|
||
При С=9, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 9 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 96( 13) = 1 , вычет |
|||
При С=10, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 10 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 106( 13) = 1 , вычет |
|||
|
|
|
||
При С=11, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 11 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 116( 13) = −1 , невычет |
|||
|
|
|
||
При С=12, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 12 2 ( 13) = |
|
|
|
|||
|
|
|
|
|
|
= 126( 13) = 1 , вычет |
|||
|
|
|
||
При С=13, |
Проверка: |
|
||
|
|
|
−1 |
12 |
|
( |
) = 2 |
( ) = 13 2 ( 13) = |
|
|
|
|||
|
|
|
|
= 136( 13) = 0 , вычет
2.Проверим, является ли число а=(№вар+20)mod31 вычетом по модулю 17, 19. Для варианта 6: а=26.
3.
|
1) |
|
|
|
|
|
Проверка: |
|
|
||
|
|
|
|
|
|
|
|
|
−1 |
|
16 |
|
|
|
|
|
|
|
( |
) = 2 |
( ) |
= 26 2 ( 17) = |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= 268( 17) = 1, вычет |
||||
|
|
|
|
|
|
|
|
|
|
||
|
2) |
|
|
|
|
|
Проверка: |
|
|
||
|
|
|
|
|
|
|
|
|
−1 |
|
18 |
|
|
|
|
|
|
|
( |
) = 2 |
( ) |
= 26 2 ( 19) = |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= 269( 19) = 1, вычет |
||||
|
|
|
|
||||||||
|
Число 26 является вычетом по модулю 17 и по модулю19. |
||||||||||
Решим уравнение |
x |
|
a mod p |
|
|
||||||
|
|
|
|
|
|
||||||
|
a. |
р=23, а=8 для варианта 6. |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= √8 23 |
|
|
|
|
|
|
|||
|
|
= 4 ∙ 5 + 3 |
|
|
|
|
|
|
|||
|
|
|
+1 |
|
|
|
|
|
|
||
|
|
= |
|
4 23 |
|
|
|
|
|
||
|
|
|
23+1 |
|
24 |
|
|
||||
|
|
= 8 |
|
4 23 = 8 4 23 = 86 23 = 13 |
|||||||
|
|
Ответ: (13; -13). |
|
|
|
|
|
||||
|
b. |
р=29, а=9 для варианта 6. |
|
|
|||||||
|
|
р = 29, а = 5 + 4 = 9 |
|
|
|||||||
|
|
1) p - 1 = 22 ∙ 7 |
|
|
|
|
|
|
|||
|
|
2) Символ Лежандра: |
|
|
|||||||
|
|
|
|
|
−1 |
|
|
|
29−1 |
|
|
( ) = 2 ( ) = 9 2 29 = 1, решение есть. 3) Подберем b такое, что b2-4a – невычет. Пусть b=3. b2-1 mod 29= 8, – невычет.
29−1
8 2 29 = −1 - квадратичный невычет.
14 = 8 + 4 + 2
82mod 29 =64 mod 29 = 6 84mod 29 = 6∙ 6 mod 29= 7 88mod 29 = 7 ∙ 7 mod 29 = 20
(38 + 34 + 32 )mod 29 = (20∙7∙6)mod 29 = 3220 mod 29 = -1
4) Искомый корень находим из уравнения |
x |
|
|
||
+1 |
29+1 |
= ( + √ 2 − ) 2 = (3 + √32 − 9) 2
15 = 8 + 4 + 2 + 1
31mod 29 = 3
32mod 29 = 9
34mod 29 =9 ∙ 9mod 29 =(58+23) mod 29 = 23 38mod 29 = 23∙23mod 29 =(522+7 )mod 29 =7 315mod 29 = (38 ∙ 34 ∙ 32∙ 31)mod 29 = (7 ∙ 23 ∙ 9 ∙ 5) Проверка:
262 mod 29 = (667+9) mod 29 = 9 (-26)2 mod 29 = 32 mod 29 = 9 Ответ: 26;-26 .
|
|
|
|
p 1 |
(b |
b |
2 |
a ) |
2 |
|
|
|
|
29 = 31529
3) mod 29 = 26
4.
x
Решите уравнение Для n=3 ∙ 7,
|
a mod n |
a=16 (для варианта 6)
|
|
|
|
|
|
|
= √16 3 ∙ 7 |
|
|
||||
2 = 16 3 = 1 3 |
2 = 16 7 = 2 7 |
|||||
r(1;-1) |
|
|
r(2;-2) |
|||
Получим 4 системы уравнений: |
|
|
||||
1) |
{ |
= 1 3 |
3) |
{ = 1 3 |
||
|
|
= 2 7 |
|
= −2 7 |
||
2) |
{ |
= −1 3 |
4) |
{ = −1 3 |
||
|
|
= −2 7 |
|
= 2 7 |
a)Решение 1-й системы уравнений:
Т.к. модули m1, m2 попарно взаимно простые, система уравнений имеет единственное решение: x=x0 mod M, где М = m1∙ m2
{ = 1 3= 2 7
M = m1∙ m2 = 3∙ 7 = 21
0 = ∑
=1
x0 = M1y1a1 + M2y2a2
=