Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
27 июля 2015, 9:37:06 AM   # 1
 
 
Сообщения: 233
Цитировать по имени
цитировать ответ
по умолчанию Re: Использование pybitcointools для проверки тестовых векторов tx_valid.json

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


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

Может кто-то посоветовать:

1. Как ECDSA используется для проверки транзакций ..?
2. В идеале, как pybitcointools можно использовать делать # 1

Из tx_valid.json, первый тест вектор:

Код:
[
["Ниже десериализация операции, которые являются действительными."],
["Они находятся в форме"],
["[[[Prevout хэш, prevout индекс, prevout scriptPubKey], [вход 2], ...],"],
["serializedTransaction, enforceP2SH]"],
["Объекты, которые только одна строка (как этот) игнорируются"],

["Ниже приводится 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"],
["Это представляет особый интерес, поскольку она содержит в неверном кодировке подпись, которая принимает OpenSSL"],
["См http://r6.ca/blog/20111119T211504Z.html"],
["Кроме того, первая транзакция OP_CHECKMULTISIG в стандартной форме"],
[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]],
"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", правда]

Теперь мы имеем следующее:

Код:

# входы
ины = ["% S:% d" % ("60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0)] # Ины = ["prevout хэш: индекс prevout"]

# ScriptPubKey входов
scriptPubKey = '514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52ae'

Диффузоры = [{ 'значение': 1000000, 'Скрипт': '76a914660d4ef3a743e3e696ad990364e555c271ad504b88ac'}]
сырой = mktx (модули, выходы)     
# "0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba2600000000000ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000"

# Из test_vector (или) выборки на Tx: 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63: 0)
подписанные = "0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000"

der_sig = "0048304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2bab01"    # Примечание: эта подпись не является канонической, так как значения как г и S имеют самый высокий набор бит (т.е. в идеале г и s должны быть дополнены nullbytes)


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

(NB. Я делаю это в качестве средства, чтобы узнать, как Bitcoin знаков / проверяет сделки. До сих пор у меня не было никакой проблемы с эти UnitTests)
HeadsOrTails сейчас офлайн Пожаловаться на HeadsOrTails   Ответить с цитированием Мультицитирование сообщения от HeadsOrTails Быстрый ответ на сообщение HeadsOrTails


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


1 августа 2015, 12:06:29 PM   # 2
 
 
Сообщения: 412
Цитировать по имени
цитировать ответ
по умолчанию Re: Использование pybitcointools для проверки тестовых векторов tx_valid.json

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





Похоже, что функция verify_tx_input является самой маленькой атомной функцией в библиотеке, которая может подтвердить подписи.

`Verify_tx_input: (ТХ, я, сценарий, сиг, паб) -> True / false`


Так как вы находитесь в процессе обучения:

Каждый вход в транзакции имеет другую подпись к другим. Посмотри на https://en.bitcoin.it/wiki/OP_CHECKSIG чтобы увидеть в деталях, как транзакция изменена, чтобы охватить все необходимые данные для этого типа SIGHASH. Последний шаг заключается в sha256d () это модифицированная версия, и вернуть его в качестве хэш-функции для ECDSA.

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

Таким образом, каждый входной сделка имеет сигнатуру действительный для этого [TXID, Vout, scriptPubKey] комбинации. Поскольку входные подписи являются уникальными для ввода, кажется pybitcointools включает в себя только функцию verify_tx_input. Вероятная причина этого заключается в том, как вы можете видеть, это функции аргумент подпись имеет 5 аргументов .. Это много данных только для каждого входа, поэтому функция verify_tx () будет зависеть от множества данных, которые не могут быть доступны, если вы не полный узел.

`Txi`,` i`, `script` поля являются свойством сделки, которые вы тратите (сценарий == scriptPubKey prevOut в), и используются для создания хэша ECDSA. Все с blockchain и делает полную проверку сейчас было бы проверить подпись. Открытый ключ известен, потому что он был выдвинут в стек или в пред из scriptPubKey (оплата за Публичный) или scriptSig (оплата за Публичный-хэш). И подпись также будет известно.

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

Заметка; в Bitcoin ядра, скриптовый язык является средством толкая подпись / pubkeys / опкоды в стек. После того, как сиг / Публичных выталкивается в какой-то момент, OP_CHECKSIG называется

На ваш код раздела.

Der_sig представляется не только сиг - Это полный scriptSig. См нулевых байт в начале.
Открытый ключ может быть 1-из-2, так как scriptPubKey вы поднимете есть multisig выходной сценарий. Так как открытые ключи будут проверены Bitcoin ядра.

Код:
TXID = "60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1"
Vout = 0
scriptPubKey = '514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52ae'
Диффузоры = [{ 'значение': 1000000, 'Скрипт': '76a914660d4ef3a743e3e696ad990364e555c271ad504b88ac'}]
...

# Это на самом деле дер сиг плюс байт в конце, указывающий тип SIGHASH. Это должно быть включено.
der_sig = "304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2bab01"

# Я просто выбрал случайную одно из scriptPubKey, это mightnt возвращает TRUE.
Публичный = "04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4"

# Проверьте ввод
verify_tx_input (TXID, Vout, scriptPubKey, der_sig, Публичный)


Посмотрите, как я волшебно определяется der_sig и Публичных как константы? Ну, существуют различные типы вывода сценария, и каждый выполняется по-разному. (В данном случае, сиг от 1 из 2 ключей будет делать). В зависимости от типа сценария, открытые ключи могут быть связаны различными способами. Попадая в это выходит за рамки, но изучение вики-страницы OP_CHECKSIG покажет вам, как это работает оплату за Публичным-хэш.

Тип multisig-в-выходной-скрипт очень похож на это, хотя звонки OP_CHECKMULTISIG. Это в основном только петля над OP_CHECKSIG.

Следующее, что нужно смотреть на этого скриптовый движок, который связывает все это вместе. https://en.bitcoin.it/wiki/Script -  в нижней части вы найдете шаг за шагом анализ того, как скрипты анализируются, в конечном счете, привести к CHECKSIG вызова.

Кроме того - вот основной код Bitcoin для OP_CHECKSIG: https://github.com/bitcoin/bitcoin/blob/master/src/script/interpreter.cpp#L827-L860

А фактическая функция TransactionSignatureChecker :: CheckSig: https://github.com/bitcoin/bitcoin/blob/master/src/script/interpreter.cpp#L1108-L1127
fbueller сейчас офлайн Пожаловаться на fbueller   Ответить с цитированием Мультицитирование сообщения от fbueller Быстрый ответ на сообщение fbueller

4 августа 2015, 10:37:55 AM   # 3
 
 
Сообщения: 233
Цитировать по имени
цитировать ответ
по умолчанию Re: Использование pybitcointools для проверки тестовых векторов tx_valid.json

Большое спасибо за ответ!

Быстрый запрос: как бы я выкупить это Tx Я создал? (Если возможно)

Я пытаюсь подтолкнуть ... открытый ключ 03, чтобы искупить (оговорка IF)
HeadsOrTails сейчас офлайн Пожаловаться на HeadsOrTails   Ответить с цитированием Мультицитирование сообщения от HeadsOrTails Быстрый ответ на сообщение HeadsOrTails



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW