Рейтинг:1

Неверная точечная атака дает неправильные результаты для точек низкого порядка

флаг ma

Недавно я попытался воспроизвести результаты вопроса, который задал Руджеро и на который Самуэль Невес ответил здесь: Понимание Twist Security относительно коротких кривых Вейерштрасса

В моей попытке воспроизвести это я обнаружил, что атака не работает для некоторых точек. Первоначально я предполагал, что это произошло из-за твист-фактора. $д$ в моем случае не было $-1 \mod p$. Поэтому я задал этот вопрос: Недопустимая точечная атака на квадратичное скручивание эллиптической кривой, когда -1 является квадратичным вычетом. Однако по мере дальнейшего изучения мне стало ясно, что атака не работает не по этой причине. Вместо этого с помощью самого кода исходного ответа я также могу надежно продемонстрировать, что реальная реализация лестницы только для X работает для точек порядка 100+, но не работает (надежно) для точек более низкого порядка.

Я изменил сценарий Самуэля, чтобы детерминистически показать это поведение для точки порядка 7:

# Поля настройки
р = 2^127-1
d = -1 # не квадрат в поле
К = GF(p)
K2.<z> = GF(p^2)

# эта кривая имеет простой порядок, но 2^44-гладкий поворот
а = -3
б = 2045
E = Эллиптическая кривая (K, [a, b])
Et = эллиптическая кривая (K, [d ^ 2 * a, d ^ 3 * b])
E2 = Эллиптическая кривая (K2, [a, b])

# предварительно вычислить заказы
печать (E.order().factor());
печать (Et.order().factor());
печать (E2.order().factor());

# сгенерировать дискретный логарифм для решения
с = 123456789123456789123456789
P = E([0, 26743016104147931148362869907315104519])
Q = с * П

P_ = E2.lift_x(K(163965092228135290549051973720749297665))

факт = 7

P_ *= Et.order() // факт

печать (P_)

Q_ = s * P_ # запрос -- представьте, что это делается с помощью лестницы только для x

# решить лог прямо на E2
х1 = Р_[0]
печать("x1_p2", x1)
х2 = Q_[0]
s_ = E2.lift_x(x1).discrete_log(E2.lift_x(x2))

# сопоставить с Et (необязательно) и решить
х1 = д * Р_[0]
печать("x1_t", x1)
х2 = д * Q_[0]
s__ = Et.lift_x(x1).discrete_log(Et.lift_x(x2))

для результата в [153050600407045353908344231774077597412, 109343643823296263382915152331234715795]:
    для x в [K(результат), K(результат) * d]:
        для c в [Et, E2]:
            пытаться:
                P = c.lift_x (x)
            кроме ValueError как e:
                печать (е)
                Продолжить
            печать (P, P.order())


печать (s % факт)
print (s_, -s_ % fact) # либо то, либо другое
print (s__, -s__ % fact) # либо то, либо другое

Значения 15305... и 1093... - это те, которые дает реализация релейной схемы только для X при задании координат x1_p1 или же x1_t.

Обратите внимание, что этот код и моя реализация лестницы только для X отлично работают для всех точек с порядком 73 или выше. Это просто не работает для заказов 3 или 7. Вот вывод скрипта:

170141183460469231713519983870624230867
3 * 7^2 * 73 * 207464639 * 4221589732069 * 18102941371909
3 * 7^2 * 73 * 207464639 * 4221589732069 * 18102941371909 * 170141183460469231713519983870624230867
(31638283026303721859929793126783073834 : 8180858091114185696092778095200036260*z + 4090429045557092848046389047600018130 : 1)
x1_p2 31638283026303721859929793126783073834
x1_t 138502900434165509871757510589101031893
No point with x-coordinate 153050600407045353908344231774077597412 on Elliptic Curve defined by y^2 = x^3 + 170141183460469231731687303715884105724*x + 170141183460469231731687303715884103682 over Finite Field of size 170141183460469231731687303715884105727
(153050600407045353908344231774077597412 : 120638375417041763806996747829917991029*z + 145389779438755497769342025772901048378 : 1) 56713727820156410583284874520381326863
(17090583053423877823343071941806508315 : 41244633631159509998704366741778119200 : 1) 56713727820156410583284874520381326863
(17090583053423877823343071941806508315 : 28961826547573943769330362324255518848 : 1) 170141183460469231713519983870624230867
No point with x-coordinate 109343643823296263382915152331234715795 on Elliptic Curve defined by y^2 = x^3 + 170141183460469231731687303715884105724*x + 170141183460469231731687303715884103682 over Finite Field of size 170141183460469231731687303715884105727
(109343643823296263382915152331234715795 : 127120934962706688155967022405858199927 : 1) 170141183460469231713519983870624230867
No point with x-coordinate 60797539637172968348772151384649389932 on Elliptic Curve defined by y^2 = x^3 + 170141183460469231731687303715884105724*x + 170141183460469231731687303715884103682 over Finite Field of size 170141183460469231731687303715884105727
(60797539637172968348772151384649389932 : 17145369941110587676988010143957064222 : 1) 170141183460469231713519983870624230867
1
1 6
1 6

Почему эта атака работает в теории (поскольку умножение Q_ = с * P_ моделирует), но работает на практике только для точек достаточно высокого порядка?

флаг pe
Я думаю, что один недостающий компонент этого вопроса — какую лестницу только для $x$ вы используете, чтобы получить эти очки?
флаг ma
Привет, Самуэль, я использую реализацию Брайера и Джойя "Эллиптические кривые Вейерштра и Атаки по побочным каналам», рис. 3 с формулами (6) и (7). Я также нашел в другой статье мультипликативную формулу сложения координат точки X, но она дает те же результаты, что и аддитивная формула Брайера и Джой.Есть ли какой-либо другой алгоритм, который я должен использовать?И что было бы правильным, используя координату X E_t или E_p² в качестве входных данных?Я просто сбит с толку, поскольку мой подход работает для всех точек высокого порядка, он только терпит неудачу для этих точек очень низкого порядка.
флаг pe
Я не могу проверить это прямо сейчас, но, кажется, я припоминаю, что формулы Брайера-Джоя не свободны от исключений, и с точками младшего порядка вы, вероятно, столкнетесь с одним таким исключением, которое сделает результат неверным (например, при работе с точка в бесконечности).
флаг ma
Дэн! Точно! Я провел детальную отладку, и то, что вы описали, именно так и есть. В частности, бывают случаи, когда промежуточные значения становятся бесконечно удаленными точками, и если их не обрабатывать как особый случай, вычисления становятся мусором. Также обратите внимание на то, что эта вероятность увеличивается на младшие баллы. Спасибо большое, вы легенда! Все теперь работает отлично!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.