как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Алгоритмы тестирования на простоту и факторизации
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 Алгоритм Полларда для дискретного логарифмирования
Изменим алгоритм предыдущего параграфа так, чтобы с его помощью решать задачу дискретного логарифмирования. Его идея остаётся прежней: мы будем вычислять последовательность и будем находить среди них пары
чисел. Зададим последовательность так, чтобы это равенство давало нам дискретный логарифм.
Найдём из условия
, где
- простое число.
Определим последовательности ,
,
следующим образом:




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

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