title-icon
Яндекс.Метрика

Алгоритм COS


Алгоритм COS (Копперсмит, Одлыжко, Шреппель) — субэкспоненциальный алгоритм дискретного логарифмирования в кольце вычетов по модулю простого числа. Был предложен в 1986 году.

Исходные данные

Пусть задано сравнение

Необходимо найти натуральное число x, удовлетворяющее сравнению (1).

Описание алгоритма

1 этап. Пусть

Сформируем множество

где q — простые.


2 этап. С помощью некоторого просеивания ищем пары c 1 ,   c 2 {displaystyle c_{1}, c_{2}} — такие, что 0 < c i < L 1 / 2 + ϵ {displaystyle 0<c_{i}<L^{1/2+epsilon }} , и


(рассматривается абсолютно наименьший вычет). При этом так как J = O ( p 1 / 2 ) {displaystyle J=O(p^{1/2})} , то


причём это абсолютно наименьший вычет в этом классе и он имеет величину O ( p 1 / 2 + ϵ ) {displaystyle O(p^{1/2+epsilon })} . Поэтому вероятность его гладкости выше, чем для произвольных чисел, меньших p-1.

Логарифмируя по основанию a, получим соотношение

Мы можем также считать, что a является гладким, то есть

откуда


3 этап. Набрав на 2-м этапе достаточно много уравнений, мы решим получившуюся систему линейных уравнений и найдём log a ⁡ ( H + c ) ,   log a ⁡ q {displaystyle log _{a}{(H+c)}, log _{a}q} .

4 этап. Для нахождения x введём новую границу гладкости L 2 {displaystyle L^{2}} . Случайным перебором находим одно значение w, удовлетворяющее соотношению

u — простые числа «средней» величины.

5 этап. С помощью методов, аналогичных этапам 2 и 3, мы находим логарифмы простых чисел u, возникших на этапе 4.

6 этап. Находим ответ:

Оценка сложности

Данный алгоритм имеет сложность O ( exp ⁡ ( ( log ⁡ p log ⁡ log ⁡ p ) 1 / 2 ) ) {displaystyle O(exp {((log {p}log {log {p}})^{1/2})})} арифметических операций. Предполагается, что для чисел p < 10 90 {displaystyle p<10^{90}} данный алгоритм более эффективен, чем решето числового поля.