Pages:
Author

Topic: Вопрос по эллипт кривой, непонятен ОДИН ша&#1 - page 2. (Read 699 times)

jr. member
Activity: 51
Merit: 18
Чтобы умножить базовую точку на ключ = 2^255, нужно всего-навсего 255 раз провести операцию удвоения (сложения с самой собой), начиная со сложения базовой точки G. Это любому компьютеру сделать под силу за доли секунды.

все было неплохо до этого момента.
почему 255? ты по степени посчитал? а что делать если у меня ключ 2^255-1 (просто минус, не степень. это будет число 57896044618658097711785492504343953926634992332820282019728792003956564819967)? как ты его считать будешь?
jr. member
Activity: 37
Merit: 25

Классная статья, лучше всех, которые довелось видеть до этой! После НГ надо обязательно внимательно прочесть.

а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.

ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.

Умножение базовой точки на закрытый ключ сводится к сложению базовой точки, результатов удвоения базовой точки, последующих удвоений удвоения и т.д.
Удвоение - это, в свою очередь, просто сложение точки с самой собой. В итоге, любое умножение сводится к определённому количеству сложений (базовой точки и результатов сложения).

Например (аналогично смотрите в статье), 23 * G = 2^4 * G + 2^2 * G + 2^1 * G + 1 * G = G4 + G2 + G1 + G0, где
G4 = G3 + G3 (G3 = G2 + G2), G2 = G1 + G1, G1 = G0 + G0, G0 = G.

Теперь, почему полученные числа не превысят значений больше 78 разрядов, смотрите раздел "Поле целых чисел по модулю p".

Сложение на эллиптических кривых - это не просто привычное для всех арифметическое сложение. Здесь сложение определяется пересечением кривой y^2 = x^3 + 7 прямой линией, используя замечательное свойство кривой: любая прямая (не вертикальная), пересекающая кривую в двух точках, всегда будет пересекать ее и в третьей точке (за исключением касательной, которая пересечёт её ровно в ещё одной точке).
О сложении смотрите разделы "Геометрическое сложение" и "Алгебраическое сложение".

Публичный ключ - это произведение базовой точки и приватного ключа. Для ключа = 1 получаем базовую точку:
x = 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (dec = 55066263022277343669578718895168534326250603453777594175500187360389116729240)
y = 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 (dec = 32670510020758816978083085130507043184471273380659243275938904335757337482424)

Чтобы умножить базовую точку на ключ = 2^255, нужно всего-навсего 255 раз провести операцию удвоения (сложения с самой собой), начиная со сложения базовой точки G. Это любому компьютеру сделать под силу за доли секунды.
copper member
Activity: 1554
Merit: 489
Stop the war!
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.

ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.
Да всем по барабану как оно считается. Есть отлаженные либы на всех возможных ЯП. Вы диплом что ли пишете? Кому сильно надо - берет исходники и читает. На сях трушные прогеры обычно нормально код комментят.

мне не по барабану. исходники читал по яве - там ад, либа в либе, либой уравляет.
а ведь у меня ОЧЕНЬ простой вопрос - что значит умножение на приватник. на какое именно значение.

я все это знаю. более того ПИСАЛ даже про этот алгоритм выше.

но кто КОНКРЕТНО может ответить КАК умножается? Здесь же раздел для кодеров? КАК вы умножаете? Не отсылка к переведенной статье а как реально умножается? раздел кодеров, а никто не знает?

Форум про биток. Раздел кодеров. Кодеры в битке умножают с помощью либы опенссл. Как умножают кодеры в опенссл - лучше наверно спросить у них на гитхабе.

ЗЫ походу дела вот это алгоритм в опенссл используется: https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Montgomery_ladder
jr. member
Activity: 51
Merit: 18
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.

ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.
Да всем по барабану как оно считается. Есть отлаженные либы на всех возможных ЯП. Вы диплом что ли пишете? Кому сильно надо - берет исходники и читает. На сях трушные прогеры обычно нормально код комментят.

мне не по барабану. исходники читал по яве - там ад, либа в либе, либой уравляет.
а ведь у меня ОЧЕНЬ простой вопрос - что значит умножение на приватник. на какое именно значение.

я все это знаю. более того ПИСАЛ даже про этот алгоритм выше.

но кто КОНКРЕТНО может ответить КАК умножается? Здесь же раздел для кодеров? КАК вы умножаете? Не отсылка к переведенной статье а как реально умножается? раздел кодеров, а никто не знает?

copper member
Activity: 1554
Merit: 489
Stop the war!
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.

ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.
Да всем по барабану как оно считается. Есть отлаженные либы на всех возможных ЯП. Вы диплом что ли пишете? Кому сильно надо - берет исходники и читает. На сях трушные прогеры обычно нормально код комментят.

мне не по барабану. исходники читал по яве - там ад, либа в либе, либой уравляет.
а ведь у меня ОЧЕНЬ простой вопрос - что значит умножение на приватник. на какое именно значение.

Умножение на приватник - это умножение на любое число от 1 до FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
В принципе можно умножать и на бОльшее число, но результатом умножения все равно будет число от 1 до FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
Я так понял, что основной-то вопрос не в этом, а в том: как именно, каким алгоритмом идет умножение.

Ну можно начать гуглить с выделенных на этой картинке слов тогда:
jr. member
Activity: 51
Merit: 18
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.

ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.
Да всем по барабану как оно считается. Есть отлаженные либы на всех возможных ЯП. Вы диплом что ли пишете? Кому сильно надо - берет исходники и читает. На сях трушные прогеры обычно нормально код комментят.

мне не по барабану. исходники читал по яве - там ад, либа в либе, либой уравляет.
а ведь у меня ОЧЕНЬ простой вопрос - что значит умножение на приватник. на какое именно значение.
copper member
Activity: 1554
Merit: 489
Stop the war!
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.

ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.
Да всем по барабану как оно считается. Есть отлаженные либы на всех возможных ЯП. Вы диплом что ли пишете? Кому сильно надо - берет исходники и читает. На сях трушные прогеры обычно нормально код комментят.

ЗЫ: от сюда может плясать начинать?
jr. member
Activity: 51
Merit: 18
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.

ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.
legendary
Activity: 2317
Merit: 2318
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2256.
jr. member
Activity: 51
Merit: 18
конкретно про биткоин никто ничего не говорит.
Просто на пальцах, сколько раз умножаем точку - как это зависит от приватки - это все опускается. 
Дык, вот же:
Quote
Криптография на эллиптических кривых

Мы потратили много времени, но наконец добрались! Всё просто:

    Закрытый ключ — это случайное целое d, выбранное из {1, n - 1} (где n — порядок подгруппы).
    Открытый ключ — это точка H = dG (где G — базовая точка подгруппы).

Публичный ключ H - это точка на эллиптической кривой над конечным полем, получаемая путём операции скалярного умножения приватного ключа - скаляра d и базовой точки G, то есть, H = dG.

Если приватный ключ равен 1, то публичный ключ от этого приватного ключа равен 1G, для приватного ключа 2 публичный равен 2G и т. д.

а если приватный ключ равен 2^256?
legendary
Activity: 2317
Merit: 2318
конкретно про биткоин никто ничего не говорит.
Просто на пальцах, сколько раз умножаем точку - как это зависит от приватки - это все опускается. 
Дык, вот же:
Quote
Криптография на эллиптических кривых

Мы потратили много времени, но наконец добрались! Всё просто:

    Закрытый ключ — это случайное целое d, выбранное из {1, n - 1} (где n — порядок подгруппы).
    Открытый ключ — это точка H = dG (где G — базовая точка подгруппы).

Публичный ключ H - это точка на эллиптической кривой над конечным полем, получаемая путём операции скалярного умножения приватного ключа - скаляра d и базовой точки G, то есть, H = dG.

Если приватный ключ равен 1, то публичный ключ от этого приватного ключа равен 1G, для приватного ключа 2 публичный равен 2G и т. д.
jr. member
Activity: 51
Merit: 18
Поясните пожалуйста. Я перегуглил и пересмотрел все и вся. Но нигде и никто конкретно не объясняет как происходит сложение точки на кривой с самой собой. Много воды и мало конкретики.
Доступно о криптографии на эллиптических кривых - эту статью смотрели?


да конечно, собственно оттуда и про алгоритм сложения-удвоения - я писал про бинарный вид. еще смотрел А. Савватеева на ютубе и пяток других видео. Все это прекрасная теория, в принципе за недельку осваиваемая НО

конкретно про биткоин никто ничего не говорит.

Просто на пальцах, сколько раз умножаем точку - как это зависит от приватки - это все опускается. 
legendary
Activity: 2317
Merit: 2318
Поясните пожалуйста. Я перегуглил и пересмотрел все и вся. Но нигде и никто конкретно не объясняет как происходит сложение точки на кривой с самой собой. Много воды и мало конкретики.
Доступно о криптографии на эллиптических кривых - эту статью смотрели?
jr. member
Activity: 51
Merit: 18
Поясните пожалуйста. Я перегуглил и пересмотрел все и вся. Но нигде и никто конкретно не объясняет как происходит сложение точки на кривой с самой собой. Много воды и мало конкретики.

Согласно тому, что я нашел некомпрес паблик это координаты xy
Получаются они путем сложения совершенно определенных координат xy с самими собой КОЛИЧЕСТВОМ раз равным размеру приват ключа.

на пальцах:

координаты
G(x) = 55066263022277343669578718895168534326250603453777594175500187360389116729240
G(y) = 32670510020758816978083085130507043184471273380659243275938904335757337482424

приват кей, пусть будет в децимал и для наглядности = 10 или в бинари 1010
Если мы используем известные библиотеки преобразования и решим получить паблик от децимальных 10
то получим паблик с децимальными координатами
x = 72488970228380509287422715226575535698893157273063074627791787432852706183111
y = 62070622898698443831883535403436258712770888294397026493185421712108624767191

Я не разбираюсь ПОКА в формулах сложения, еще темный лес, меня не это интересует - меня интересует вот эта фраза - КОЛИЧЕСТВОМ РАВНЫМ размеру приват ключа.
С десяткой получить вычисления сложения точек просто, но если реальный приват будет 2^255 - то сколько времени должно занять вычислениеHuh
Однако любой софт это делает также быстро как и для вычисления десятки. Еще я встречал, что количество сложений не может быть более 256 (или 512 раз)
А значит всего скорее вычисление идет как то по бинарному моду НО КАК?

Кто нибудь может объяснить какое именно количество раз складываются точки и как это зависит от приват кея?

Спасибо!
Pages:
Jump to: