Рейтинг:2

Можем ли мы обратить функцию mul на эллиптической кривой?

флаг cn

У меня есть система эллиптических кривых только с одной точкой P. Допустим, клиент A и сервер B генерируют секреты R1 и R2.

A отправляет X1 = mul(R1, P) в B, а B отправляет X2 = mul(R2, P) в A тогда общий секрет одинаков для обоих: S = X1Р2 = Х2R1

В системе есть только одна точка, и у меня есть X1, X2 и P. Я пытаюсь вычислить общий секрет, вычислив R1 и R2. Однако функцию кривой трудно обратить из-за того, что n = n // 2.

Функция :

#R — частный номер, сгенерированный на стороне клиент/сервер.
# P - точка
деф мул(R, P):
         
        Q = P.copy()
        Q2 = PointInf()
        в то время как R > 0:
            если R % 2 == 1:
                Q2 = добавить (Q2, Q)
            Q = добавить (Q, Q)

            Р //= 2
    
        возврат Q2

При небольшом числе n мы можем легко обратить функцию и найти R, потому что итераций не так много, поэтому мы можем сделать аппроксимацию, а затем перебор, но что мы можем сделать для большого R (мой случай — 175 итераций).

Это математически возможно?

Рейтинг:2
флаг ng

То, что вы описываете, это Диффи-Хеллман в какой-то группе с нейтральным PointInf() [далее отмечено $\infty$] и закон Добавлять() [далее отмечено $\боксплюс$]. В постановке задачи не сказано, какой, но название предполагает группу эллиптических кривых над некоторым конечным полем. Функция мул (R, P) вычисляет скалярное умножение $R\boxtimes P=\underbrace{P\boxplus \ldots\boxplus P}_{R\text{terms}}$. От ассоциативности $\боксплюс$ следует $R\boxtimes P$ четко определено, и что $R_1\boxtimes (R_2\boxtimes P)=(R_1\times R_2)\boxtimes P=(R_2\times R_1)\boxtimes P=R_2\boxtimes (R_1\boxtimes P)$ [куда $\раз$ целочисленное умножение].

Я пытаюсь вычислить общий секрет, вычислив $R_1$ и $R_2$.

$R_2\boxtimes P$ и $R_1\boxtimes P$ известны, поэтому злоумышленнику нужно только вычислить $R_1$ или же $R_2$ для восстановления общего $S$.

На малом количестве $n$, мы можем легко обратить функцию и найти $R$ потому что итераций не так много, поэтому мы можем сделать приближение, а затем брутфорс, но что мы можем сделать для больших $R$ (в моем случае 175 итераций).

Если мы действительно находимся на эллиптической кривой над некоторым конечным полем, я не понимаю, как мы можем «сделать приближение». Я предполагаю, что оба $R_i$ случайны в $[0,n)$ с $n\boxtimes P=\infty$ или аналогичный интервал, и $\log_2(n)\приблизительно175$.

Можем ли мы обратить умножение на эллиптической кривой?

Нахождение $R$ данный $R\boxtimes P$ и $P$ это проблема дискретного логарифма. Это самый известный генеральный способ найти $S$. Самый известный генеральный методы решения DLP (например, распределенное ро Полларда с выделенными точками) имеют стоимость порядка $2\кв.п$ дополнения, и это недостижимо (если только вы не можете инвестировать миллиарды в проектирование, производство и эксплуатацию специализированного оборудования). Однако

  • существуют гораздо лучшие алгоритмы для некоторых эллиптических кривых (например, суперсингулярные или когда $n$ является составным).
  • возможно, один из $R_i$ на самом деле не случайно
  • возможно, какие-то дополнительные утечки информации (например, время, необходимое для вычисления $R\boxplus P$, или строки кэша ЦП, используемые этим вычислением; оба могут помочь).
  • или, возможно, это коварный CTF, и проблема не требует поиска $S$.
флаг cn
Хорошо. Спасибо за объяснение. Да, действительно, R является полностью случайным и очень большим, поэтому угадать совершенно невозможно. Собираюсь проверить суперсингулярный алгоритм и распространил Полларда, чтобы проверить, может ли это помочь мне в моей проблеме (это действительно ctf ). Когда вы говорите об утечке дополнительной информации, какая информация может помочь нам восстановить R1 или R2?
fgrieu avatar
флаг ng
@ThibaultPonceta: см. обновленную последнюю пулю. [обновление: см. предпоследний пункт списка]
флаг cn
но последняя пуля? У вас есть другое слово, чтобы описать это? Я не нахожу перевода этого ^^.
fgrieu avatar
флаг ng
В моем _butlast пуле (точке)_ _butlast_ пытается означать: перед последним (это распространено в компьютерных науках, но я не знаю, засвидетельствовано ли оно где-либо еще как отдельное слово [обновление: см. комментарий ниже, у него есть другое значение]). А [_bullet_](https://en.wikipedia.org/wiki/Bullet_(typography)) — это типографский термин, обозначающий символ (часто черный диск), вводящий элемент в список. Я не являюсь носителем английского языка, так что остерегайтесь моих объяснений по этому поводу!
флаг cn
Ладно! Благодарю. впервые вижу такое словосочетание.
флаг us
Это уже не по теме, но как носитель американского английского, изучающий CS более 20 лет, я впервые вижу слово «butlast». Я бы использовал «предпоследний», чтобы обозначить $(n-1)$-й элемент в списке из $n$ элементов, или даже «предпоследний», чтобы звучать менее причудливо. Быстрый поиск (т. е. я мог пропустить другие употребления) показывает, что «butlast» используется для обозначения элементов с 1 по $n-1$ — всех элементов, кроме последнего, а не только $(n-1)$th предмет.

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

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