Pages:
Author

Topic: Математика и алгоритмы биткоина. - page 7. (Read 17492 times)

sr. member
Activity: 770
Merit: 305
Quote
Оказывается, что если умножать на одно и то же число, то результатов умножения будет сильно меньше чем полное количество точек.

Не, ну тут вы что-то намудрили.
Количество приватных ключей равно количеству публичных ключей
(про разные формы записи пока разговор не ведем)
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Так, продолжим чтение статьи хабра...

Я нашел в статье, формулы сложения двух векторов (двух точек, как угодно) в случае когда эллитическая кривая на самом деле никакая не кривая, а набор точек. Как и следовало ожидать, эти формулы абсолютно идентичны обычным (когда кривая это кривая). Просто добавляется деление по модулю числа "p".

XR= (M2 - XR - XQ) mod p
YR = (YP + M * ( XR - XP ) ) mod p

Понятие "наклон" тут весьма условно, но формула для него тоже такая же как для настоящего геометрического тангенса касательной, только по модулю.

Если точки P и Q разные, то  M = ( YP - YQ ) * ( XP - XQ )-1 mod p

Если точки P и Q совпадают, то M = 3*X2P * (2 * YP)-1 mod p

Итак, чтобы перемножить два числа, нужно провести несколько таких вот операций сложения. Например
G*P = G+G+G+G...[и так P раз]

Ну или число G представить как сумму степеней двойки (перевести в двоичный вид), перегруппировать и получить что-то типа
G*P = 1*2512*P + 0*2511*P+...+1*20P

В любом случае, чтобы понять как работает умножение, достаточно понять - как работает сложение.

Со сложением/умножением в общем виде разобрались, идем дальше. Пробуем разобраться конкретно с биткоином и его криптографией.

Внезапно оказывается, что когда от непрерывных уравнений кривых мы переходим к точкам, то этих точек оказывается конечное количество

То есть возникают возможности коллизий. Понятно, что для криптографии крайне желательно чтобы точек было чуть больше чем дохера и соответственно число коллизий стремилось к нулю.
Короче, количество точек называют умными словами: "порядок группы".

Я сначала подумал так: "порядок группы" это количество всех возможных публичных и приватных ключей, значит тупо выбираем большое p и получаем такое же большое количество возможных ключей.

Но дальнейшее чтение статьи меня разочаровало... Оказывается, что если умножать на одно и то же число, то результатов умножения будет сильно меньше чем полное количество точек.
На самом деле это очевидно с точки зрения элементарной математики, но блин когда думаешь о каких-то там группах с полями на десерт, то мозги начинают закипать ((
Я лучше на примере опишу, как я понял:
1. В ряду натуральных чисел от 1 до 100, этих чисел 100 штук.
2. Совершенно очевидно, что чисел кратных двойке в этом ряду 50, а чисел кратных 30 всего три и т.д.

Так вот, если мы умножаем (в эллиптическом смысле) некоторую константу на произвольное число, то количество разных результатов будет сильно меньше чем порядок группы. Эти разные результаты называются "подгруппой" и количество точек в подгруппе называется логично: "порядок подгруппы".

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

Продолжаю чтение...
member
Activity: 70
Merit: 12
Тут в теме Амаклина зашел разговор об эллиптической криптографии биткоина: как она устроена внутри.
Ссылку на эту тему скиньте.

https://bitcointalk.org/index.php?topic=2431229.220
legendary
Activity: 2422
Merit: 2166
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Блин, ну вы даете.
Вот это должно снять почти все вопросы:
https://habr.com/post/335906/


С вашего позволенья, я попытаюсь переписать эту хабро-статью здесь своими словами. Потому что переводная статься дело хорошее конечно, но там много воды и осилить от начала до конца не так просто...

Итак, первое, что я понял из статьи - это как таки математически найти публичный ключ если кривая обычная без всяких модулей.
Вот формула для точки на кривой:

XR = M2 - 2 * XP
YR = 3 * M * XP - M3 - YP

где

M - это тангенс угла касательной к эллиптической кривой в точке с координатами (XP, YP). То есть производная в этой точке от функции

f(x) = sqrt(x3 + 7)

В статье пишут (лень проверять), что она равна

M = 3 * X2P / (2 * YP)

Продолжаю чтение... )
jr. member
Activity: 76
Merit: 1
Тут в теме Амаклина зашел разговор об эллиптической криптографии биткоина: как она устроена внутри.
Ссылку на эту тему скиньте.
sr. member
Activity: 770
Merit: 305
Блин, ну вы даете.
Вот это должно снять почти все вопросы:
https://habr.com/post/335906/

Да мы нубланы в этом вопросе. Кто ж сомневается? Нельзя объять необъятное и впихнуть невпихуемое.
Читать научно-популярные тексты - это, конечно, здорово.
Но еще перипатетики поняли, что обсуждение даёт очень эффективные результаты.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
member
Activity: 172
Merit: 11
Блин, ну вы даете.
Вот это должно снять почти все вопросы:
https://habr.com/post/335906/
sr. member
Activity: 770
Merit: 305
Это понятно. Напишу на досуге.
Меня сейчас математика заинтересовала...
Я не знаю. Ты учитывай, что на всех картинках эллиптическую кривую рисуют вот такой "зюкой",
потом давай там линии рисовать обычные и пунктирные...
На самом деле (тм) так как мы уравнение решаем не в действительных числах, а в арифметике по модулю,
то график этого уравнения не вот такая аккуратная "зюка", а точки, как-то случайно разбросанные по плоскости.
По идее, там тоже есть понятие касательных, только оно в мозгу не укладывается.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Правильно?
А трудно проверить самому что ли?
Пишешь программу, вычисляешь pubkey для privkey=2 и проверяешь совпал ли
результат с тем, который выдает bitaddress.org

(PS. Я не знаю правильно или нет. Я сам задавался этим вопросом, но сейчас не могу
найти тот топик, где мне объясняли. А я не выучил тот урок)


Это понятно. Напишу на досуге.
Меня сейчас математика заинтересовала...

Если уравнение касательной правильное, то приравняв его к уравнению кривой мы должны получить квадратное уравнение, корнями которого являются публичный и приватный ключи?

 (sqrt(x3 + 7))'|x0(x-x0) + sqrt(x03 + 7) = sqrt(x3 + 7)
sr. member
Activity: 770
Merit: 305
Правильно?
А трудно проверить самому что ли?
Пишешь программу, вычисляешь pubkey для privkey=2 и проверяешь совпал ли
результат с тем, который выдает bitaddress.org

(PS. Я не знаю правильно или нет. Я сам задавался этим вопросом, но сейчас не могу
найти тот топик, где мне объясняли. А я не выучил тот урок)
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Вобщем-то я сам нагуглил ответ на вопрос.

Quote
При удвоении мы проводим прямую, касательную к данной эллиптической кривой в точке P, которая, согласно свойствам кривой, должна пересекать ее еще в одной точке R‘. Точка R, симметричная R‘ относительно оси X, и будет считаться точкой удвоения P. На графике это выглядит следующим образом

То есть чтобы найти G*2 надо провести касательную к G
Поскольку график функции известен, то уравнение касательной найдется элементарно

y = f'(x0)(x-x0) + f(x0)

Где
f(x) = sqrt(x3 + 7)
x0 = 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798

Правильно?
sr. member
Activity: 770
Merit: 305
Теперь остается вопрос: как это умножение устроено?
Понятно, что
G*приватный_ключ = G+G+G+... (сложить столько раз, скольки равен приватный_ключ)

Ну, складывать по этой формуле мы затрахаемся будем пока солнце не погаснет.
Есть более эффективные процедуры умножения.
Запишем приватный ключ в двоичной системе счисления
Допустим, он равен ...000101011
То есть это G + 2G + 8G + 32G + ...
А это уже гораздо проще вычисляется
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Pages:
Jump to: