Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
13 июля 2011, 5:13:35 AM   # 1
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Конечно, дьявол кроется в деталях ... Я обливание протокол спецификации Bitcoin, наконец, выяснить большинство о том, что мне нужно, с точки зрения потянув открытых ключей и компонентов подписи из сделки на блок исследователя. Теперь, когда у меня есть открытый ключ и подпись от конкретной сделки, я хочу, чтобы проверить подпись ... но я не могу понять, что блок данных для проверки! 

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

theSignature = privateKey.sign (sha256 (sha256 (ЧТО?!?)))

Я стучать голову над ним, источником дайвинг, поиск в Интернете и читать спецификации. К сожалению, в C ++ код слишком абстрактна для меня, чтобы следовать. Я надеюсь, что кто-то может просто сказать мне!

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


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


13 июля 2011, 5:23:01 AM   # 2
 
 
Сообщения: 235
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

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





Это одна из самых сложных частей Bitcoin IMHO. Данные, которые подписали это дважды SHA256 хэш специально сериализованную версию сделки.

Во-первых, сделка копируется. Вход подписания заменяется scriptPubKey соответствующего txout.

С умолчанию HashType SIGHASH_ALL, мы теперь делать. Но для других hashTypes SIGHASH_NONE и SIGHASH_SINGLE, а также флаг SIGHASH_ANYONECANPAY, необходимы еще несколько шагов. См функцию SignatureHash в script.cpp для деталей.

После этого, сделка сериализации и HashType добавляется в виде одного байта, а затем три нулевых байтов, например 01000000.

Затем Bitcoin вычисляет двойную SHA256 в том, что и подписывает полученный хэш.

Я реализовал это дважды, один раз в чистом JavaScript, один раз в Node.js. Оба раза это была королевская боль в ***.
Stefan Thomas сейчас офлайн Пожаловаться на Stefan Thomas   Ответить с цитированием Мультицитирование сообщения от Stefan Thomas Быстрый ответ на сообщение Stefan Thomas

13 июля 2011, 5:41:29 AM   # 3
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Ничего себе, я предполагаю, что я не могу чувствовать себя плохо об этом. Я даже не был близок к разгадке его! Почему это нигде не документировано!?! 

Так что я пытаюсь представить новую транзакцию (TxNew), который будет иметь несколько Outpoints из нескольких старых транзакций в других блоках (TxOld1, TxOld2, ...)

Какая сделка копируется? 

TxNew = [версия, numIn, {TxIn1, TxIn2, TxIn3}, numOut, {TxOut1, TxOut2}, Locktime]

Каждый объект имеет TxIn сценарий в нем [TxOldHash, OutIndex, numScriptBytes, SCRIPT, Sequence]
Каждый объект имеет TxOut сценарий в нем [Amt, numScriptBytes, PK_SCRIPT]

Прежде всего ... я сломала врозь ОДИН из этих сценариев, но я не могу даже вспомнить, какой из них. Это [DerSignature, PublicKey] ... это SCRIPT? или PK_SCRIPT? Или это только часть одного из этих сценариев?
Во-вторых, какие сценарии и какие части из них я двигаюсь вокруг? И какая сделка сериализации?
В-третьих, если моя транзакция имеет несколько входов, не мне нужно несколько подписей?

Ничего себе, это так ужасно запутанным. И я относительно свободно в C ++, но у меня ужасное время трассировки через код ...

-Eto

Постскриптум - Кстати, что должен Locktime быть? Что такое значение последовательности? Что ваш адрес BTC, так что я могу отправить вам небольшое пожертвование для ответа на все эти вопросы? 
etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

13 июля 2011, 5:54:57 AM   # 4
 
 
Сообщения: 235
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Какая сделка копируется?

Один вы подписываете, TxNew.


Это [DerSignature, PublicKey] ... это SCRIPT? или PK_SCRIPT? Или это только часть одного из этих сценариев?

Это scriptPubKey, это то, что вы замените вход, который подписываемый с.


Во-вторых, какие сценарии и какие части из них я двигаюсь вокруг?

