Простые числа в криптосистемах Факторизация чисел Генерирование простых чисел Проверка чисел на простоту Детерминированные (точные) методы проверки Вероятностные методы проверки Решето Эратосфена Задача: найти все простые числа до числа 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.