|
как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Алгоритмы тестирования на простоту и факторизации
2.1 Парадокс дней рождения
Теорема 2.3 Пусть
. Для случайной выборки объёма
из
элементов, где
, вероятность
того, что все элементы выборки будут попарно различны, допускает следующую оценку сверху:

Следствие 2.1 (Парадокс дней рождения) Чтобы с вероятностью
обнаружить двух людей, празднующих день рождения в один день, достаточно рассмотреть всего 23 человека.
Этот парадокс допускает следующие применения в криптографии.
2.2.1 Алгоритм Полларда для факторизации натурального числа
Пусть нам требуется факторизовать натуральное число
, то есть найти любой его нетривиальный делитель. Один из простейших алгоритмов приведён ниже [1]. Алгоритм будет вычислять псевдослучайную последовательность
. Вероятность
того, что
можно оценить по теореме 2.4. Если
- минимальный делитель числа
, то множество
разбивается на
классов, причем если
,
лежат в одном классе, то
делится на
. Итак, в теореме 2.4 находим
, и
.
Если
, а
- наименьшая степень двойки, большая
, то
. Поэтому вместо того, чтобы сравнивать все пары
,
с произвольными
, имеет смысл сравнивать пары:

Для сравнения среди таких пар достаточно хранить
и
, тогда как для поиска среди всех пар нужно хранить все пары.
Правда, такая хитрость требует увеличить длину последовательности. Допустим, наименьшие
и
, для которых
, равны, соответственно,
и
. Тогда

Поскольку мы сравниваем
и
, где
, то у нас
, то есть
. Итак, нужно выбрать наименьшее
такое, что
и вычислить не
, а
членов последовательности.
- Взять многочлен
с целыми коэффициентами и случайное число
. Положить
. - Вычислить
. - Если
- степень двойки, положить
,
, перейти к предыдущему шагу. - (Теперь
- не степень двойки). Если
, то
- нетривиальный делитель числа
. - Положить
. Если
, перейти к шагу 2.
Отметим, что при фиксированном
длина
вычисляемой последовательности пропорциональна
- верхней оценке наименьшего простого делителя
. Таким образом, данный алгоритм имеет сложность, экспоненциальную по числу бит числа
.
Пример 2.2 С помощью
-алгоритма Полларда найти нетривиальный простой делитель числа
.
На первом шаге алгоритма требуется выбрать многочлен
для генерации последовательности
. Возьмём
. Выберем длину
последовательности так, чтобы найти в ней повтор с вероятностью
.
- оценка сверху для наименьшего простого делителя
числа
. Итак,
, откуда
. Тогда

Допустим, в последовательности
есть повтор. Чтобы гарантированно его найти с помощью приведённого алгоритма, нужно вычислить не меньше
её членов. В самом деле, так как
, то
, и необходимое число членов:
.
Выберем
.
- Вычисляем
; - Вычисляем
; 2 - степень двойки; запоминаем
. - Вычисляем
,
. - Вычисляем
, 4 - степень двойки; запоминаем
. - Вычисляем
,
. - Вычисляем
,
. - Вычисляем
,
.
Итак, нам повезло найти нетривиальный делитель 31 числа 2449. Если бы мы досчитали до
и не нашли повтор, то нам лучше было бы выбрать новый
(в качестве него можно взять
) и начать алгоритм сначала.
2.2.2 Алгоритм Полларда для дискретного логарифмирования
Изменим алгоритм предыдущего параграфа так, чтобы с его помощью решать задачу дискретного логарифмирования. Его идея остаётся прежней: мы будем вычислять последовательность
и будем находить среди них пары
чисел. Зададим последовательность так, чтобы это равенство давало нам дискретный логарифм.
Найдём
из условия
, где
- простое число.
Определим последовательности
,
,
следующим образом:




Тогда если
, то
, откуда

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