Рейтинг:2

Является ли кривая СТАРКа SafeCurve?

флаг in

SafeCurves определяет критерии выбора безопасных кривых в криптографии с эллиптическими кривыми.

Кривая СТАРК определяет удобную для Штарка эллиптическую кривую, которую можно использовать с ECDSA.

Мне было интересно: является ли кривая СТАРКа SafeCurve?

kelalaka avatar
флаг in
Непонятно, почему выбран этот $G$, номер ничего не в моем рукаве?
oberstet avatar
флаг in
Не уверен, что понимаю, что вы имеете в виду (я не эксперт по EC) - вы имеете в виду, что конкретная точка генератора, используемая в схеме ECDSA, которую определяет веб-сайт STARK Curve, может быть специально выбрана Starkware (авторы), чтобы скрытый/ скрытый бэкдор открывается по кривой?
kelalaka avatar
флаг in
Да это оно.
oberstet avatar
флаг in
хорошо спасибо! имеет смысл, и это определенно вопрос, который я собираюсь раскопать.это _также_ вопрос - не тот, который я задал, но, очевидно, очень хороший ;) даже если общая форма кривой безопасна (если это можно сказать), конкретные параметры могут не привести к безопасной конкретной кривой ..
poncho avatar
флаг my
@kelalaka: на самом деле можно доказать, что конкретный $G$ так же силен, как и любой другой генератор на этой кривой.
kelalaka avatar
флаг in
@poncho сильный в смысле кто? Может быть, создатель сгенерировал лог-таблицу максимально для себя и до сих пор собирается. Что ж, при рассмотрении размера кривой их преимущество будет не более чем незначительным, однако все же считается, что следует указывать причину, указанную на (переоцененных?) кривых безопасности. Почему не первый $x$ как в Curve25519? В конце концов, мы знаем, что число «ничего в рукаве» является физиологическим.
poncho avatar
флаг my
@kelalaka: в том смысле, что если вы можете решить проблему DLog (или CDH) с этим конкретным $G$, вы можете решить проблему DLog (или CDH) с любым генератором. Это противоречит (скажем) самому уравнению EC; может быть, у них была особая слабость с кривыми $A=1$? Вероятный: нет; с другой стороны, у нас нет никаких доказательств.
kelalaka avatar
флаг in
@poncho да, я знаю, что мы можем преобразовать любую базу dlog в другую базу, чтобы решить там. То, что я хочу сказать, могут внедрить массивный индекс dlog и намного раньше всех, тогда даже в этом случае их преимущество ничтожно мало по сравнению с другими злоумышленниками. Да, для $A=1$ мы не знаем. Это и другие причины считать эту кривую _несколько жесткой_ Небольшой $A$ может сократить некоторые вычисления, это все, что я знаю. Еще раз спасибо.
poncho avatar
флаг my
@kelalaka: «Что я хочу сказать, май внедрил массивный индекс dlog и намного раньше всех»; это верно независимо от того, как они выбрали $G$; следовательно, наличие значения, отличного от NUMS, не делает его более вероятным...
Рейтинг:3
флаг in
Вывод

Кривая STARK кажется разумным выбором для ECDSA.

Кривая Старка

Кривая СТАРК определяется над $\mathbb{F}_p$ с $p = 2^{251} + 17*2^{192} +1$ с коротким уравнением Вейерштрасса

$$у^2 = х^3 + А х + В$$

с

  • $А = 1$, и
  • $B = 3141592653589793238462643383279502884197169399375105820974944592307816406665$
