Рейтинг:1

Убедитесь, что координаты x, y, заданные в виде шестнадцатеричной строки, являются допустимыми точками на эллиптической кривой.

флаг cn

Учитывая следующую информацию:

"кривая": "П-256",

"qx": "729C51D177EBE2079A0FB7B0B3C2145159CF81EC61960E642A1744719AA9F913",

"qy": "8C36BCF51475016E614F8C7E0CB1B37C7EA65B4ECCF809852C9B2D0E438710BD"

Вышеупомянутые координаты предположительно действительны в соответствии с ожидаемыми результатами тестового вектора:

«тест пройден»: правда

Мне нужно определить, являются ли приведенные выше координаты открытого ключа допустимыми точками на кривой или нет. Я попытался преобразовать координаты в python в целые числа с помощью:

>>> x = int("7C96DFF02F55B876A2A885A920E9FB5E30C6E1A4061A62517FD5C936A16AD363", 16)
>>> y = int("301ABC6B82DF5B6B6D3E8D56D7660D83A6E4F55E321BD2E57A5AC4A6A683374E", 16)

Затем подставили эти целочисленные значения в обе следующие формулы:

у ^ 2 = Х ^ 3 + 7 (secp256k1)

y^2 = x^3 - 3x + b, где b равно 41058363725152142129326129780047268409114441015993725554835256314039467401291

Ни в том, ни в другом случае формула не указывала на достоверность значений.

Кто-нибудь случайно не знает, как я могу проверить эти координаты?

poncho avatar
флаг my
Для Р256; это формула $y^2 \equiv x^3 - 3x + b \pmod p$. Вы не забыли сделать часть $\bmod p$?
factor2 avatar
флаг cn
Ах, у меня определенно была неправильная формула, потому что я пропустил компонент mod p. Как я могу получить этот компонент из координат x, y?
poncho avatar
флаг my
Если вы знаете, что проверяете кривую P256, это дает вам значение $p$
factor2 avatar
флаг cn
Хорошо, я все еще получаю неправильное значение. После преобразования я получаю следующие значения x и y: х = 56353365848849265321159620645865428036014544177922197398856507648435978687331 у = 21758255182490996347272889474463336439598185139152900800520689763795259832142 Это дает мне (y^2)% 256 = 196 и а (х^3 -3х + б) % 256 = 93 Возможно, мое постоянное значение b неверно?
factor2 avatar
флаг cn
и с первым уравнением я получаю (x ^ 3 + 7)% 256 = 66
Ievgeni avatar
флаг cn
Почему вы %256 делаете? Вы должны сделать %$p$.
factor2 avatar
флаг cn
О, я предположил из приведенного выше комментария, что я глуп и что значение p будет значением кривой (т.е. 256). Наверное, я все еще был тупым. Могу ли я получить ссылку на документацию, которая показывает значение p?
kelalaka avatar
флаг in
@ponco проблема в следующем: кривая неправильная. Это должен быть secp256r1. Текущая точка находится не на кривой secp256k1, а на кривой secp256r1.
kelalaka avatar
флаг in
Теперь я могу назвать это обманом этого [Подтвердите, что точка принадлежит secp256r1] (https://crypto.stackexchange.com/a/90154/18298)
factor2 avatar
флаг cn
Спасибо, Келалака, я не понимал, что ошибся. Очень признателен
factor2 avatar
флаг cn
Беглый взгляд выглядит так: да, так и будет. Я не смог проверить это, так как меня втянули в собрание. Не вернусь к этому еще час или около того. Я отмечу это, когда вернусь к этому
factor2 avatar
флаг cn
Ну, это было быстрее, чем ожидалось. Ага, работает с кривой secp256r1
Рейтинг:0
флаг cn

Как вы написали, вы должны проверить это $y^2 = x^3 + ax + b \mod p$.

Согласно с этот источник.

$$p = 2^{256}-2^{224}+2^{192}+2^{96}-1$$

Обратите внимание, что $256$ относится к битовому размеру $р$, а не к $р$ сам.

factor2 avatar
флаг cn
Комментатор выше указал, что я на неправильной кривой, но я хочу поблагодарить вас за ссылку на эту документацию, хорошее знание для меня, чтобы прочитать в целом

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

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