Bitcoin Forum

Local => Новички => Topic started by: kzv on April 07, 2016, 07:49:17 PM



Title: Уязвимость bitcoin протокола?
Post by: kzv on April 07, 2016, 07:49:17 PM
Прочитал в доках формат в котором отправляется raw-транзакция: https://en.bitcoin.it/wiki/Protocol_documentation#Transaction_Verification
Получается, что когда я отправляю транзакцию в сеть, то все ноды могут видеть мою подпись под входами...

Возникла мысль: если в сети появится нода, которая будет оставлять мою подпись (не менять scriptSig), а вместо моих выходов писать свои (менять scriptPubKey)... Если эта нода оставит большую комиссию для майнера, то с большей вероятностью эта подделанная транзакция и будет включена в блок и мои деньги уйдут мошеннику!

Я не вижу в протоколе никакой защиты от такой подделки. Может я не туда смотрю или чего-то недопонимаю?


Title: Re: Уязвимость bitcoin протокола?
Post by: Vadi2323 on April 08, 2016, 09:18:37 AM
Сумма запирающего и отпирающего скриптов выдаст FALSE и мошенник пойдёт лесом. Транзакция валидацию не пройдёт.

Долго объяснять, можешь почитать тут (http://chimera.labs.oreilly.com/books/1234000001802/ch05.html#tx_script), в разделе "Transaction Scripts and Script Language"


Title: Re: Уязвимость bitcoin протокола?
Post by: kzv on April 08, 2016, 09:46:54 AM
Сумма запирающего и отпирающего скриптов выдаст FALSE и мошенник пойдёт лесом.

Объясните на примере если не сложно?
Вот транзакция: https://blockchain.info/ru/tx/acde538ceab00a0a1f7ff7a13df4f33351e85afa186255a095e3c2c235b438d8
Один вход, 100500 выходов.
Если хакерская нода прежде чем релеить такую транзакцию поменяет половину исходящих скриптов на свой скрипт, то почему этот новый скрипт вернет FALSE?



Title: Re: Уязвимость bitcoin протокола?
Post by: kzv on April 08, 2016, 12:11:08 PM
В английской ветке сказали, что scriptSig содержит подпись хэша транзакции, поэтому если в транзакции что-то поменять, то ее придется переподписывать.
Вот нашел в доках:
Quote
More precisely, the second component is an ECDSA signature over a hash of a simplified version of the transaction. It, combined with the public key, proves the transaction was created by the real owner of the address in question. Various flags define how the transaction is simplified and can be used to create different types of payment.

Пишут, что есть какая-то упрощенная версия транзакции, от которой берется хэш и этот хэш подписывается.
Где-то есть описание этой "упрощенной версии"? И про какие еще дополнительные флаги идет речь? Где-то еще про них написано?

PS однако из других доков следует, что кто-то меня обманывает.
https://bitcoin.org/en/developer-examples#offline-signing

http://snag.gy/iSpgb.jpg

Ясно видно, что подписывается только публичный скрипт предыдущей транзакции, а скрипт новой транзакции и сама транзакция остаются неподписанными и уязвимыми к изменению  :(