ECDLP

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

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

Определения

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

E : Y 2 = X 3 + a X + b {\displaystyle E:Y^{2}=X^{3}+aX+b} , где a, b ∈ Fp.

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

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

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

[ n ] P = P + P + . . . + P n {\displaystyle [n]P=\underbrace {P+P+...+P} _{n}}

Записи [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 = Ο. При этом образуется подгруппа P = { [ k ] P : k = 1 , s ¯ } {\displaystyle \langle P\rangle =\{[k]P:k={\overline {1,s}}\}} и точка P называется генератором P {\displaystyle \langle P\rangle } .

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

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

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

Алгоритм

  1. k := 1 {\displaystyle k:=1}
  2. R := [ k ] P {\displaystyle R:=[k]P}
  3. if R = Q {\displaystyle R=Q} , then k {\displaystyle k}  — решение
  4. else k := k + 1 {\displaystyle k:=k+1} ; перейти к [2].

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

Описание

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

Будем решать задачу о поиске k по модулю p i e i {\displaystyle {p_{i}}^{e_{i}}} , затем, используя китайскую теорему об остатках, найдем решение k по модулю N.

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

ϕ : G C p 1 e 1 . . . C p t e t {\displaystyle \phi :G\rightarrow C_{{p_{1}}^{e_{1}}}\otimes ...\otimes C_{{p_{t}}^{e_{t}}}}

где C p i e i {\displaystyle C_{{p_{i}}^{e_{i}}}}  — циклическая подгруппа G, | C p i e i | = p i e i {\displaystyle |C_{{p_{i}}^{e_{i}}}|={p_{i}}^{e_{i}}}

Тогда проекция ϕ {\displaystyle \phi } на C p e {\displaystyle C_{p^{e}}} :

ϕ p = { G C p e R [ N p e ] R {\displaystyle \phi _{p}={\begin{cases}G\rightarrow C_{p^{e}}\\R\longmapsto [{\frac {N}{p^{e}}}]R\end{cases}}}

Следовательно, ϕ p ( Q ) = [ k ] ϕ p ( P ) {\displaystyle {\phi _{p}}(Q)=[k]{\phi _{p}}(P)} в C p e {\displaystyle C_{p^{e}}} .

Покажем, как решить задачу в C p e {\displaystyle C_{p^{e}}} , сведя её к решению ECDLP в C p {\displaystyle C_{p}} .

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

Число k {\displaystyle k} определено по модулю p e {\displaystyle p^{e}} . Тогда можно записать k в следующем виде:

k = k 0 + k 1 p + . . . + k e 1 p e 1 {\displaystyle k=k_{0}+{k_{1}}p+...+{k_{e-1}}p^{e-1}}

Найдем значения k 0 , k 1 , . . . {\displaystyle k_{0},k_{1},...} по индукции. Предположим, известно k {\displaystyle k'}  — значение k   m o d   p t {\displaystyle k\ mod\ p^{t}} , то есть

k = k 0 + . . . + k t 1 p t 1 {\displaystyle k'=k_{0}+...+k_{t-1}p^{t-1}}

Теперь хотим определить k t {\displaystyle k_{t}} и таким образом вычислить k   m o d   p t + 1 {\displaystyle k\ mod\ p^{t+1}} :

k = k + p t k {\displaystyle k=k'+p^{t}k''}

Тогда Q = [ k ] P + [ k ] ( [ p t ] P ) {\displaystyle Q=[k']P+[k'']([p^{t}]P)} .

Пусть Q = Q [ k ] P {\displaystyle Q'=Q-[k']P} и P = [ p t ] P {\displaystyle P'=[p^{t}]P} , тогда Q = [ k ] P {\displaystyle Q'=[k'']P'}

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

Q = [ s ] Q {\displaystyle Q''=[s]Q'} и P = [ s ] P {\displaystyle P''=[s]P'}

Получили ECDLP в поле C p {\displaystyle C_{p}} в виде Q = [ k t ] P {\displaystyle Q''=[k_{t}]P''} .

Предполагая, что можно решить эту задачу в C p {\displaystyle C_{p}} , находим решение k {\displaystyle k} в C p e {\displaystyle C_{p^{e}}} . Используя китайскую теорему об остатках, получаем решение ECDLP в E ( F p ) {\displaystyle E(F_{p})} .

Как говорилось выше, на практике берутся эллиптические кривые такие, что N = h l {\displaystyle N=hl} , где l {\displaystyle l}  — очень большое простое число, что делает данный метод малоэффективным.

Пример

Q = [ k ] P   ( m o d   1009 ) {\displaystyle Q=[k]P\ (mod\ 1009)}

E : y 2 x 3 + 71 x + 602   ( m o d   1009 ) {\displaystyle E:y^{2}\equiv x^{3}+71x+602\ (mod\ 1009)}

P = ( 1 , 237 ) , Q = ( 190 , 271 ) {\displaystyle P=(1,237),Q=(190,271)}

N = 1060 = 2 2 5 53 {\displaystyle N=1060=2^{2}*5*53}

| P | = 530 = 2 5 53 {\displaystyle |\langle P\rangle |=530=2*5*53}

Шаг 1. Найти k   m o d   2 {\displaystyle k\ mod\ 2}

  • Находим проекции точек на C 2 {\displaystyle C_{2}} :
P 2 = 265 P = ( 50 , 0 ) {\displaystyle P_{2}=265P=(50,0)}
Q 2 = 265 Q = ( 50 , 0 ) {\displaystyle Q_{2}=265Q=(50,0)}
  • Решаем Q 2 = [ k ] P 2 {\displaystyle Q_{2}=[k]P_{2}}
k 1   ( m o d   2 ) {\displaystyle k\equiv 1\ (mod\ 2)}

Шаг 2. Найти k   m o d   5 {\displaystyle k\ mod\ 5}

  • Находим проекции точек на C 5 {\displaystyle C_{5}} :
P 5 = 106 P = ( 639 , 160 ) {\displaystyle P_{5}=106P=(639,160)}
Q 5 = 106 Q = ( 639 , 849 ) {\displaystyle Q_{5}=106Q=(639,849)}
  • Решаем Q 5 = [ k ] P 5 {\displaystyle Q_{5}=[k]P_{5}}
Заметим, что Q 5 = P 5 {\displaystyle Q_{5}=-P_{5}} , тогда k 4   ( m o d   5 ) {\displaystyle k\equiv 4\ (mod\ 5)}

Шаг 3. Найти k   m o d   53 {\displaystyle k\ mod\ 53}

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

Шаг 4. Найти k   m o d   530 {\displaystyle k\ mod\ 530}

  • Из китайской теоремы об остатках для значений, полученных на предыдущих шагах 1-3, имеем, что
k 419   ( m o d   530 ) {\displaystyle k\equiv 419\ (mod\ 530)}

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

Описание

Пусть G = P {\displaystyle G=\langle P\rangle }  — циклическая подгруппа E ( F p ) ; | P | = l ; Q G {\displaystyle E(F_{p});|\langle P\rangle |=l;Q\in G} .

Представим k {\displaystyle k} в виде:

k = k 0 + k 1 l {\displaystyle k=k_{0}+k_{1}\lceil {\sqrt {l}}\rceil }

Так как k l {\displaystyle k\leq l} , то 0 k 0 , k 1 < l {\displaystyle 0\leq k_{0},k_{1}<\lceil {\sqrt {l}}\rceil } .

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

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

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

Во время поиска Q j {\displaystyle Q_{j}} пробуем найти среди сохранённых пар ( P i , i ) {\displaystyle (P_{i},i)} такую, что P i = Q j {\displaystyle P_{i}=Q_{j}} . Если удалось найти такую пару, то k 0 = i , k 1 = j {\displaystyle k_{0}=i,k_{1}=j} .

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

[ i ] P = Q [ j l ] P , {\displaystyle [i]P=Q-[j\lceil {\sqrt {l}}\rceil ]P,}
[ i + j l ] P = Q {\displaystyle [i+j\lceil {\sqrt {l}}\rceil ]P=Q} .

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

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

Алгоритм

  1. m := l {\displaystyle m:=\lceil {\sqrt {l}}\rceil }
  2. f o r   i := 1   t o   m   d o {\displaystyle \mathbf {for} \ i:=1\ \mathbf {to} \ m\ \mathbf {do} }
    R := [ i ] P {\displaystyle R:=[i]P}
    сохранить ( R , i ) {\displaystyle (R,i)}
  3. f o r   j := 1   t o   m   d o {\displaystyle \mathbf {for} \ j:=1\ \mathbf {to} \ m\ \mathbf {do} }
    T := Q [ j l ] P {\displaystyle T:=Q-[j\lceil {\sqrt {l}}\rceil ]P}
    проверить T {\displaystyle T} в списке [2]
  4. i f   T = R   t h e n {\displaystyle \mathbf {if} \ T=R\ \mathbf {then} }
    k := i + j l   ( m o d   l ) {\displaystyle k:=i+j\lceil {\sqrt {l}}\rceil \ (mod\ l)}
    r e t u r n   k {\displaystyle \mathbf {return} \ k}

Описание

Пусть G = P {\displaystyle G=\langle P\rangle }  — циклическая подгруппа E ( F p ) ; | G | = r ; Q G {\displaystyle E(F_{p});|G|=r;Q\in G} .

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

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

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

Так как G {\displaystyle G}  — конечная, то найдутся такие индексы i < j {\displaystyle i<j} , что P i = P j {\displaystyle P_{i}=P_{j}} .

Тогда P i + 1 = f ( P i ) = f ( P j ) = P j + 1 {\displaystyle P_{i+1}=f(P_{i})=f(P_{j})=P_{j+1}} .

На самом деле P i + l = P j + l {\displaystyle P_{i+l}=P_{j+l}} , для l 0 {\displaystyle \forall l\geq 0} .

Тогда последовательность { P i } {\displaystyle \{P_{i}\}}  — периодична с периодом j i {\displaystyle j-i} (см. рис).

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

Алгоритм

  1. Инициализация.
    Выбрать число ветвей L (обычно берётся 16)
    Выбрать функцию H : P 1 , 2 , . . . , L {\displaystyle H:\langle P\rangle \rightarrow {1,2,...,L}}
  2. Вычисление [ a i ] P + [ b i ] Q {\displaystyle [a_{i}]P+[b_{i}]Q} .
    f o r   i := 1   t o   L   d o {\displaystyle \mathbf {for} \ i:=1\ \mathbf {to} \ L\ \mathbf {do} }
    Взять случайные a i , b i [ 0 , r 1 ] {\displaystyle a_{i},b_{i}\in [0,r-1]}
    R i := [ a i ] P + [ b i ] Q {\displaystyle R_{i}:=[a_{i}]P+[b_{i}]Q}
  3. Вычисление [ c ] P + [ d ] Q {\displaystyle [c']P+[d']Q} .
    Взять случайные c , d [ 0 , r 1 ] {\displaystyle c',d'\in [0,r-1]}
    X := [ c ] P + [ d ] Q {\displaystyle X':=[c']P+[d']Q}
  4. Подготовка к циклу.
    X := X , c := c , d := d {\displaystyle X'':=X',c'':=c',d'':=d'}
  5. Цикл.
    r e p e a t {\displaystyle \mathbf {repeat} }
    j := H ( X ) {\displaystyle j:=H(X')}
    X := X + R j {\displaystyle X':=X'+R_{j}}
    c := c + a j   ( m o d   r ) {\displaystyle c':=c'+a_{j}\ (mod\ r)}
    d := d + b j   ( m o d   r ) {\displaystyle d':=d'+b_{j}\ (mod\ r)}
    f o r   i := 1   t o   2   d o {\displaystyle \mathbf {for} \ i:=1\ \mathbf {to} \ 2\ \mathbf {do} }
    j := H ( X ) {\displaystyle j:=H(X'')}
    X := X + R j {\displaystyle X'':=X''+R_{j}}
    c := c + a j   ( m o d   r ) {\displaystyle c'':=c''+a_{j}\ (mod\ r)}
    d := d + b j   ( m o d   r ) {\displaystyle d'':=d''+b_{j}\ (mod\ r)}
    u n t i l   X = X {\displaystyle \mathbf {until} \ X'=X''}
  6. Выход.
    i f d d   t h e n {\displaystyle \mathbf {if} d'\neq d''\ \mathbf {then} }
    k c c d d   ( m o d   r ) {\displaystyle k\equiv {\frac {c'-c''}{d''-d'}}\ (mod\ r)}
    e l s e {\displaystyle \mathbf {else} } ОШИБКА или запустить алгоритм ещё раз.

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

Пример

Q = [ k ] P   ( m o d   229 ) {\displaystyle Q=[k]P\ (mod\ 229)}

E : y 2 x 3 + x + 44   ( m o d   229 ) {\displaystyle E:y^{2}\equiv x^{3}+x+44\ (mod\ 229)}

P = ( 5 , 116 ) , Q = ( 155 , 166 ) {\displaystyle P=(5,116),Q=(155,166)}

| P | = 239 {\displaystyle |\langle P\rangle |=239}

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

  • H : P 1 , 2 , 3 , 4 {\displaystyle H:\langle P\rangle \rightarrow {1,2,3,4}}
  • H ( x , y ) = ( x   m o d   4 ) + 1 {\displaystyle H(x,y)=(x\ mod\ 4)+1}
  • ( a 1 , b 1 , R 1 ) = ( 79 , 163 , ( 135 , 117 ) ) {\displaystyle (a_{1},b_{1},R_{1})=(79,163,(135,117))}
  • ( a 2 , b 2 , R 2 ) = ( 206 , 19 , ( 96 , 97 ) ) {\displaystyle (a_{2},b_{2},R_{2})=(206,19,(96,97))}
  • ( a 3 , b 3 , R 3 ) = ( 87 , 109 , ( 84 , 62 ) ) {\displaystyle (a_{3},b_{3},R_{3})=(87,109,(84,62))}
  • ( a 4 , b 4 , R 4 ) = ( 219 , 68 , ( 72 , 134 ) ) {\displaystyle (a_{4},b_{4},R_{4})=(219,68,(72,134))}

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

I t e r a t i o n c d [ c ] P + [ d ] Q c d [ c ] P + [ d ] Q 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 ( 57 , 105 ) 213 104 ( 57 , 105 ) {\displaystyle {\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}}}

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

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

Литература

Болотов, А. А., Гашков, С. Б., Фролов, А. Б., Часовских, А. А. Элементарное введение в эллиптическую криптографию: Алгебраические и алгоритмические основы. — М. : КомКнига, 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