Алгоритм Шуфа

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

Алгоритм Шуфа — эффективный алгоритм[1] подсчёта числа точек на эллиптической кривой над конечным полем. Алгоритм имеет приложения в эллиптической криптографии, где важно знать число точек, чтобы судить о трудности решения задачи дискретного логарифмирования на группе точек на эллиптической кривой.

Алгоритм опубликовал в 1985 Рене Шуф[en] и это был теоретический прорыв, поскольку это был первый детерминированный алгоритм полиномиального времени для подсчёта точек на эллиптической кривой[en]. До алгоритма Шуфа подходы к подсчёту точек на эллиптических кривых, каким был бесхитростный алгоритм малых и больших шагов, были по большей части трудоёмкими и требовали экспоненционального времени работы.

Данная статья объясняет подход Шуфа, делая упор на математические идеи, лежащие в основе алгоритма.

Введение

Пусть [math]\displaystyle{ E }[/math] — эллиптическая кривая, определённая над конечным полем [math]\displaystyle{ \mathbb{F}_{q} }[/math], где [math]\displaystyle{ q=p^n }[/math] для простого [math]\displaystyle{ p }[/math] и целого [math]\displaystyle{ n \geq 1 }[/math]. Над полем с характеристикой [math]\displaystyle{ \neq 2, 3 }[/math] эллиптическая кривая может быть задана (коротко) уравнением Вейерштрасса

[math]\displaystyle{ y^2 = x^3 + Ax + B }[/math]

с [math]\displaystyle{ A,B\in \mathbb{F}_{q} }[/math]. Множество точек, определённых над [math]\displaystyle{ \mathbb{F}_{q} }[/math], состоит из решений [math]\displaystyle{ (a,b)\in\mathbb{F}_{q}^2 }[/math], удовлетворяющих уравнению кривой, и бесконечно удалённой точки [math]\displaystyle{ O }[/math]. Если использовать групповой закон на эллиптических кривых на этом множестве, можно видеть, что это множество [math]\displaystyle{ E(\mathbb{F}_{q}) }[/math] образует абелеву группу, в которой [math]\displaystyle{ O }[/math] действует как нулевой элемент. Чтобы посчитать точки на эллиптической кривой, мы подсчитываем мощность множества [math]\displaystyle{ E(\mathbb{F}_{q}) }[/math]. В подходе Шуфа для подсчёта мощности [math]\displaystyle{ \sharp E(\mathbb{F}_{q}) }[/math] используется теорема Хассе об эллиптических кривых вместе с китайской теоремой об остатках и многочленами деления[en].

Теорема Хассе

Теорема Хассе утверждает, что если [math]\displaystyle{ E/\mathbb{F}_{q} }[/math] является эллиптической кривой над конечным полем [math]\displaystyle{ \mathbb{F}_{q} }[/math], то [math]\displaystyle{ \sharp E(\mathbb{F}_q) }[/math] удовлетворяет неравенству

[math]\displaystyle{ \mid q + 1 - \sharp E(\mathbb{F}_{q}) \mid \leq 2\sqrt{q}. }[/math]

Этот сильный результат, полученный Хассе в 1934, упрощает нашу задачу путём сужения [math]\displaystyle{ \sharp E(\mathbb{F}_{q}) }[/math] к конечному (хотя и большому) множеству возможностей. Если определить [math]\displaystyle{ t }[/math] как [math]\displaystyle{ q + 1 - \sharp E(\mathbb{F}_{q}) }[/math] и использовать этот результат, мы получим, что вычисление мощности [math]\displaystyle{ t }[/math] по модулю [math]\displaystyle{ N }[/math], где [math]\displaystyle{ N \gt 4\sqrt{q} }[/math], достаточно для вычисления [math]\displaystyle{ t }[/math], а потому и для получения [math]\displaystyle{ \sharp E(\mathbb{F}_{q}) }[/math]. Хотя нет эффективного пути вычисления [math]\displaystyle{ t \pmod N }[/math] прямо для чисел [math]\displaystyle{ N }[/math] общего вида, можно вычислить [math]\displaystyle{ t \pmod l }[/math] для малого простого числа [math]\displaystyle{ l }[/math] довольно эффективно. Мы выбираем [math]\displaystyle{ S=\{l_1,l_2,...,l_r\} }[/math] в качестве множества различных простых чисел, таких, что [math]\displaystyle{ \prod l_i = N \gt 4\sqrt{q} }[/math]. Если задано [math]\displaystyle{ t \pmod {l_i} }[/math] для всех [math]\displaystyle{ l_i\in S }[/math], китайская теорема об остатках позволяет вычислить [math]\displaystyle{ t \pmod N }[/math].

Чтобы вычислить [math]\displaystyle{ t \pmod l }[/math] для простого [math]\displaystyle{ l \neq p }[/math], мы используем теорию эндоморфизма Фробениуса [math]\displaystyle{ \phi }[/math] и многочлены деления[en]. Заметим, что рассмотрение простых чисел [math]\displaystyle{ l \neq p }[/math] не приводит к проблемам, поскольку мы всегда можем выбрать большее простое число, чтобы обеспечить, чтобы произведение было достаточно велико. В любом случае алгоритм Шуфа наиболее часто используется для случая [math]\displaystyle{ q=p }[/math], поскольку имеются более эффективные, так называемые [math]\displaystyle{ p }[/math]-адичные алгоритмы, для полей с малой характеристикой.

Эндоморфизм Фробениуса

Если задана эллиптическая кривая [math]\displaystyle{ E }[/math], определённая над [math]\displaystyle{ \mathbb{F}_{q} }[/math], мы рассматриваем точки на [math]\displaystyle{ E }[/math] над [math]\displaystyle{ \bar{\mathbb{F}}_{q} }[/math], алгебраическим замыканием[en] поля [math]\displaystyle{ \mathbb{F}_{q} }[/math]. То есть мы разрешаем точкам иметь координаты в [math]\displaystyle{ \bar{\mathbb{F}}_{q} }[/math]. Эндоморфизм Фробениуса [math]\displaystyle{ \bar{\mathbb{F}}_{q} }[/math] над [math]\displaystyle{ \mathbb{F}_q }[/math] расширяет эллиптическую кривую отображением [math]\displaystyle{ \phi : (x, y) \mapsto (x^{q}, y^{q}) }[/math].

Это отображение тождественно на [math]\displaystyle{ E(\mathbb{F}_{q}) }[/math] и можно расширить его точкой на бесконечности [math]\displaystyle{ O }[/math], что делает его морфизмом группы из[math]\displaystyle{ E(\bar{\mathbb{F}_{q}}) }[/math] на себя.

Эндоморфизм Фробениуса удовлетворяет квадратному уравнению, связанному с мощностью [math]\displaystyle{ E(\mathbb{F}_{q}) }[/math] по следующей теореме:

Теорема: Эндоморфизм Фробениуса, заданный отображением [math]\displaystyle{ \phi }[/math], удовлетворяет характеристическому уравнению

[math]\displaystyle{ \phi ^2 - t\phi + q = 0 }[/math], где [math]\displaystyle{ t = q + 1 - \sharp E(\mathbb{F}_q) }[/math]

Тогда для всех [math]\displaystyle{ P=(x, y) \in E }[/math] имеем [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}} ) + q(x, y) = t(x^{q}, y^{q}) }[/math], где + означает сложение эллиптической кривой, а [math]\displaystyle{ q(x,y) }[/math] и [math]\displaystyle{ t(x^{q},y^{q}) }[/math] означают скалярное произведение точки [math]\displaystyle{ (x,y) }[/math] на [math]\displaystyle{ q }[/math] и точки [math]\displaystyle{ (x^{q},y^{q}) }[/math] на [math]\displaystyle{ t }[/math][2].

Можно попытаться в символьном виде вычислить эти точки [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) }[/math], [math]\displaystyle{ (x^{q}, y^{q}) }[/math] и [math]\displaystyle{ q(x, y) }[/math] как функции на координатном кольце[en] [math]\displaystyle{ \mathbb{F}_{q}[x,y]/(y^{2}-x^{3}-Ax-B) }[/math] на кривой [math]\displaystyle{ E }[/math], а затем искать значение [math]\displaystyle{ t }[/math], которое удовлетворяет уравнению. Однако степени получаются очень большими и такой подход практического значения не имеет.

Идея Шуфа заключалась в выполнении таких вычислений, ограничиваясь точками порядка [math]\displaystyle{ l }[/math] для различных малых простых чисел [math]\displaystyle{ l }[/math]. Фиксируя нечётное простое число [math]\displaystyle{ l }[/math] мы переходим к решению задачи определения [math]\displaystyle{ t_{l} }[/math], определённого как [math]\displaystyle{ t \pmod l }[/math], для заданного простого [math]\displaystyle{ l \neq 2, p }[/math]. Если точка [math]\displaystyle{ (x, y) }[/math] находится в подгруппе [math]\displaystyle{ l }[/math]-кручения [math]\displaystyle{ E[l]=\{P\in E(\bar{\mathbb{F}_{q}}) \mid lP=O \} }[/math], то [math]\displaystyle{ qP = \bar{q}P }[/math], где [math]\displaystyle{ \bar{q} }[/math] является единственным целым числом, таким, что [math]\displaystyle{ q \equiv \bar{q} \pmod l }[/math] и [math]\displaystyle{ \mid \bar{q} \mid\lt l/2 }[/math]. Заметим, что [math]\displaystyle{ \phi(O) = O }[/math] и что для любого целого [math]\displaystyle{ r }[/math] мы имеем [math]\displaystyle{ r\phi (P) = \phi (rP) }[/math]. Таким образом, [math]\displaystyle{ \phi (P) }[/math] имеет тот же порядок, что и [math]\displaystyle{ P }[/math]. Тогда для [math]\displaystyle{ (x, y) }[/math], принадлежащего [math]\displaystyle{ E[l] }[/math], мы имеем также [math]\displaystyle{ t(x^{q}, y^{q})= \bar{t}(x^{q}, y^{q}) }[/math], если [math]\displaystyle{ t \equiv \bar{t} \pmod l }[/math]. Следовательно, мы свели нашу задачу к решению уравнения

[math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) + \bar{q}(x, y) \equiv \bar{t}(x^{q}, y^{q}), }[/math]

где [math]\displaystyle{ \bar{t} }[/math] и [math]\displaystyle{ \bar{q} }[/math] лежат в интервале [math]\displaystyle{ [-(l-1)/2,(l-1)/2] }[/math].

Вычисления по простому модулю

Многочлен деления[en] с номером l — это такой многочлен, что его корни являются в точности x координатами точек порядка l. Тогда ограничение вычисления [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) + \bar{q}(x, y) }[/math] на точки l-кручения означает вычисление этих выражений как функций координатного кольца E и модуля l-го многочлена деления. То есть мы работаем в [math]\displaystyle{ \mathbb{F}_{q}[x,y]/(y^{2}-x^{3}-Ax-B, \psi_{l}) }[/math]. Это, в частности, означает, что степень X и Y, определяемых через [math]\displaystyle{ (X(x,y),Y(x,y)):=(x^{q^{2}}, y^{q^{2}}) + \bar{q}(x, y) }[/math] не превышают 1 по переменной y и [math]\displaystyle{ (l^2-3)/2 }[/math] по переменной x.

Скалярное произведение [math]\displaystyle{ \bar{q}(x, y) }[/math] может быть осуществлено методом удвоить-и-сложить, либо с помощью [math]\displaystyle{ \bar{q} }[/math]-го многочлена деления. Второй подход даёт:

