Русская Википедия:ECDLP

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Нет ссылок

ECDLP (Elliptic Curve Discrete Logarithm Problem) — задача дискретного логарифмирования в группе точек эллиптической кривой.

Пусть даны эллиптическая кривая E, конечно поле Fp и точки P, Q ∈ E(Fp). Задача ECDLP: найти такое k, если оно существует, что Q = [k]P.

Определения

Эллиптической кривой E над конечным полем Fp называется кривая вида (форма Вейерштрасса):

<math>E: Y^2 = X^3 + aX + b</math>, где a, b ∈ Fp.

Набор точек на эллиптической кривой в поле Fp, включающий точку «бесконечность» (обозначается как Ο), образует конечную абелеву группу и обозначается как E(Fp).

Точка Q ∈E (Fp) называется обратной точкой к P ∈ E(Fp), если P + Q = Ο и обозначается как Q = -P.

Для натурального числа n и P ∈ E(Fp) будем считать:

<math>[n]P = \underbrace {P + P + ... + P}_{n}</math>

Записи [n]P и nP эквиваленты. Определение можно расширить для любого целого числа n, если использовать -P.

Порядком группы точек называется число N равное мощности множества E(Fp) и обозначается как |E(Fp)| = N. Обычно в эллиптической криптографии берутся кривые такие, что N = h * l, где h = 1, 2 или 4, а l — большое простое число.

Порядком точки P ∈ E(Fp) называется минимальное число s такое, что [s]P = Ο. При этом образуется подгруппа <math>\langle P\rangle = \{[k]P: k = \overline{1,s}\}</math> и точка P называется генератором <math>\langle P \rangle</math>.

Алгоритмы решения

Полный перебор

Является самой просто атакой в реализации. Необходимо только уметь делать операцию R = [k]P.

Алгоритм

  1. <math>k:=1</math>
  2. <math>R:=[k]P</math>
  3. if <math>R = Q</math>, then <math>k</math> — решение
  4. else <math>k:=k+1</math>; перейти к [2].

Сложность алгоритма: Ο(N).

Алгоритм Полига — Хеллмана

Описание

Пусть G — подгруппа E(Fp), <math>N = |G| = \prod_{i=1}^t {p_i}^{e^i}</math> (то есть предполагается, что число N может быть факторизовано), <math>P, Q \in G</math> и <math>\exists k: Q = [k]P</math>.

Будем решать задачу о поиске k по модулю <math>{p_i}^{e_i}</math>, затем, используя китайскую теорему об остатках, найдем решение k по модулю N.

Из теории групп известно, что существует изоморфизм групп:

<math>\phi: G\rightarrow C_{{p_1}^{e_1}}\otimes ... \otimes C_{{p_t}^{e_t}}</math>

где <math>C_{{p_i}^{e_i}}</math> — циклическая подгруппа G, <math> |C_{{p_i}^{e_i}}| = {p_i}^{e_i}</math>

Тогда проекция <math>\phi</math> на <math>C_{p^e}</math>:

<math>\phi_p = \begin{cases}

G\rightarrow C_{p^e} \\ R\longmapsto [\frac{N}{p^e}]R \end{cases}</math>

Следовательно, <math>{\phi_p}(Q) = [k]{\phi_p}(P)</math> в <math>C_{p^e}</math>.

Покажем, как решить задачу в <math>C_{p^e}</math>, сведя её к решению ECDLP в <math>C_p</math>.

Пусть <math>P,Q \in C_{p^e}</math> и <math>\exists k: Q = [k]P</math>.

Число <math>k</math> определено по модулю <math>p^e</math>. Тогда можно записать k в следующем виде:

<math>k = k_0 + {k_1}p + ... + {k_{e-1}}p^{e-1}</math>

Найдем значения <math>k_0,k_1,...</math> по индукции. Предположим, известно <math>k'</math> — значение <math>k\ mod\ p^t</math>, то есть

<math>k' = k_0 + ... + k_{t-1}p^{t-1}</math>

Теперь хотим определить <math>k_t</math> и таким образом вычислить <math>k\ mod\ p^{t+1}</math>:

<math>k = k' + p^tk</math>