Детали по заданным параметрам
  • Порядок группы кривых (количество точек) равен $n = \#E(\mathbf{F}_p)$ является $n= 3618502788666131213697322783095070105526743751716087489154079457884512865583$

    И это указание простого числа, что

    • Каждый элемент, кроме идентификатора ( $\mathcal{O})$ может быть генератор.Число ничего в моем рукаве этой кривой (спасибо Арии за указание), происходит от $\пи$.

      Так Старкс имеет некоторую жесткость по крайней мере на данный момент.

      В конце концов, число «ничего в рукаве» довольно физиологично.

    • Кофактор $ч=1$ это означает, что нет представления Монтгомери кривой, как следствие, нет быстрой лестницы Монтгомери (требуется элемент порядка 2, т.е. 2|кофактор), Лестница Джойса все еще возможно с более низкой производительностью. В ECDSA это полезно при расчете $[k]G$ так как только $х$ используется координата.

    • Нет необходимости рассматривать атаки малых групп, хотя это не проблема для законных пользователей ECDSA. Если пользователи не являются законными, они могут использовать это для двойного расходования монет, как это было в Крив25519 однако это не относится к кривой ШТАРК.

    • Группа кривых изоморфна $\mathbb{Z_n}$

  • $n$ имеет 252-битное двоичное представление, а это означает, что оно имеет около $126$-битовая защита от лучших классических задач дискретного логарифмирования.

  • Размер кривой не дает столкновения $к$ если используется хороший генератор случайных чисел. Если кто-то все еще опасается этого, можно использовать детерминированную ECDSA, приведенную в rfc-6979.

  • Безопасность накрутки (не связанная с ECDSA); квадратичный поворот этой кривой равен $$y^2 = x^3 + 5^2*x +B*5^3$$ *

    • Мощность поворота = "618502788666131213697322783095070105623107215331596699973092056135872020481"
    • Факторы твист-группы = "499669 * 26023817775804638430931 * 278275836047110893120702478691334736277272165979", и это дает безопасность около 158 бит. Умеренный уровень.
  • И у нас есть $2*p+2 = Ord(E) + Ord(\text{E_quaratic_twist})$

  • $n \neq p$ поэтому это не аномальная кривая где дискретный журнал может быть решен быстро.

Код SageMath
а = 1
б = 3141592653589793238462643383279502884197169399375105820974944592307816406665
р = 2^251 + 17*2^192 +1

E = Эллиптическая кривая (GF (p), [0,0,0,a,b])

печать (Е)
Et = E.quadratic_twist()
печать(и)

print("E abelian =", E.abelian_group())
print("E покрутить = ", Et.abelian_group())

карта = E.cardinality()
cardEt = Et.cardinality()

print("мощность E =",карта)
print("мощность E Twist =",карта)


print("факторы E",фактор(карта))
print("факторы Et",фактор(cardEt))

#Генераторная часть не для квадратичного поворота.
#G = E(874739451078007766457464989774322083649278607533249481151382481072868806602,152666792071518830868575557812948353041420400780739481342941381225525861407)
#n = G.порядок()
#print("Порядок генератора =", n)

печать (журнал (карта, 2). n () + 1)

утверждать(2*p+2 == карта + картаEt)

*Квадратичная закрутка, сформированная с помощью QNR 5, к сожалению, не сработала так, как предполагалось. Спасибо Пончо, чтобы указать на это. Я сохраняю уравнение, чтобы можно было увидеть проблему. Вместо этого я использовал квадратичный_твист функция SageMath довольно медленная.