[math]\displaystyle{ \bar{q} (x,y) = (x_{\bar{q}},y_{\bar{q}}) = \left( x - \frac {\psi_{\bar{q}-1} \psi_{\bar{q}+1}}{\psi^{2}_{\bar{q}}}, \frac{\psi_{2\bar{q}}}{2\psi^{4}_{\bar{q}}} \right) }[/math],

где [math]\displaystyle{ \psi_{n} }[/math] — n-й многочлен деления. Заметим, что [math]\displaystyle{ y_{\bar{q}}/y }[/math] является функцией только от x, обозначим эту функцию через [math]\displaystyle{ \theta(x) }[/math].

Мы должны разбить задачу на два случая: случай, в котором [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) \neq \pm \bar{q}(x, y) }[/math], и случай, в котором [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) = \pm \bar{q}(x, y) }[/math].

Случай 1: [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) \neq \pm \bar{q}(x, y) }[/math]

Используя формулу сложения для группы [math]\displaystyle{ E(\mathbb{F}_{q}) }[/math], мы получим:

[math]\displaystyle{ X(x,y) = \left( \frac{y^{q^{2}} - y_{\bar{q}}}{x^{q^{2}} - x_{\bar{q}}} \right) ^{2} - x^{q^{2}} - x_{\bar{q}}. }[/math]

Заметим, что это вычисление невозможно, если предположение о неравенстве не выполняется.

Мы теперь можем сузить выбор координаты x для [math]\displaystyle{ \bar{t} }[/math] до двух возможностей, а именно — положительного и отрицательного случаев. Используя координату y, определяем, который из двух случаев имеет место.

Сначала мы покажем, что X является функцией только от x. Рассмотрим [math]\displaystyle{ (y^{q^{2}} - y_{\bar{q}})^{2}=y^{2}(y^{q^{2}-1}-y_{\bar{q}}/y)^{2} }[/math]. Поскольку [math]\displaystyle{ q^{2}-1 }[/math] чётно, заменив [math]\displaystyle{ y^{2} }[/math] на [math]\displaystyle{ x^3+Ax+B }[/math], мы переписываем выражение как

[math]\displaystyle{ (x^3+Ax+B)((x^3+Ax+B)^{\frac{q^{2}-1}{2}}-\theta(x)) }[/math]

и имеем

[math]\displaystyle{ X(x)\equiv (x^3+Ax+B)((x^3+Ax+B)^{\frac{q^{2}-1}{2}}-\theta(x))\bmod \psi_l(x). }[/math]

Теперь, если [math]\displaystyle{ X \equiv x^{q} _ {\bar{t}}\bmod \psi_l(x) }[/math] для [math]\displaystyle{ \bar{t}\in [0,(l-1)/2] }[/math], то для [math]\displaystyle{ \bar{t} }[/math] верно равенство

[math]\displaystyle{ \phi ^{2}(P) \mp \bar{t} \phi(P) + \bar{q}P = O }[/math]

для всех точек P l-кручения.

Как было упомянуто ранее, используя Y и [math]\displaystyle{ y_{\bar{t}}^{q} }[/math], мы можем теперь определить, какое из двух значений [math]\displaystyle{ \bar{t} }[/math] ([math]\displaystyle{ \bar{t} }[/math] или [math]\displaystyle{ -\bar{t} }[/math]) работает. Это даёт значение [math]\displaystyle{ t\equiv \bar{t}\pmod l }[/math]. Алгоритм Шуфа запоминает значения [math]\displaystyle{ \bar{t}\pmod l }[/math] в переменной [math]\displaystyle{ t_l }[/math] для каждого рассматриваемого простого l.

Случай 2: [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) = \pm \bar{q}(x, y) }[/math]

