1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7

# конспект · шаг 7 из 7

Конспект: простота, решето и вероятностные тесты

выжимка - её можно унести в заметки

Понятия

Простое число делится только на единицу и на себя. Составное имеет делитель поменьше. Единица - ни то, ни другое.

Свидетель - основание, которое доказывает, что число составное. Лжец - основание, при котором составное число ведёт себя как простое.

Число Кармайкла - составное, которое проходит тест Ферма по всем основаниям, взаимно простым с ним. Наименьшее - 561 = 3 · 11 · 17.

Третий корень из единицы - число x, не равное 1 и −1, с x² ≡ 1. По простому модулю таких нет.

Что унести

ЗАДАЧА                              ИНСТРУМЕНТ                 ЦЕНА
все простые до N                    решето Эратосфена          N · ln ln N,  память N
простое ли одно число n             Миллер-Рабин               k степеней по модулю
наименьший делитель p числа n       перебор                    p проб, до √n
                                    ро-метод Полларда          около √p кругов, до n^(1/4)
РЕШЕТО                                  N          простых    шагов решета    перебором для каждого
для p от 2, пока p² ≤ N:                10³           168          7 525             21 367
    если p не вычеркнуто:               10⁵         9 592        889 913          8 765 857
        вычеркнуть p², p² + p, …        10⁶        78 498      9 447 987
вычёркиваний до 10⁶: 2 122 048 - по 2,1 на число

Простых много. До N их около N / ln N; около N простое - одно из ln N чисел. Из тысячи нечётных после 10⁹ простых 99.

ТЕСТ ФЕРМА                              ТЕСТ МИЛЛЕРА-РАБИНА,  n − 1 = d · 2ˢ
x = aⁿ⁻¹ mod n                          x = aᵈ mod n
x ≠ 1  →  составное, доказано           x = 1 или x = n − 1  →  не свидетель
x = 1  →  вывода нет                    до s − 1 квадратов; встретилось n − 1  →  не свидетель
                                        иначе  →  составное, доказано
число оснований лжецов Ферма лжецов Миллера-Рабина
91 = 7 · 13 90 36 18
341 = 11 · 31 340 100 50
561 = 3 · 11 · 17 560 320 10
561, основание 2:   2³⁵ = 263 → 166 → 67 → 1        67² ≡ 1,  а 67 не равно 1 и 560
91, основание 3:    3⁹⁰ ≡ 1 (лжец Ферма),  но 3⁴⁵ ≡ 27 и 27² ≡ 1 - свидетель Миллера-Рабина

Почему два корня. x² ≡ 1 (mod p) значит p делит (x − 1)(x + 1); простое делит один из множителей. У составного модуля множители делят работу: 66 · 68 = 8 · 561.

Ошибка. Ферма, не Кармайкл: лжецов не больше половины. Миллер-Рабин, любое нечётное составное: не больше четверти, k случайных оснований - ошибка 1/4ᵏ. Простое составным не назовёт никогда.

ОСНОВАНИЯ, КОТОРЫЕ НЕ ОШИБАЮТСЯ НИ РАЗУ          ДО ЧИСЛА
2                                                2 047
2, 3                                             1 373 653
2, 3, 5                                          25 326 001
2, 3, 5, 7                                       3 215 031 751
первые 12 простых                                3 · 10²³  (все 64-битные)
РО-МЕТОД                                         n = 8633,  x → x² + 1
x - черепаха, шаг;  y - заяц, два шага           шаг        1   2    3    4     5     6
d = НОД(|x − y|, n)                              x          5  26  677  781  5652  3005
d = 1   → дальше                                 x mod 97   5  26   95    5    26    95
1 < d < n → делитель                             НОД(3005 − 677, 8633) = 97
d = n   → сменить c
наименьший делитель перебор, шагов ро-метод, кругов ро-метод, шагов
9 967 29 900 45 3 461
9 999 973 29 999 918 2 472 314 771
94 906 247 - 5 642 806 431

Рекорды разложения: 829 бит в 2020 году, 862 и 896 бит в сентябре 2026-го. Ключ в 1024 бита ненадёжен, 2048 - нижняя граница.

Ловушки джокера

«Единица - значит простое». Тест отвечает «составное» или «не знаю». 3⁹⁰ mod 91 = 1.

Одно основание. По основанию 2 тест Ферма пропускает 78 составных до ста тысяч, Миллер-Рабин - 16.

Основания 1 и n − 1. Лгут для любого нечётного числа. Брать от 2 до n − 2.

Нет проверки x = n − 1 до цикла. Простое 13 с основанием 4 объявляется составным: 4³ ≡ −1.

s квадратов вместо s − 1. Лишний квадрат ничего не находит: aⁿ⁻¹ не бывает равно −1.

x * x % n. Квадрат выходит за точность. Считать pow(x, 2, n).

Набор 2, 3, 5, 7 для больших чисел. 3 215 031 751 = 151 · 751 · 28 351 проходит все четыре.

Фиксированные основания для чужих чисел. Число под известный набор строится заранее.

Вычёркивание от 2p. Верно, но лишняя работа. [True] * N - не хватает ячейки N.

Единица в решете. Без prost[1] = False она объявлена простой.

Ро-метод на простом числе. Не остановится, пока цикл не замкнётся по n. Сначала тест простоты.

d = n как ответ. Это отказ, а не делитель.

Близкие множители. p и q рядом - число раскладывается разностью квадратов за несколько проб.

Куда это ведёт

Всё, что нужно, чтобы построить шифр, оказалось лёгким: найти большое простое, перемножить два таких числа, возвести в степень по модулю, найти обратный элемент. Всё, что нужно, чтобы шифр взломать, - разложить произведение обратно - оказалось трудным. Следующая глава собирает из лёгких частей RSA и обмен ключами и показывает, где такая конструкция ломается не из-за математики, а из-за того, как ею пользуются.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.