|
21 сентября 2014, 4:18:19 PM | # 1 |
Сообщений: 12
цитировать ответ |
Re: Sigscript и хэширования вопрос
Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome" Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e подробнее... Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru Привет, Я понимаю, что во входной структуре сделки есть SigScript, который содержит подпись сделки и открытого ключа, который генерирует транзакцию, так что каждый может проверить подпись. Но я также читал, что подпись вычисляется хэш-операции, но если подпись является частью сделки, как я могу подписать хэш, который генерируется из чего-то, что содержит саму подпись. Я полагаю, что есть некоторые шаги, которые пропускают в моей аргументации.
|
21 сентября 2014, 4:49:35 PM | # 2 |
Сообщения: 2002
цитировать ответ |
Re: Sigscript и хэширования вопрос
|
21 сентября 2014, 6:21:55 PM | # 3 |
Сообщений: 12
цитировать ответ |
Re: Sigscript и хэширования вопрос
Спасибо. Таким образом, хэш не рассчитываются с подписью и открытым ключом в поле SigScript, но есть Pkscript из utxo он относится. После вычисления хэш-подпись вставляется в соответствующей области. Поэтому, когда кто-то получить сделку, что он должен проверить, что он создает новую копию транзакции, которая имеет в sigscript поля в Pkscript часть utxo, а затем проверить подпись ..
Это верно? |
21 сентября 2014, 8:03:12 PM | # 4 |
Сообщения: 1064
цитировать ответ |
Re: Sigscript и хэширования вопрос
Спасибо. Таким образом, хэш не рассчитываются с подписью и открытым ключом в поле SigScript, но есть Pkscript из utxo он относится. После вычисления хэш-подпись вставляется в соответствующей области. Поэтому, когда кто-то получить сделку, что он должен проверить, что он создает новую копию транзакции, которая имеет в sigscript поля в Pkscript часть utxo, а затем проверить подпись .. Это верно? Я нашел, что это будет полезным справочником, когда я узнавал о деталях байт уровня Bitcoin передатчиков: http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html Похоже, что вы находитесь на правильном пути. Помните также, что многие Txs будет содержать несколько входов. Каждый вход подписывается индивидуально. Очень грубо говоря, если бы я хотел подписать вход # 2 на ТХ, который вы передали мне (например, как часть coinjoin TX), я бы на месте scriptPubKey (правило для расходов этого вывода) для ввода # 2 в "сценарий сиг" слот, ноль в Sigs сценария для каждого другого входа, добавьте 4-байтовый хэш-код к TX, а затем хэш полученной строке байт дважды с SHA256, чтобы получить 32-байты дайджеста, который должен быть подписан. Обратите внимание, что из-за способа, что только вход подписываемого имеет свою scriptPubKey заполняется при хеширования (остальные входы имеют пустые Sigs сценария), то 32-байтный дайджест, который на самом деле получает подписанный различен для каждого входа в транзакции. Чтобы продолжить работу, я хотел бы подписать полученный дайджест с моим секретным ключом, DER кодирования этой подписью, добавьте sighash спецификатор байт и добавьте Публичный. Эта подпись / Публичных пар затем заменяет scriptPubKey в "сценарий сиг" слот для этого входа. Если все остальные входы в этом TX подписываются (правильно), то сеть должна принять TX, когда я пытаюсь нажать ее. Таблицы в ссылке, которую я разместил выше, должны помочь вам обернуть голову вокруг этого. |
21 сентября 2014, 9:55:41 PM | # 5 |
Сообщений: 12
цитировать ответ |
Re: Sigscript и хэширования вопрос
Спасибо. Таким образом, хэш не рассчитываются с подписью и открытым ключом в поле SigScript, но есть Pkscript из utxo он относится. После вычисления хэш-подпись вставляется в соответствующей области. Поэтому, когда кто-то получить сделку, что он должен проверить, что он создает новую копию транзакции, которая имеет в sigscript поля в Pkscript часть utxo, а затем проверить подпись .. Это верно? Я нашел, что это будет полезным справочником, когда я узнавал о деталях байт уровня Bitcoin передатчиков: http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html Похоже, что вы находитесь на правильном пути. Помните также, что многие Txs будет содержать несколько входов. Каждый вход подписывается индивидуально. Очень грубо говоря, если бы я хотел подписать вход # 2 на ТХ, который вы передали мне (например, как часть coinjoin TX), я бы на месте scriptPubKey (правило для расходов этого вывода) для ввода # 2 в "сценарий сиг" слот, ноль в Sigs сценария для каждого другого входа, добавьте 4-байтовый хэш-код к TX, а затем хэш полученной строке байт дважды с SHA256, чтобы получить 32-байты дайджеста, который должен быть подписан. Обратите внимание, что из-за способа, что только вход подписываемого имеет свою scriptPubKey заполняется при хеширования (остальные входы имеют пустые Sigs сценария), то 32-байтный дайджест, который на самом деле получает подписанный различен для каждого входа в транзакции. Чтобы продолжить работу, я хотел бы подписать полученный дайджест с моим секретным ключом, DER кодирования этой подписью, добавьте sighash спецификатор байт и добавьте Публичный. Эта подпись / Публичных пар затем заменяет scriptPubKey в "сценарий сиг" слот для этого входа. Если все остальные входы в этом TX подписываются (правильно), то сеть должна принять TX, когда я пытаюсь нажать ее. Таблицы в ссылке, которую я разместил выше, должны помочь вам обернуть голову вокруг этого. Большое спасибо за вашу помощь, я делаю университетскую работу и поэтому мне нужно, чтобы узнать о деталях на уровне байт. Я также читал, что каждый вход подписан по отдельности, но это заставляет меня путать о том, как предыдущие выходной хэш-полевых работ. Это означает, что хэш в этой области относится к отдельному входному хэш, а не на хэш транзакции? Я использовал blockexplorer видеть некоторые блоки и транзакцию, и я понял, что это поле относится к хэш транзакции и индекс поле обозначает, какой вход рассматривается. Другая возможность заключается в том, что для проверки сделки и подписать его вычислить индивидуальный хэш для входов, а затем вычисляется общий хэш для всей транзакции, так что мы можем обратиться? В хэш этот способ транзакции будет использоваться только для обозначения, что и также не подписывать его. Я надеюсь, что вы можете прояснить этот вопрос. |
21 сентября 2014, 10:03:18 PM | # 6 |
Сообщения: 2002
цитировать ответ |
Re: Sigscript и хэширования вопрос
Хэш, используемый в "предыдущее поле вывода хэш" это "общий хэш для всей транзакции" предыдущей операции, создавшей вывод, что в настоящее время, потраченное. Индекс затем используются, чтобы указать, какие из потенциально множественных, выходы из этой транзакции тратятся.
При подписании новой транзакции, которые вы создаете, отдельная подпись генерируется для каждого входа в вашей новой транзакции, используя соответствующий закрытый ключ, связанный с адресом, который получил, что предыдущий выход, чтобы доказать, что вы имеете право тратить эти выходные в качестве входного сигнала. Что на самом деле подписан хэш модифицированной копии вашей новой транзакции, где существуют все входы и выходы, а все остальные подписи были удалены (как показано в некоторых других ссылок, приведенных в этой теме). |
21 сентября 2014, 10:18:12 PM | # 7 |
Сообщений: 12
цитировать ответ |
Re: Sigscript и хэширования вопрос
Хорошо, спасибо. Поэтому я полагаю, что вся хеш-транзакции рассчитывается для всех входов sigscript поля, заполненного своей собственной подписи.
У меня последний вопрос, я искал, где utxo хранится, но я не нашел четкий ответ. Они хранятся в базе данных? O они организованы в той или иной структуре? Я только совершенно уверен, что они индексируются их транзакция хэш, но это не ясно, каким образом организованы и обновляются в сеть после того, что некоторые из них провели. |
21 сентября 2014, 11:18:59 PM | # 8 |
Сообщения: 1064
цитировать ответ |
Re: Sigscript и хэширования вопрос
Хорошо, спасибо. Поэтому я полагаю, что вся хеш-транзакции рассчитывается для всех входов sigscript поля, заполненного своей собственной подписи. У меня последний вопрос, я искал, где utxo хранится, но я не нашел четкий ответ. Они хранятся в базе данных? O они организованы в той или иной структуре? Я только совершенно уверен, что они индексируются их транзакция хэш, но это не ясно, каким образом организованы и обновляются в сеть после того, что некоторые из них провели. Ха-ха. Это напоминает мне о том, как я путать о "где находится Merkle дерево для каждого блока хранится?" Большинство узлов использует эталонный клиент (Bitcoin ядра) и множество UTXO сохраняется для быстрой привязки в локальной базе данных. Но обратите внимание, что нет специально сохраненную UTXO установлен на уровне протокола / blockchain - все есть это blockchain. Это, наверное, проще всего понять, если представить себе, в результате чего новый узел в Интернете. Узел начинается с блока жестко закодированы генеза, а затем разбирает блок 1, блок 2, ... Блок N. Каждый блок обновляет свою базу данных UTXO на основе новой информации в более высоком блоке. Таким образом, никто не говорит, что это множество UTXO есть. Узловые цифры это для себя на основе правил протокола и информации, хранящейся в blockchain (что он скачивает со стороны коллег или от службы начальной загрузки). Кроме того, множество UTXO в вашем узле может быть несколько иным, чем UTXO, установленным в моем узле, потому что я могу знать о сделках или новых блоках, которые вы не знаете о том же, и наоборот. |
22 сентября 2014, 11:44:51 AM | # 9 |
Сообщений: 12
цитировать ответ |
Re: Sigscript и хэширования вопрос
Ok еще раз спасибо
Я воспользоваться вашей добротой, чтобы спросить вас, если я понял, как Merkle дерево / корень работ. Я понял, как Merkle корень вычисляется, и что он находится в заголовке блока, который легко. Потом я прочитал, что если у меня есть SPV клиент, у меня только блок заголовка, и поэтому только Merkle корень, поэтому для того, чтобы проверить, если сделка входит в блок мне нужна Merkle ветвь ("некоторый промежуточный хеш дерева") Для того, чтобы вычислить корень Merkle и увидеть, если она соответствует Merkle корню заголовка. Это правильно? Я читал, что Merkle филиал обеспечивается полным узлом, поэтому SPV клиент должен попросить эти ветви, но внутри блока я вижу только список операций с их собственным хэшем, так Merkle ветви (так "промежуточный" хэш дерева), где хранятся? Они динамически вычисляются полным узлом и отправлены в SPV? (Я не думаю, что это так, то не было бы хорошей идеей) Я извиняюсь, если этот вопрос не связан с названием темы в |
22 сентября 2014, 9:40:07 PM | # 10 |
Сообщения: 1064
цитировать ответ |
Re: Sigscript и хэширования вопрос
Ok еще раз спасибо Я воспользоваться вашей добротой, чтобы спросить вас, если я понял, как Merkle дерево / корень работ. Я понял, как Merkle корень вычисляется, и что он находится в заголовке блока, который легко. Потом я прочитал, что если у меня есть SPV клиент, у меня только блок заголовка, и поэтому только Merkle корень, поэтому для того, чтобы проверить, если сделка входит в блок мне нужна Merkle ветвь ("некоторый промежуточный хеш дерева") Для того, чтобы вычислить корень Merkle и увидеть, если она соответствует Merkle корню заголовка. Это правильно? Да, это правильно. Вот TX с фиктивной ветви Merkle. Клиент SPV будет вычислить корень хэш от TX и показанных внутренних хэш, и сравните это с корнем Merkle в blockheader. котировка Я читал, что Merkle филиал обеспечивается полным узлом, поэтому SPV клиент должен попросить эти ветви, но внутри блока я вижу только список операций с их собственным хэшем, так Merkle ветви (так "промежуточный" хэш дерева), где хранятся? Они динамически вычисляются полным узлом и отправлены в SPV? (Я не думаю, что это так, то не было бы хорошей идеей) Я извиняюсь, если этот вопрос не связан с названием темы в SPV клиенты получают филиал Меркла для конкретного TX от полных узлов. Вот еще информация: Полные узлы должны строить дерево Merkle каждый раз, когда они проверяют новый блок в любом случае. Корень Merkle они вычисляют для себя должен соответствовать корню Меркла в blockheader для того, чтобы блок будет считаться действительным. Хотя я никогда не проверял, я бы предположить, что после построения дерева, клиент сохраняет ссылку на него в базе данных, так что она может эффективно реагировать на запросы клиентов SPV. Но я не уверен, что протокол выглядит для получения ветви Меркла из полного узла. Мне было бы интересно узнать, тоже. |
23 сентября 2014, 9:20:55 AM | # 11 |
Сообщений: 12
цитировать ответ |
Re: Sigscript и хэширования вопрос
Полные узлы должны строить дерево Merkle каждый раз, когда они проверяют новый блок в любом случае. Корень Merkle они вычисляют для себя должен соответствовать корню Меркла в blockheader для того, чтобы блок будет считаться действительным. Хотя я никогда не проверял, я бы предположить, что после построения дерева, клиент сохраняет ссылку на него в базе данных, так что она может эффективно реагировать на запросы клиентов SPV. Но я не уверен, что протокол выглядит для получения ветви Меркла из полного узла. Мне было бы интересно узнать, тоже. Хорошо это то, что я искал. Это идея, но мне кажется правильным. |