Как транзакция защищена от подделки перед включением в блок?

Используя терминологию из: https://en.bitcoin.it/wiki/Protocol_specification#tx

Что мешает злоумышленнику, работающему с мошенническим клиентом, заменить tx_out[] транзакции значениями, которые присваивают выход транзакции злоумышленнику?

tx_in[] не изменился (и предположительно действителен), но теперь выходные данные приносят пользу злоумышленнику.

Затем мошеннический клиент может рассчитать новый хэш и объявить его с помощью сообщения inv.

Если этому ничто не препятствует, то как сеть Биткойн предотвращает включение этой мошеннической транзакции в блок?


[На данный момент нет возможности комментировать]

Спасибо, Дэвид, это значительно прояснило мое [неправильное] понимание документации по адресу:

https://en.bitcoin.it/wiki/Script#Крипто

В описании OP_CHECKSIG частично говорится:

Все выходы, входы и скрипт транзакции (от самого последнего выполненного OP_CODESEPARATOR до конца) хэшируются.

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

Еще раз спасибо за помощь.

Ответы (1)

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

Как насчет того, чтобы просто добавить OP_CODESEPARATOR прямо в начало вывода? На самом деле ничего не изменится, но хэш транзакции и подписанное значение будут точно такими же.