Смотрите мой оригинальный пост для случая HashType == 1. Похоже, что вы пытаетесь подписать сделки вы создаете сами, так что вы, вероятно, не придется беспокоиться о других hashTypes.


И какая сделка сериализации?

Вы сериализация копии, созданной на первом шаге.


В-третьих, если моя транзакция имеет несколько входов, не мне нужно несколько подписей?

Да, вы повторите процедуру для каждого входа.


Ничего себе, это так ужасно запутанным. И я относительно свободно в C ++, но у меня ужасное время трассировки через код ...

Я снова рекомендую функцию SignatureHash (). Почитайте, спать на нем, читать его снова, вы получите его.


Постскриптум - Кстати, что должен Locktime быть?

Locktime должен быть 0, если вы не хотите, чтобы сделать некоторые модные вещи.


Что такое значение последовательности?

Последовательность должна быть максимальное значение: 0xffffffff (который является таким же, как -1)


Что ваш адрес BTC, так что я могу отправить вам небольшое пожертвование для ответа на все эти вопросы? 

Не обязательно. Но если вы не можете сдерживать себя: 1DEjwkdqcpteKsxXTxtMfgrpS6LjqW7k4K
Stefan Thomas сейчас офлайн Пожаловаться на Stefan Thomas   Ответить с цитированием Мультицитирование сообщения от Stefan Thomas Быстрый ответ на сообщение Stefan Thomas

13 июля 2011, 10:18:22 AM   # 5
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Если вы не можете прочитать C ++ вы можете найти версию Java проще:

   http://code.google.com/p/bitcoinj/source/browse/trunk/src/com/google/bitcoin/core/Transaction.java#311

Эта штука является документировано, на вики-странице для опкода CHECKSIG:

https://en.bitcoin.it/wiki/OP_CHECKSIG
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

13 июля 2011, 11:03:47 AM   # 6
 
 
Сообщений: 70
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Вся сделка (сериализовать и хэшируется) является то, что будет подписана, минус поле scriptSig, потому что это невозможно для подписи подписать себя.

При создании подписи, поля scriptSig оставлены пустыми. Затем после того, как подписи были получены, они заполнены. При проверке подписи, поля scriptSig стираются, и подпись проверяется.

Теперь, что я написал выше, почти но не то, что происходит, потому что на самом деле все поля являются пустыми scriptSig Кроме за один подписываются / проверено. Для подписания один / проверяется, поле scriptSig заполняется с помощью открытого ключа и только подпись отсутствует.

Я не понимаю, почему открытый ключ вставлен, а не простой метода оставляя их полностью пустыми, но я предполагаю, что кто-то умнее, чем я нашел важную причину для этого.
vector76 сейчас офлайн Пожаловаться на vector76   Ответить с цитированием Мультицитирование сообщения от vector76 Быстрый ответ на сообщение vector76

15 июля 2011, 4:23:08 AM   # 7
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Как только я думаю, что я понимаю, я не понимаю, больше! Шаг три в потоке выше говорит о "гашение" поле подписи в индексе. Но это по сценарию TxOut, который не имеет знач / Публичный ... Я думал ...?

Я так понимаю это NewTx содержит объект TxIn ссылающийся на TxOut на объекте OldTx. 

Выполнить 1: NewTx.TxIn.script только [<подпись> <Публичных>]
Выполнить 2: OldTx.TxOut.script находится ["OP_DUP OP_HASH160 <получатель адр хэш> OP_EQUALVERIFY OP_CHECKSIG"]

Таким образом, первый скрипт запускается первым, чтобы поставить сиговые и ключ в стек, затем второй скрипт запускается с стеком из первого сценария, который будет проверять открытый ключ соответствует адру и проверки подписи. Но я думал, что OldTx.TxOut.script не содержит подпись / Публичную. Но только TxOut.script содержит OP_CHECKSIG, который является то, что будет OP'ing проверки. Итак, что мне не хватает?

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

15 июля 2011, 4:29:52 AM   # 8
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Как только я думаю, что я понимаю, я не понимаю, больше! Шаг три в потоке выше говорит о "гашение" поле подписи в индексе. Но это по сценарию TxOut, который не имеет знач / Публичный ... Я думал ...?

Я так понимаю это NewTx содержит объект TxIn ссылающийся на TxOut на объекте OldTx.  

Выполнить 1: NewTx.TxIn.script только [<подпись> <Публичных>]
Выполнить 2: OldTx.TxOut.script находится ["OP_DUP OP_HASH160 <получатель адр хэш> OP_EQUALVERIFY OP_CHECKSIG"]

Таким образом, первый скрипт запускается первым, чтобы поставить сиговые и ключ в стек, затем второй скрипт запускается с стеком из первого сценария, который будет проверять открытый ключ соответствует адру и проверки подписи. Но я думал, что OldTx.TxOut.script не содержит подпись / Публичную. Но только TxOut.script содержит OP_CHECKSIG, который является то, что будет OP'ing проверки. Итак, что мне не хватает?

-Eto
Два сценария объединяются вместе, чтобы создать один сценарий, который выполняется. Если скрипт выполняется, и оставляет ИСТИНА в стеке, монеты разблокированы и могут быть потрачены.
Шаг 1, подпись помещается в стек.
Шаг 2, Публичный помещаются в стек. Стек содержит сверху: Публичных, подпись
Шаг 3, OP_DUP дублирует верхний элемент. Стек содержит сверху: Публичный, Публичный, подпись. (Дублируется, поскольку необходимы два экземпляра: один экземпляр будет потребляться OP_HASH160, другой OP_CHECKSIG)
Шаг 4, OP_HASH160 преобразует Публичный в addrhash. Стек содержит сверху: addrhash, Публичных, подпись.
Шаг 5, получатель адрес хэш помещается в стек, поэтому (при условии, что они совпадают) хэш появляется дважды. Стек из топа: addrhashR, addrhash, Публичных, подпись
Шаг 6, OP_EQUALVERIFY подтверждает, что addrhashR равна addrhash, потребляя оба. Транзакция завершается неудачей, если они не равны. Стек Сейчас: Публичный, подпись
Шаг 7, OP_CHECKSIG гарантирует, что подпись является действительной сделкой подписи относительно Публичного. Транзакция завершается неудачей, если не действует, оставляет TRUE, если действителен.

Мое предположение относительно того, что "гашение" значит - подпись не известна, в то время хэш создается, поскольку хэш необходим для подписи. Так что я бы предположил, что гашение означает, что заполнитель хешируется вместо подписи до его окончательного значения известны. Когда вы создаете транзакцию, вы подписываете, что сделки (новый не старый).
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

15 июля 2011, 4:41:27 AM   # 9
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Я бы любил это описание 12 часов назад, прежде чем я провел весь день изучая понимание сценариев, а затем кодируются все это в питона. Конечно, один О.П. код я борюсь с OP_CHECKSIG это ...

Ваша первая линия это то, что меня смущает. Вы говорите, что они объединяются, чтобы создать один сценарий, но они не кажутся, в этом примере на другом потоке:

     нижний индекс = tx1.txout [0] .script   
     нижний индекс = subscript.replace (CHR (LEN (подпись)) + подпись, "")

New.TxIn содержит [сиг, Публичный], Old.TxOut содержит скрипт для запуска после этого. Но этот сценарий не содержит подпись / Публичные, поэтому, когда я бег этого сценарий и сказал, чтобы пустое это ... почему я это делаю?

Мне нужно действительно хорошее графическое решение ... может быть, когда я, наконец, понять это, я сделаю один.

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

15 июля 2011, 11:02:55 AM   # 10
 
 
Сообщений: 70
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

New.TxIn сценарий толкает Публичный и подпись в стек, который фактически становится входные к сценарию Old.TxOut.

Old.TxOut скрипт проверяет, что Публичные и подпись (предоставленный New.TxIn) удовлетворяют требование: Публичный должен хэш к указанному значению, и Публичным должен проверить подпись сделки.

OldTx.TxOut.script делает ссылки на Публичных, потому что она содержит хэш Публичных. Вы не можете поставить любой старый Публичных. И тогда секретный ключ, соответствующий Публичных обязан требовать денежных средств, так как сделка должна быть подписана закрытым ключом, соответствующего Публичным. Только тогда подпись сделки проверить против Публичных и разблокировать средства.

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


