Author

Topic: Уязвимость bitcoin протокола? (Read 622 times)

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
В английской ветке сказали, что 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



Ясно видно, что подписывается только публичный скрипт предыдущей транзакции, а скрипт новой транзакции и сама транзакция остаются неподписанными и уязвимыми к изменению  Sad
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Сумма запирающего и отпирающего скриптов выдаст FALSE и мошенник пойдёт лесом.

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

legendary
Activity: 2044
Merit: 1231
Сумма запирающего и отпирающего скриптов выдаст FALSE и мошенник пойдёт лесом. Транзакция валидацию не пройдёт.

Долго объяснять, можешь почитать тут, в разделе "Transaction Scripts and Script Language"
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Прочитал в доках формат в котором отправляется raw-транзакция: https://en.bitcoin.it/wiki/Protocol_documentation#Transaction_Verification
Получается, что когда я отправляю транзакцию в сеть, то все ноды могут видеть мою подпись под входами...

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

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