Предположим, что [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) = \bar{q}(x, y) }[/math]. Поскольку l является нечётным простым числом, невозможно, чтобы [math]\displaystyle{ \bar{q}(x, y)=-\bar{q}(x, y) }[/math], а следовательно, [math]\displaystyle{ \bar{t}\neq 0 }[/math]. Из характеристического уравнения следует, что [math]\displaystyle{ \bar{t} \phi(P) = 2\bar{q} P }[/math], а следовательно, что [math]\displaystyle{ \bar{t}^{2}\bar{q} \equiv (2q)^{2} \pmod l }[/math]. Из этого следует, что q является квадратом по модулю l. Пусть [math]\displaystyle{ q \equiv w^{2} \pmod l }[/math]. Вычислим [math]\displaystyle{ w\phi(x,y) }[/math] в [math]\displaystyle{ \mathbb{F}_{q}[x,y]/(y^{2}-x^{3}-Ax-B, \psi_{l}) }[/math] и проверим, выполняется ли [math]\displaystyle{ \bar{q}(x, y)=w\phi(x,y) }[/math]. Если так, то [math]\displaystyle{ t_{l} }[/math] является [math]\displaystyle{ \pm 2w \pmod l }[/math], в зависимости от координаты y.

Если q окажется не равным квадрату по модулю l или если равенство не выполняется для некоторого w и [math]\displaystyle{ -w }[/math], наше предположение, что [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) = +\bar{q}(x, y) }[/math] неверно, так что [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) = - \bar{q}(x, y) }[/math]. Характеристическое уравнение даёт [math]\displaystyle{ t_l=0 }[/math].

Дополнительный случай [math]\displaystyle{ l = 2 }[/math]

Если вспомнить, наши начальные соглашения не рассматривают случая [math]\displaystyle{ l = 2 }[/math]. Поскольку мы предположили, что q нечётно, [math]\displaystyle{ q + 1 - t \equiv t \pmod 2 }[/math] и, в частности, [math]\displaystyle{ t_{2} \equiv 0 \pmod 2 }[/math] тогда и только тогда, когда [math]\displaystyle{ E(\mathbb{F}_{q}) }[/math] имеет элемент порядка 2. По определению сложения в группе любой элемент порядка 2 должен иметь вид [math]\displaystyle{ (x_{0}, 0) }[/math]. Таким образом [math]\displaystyle{ t_{2} \equiv 0 \pmod 2 }[/math] тогда и только тогда, когда многочлен [math]\displaystyle{ x^{3} + Ax + B }[/math] имеет корень в [math]\displaystyle{ \mathbb{F}_{q} }[/math], тогда и только тогда, когда НОД[math]\displaystyle{ (x^{q}-x, x^{3} + Ax + B)\neq 1 }[/math].