Предположим, что у вас есть хэш-функцию
хэш = Н (данные)
И у вас также есть функция подписи:
подпись = S (privkey, данные)
А функция проверки соответствующей подписи
истина / ложь = V (Публичная, подпись, данные)
И у вас также есть функция «упрощение», которая удаляет входные сценарии и / или подпись сделки
Т»= Q (Т)

OldTx.TxOut.script эффективно говорит:
Для того, чтобы требовать средства в этой продукции, место на стеке Публичных К и подпись G в транзакции T такой, что Н (К) соответствует заданному значению, и V (K, G, Q (T)) проверяет, чтобы верно.

Только кто-то с закрытым ключом может привести к G. Злые узлы не могут изменить T и передать его, так как это вызвало бы проверки подписи V (K, G, Q (T)), чтобы потерпеть неудачу. 

В случае, если это не было уже ясно, V (K, G, Q (Т)) является то, что делает OP_CHECKSIG, используя K и G из стека. Он получает T с помощью других средств (не ввод из стека, но неявный ввод для OP_CHECKSIG).
vector76 сейчас офлайн Пожаловаться на vector76   Ответить с цитированием Мультицитирование сообщения от vector76 Быстрый ответ на сообщение vector76

15 июля 2011, 3:46:24 PM   # 11
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Г, я действительно ценю объяснение ваших ребят, но вы объясняете все остальное я уже провел десятки часов выяснить. Я полностью понимаю, скрипты, OP коды, сценарий стеки, подписание, хэширования и криптографию в целом (прежде чем я запрограммировал модули шифрования EC). То, что я не получаю Q (T), который является шагом 3 определены в https://en.bitcoin.it/wiki/OP_CHECKSIG.  Я не понимаю, почему шаг 3 говорит вымарать подписи в "индекс" если индекс не содержит подписи. Я думал, может быть, я не понял, а может быть, он на самом деле содержит один ...

Тем не менее, я смотрел на эту тему:  http://forum.bitcoin.org/index.php?topic=18051.0 и понял, что я мог бы на самом деле выполнить код питона там ... если предположить, что этот код верен, то мой вопрос дополнительно оправдан. Я распечатал состояние "индекс" до и после шага 3:

До:
76 a9 1402bf4b2889c6ada8190c252e70bde1a1909f9617 88 переменного тока 30

После:
76 a9 1402bf4b2889c6ada8190c252e70bde1a1909f9617 88 переменного тока 30

И те же:
(OP_DUP) (OP_HASH160)    (OP_EQUALVERIFY) (OP_CHECKSIG) \ x30


Так на самом деле, нет сига / ключа в сценарии txout, шаг-не делает ничего. 
Итак, позвольте мне спросить более прямо: Если этот сценарий является правильным, что точка 3 шага? Только для нестандартных сценариев? Если это не исправить, то, что случилось с ним?
etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

15 июля 2011, 4:06:51 PM   # 12
 
 
Сообщений: 70
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

Ах, вы правы, что это странно. Я думал, что это раздевая подпись из NewTx.TxIn, но вместо зачистки подписи от OldTx.TxOut (который обычно не будет содержать подпись в любом случае), и он вставляет раздел OldTx.TxOut в слот ввода сценария транзакции перед проверкой подпись.

Я не вижу причин для этого в обычной сделки, и я не могу видеть, как это когда-либо будет полезно. Кто-то с лучшей идеей некоторых странных структур транзакций должны описать, как это может быть полезно.
vector76 сейчас офлайн Пожаловаться на vector76   Ответить с цитированием Мультицитирование сообщения от vector76 Быстрый ответ на сообщение vector76

16 июля 2011, 8:11:00 PM   # 13
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Подпись Generation / Верификация - WTF?

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

http://forum.bitcoin.org/index.php?topic=29416.msg370321#msg370321

Пожалуйста, дайте мне знать, если вы видите какие-либо ошибки в схеме, так что я могу исправить их!

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW