Post
Topic
Board Кодеры
Merits 2 from 1 user
Re: Iceland secp256k1 сложение точек на кривой
by
Ctrl_A
on 27/05/2025, 17:42:25 UTC
⭐ Merited by xandry (2)
a=N-10
b=57896044618658097711785492504343953926418782139537452191302581570759080747168

a+b =173688133855974293135356477513031861779256346418612356573907744712277242241495
P=ice.scalar_multiplication(a+b)
P.hex()=0426efa00470ad62bb5b07ea02bcfa40ab6c2d52fcaf913f1bcb0d3f3ce645951ba1b4dc557ef4c11e6baa975c098520fabe3f99732e74d6e2a7d930b368b1676e

TockaA=ice.scalar_multiplication(a)
TockaB=ice.scalar_multiplication(b)

AB = ice.point_addition(TockaA, TockaB)
AB.hex()= 041fb527e94e9c70e8657de7458b81ef9ee3c2b4e0128a675bf7e28980e18b201ebab00a0911454 07e693d53537818bd3049e1f3640757d22858b8aac5416e3e78

Точка AB : это та же точка, как и P , но свернулось в модуль N

x и y :  разные!
То есть мы сначала взяли сумму и единовременно умножили на G , получилась точка P

НО, когда из a сделали точку, а потом из b, а затем сложили: вышла другая точка AB

Вот точка P "ушла гулять в поле", а AB свернулось в модуль, Математически: эти точки одинаковы!
Модульная арифметика, она на то и модульная арифметика, что всё в ней считается по модулю. Если хотите чтобы ваше число M "выпрыгивало" за модуль и "гуляло" по полю, можно прибавлять к нему сколько угодно раз сам модуль. Т.е. M + (k * N), где модуль N = 115792089237316195423570985008687907852837564279074904382605163141518161494337, k - любое целое число.
Но должен Вас разочаровать, в результате таких добавлений конечный результат не изменится.
Для данных из Вашего примера (a = N-10, b = (N-1)/2):
P(a) = 04a0434d9e47f3c86235477c7b1ae6ae5d3442d49b1943c2b752a68e2a47e247c776c545bdabe64 3d85c4938196c5db3969086b3d127885ea6c3411ac3fc8c9358
P(b) = 0400000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c633f3979bf72ae8 202983dc989aec7f2ff2ed91bdd69ce02fc0700ca100e59ddf3
P(a) + P(b) = 041fb527e94e9c70e8657de7458b81ef9ee3c2b4e0128a675bf7e28980e18b201ebab00a0911454 07e693d53537818bd3049e1f3640757d22858b8aac5416e3e78
P(a+b) = 041fb527e94e9c70e8657de7458b81ef9ee3c2b4e0128a675bf7e28980e18b201ebab00a0911454 07e693d53537818bd3049e1f3640757d22858b8aac5416e3e78
P(a+b + 1000000*N) = 041fb527e94e9c70e8657de7458b81ef9ee3c2b4e0128a675bf7e28980e18b201ebab00a0911454 07e693d53537818bd3049e1f3640757d22858b8aac5416e3e78

У последних трёх ключей координаты x и y одинаковые!

Ищите ошибку в функции ice.scalar_multiplication, тем более, что в инете есть информация, что эта функция считает с ошибками. Никогда с ней не работал (за ненадобностью), но есть подозрение, что она выдаёт неправильный результат для чисел > N.