Является самой просто атакой в реализации. Необходимо только уметь делать операцию R = [k]P.
k
:=
1
{\displaystyle k:=1}
R
:=
[
k
]
P
{\displaystyle R:=[k]P}
if
R
=
Q
{\displaystyle R=Q}
, then
k
{\displaystyle k}
— решение
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)}
Пусть
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}})}
памяти для хранения, что является существенным минусом алгоритма.
m
:=
⌈
l
⌉
{\displaystyle m:=\lceil {\sqrt {l}}\rceil }
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)}
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]
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,...}
, пока не найдется совпадение.
Инициализация.
Выбрать число ветвей L (обычно берётся 16)
Выбрать функцию
H
:
⟨
P
⟩
→
1
,
2
,
.
.
.
,
L
{\displaystyle H:\langle P\rangle \rightarrow {1,2,...,L}}
Вычисление
[
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}
Вычисление
[
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}
Подготовка к циклу.
X
″
:=
X
′
,
c
″
:=
c
′
,
d
″
:=
d
′
{\displaystyle X'':=X',c'':=c',d'':=d'}
Цикл.
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''}
Выход.
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)}