oberstet avatar
флаг in
Фантастика=) Большое спасибо за ваш глубокий анализ некоторых криптографических свойств кривой STARK. Не то чтобы я действительно разбирался в деталях ;) Но я предполагаю, что он проверяет (некоторые из) 11 флагов для SafeCurves, как в обзорной таблице. Так или иначе, я попытался покопаться в выборе G, спросил у парня из Starkware: "Насчет выбора генератора, я не помню. ... С вопросом вы можете обратиться к Дайре Хопвуд из ZCash": https://electriccoin .co/blog/people-behind-zcash-technology-daira-hopwood-engineer-and-protocol-designer/ https://github.com/daira
kelalaka avatar
флаг in
3 из списка это просто параметры, базовый пункт про жесткость, не все что связано с безопасностью. Лэддер постоянно спрашивает о Монтгомери, однако с этим справляется Джойс Лэддер. Я поищу базовую точку, спасибо за указание.
kelalaka avatar
флаг in
позже, я поищу остальные, если смогу...
oberstet avatar
флаг in
fwiw, вот еще несколько фрагментов моих раскопок: Я _думаю_, что семейство кривых называется "Баррето-Наэрриг (БН)" https://eprint.iacr.org/2010/429.pdf. Я не смог найти конкретные параметры кривой STARK в https://neuromancer.sk/std/bn/https://tools.ietf.org/id/draft-kasamatsu-bncurves-01.html. zCash (отличный от Starkware проект), на который намекали ребята из Starkware, исторически использовал BN254, но в 2017 году перешел на BLS12-381 https://github.com/zcash/zcash/issues/2502 https://cp4space.hatsya .com/2020/12/27/barreto-naehrig-curves-and-cryptographic-pairings/
poncho avatar
флаг my
«Твист ... имеет ту же мощность, что и подразумевает ту же безопасность»; является ли порядок твист простым? Если нет, это означает, что твист имеет более низкую безопасность.
kelalaka avatar
флаг in
@poncho Я обнаружил, что поворот имеет ту же мощность. Вы можете проверить мой код. Мне интересно, что часть, так как я не видел кривой, как это.
kelalaka avatar
флаг in
@poncho и $G$ тоже явно не в тренде.
poncho avatar
флаг my
Сумма мощности кривой плюс мощность ее поворота всегда равна $2p+2$; это можно увидеть, потому что для любой возможной координаты x она соответствует двум точкам на кривой, или двум точкам на изгибе, или одной точке на обеих (если $y=0$, что не происходит на этой кривой ). Добавьте две точки бесконечности (одну на кривой, одну на изгибе), и вы у цели. Это может произойти только в том случае, если порядок кривой равен $p+1$, что не так для этой кривой.
kelalaka avatar
флаг in
@poncho это правда, я этого не проверял. Я удалю эту часть, пока она не будет решена.
kelalaka avatar
флаг in
@poncho спасибо, я не знаю, почему $d=5$ не работает, я решил проблему с quadratic_twist в SageMath, хотя это намного медленнее.
kelalaka avatar
флаг in
@oberstet Это не может быть кривая BN, поскольку $p \equiv 1 \bmod 4$, кривые BN требуют, чтобы $p \equiv 3 \bmod 4$
oberstet avatar
флаг in
а, правильно. Думаю, я слишком усердно искал «официальное/правильное имя кривой»;) кстати, как и было предложено, я написал Дарье Хопвуд (см. выше) в DM через Keybase и включил ссылку на пост здесь. Посмотрим.
Ariel avatar
флаг cn
Что касается «ничего в рукаве», [генератор] (https://github.com/starkware-libs/starkex-resources/blob/44a15c7d1bdafda15766ea0fc2e0866e970e39c1/crypto/starkware/crypto/signature/signature.py#L50) является вторым точка в этом [массиве](https://github.com/starkware-libs/starkex-resources/blob/44a15c7d1bdafda15766ea0fc2e0866e970e39c1/crypto/starkware/crypto/signature/pedersen_params.json#L25), который генерируется из цифр $ \пи$.
kelalaka avatar
флаг in
@Ариэль, спасибо за ссылки.
oberstet avatar
флаг in
@Ариэль, спасибо! Я мог бы убедиться, что: сценарий `nothing_up_my_sleeve_gen.py` действительно использует Pi для вычисления G, а файл JSON – это именно результат выполнения сценария https://gist.github.com/oberstet/35b55f21a73a94fb1d1c13f4d6dd5323 https://github.com /starkware-libs/starkex-resources/blob/44a15c7d1bdafda15766ea0fc2e0866e970e39c1/crypto/starkware/crypto/signature/nothing_up_my_sleeve_gen.py#L56
Dan Carmon avatar
флаг us
@kelalaka $d=5$ не работает, потому что 5 _является_ квадратичным вычетом по модулю $p$ (легко проверить $p \equiv 1 \pmod 5$). Вместо этого вы можете взять $d=3$, что является невычетом, поскольку $p \equiv 5 \pmod {12}$.
kelalaka avatar
флаг in
@DanCarmon эм. Тогда в моем расчете QR была ошибка. Спасибо. Оба проверю еще раз...

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

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