|
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 реализовать и где он в исходном коде? |
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), состоящий из двух элементов поля:
(При расчете с, мы рассматриваем все скаляры как полевые элементы, которые могут быть сделаны, принимая их по модулю размера поля. Тогда "INV (к)" означает, что элемент поля J такое, что к * у = 1 в поле.) Это немного более технический, чем я имел в виду, чтобы это было, но я надеюсь, что это помогает прояснить некоторые вещи. Андрей |
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, но я не знаю, если вы заботитесь о тех, или нет ... |
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) по модулю р. |
8 мая 2015, 1:01:23 AM | # 5 |
Сообщения: 2366
цитировать ответ |
Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра
На мой взгляд, есть только два типа объектов, используемых в ECDSA: группы элементов и элементов поля (скалярные элементы = поля элементов). Что бы разница между быть скалярными и элементами поля? Есть группы элементов, эти точки на кривой, конечной абелевой группы порядка N, где проблема дискретного журнала предполагается трудно. Есть полевые элементы, которые являются значениями в поле F (P), которая выше кривой, построенной над. Они используются внутри кода группы, но в большинстве случаев не видны непосредственно с помощью алгоритма подписи. Тогда есть скаляры, которые являются обычными числами по модулю N (того же порядка, что и группа), которые используются для умножения элементов группы; это большинство объектов, используемых в подписи. В ECDSA координата Х (которая является Р (Р) поле элемента) точки R (R = кГс) приводится к скаляр (г = R.xy () [0] по модулю N) - что делает держа типы прямо сложнее. (Общей, но не является универсальной конвенции, чтобы сделать точку переменные верхнего регистра и нижнего регистра скаляры) Если вы просто пытаетесь понять подписи для вашего личного обогащения; Шнорра легче понять. |
8 мая 2015, 11:59:44 AM | # 6 |
Сообщения: 778
цитировать ответ |
Re: Кодирование транзакцию в точке кривой у ^ 2 = х ^ 3 + 7 и Биткойн ядра
Благодарим Вас за ясные и полезные объяснения. У меня есть много, чтобы учиться
|