Тогда <math>Q = [k']P + [k]([p^t]P)</math>.

Пусть <math>Q' = Q - [k']P</math> и <math>P'=[p^t]P</math>, тогда <math>Q' = [k]P'</math>

Теперь <math>P'</math> — элемент порядка <math>p^{e-t}</math>, чтобы получить элемент порядка <math>p</math> и, следовательно, свести задачу в <math>C_p</math> необходимо умножить предыдущее выражение на <math>s = p^{e-t-1}</math>. Т.о.

<math>Q = [s]Q'</math> и <math>P=[s]P'</math>

Получили ECDLP в поле <math>C_p</math> в виде <math>Q = [k_t]P</math>.

Предполагая, что можно решить эту задачу в <math>C_p</math>, находим решение <math>k</math> в <math>C_{p^e}</math>. Используя китайскую теорему об остатках, получаем решение ECDLP в <math>E(F_p)</math>.

Как говорилось выше, на практике берутся эллиптические кривые такие, что <math>N = hl</math>, где <math>l</math> — очень большое простое число, что делает данный метод малоэффективным.

Пример

<math> Q = [k]P\ (mod\ 1009)</math>

<math> E: y^2 \equiv x^3 + 71x + 602\ (mod\ 1009)</math>

<math> P = (1, 237), Q = (190, 271)</math>

<math> N = 1060 = 2^2 * 5 * 53 </math>

<math> |\langle P\rangle| = 530 = 2 * 5 * 53</math>

Шаг 1. Найти <math>k\ mod\ 2</math>

  • Находим проекции точек на <math>C_2</math>:
<math>P_2 = 265P = (50, 0)</math>
<math>Q_2 = 265Q = (50, 0)</math>
  • Решаем <math>Q_2 = [k]P_2</math>
<math>k \equiv 1\ (mod\ 2)</math>

Шаг 2. Найти <math>k\ mod\ 5</math>

  • Находим проекции точек на <math>C_5</math>:
<math>P_5 = 106P = (639, 160)</math>
<math>Q_5 = 106Q = (639, 849)</math>
  • Решаем <math>Q_5 = [k]P_5</math>
Заметим, что <math>Q_5 = -P_5</math>, тогда <math>k \equiv 4\ (mod\ 5)</math>

Шаг 3. Найти <math>k\ mod\ 53</math>

  • Находим проекции точек на <math>C_{53}</math>:
<math>P_{53} = 10P = (32, 737)</math>
<math>Q_{53} = 10Q = (592, 97)</math>
  • Решаем <math>Q_{53} = [k]P_{53}</math>
<math>k \equiv 48\ (mod\ 53)</math>

Шаг 4. Найти <math>k\ mod\ 530</math>

  • Из китайской теоремы об остатках для значений, полученных на предыдущих шагах 1-3, имеем, что
<math>k \equiv 419\ (mod\ 530)</math>

Алгоритм Шенкса (Baby-Step/Giant-Step method)

Описание

Пусть <math>G = \langle P\rangle</math> — циклическая подгруппа <math>E(F_p);|\langle P\rangle| = l; Q \in G</math>.

Представим <math>k</math> в виде:

<math>k = k_0 + k_1\lceil {\sqrt l}\rceil </math>

Так как <math>k \le l</math>, то <math>0 \le k_0, k_1 < \lceil {\sqrt l}\rceil </math>.

Вычисляем список «маленьких шагов» <math>P_i = [i]P</math>, <math>0 \le i < \lceil {\sqrt l}\rceil </math> и сохраняем пары <math> (P_i, i) </math>.

Сложность вычислений: <math>O(\lceil {\sqrt l}\rceil)</math>.

Теперь вычисляем «большие шаги». Пусть <math>P' = [\lceil {\sqrt l}\rceil]P</math>, найдём <math>Q_j = Q - [j]P'</math>, <math>0 \le j < \lceil {\sqrt l}\rceil </math>.

Во время поиска <math>Q_j</math> пробуем найти среди сохранённых пар <math>(P_i, i)</math> такую, что <math>P_i = Q_j</math>. Если удалось найти такую пару, то <math>k_0 = i, k_1 = j</math>.

