lec11

advertisement
Простые числа
в криптосистемах
Факторизация
чисел
Генерирование
простых чисел
Проверка чисел
на простоту
Детерминированные
(точные) методы
проверки
Вероятностные
методы проверки
Решето Эратосфена
Задача: найти все простые числа до числа Z.
1) Выписываем все числа от 2 до Z.
2) n – первое простое число, равное 2.
3) Выбрасываем из списка все числа, кратные n: n, 2n, 3n, 4n и
т.д. Для n=2 мы выбросим 2, 4, 6, 8, 10, 12, 14 и т.д.
4) Берем первое из оставшихся в списке чисел (3). Это и будет
следующее простое число n=3.
5) Выбрасываем из списка все числа, кратные n: n, 2n, 3n, 4n и
т.д. Для n=3 мы выбросим 3, 9, 15, 21, 27 и т.д. (заметим, что
числа 6, 12, 18, 24 были выброшены уже на шаге 3).
6) Следующее из оставшихся в списке чисел – 5 (4 выброшено на
шаге 3). Значит следующее простое число n=5.
7) Выбрасываем из списка все числа, кратные n: n, 2n, 3n, 4n и
т.д. Для n=5 мы выбросим 5, 25, 35, 55, 65 и т.д.
Шаги алгоритма продолжаются, пока в списке не останется чисел.
Более быстрые современные методы: решето Сундарама (1948 г),
решето Аткина (1999 г).
Генерация простых чисел в ГОСТ Р 34.10-94
Теорема: Пусть q – нечетное простое, p = qN + 1, N –
четное. Если p<(2q+1)2 и 2qN ≡ 1 (mod p) и 2N ≡ 1 (mod
p), то p – простое.
1) Выбираем q и N.
2) Получаем p = qN + 1.
3) Проверяем p на удовлетворение вышеприведенным
условиям.
4) Если p оказалось простым, то можно повторить
шаги 2-3 для получения еще более длинного
простого числа. Иначе выбираем другие q и N и
пытаемся еще раз.
Например. q=5. N=2. p1=5*2+1=11. p2=11*2+1=23.
p3=23*2+1=47. p4=47*2+1=95.
Точная проверка простоты чисел
1) Теорема Вильсона:
Натуральное n тогда и только тогда является простым, когда
(n-1)! +1 ≡ 0 (mod n).
Пример. Число 7. (7-1)!+1 = 2x3x4x5x6+1=721. 721 ≡ 0 (mod 7). ДА
Пример. Число 6. (6-1)!+1 = 2x3x4x5+1=121. 121 ≡ 1 (mod 6). НЕТ
2) Следствие из теоремы Вильсона:
Числа n и n+2 тогда и только тогда оба являются простыми, когда
4((n-1)!+1)+n ≡ 0 (mod n(n+2)), n>1.
Пример. Числа 11 и 13. 4(10!+1)+11 = 14515215 ≡ 0 (mod 143).
Тест Миллера-Рабина для проверки чисел на простоту
Нужно выяснить с хорошей достоверностью, простое ли число n?
Записываем n как n = 2St + 1 и выберем a в диапазоне
1 < a < n.
2) e = at. Если e (mod n) = ±1, то n проходит тест и переходим к
новому a.
3) e = e2. Если e (mod n) = -1, то n проходит тест и переходим к
новому a.
4) Если e2 больше a(n-1)/2, то n не проходит тест. Иначе перейти
на шаг 3.
Если тест прошел k разных значений a (такие a называют
«свидетелями простоты»), то n – простое число с
вероятностью 1 - 1/4k.
На практике рекомендуют брать k = log2(n).
Метод факторизации Ферма
Факторизация: разложение числа n на множители.
Идея: найти представление n = x2 – y2. Тогда n =
(x+y)(x-y).
1) Находим x =
2) Находим z = x2 – n
3) Если z – квадрат натурального числа z = y2, то x и
y найдены. Иначе увеличиваем x на 1 и переходим
на шаг 2.
Пример: n = 119.
1) x = 11.
2) z = 121-119 = 2. 2 не является
квадратом какого-то числа.
3) x = x+1 = 12.
4) z = 144-119 = 25. z=52. y=5.
n = (x-y)(x+y) = (12-5)(12+5) = 7x17.
119 = 7x17.
Download