Алгоритм

    Ввод:
        1. Эллиптическая кривая [math]\displaystyle{ E = y^{2}-x^{3}-Ax-B }[/math].
        2. Целое число q для конечного поля [math]\displaystyle{ F_q }[/math] с [math]\displaystyle{ q=p^{b}, b \ge 1 }[/math].
    Вывод:
        Число точек E над [math]\displaystyle{ F_q }[/math].
    Выбираем множество нечётных простых чисел S, не содержащее p, такое, что  [math]\displaystyle{ N=\prod_{l\in S} l \gt  4\sqrt{q}. }[/math]
    Примем [math]\displaystyle{ t_2=0 }[/math], если НОД[math]\displaystyle{ (x^{q}-x, x^{3} + Ax + B)\neq 1 }[/math], иначе принимаем [math]\displaystyle{ t_2=1 }[/math].
    Вычисляем многочлен деления [math]\displaystyle{ \psi_l }[/math]. 
    Все вычисления в цикле ниже осуществляются в кольце [math]\displaystyle{ \mathbb{F}_{q}[x,y]/(y^{2}-x^{3}-Ax-B, \psi_{l}). }[/math]
    Для [math]\displaystyle{ l \in S }[/math] выполняем:
        Пусть [math]\displaystyle{ \bar{q} }[/math] — единственное целое  такое, что [math]\displaystyle{ q \equiv \bar{q}  \pmod l }[/math] и [math]\displaystyle{ \mid \bar{q} \mid\lt  l/2 }[/math].
        Вычисляем [math]\displaystyle{ (x^{q}, y^{q}) }[/math], [math]\displaystyle{ (x^{q^{2}}, y^{q^{2}}) }[/math] и [math]\displaystyle{ (x_{\bar{q}},y_{\bar{q}}) }[/math].   
        Если [math]\displaystyle{ x^{q^{2}}\neq x_{\bar{q}} }[/math]  то
            Вычисляем [math]\displaystyle{ (X,Y) }[/math].
            для [math]\displaystyle{ 1\leq \bar{t} \leq (l-1)/2 }[/math] выполняем:
                если [math]\displaystyle{ X = x^{q} _ {\bar{t}} }[/math] то
                    если [math]\displaystyle{ Y = y^{q} _ {\bar{t}} }[/math] то
                        [math]\displaystyle{ t_{l}=\bar{t} }[/math];
                    иначе
                        [math]\displaystyle{ t_{l}=-\bar{t} }[/math].
        иначе если q является квадратом по модулю l  то 
            вычисляем w с [math]\displaystyle{ q\equiv w^{2} \pmod l }[/math]
             вычисляем [math]\displaystyle{ w(x^{q}, y^{q}) }[/math]
            если [math]\displaystyle{ w(x^{q}, y^{q})=(x^{q^{2}}, y^{q^{2}}) }[/math]  то
                [math]\displaystyle{ t_l=2w }[/math]
            иначе если [math]\displaystyle{ w(x^{q}, y^{q})=(x^{q^{2}}, -y^{q^{2}}) }[/math] то
                [math]\displaystyle{ t_l=-2w }[/math]
            иначе
                [math]\displaystyle{ t_{l}=0 }[/math]
        иначе
            [math]\displaystyle{ t_{l}=0 }[/math]
    Используем китайскую теорему об остатках для вычисления t по модулю N из уравнения [math]\displaystyle{ x \equiv t_{l} \pmod l }[/math], где [math]\displaystyle{ l \in S }[/math].
    Выводим [math]\displaystyle{ q+1-t }[/math].

Сложность

Большинство вычислений заключаются в вычислении [math]\displaystyle{ \phi(P) }[/math] и [math]\displaystyle{ \phi^{2}(P) }[/math], для каждого простого числа [math]\displaystyle{ l }[/math], то есть вычислении [math]\displaystyle{ x^q }[/math], [math]\displaystyle{ y^q }[/math], [math]\displaystyle{ x^{q^2} }[/math], [math]\displaystyle{ y^{q^2} }[/math] для каждого простого числа [math]\displaystyle{ l }[/math]. Вычисления включают возведение в степень в кольце [math]\displaystyle{ R = \mathbb{F}_{q}[x, y]/ (y^2-x^3-Ax-B, \psi_l) }[/math] и требуют [math]\displaystyle{ O(\log q) }[/math] умножений. Поскольку степень [math]\displaystyle{ \psi_l }[/math] равна [math]\displaystyle{ \frac{l^2-1}{2} }[/math], каждый элемент в кольце является многочленом степени [math]\displaystyle{ O(l^2) }[/math]. По теореме о распределении простых чисел имеется около [math]\displaystyle{ O(\log q) }[/math] простых чисел размера [math]\displaystyle{ O(\log q) }[/math], что даёт для [math]\displaystyle{ l }[/math] значение [math]\displaystyle{ O(\log q) }[/math], и мы получаем [math]\displaystyle{ O(l^2) = O(\log^2q) }[/math]. Таким образом, каждое умножение в кольце [math]\displaystyle{ R }[/math] требует [math]\displaystyle{ O(\log^4 q) }[/math] умножений в [math]\displaystyle{ \mathbb{F}_{q} }[/math], что, в свою очередь, требует, [math]\displaystyle{ O(\log^2 q) }[/math] битовых операций. В общей сложности число битовых операций для каждого простого числа [math]\displaystyle{ l }[/math] равно [math]\displaystyle{ O(\log^7 q) }[/math]. Если принять, что это вычисление требуется провести для каждого из [math]\displaystyle{ O(\log q) }[/math] простых чисел, полная сложность алгоритма Шуфа становится [math]\displaystyle{ O(\log^8 q) }[/math]. Использование быстрых операций с многочленами и целочисленной арифметики сокращает это время до [math]\displaystyle{ \tilde{O}(\log^5 q) }[/math].

Улучшения алгоритма Шуфа

В 1990-х годах Ноам Элкис, а затем А. О. Л. Аткин[en] придумали улучшения базового алгоритма Шуфа путём ограничения множества простых чисел [math]\displaystyle{ S = \{l_1, \ldots, l_s\} }[/math] до чисел определённого вида. Эти числа стали называться простыми Элкиса и простыми Аткина соответственно. Простое число [math]\displaystyle{ l }[/math] называется простым Элкиса, если характеристическое равенство [math]\displaystyle{ \phi^2-t\phi+ q = 0 }[/math] разложим над [math]\displaystyle{ \mathbb{F}_l }[/math], а простые Аткина — это простые, не являющиеся простыми Элкиса. Аткин показал как комбинировать информацию, полученную из простых Аткина, с информацией, полученной из простых Элкиса, чтобы получить эффективный алгоритм, который получил название «Алгоритм Шуфа — Элкиса — Аткина[en]». Первая задача — определить, данное простое является простым Элкиса, или Аткина. Чтобы это получить, используем модулярные многочлены, которые возникают при изучении модулярных форм и интерпретации эллиптических кривых над полем комплексных чисел как решёток. Как только мы определим, какой случай мы имеем, вместо использования многочленов деления[en] мы можем работать с многочленами, имеющими меньшие степени по сравнению с многочленами деления: [math]\displaystyle{ O(l) }[/math] вместо [math]\displaystyle{ O(l^2) }[/math]. Для эффективной имплементации используются вероятностные алгоритмы поиска корней, что делает алгоритм алгоритмом Лас-Вегаса, а не детерминированным алгоритмом. При эвристическом предположении, что примерно половина простых чисел, не превосходящих [math]\displaystyle{ O(\log q) }[/math], являются простыми Элкиса, это даёт алгоритм, который эффективнее алгоритма Шуфа, и ожидаемое время работы этого алгоритма равно [math]\displaystyle{ O(\log^6 q) }[/math], если использовать обычную арифметику, и [math]\displaystyle{ \tilde{O}(\log^4 q) }[/math], если использовать быструю арифметику. Следует заметить, что это эвристическое предположение верно для большинства эллиптических кривых, но не известно для общего случая, даже при верности обобщённой гипотезы Римана.

Имплементации

Некоторые алгоритмы были имплементированы на C++ Майком Скоттом и доступны в исходном коде. Имплементация абсолютно свободная (никаких условий, никаких ограничений), но использует библиотеку MIRACL, которая распространяется под лицензией AGPLv3.

См. также

Примечания

  1. Хотя, в статье ECDSA написано следующее: Алгоритм Скоофа является достаточно неэффективным на практике для значений p, которые действительно представляют интерес, то есть p > 2160.
  2. Точку mP, равную m-кратному сложению точки P в аддитивной группе точек эллиптической кривой, называют скалярным произведением точки на число m, а сами точки mP — скалярными кратными точки (Рыболовлев 2004). В книге Тиборга (ван Тилборг 2006) то же понятие называется скалярным кратным.

Литература