Или, что то же самое:

<math>[i]P = Q - [j\lceil {\sqrt l}\rceil]P, </math>
<math>[i+j\lceil {\sqrt l}\rceil]P = Q</math>.

Сложность вычислений «больших шагов»:<math>O(\lceil {\sqrt l}\rceil)</math>.

В таком случае общая сложность метода <math>O({\sqrt l})</math>, но также требуется <math>S(\sqrt l)</math> памяти для хранения, что является существенным минусом алгоритма.

Алгоритм

  1. <math>m:= \lceil {\sqrt l}\rceil</math>
  2. <math> \mathbf{for}\ i:= 1\ \mathbf{to}\ m\ \mathbf{do} </math>
    <math> R := [i]P</math>
    сохранить <math>(R, i)</math>
  3. <math> \mathbf{for}\ j:= 1\ \mathbf{to}\ m\ \mathbf{do} </math>
    <math> T := Q - [j\lceil {\sqrt l}\rceil]P</math>
    проверить <math>T</math> в списке [2]
  4. <math> \mathbf{if}\ T = R\ \mathbf{then}</math>
    <math> k:=i + j\lceil {\sqrt l}\rceil\ (mod\ l)</math>
    <math>\mathbf{return}\ k</math>

ρ-метод Полларда

Описание

Пусть <math>G = \langle P\rangle</math> — циклическая подгруппа <math>E(F_p); |G| = r; Q \in G</math>.

Основная идея метода — найти различные пары <math>(c', d')</math> и <math>(c, d)</math> по модулю <math>r</math> такие, что <math>[c']P+[d']Q = [c]P+[d]Q</math>.

Тогда <math>[c' - c]P = [d - d']Q</math> или <math>Q = \frac{c'-c}{d-d'}P\ (mod\ r)</math>. Следовательно, <math>k \equiv \frac{c'-c}{d-d'}\ (mod\ r)</math>.

Чтобы реализовать эту идею, выберем случайную функцию для итераций <math>f: G \rightarrow G</math>, и случайную точку <math>P_0</math> для начала обхода. Следующая точка вычисляется как <math>P_{i+1} = f(P_i)</math>.

Так как <math>G</math> — конечная, то найдутся такие индексы <math>i < j</math>, что <math>P_i = P_j</math>.

Тогда <math>P_{i+1} = f(P_i) = f(P_j) = P_{j+1}</math>.

На самом деле <math>P_{i+l} = P_{j+l}</math>, для <math>\forall l \ge 0</math>.

Тогда последовательность <math>\{P_i\}</math> — периодична с периодом <math>j - i</math> (см. рис).

Так как f случайная функция, то, согласно парадоксу дней рождения, совпадение случится примерно через <math>\sqrt{\frac{\pi r}{2}}</math> итераций. Для ускорения поиска коллизий используется метод, придуманный Флойдом для поиска длины цикла: вычисляется сразу пара значений <math>(P_i, P_{2i})</math> для <math>i = 1, 2, ...</math>, пока не найдется совпадение.

Алгоритм

  1. Инициализация.
    Выбрать число ветвей L (обычно берётся 16)
    Выбрать функцию <math>H:\langle P\rangle \rightarrow {1, 2, ..., L} </math>
  2. Вычисление <math>[a_i]P + [b_i]Q</math>.
    <math> \mathbf{for}\ i:= 1\ \mathbf{to}\ L\ \mathbf{do} </math>
    Взять случайные <math>a_i,b_i \in [0, r-1]</math>
    <math>R_i := [a_i]P + [b_i]Q</math>
  3. Вычисление <math>[c']P + [d']Q</math>.
    Взять случайные <math>c',d' \in [0, r-1]</math>
    <math>X' := [c']P + [d']Q</math>
  4. Подготовка к циклу.
    <math>X:=X', c:=c', d := d'</math>
  5. Цикл.
    <math> \mathbf{repeat}</math>
    <math>j:=H(X')</math>
    <math>X':=X' + R_j</math>
    <math>c':=c' + a_j\ (mod\ r)</math>
    <math>d':=d' + b_j\ (mod\ r)</math>
    <math> \mathbf{for}\ i:= 1\ \mathbf{to}\ 2\ \mathbf{do} </math>
    <math>j:=H(X)</math>
    <math>X:=X + R_j</math>
    <math>c:=c + a_j\ (mod\ r)</math>
    <math>d:=d + b_j\ (mod\ r)</math>
    <math> \mathbf{until}\ X' = X</math>
  6. Выход.
    <math> \mathbf{if} d' \ne d\ \mathbf{then}</math>
    <math>k \equiv \frac{c' - c}{d - d'}\ (mod\ r)</math>
    <math> \mathbf{else}</math> ОШИБКА или запустить алгоритм ещё раз.

Сложность алгоритма: <math>O( \sqrt{r})</math>.

Пример

<math>Q = [k]P\ (mod\ 229)</math>

<math> E: y^2 \equiv x^3 + x + 44\ (mod\ 229)</math>

<math> P = (5, 116), Q = (155, 166)</math>

<math>| \langle P\rangle | = 239</math>

Шаг 1.Определить функцию.

  • <math>H: \langle P\rangle \rightarrow {1, 2, 3, 4}</math>
  • <math>H(x,y) = (x\ mod\ 4) + 1</math>
  • <math>(a_1, b_1, R_1)=(79, 163,(135, 117))</math>
  • <math>(a_2, b_2, R_2)=(206, 19,(96, 97))</math>
  • <math>(a_3, b_3, R_3)=(87, 109,(84, 62))</math>
  • <math>(a_4, b_4, R_4)=(219, 68,(72, 134))</math>

Шаг 2. Итерации.

<math>\begin{array}{c|c c c|c c c} Iteration & c' & d' & [c']P + [d']Q & c & d & [c]P + [d]Q\\ \hline 0 & 54 & 175 & (39,159) & 54 & 175 & (39,159)\\ 1 & 34 & 4 & (160,9) & 113 & 167 & (130,182)\\ 2 & 113 & 167 & (130,182) & 180 & 105 & (36, 97)\\ 3 & 200 & 37 & (27,17) & 0 & 97 & (108,89)\\ 4 & 180 & 105 & (36,97) & 46 & 40 & (223,153)\\ 5 & 20 & 29 & (119,180) & 232 & 127 & (167,57)\\ 6 & 0 & 97 & (108,89) & 192 & 24 & (57,105)\\ 7 & 79 & 21 & (81,168) & 139 & 111 & (185,227)\\ 8 & 46 & 40 & (223,153) & 193 & 0 & (197,92)\\ 9 & 26 & 108 & (9,18) & 140 & 87 & (194,145)\\ 10 & 232 & 127 & (167,57) & 67 & 120 & (223,153)\\ 11 & 212 & 195 & (75,136) & 14 & 207 & (167,57)\\ 12 & 192 & 24 & \mathbf {(57,105)} & 213 & 104 & \mathbf {(57,105)}\\ \end{array}</math>

Шаг 3. Обнаружение коллизии.

  • При <math> i = 12</math>: <math>[192]P + [24]Q = [213]P + [104]Q = (57, 105)</math>
  • Получаем, что <math>k \equiv \frac{192 - 213}{104 - 24} \equiv 176\ (mod\ 229)</math>

Литература

Болотов, А. А., Гашков, С. Б., Фролов, А. Б., Часовских, А. А. Элементарное введение в эллиптическую криптографию: Алгебраические и алгоритмические основы. — М. : КомКнига, 2006. — С. 328. — ISBN 5-484-00443-8.

Болотов, А. А., Гашков, С. Б., Фролов, А. Б., Часовских, А. А. Элементарное введение в эллиптическую криптографию: Протоколы криптографии на эллиптических кривых. — М. : КомКнига, 2006. — С. 280. — ISBN 5-484-00444-6.

Galbraith, S.D., Smart, N.P. EVALUATION REPORT FOR CRYPTREC: SECURITY LEVEL OF CRYPTOGRAPHY — ECDLP MATHEMATICAL PROBLEM.

Song Y. Yan Quantum Attacks on ECDLP-Based Cryptosystems. — Springer US, 2013 — ISBN 978-1-4419-7721-2