Шемякин лекции 2023 / Л10. Элементы теории чисел. Ред.1 - копия
.pdfОбратное по Эйлеру
•Пусть дано кольцо Z(m) классов вычетов по модулю составного числа m
m = p*q.
Найти:
x = a-1 (mod m)
Известно, что
a φ(n) = 1 (mod m).
21
•Тогда получаем
x= a φ(n)-1 = a (p-1)(q-1)-1 (mod m).
22
Обратное по Ферма
• Дано поле классов вычетов GF(p). Тогда
x = a p -2 (mod m).
23
Возведение в степень для больших чисел
В криптосистемах RSA и Эль Гамаля стандартной операцией является возведение в степень
y = ax (mod n)
Представим показатель степени в двоичном виде
x = 2k xk + 2k-1 xk-1 +…+ 22 x2 + 21 x1 + 20 x0
x = 37 = 32 + 4 + 1 = 100101 n = 7
24
• Находим k степеней основания a = 3 путем последовательного возведения в квадрат числа a.
31 = 3(mod 7),
32 = 2(mod 7),
34 = 4(mod 7),
38 = 2(mod 7),
316 = 4(mod 7),
332 = 2(mod 7).
25
Перемножим между собой только те степени, которым соответствуют ненулевые коэффициенты в двоичном представлении числа x.
То есть это, когда xi = 20, 22, 25
31 = 3(mod 7),
34 = 4(mod 7),
332 = 2(mod 7).
y = 2·4 ·3(mod 7) = 3.
26
Определение индекса элемента конечного поля (логарифмирование)
Log |
a |
y = x (mod p) |
y = ax (mod p) |
|
|
|
x - индекс числа a в поле GF(p).
Задача для больших чисел p является вычислительно сложной. На трудности её решения основывается стойкость КС Эль Гамаля.
27
Нахождение дискретного логарифма методом «встречи посредине»
-строим базу данных размера O((n)1/2) вида az (mod n) для случайных чисел z [1, … n] и сортируем ее.
-для случайных чисел b, таких что НОД(b, n-1) = 1 вычисляем yb (mod n) и сравниваем с числами базы данных.
-с большой вероятностью после нескольких попыток получаем
az (mod n) = yb (mod n) |
|
- возводим обе части в степень b-1, получим |
|
az· b-1 (mod n) = y (mod n). |
|
Откуда следует |
|
zb-1 = x. |
|
Этот метод имеет сложность N O((n)1/2log n), |
|
t |
|
N O((n)1/2) |
|
v |
28 |
Проверка чисел на простоту
Тест Эйлера (вероятностный тест).
В его основе лежит теорема Эйлера о квадратичных вычетах.
Для простых чисел p и любых a ˂ p a(p-1)/2 = ±1 (mod p).
Для проверки нечетного числа p на простоту необходимо:
Прогенерировать k чисел bi , i = 1, 2, …, k. bi < p.
29
Проверить выполнение сравнения
a(p-1)/2 = ±1 (mod p)
для i = 1, 2, ….
Если оно не выполняется хотя бы один раз, то p составное. Если выполняется для всех i, то p возможно простое
Вероятность ошибки, т.е. вероятность принять составное число за простое:
Pош(p-простое) = 1/2k
30