Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
7 мая 2015, 3:05:10 PM   # 1
 
 
Сообщения: 778
Цитировать по имени
цитировать ответ
по умолчанию Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru

Где я должен посмотреть в Исходный код Bitcoin ядра чтобы выяснить, как процесс подписи trasform сообщения в точке кривой?

Для того, чтобы подписать сделку (сообщение) в системе Bitcoin, вам нужно закодировать сообщение в точку кривой у ^ 2 = х ^ 3 + 7. Я читаю бумага этого Köblitz в. Есть три схемы кодирования. Я читаю этот вопрос слишком.

Если я смотрю на в исходном коде Bitcoin ядра я не вижу какой-либо из этих схем кодирования, то мне кажется, что сообщение M непосредственно кодируются в точке (-> хэш (М)) без проверки; очевидно, что это не возможно, есть примерно 50% вероятность того, что случайная 256 битовая строка не соответствует точке кривой. Я не могу выяснить, как / если проверки библиотеки ECDSA, если хэш (М) на кривой или нет, и особенно то, что он делает, если хэш (M) не на кривой.

Какое кодирование схема делает Bitcoin-ECDSA реализовать и где он в исходном коде?


arulbero сейчас офлайн Пожаловаться на arulbero   Ответить с цитированием Мультицитирование сообщения от arulbero Быстрый ответ на сообщение arulbero


Как заработать Биткоины?
Без вложений. Не майнинг.


7 мая 2015, 6:16:55 PM   # 2
 
 
Сообщения: 170
Цитировать по имени
цитировать ответ
по умолчанию Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра

Получил 1806 Биткоинов
Реальная история.





Привет arulbero,

Мне нравится этот вопрос. Короткий ответ, что сообщения не кодируются как точки кривые, но как скаляры. Есть способы кодирования данных в виде точек кривых, как предположительно описан в статье Köblitz, и некоторые криптосистемы требуют, но ECDSA не делает.

Более длинный ответ, что есть три типа объектов, используемых в ECDSA: групповые элементы, скаляры а также элементы поля. Элементы группы являются точками на кривой, которые образуют математическая группа, который просто означает, что любая пара элементов может быть добавлена ​​или вычитается согласованным образом. (Обратите внимание, что "прибавление" а также "вычитание" для точек кривой является Очень разные сложения и вычитания чисел! Для добавления двух точек кривых, вы бежите через ряд алгебраических преобразований на их координатах; они имеют глубокие причины алгебраических быть то, что они есть, но они технические и unenlightening выписывать) Скаляры просто целые числа. полевые элементы являются элементами математическое поле над которой группа определена. Они действуют так же, как числа, являются деталями реализации группы, и это, как правило, OK, чтобы забыть, что они существуют.

Указанные элементы группы, которые могут быть добавлены, для любого элемента G в группе вы можете посмотреть на G, G + G, G + G + G, и т.д., и в целом "п раз G" для любого целого п. Эти числа являются скаляры, и они не имеют никакой структуры за пределами этого. Криптографическое свойство эллиптических кривых групп является то, что эти скаляры как-то скрыты в процессе умножения. То есть, для любого п и G, можно вычислить Нг довольно легко, но, учитывая G и Нг, это очень трудно понять, п. (Это, как подписание (тайна) и проверка (открытые ключи) связаны, кстати:. Подписывающий ключ некоторая скалярная d, и ее верификация ключ является дО для конкретного G, которая является свойством Bitcoin)

Алгоритм ECDSA интерпретирует H (M) как скаляр, а не curvepoint. Он делает это самым простым способом: путем чтения хэш как тупоконечника 256-битного числа.

Если вам интересно, полный алгоритм выглядит следующим образом: дан секретный ключ д, сообщение хэш-ч, а случайные скалярные к, он выводит подпись (R, S), состоящий из двух элементов поля:
  • г является й-координата curvepoint кГс
  • s является (Л + дг) * INV (к)

(При расчете с, мы рассматриваем все скаляры как полевые элементы, которые могут быть сделаны, принимая их по модулю размера поля. Тогда "INV (к)" означает, что элемент поля J такое, что к * у = 1 в поле.)


Это немного более технический, чем я имел в виду, чтобы это было, но я надеюсь, что это помогает прояснить некоторые вещи.

Андрей
andytoshi сейчас офлайн Пожаловаться на andytoshi   Ответить с цитированием Мультицитирование сообщения от andytoshi Быстрый ответ на сообщение andytoshi

7 мая 2015, 6:55:25 PM   # 3
 
 
Сообщения: 292
Цитировать по имени
цитировать ответ
по умолчанию Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра


Какое кодирование схема делает Bitcoin-ECDSA реализовать и где он в исходном коде?


Это зависит от того, какой ветви вы используете. Я буду считать, что мы обсуждаем 0,10 или мастер.

Вы найдете большинство того, что вы ищете внутри SRC / secp256k1 / Src
https://github.com/bitcoin/bitcoin/tree/master/src/secp256k1/src главным образом внутри https://github.com/bitcoin/bitcoin/blob/master/src/secp256k1/src/secp256k1.c Кроме того, см https://github.com/bitcoin/bitcoin/blob/master/src/secp256k1/include/secp256k1.h

OpenSSL EC обертка https://github.com/bitcoin/bitcoin/blob/master/src/ecwrapper.cpp

Наконец, небольшое количество проверки находится в https://github.com/bitcoin/bitcoin/blob/master/src/eccryptoverify.cpp

Вы можете найти вызовы делаются внутри key.cpp, main.cpp, но я не знаю, если вы заботитесь о тех, или нет ...
altcoinex сейчас офлайн Пожаловаться на altcoinex   Ответить с цитированием Мультицитирование сообщения от altcoinex Быстрый ответ на сообщение altcoinex

7 мая 2015, 9:14:49 PM   # 4
 
 
Сообщения: 778
Цитировать по имени
цитировать ответ
по умолчанию Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра

Спасибо вам обоим за ваши ответы.

Я думал, что «г» был curvepoint, а потом я понял "+'В этой формуле:

   s = (H + дг) * INV (к)  

как добавление элементов группы, а не как добавление элементов поля. Поэтому я предположил, что «з» был curvepoint (элемент группы) тоже.

Это одна была причиной, почему я не мог понять ECDSA исходного кода библиотеки.


[...] Есть три типа объектов, используемых в ECDSA: группы элементов, скаляры и полевые элементы

[...] При вычислении с, мы рассматриваем все скаляры как элементы поля, что можно сделать, взяв их по модулю размера поля

На мой взгляд, есть только два типа объектов, используемых в ECDSA: группы элементов и элементов поля (скалярные элементы = поля элементов). Что бы разница между быть скалярными и элементами поля?


[...]
подпись (R, S), состоящий из двух элементов поля:

    г является й-координата curvepoint кГс
    s является (Л + дг) * INV (к)


В подписи (R, S), «R» и «s» два поля элементов: подпись соответствует (или нет) в виде curvepoint? «Г» х-координата curvepoint кГс, но я полагаю, «s» не является у-координата кГс, потому что «S» не равна SQRT (г ^ 3 + 7) по модулю р.
 




arulbero сейчас офлайн Пожаловаться на arulbero   Ответить с цитированием Мультицитирование сообщения от arulbero Быстрый ответ на сообщение arulbero

8 мая 2015, 1:01:23 AM   # 5
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра

На мой взгляд, есть только два типа объектов, используемых в ECDSA: группы элементов и элементов поля (скалярные элементы = поля элементов). Что бы разница между быть скалярными и элементами поля?

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

Есть полевые элементы, которые являются значениями в поле F (P), которая выше кривой, построенной над. Они используются внутри кода группы, но в большинстве случаев не видны непосредственно с помощью алгоритма подписи.

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

В ECDSA координата Х (которая является Р (Р) поле элемента) точки R (R = кГс) приводится к скаляр (г = R.xy () [0] по модулю N) - что делает держа типы прямо сложнее.

(Общей, но не является универсальной конвенции, чтобы сделать точку переменные верхнего регистра и нижнего регистра скаляры)


Если вы просто пытаетесь понять подписи для вашего личного обогащения; Шнорра легче понять.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

8 мая 2015, 11:59:44 AM   # 6
 
 
Сообщения: 778
Цитировать по имени
цитировать ответ
по умолчанию Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра

Благодарим Вас за ясные и полезные объяснения. У меня есть много, чтобы учиться
arulbero сейчас офлайн Пожаловаться на arulbero   Ответить с цитированием Мультицитирование сообщения от arulbero Быстрый ответ на сообщение arulbero



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW