¿Cómo se protege una Transacción contra la manipulación antes de incluirla en un Bloque?

Usando la terminología de: https://en.bitcoin.it/wiki/Protocol_specification#tx

¿Qué impide que un atacante que opera un cliente no autorizado reemplace el tx_out[] de una transacción con valores que asignan la salida de la transacción al atacante?

El tx_in[] no ha cambiado (y presumiblemente es válido), pero las salidas ahora benefician al atacante.

El cliente no autorizado puede calcular y anunciar un nuevo hash mediante el mensaje inv.

Si nada evita que esto ocurra, ¿cómo evita la red de Bitcoin que esta transacción deshonesta se incluya en un bloque?


[No tener de todos modos para comentar en este punto]

Gracias David, eso aclaró en gran medida mi [mal] entendimiento de la documentación en:

https://en.bitcoin.it/wiki/Script#Crypto

La descripción OP_CHECKSIG dice en parte:

Las salidas, las entradas y el script de toda la transacción (desde el OP_CODESEPARATOR ejecutado más recientemente hasta el final) se codifican.

Pensé que "toda la transacción" era la transacción anterior, no la transacción de canje, que se firmó como usted describe.

Gracias de nuevo por ayudarme.

Respuestas (1)

Toda la transacción (excepto las firmas) debe firmarse con la clave adecuada para cada salida de transacción que reclama. La manipulación de cualquiera de las salidas invalidará todas las firmas.

¿Qué hay de simplemente agregar un OP_CODESEPARATOR justo al comienzo de una salida? Nada cambiaría realmente, pero el hash de la transacción, el valor que se firma sería exactamente el mismo.