30

There is a part of the Bitcoin protocol that I don't quite understand.

When you make a transaction, and spend the output of a previous transaction for say 1 BTC, you provide a signature using the private key matching the public key (or address) that appears in the output of the previous transaction. My first question here is what exactly is signed?

Second, when the transaction is broadcast, what prevents a malicious peer to take the input of my transaction with signature, for 1 BTC, and forge a new transaction using that same input going to their own address? To avoid that, the full transaction (including outputs) would need to be signed, I couldn't find a document indicating the whole transaction is signed.

3
  • Yeah great question, I asked myself the same question but I found the answer looking all the transcations wiki.
    – Gopoi
    Jan 25, 2013 at 23:33
  • That is good question, I'm asking the same and can't understand how outputs list is protected, it looks like outputs signed with public key, but public keys are not secure.
    – Vedmant
    Sep 26, 2017 at 23:33
  • good question. It is really hard to find a documentation of what exactly is signed in bitcoin transactions!
    – mhrsalehi
    Oct 12, 2022 at 8:54

1 Answer 1

15

From what I gather you sign both the input and the output of the transaction, meaning that nobody can alter the content of the transaction without invalidating your signature. I also had some problems with this part of the algorithm, and even asked a similar question earlier, but this one deals with more of the low-level bit operations rather than the high-level concept.

2
  • 5
    What is being signed is indeed (a modified version of) the entire transaction. The details are complex (see the question linked to be the answer), but most importantly, the transaction inputs are stripped before signing (as otherwise, the signature would need to sign itself before signing, which is computationally infeasible). Jan 24, 2013 at 12:14
  • 2
    Thanks, that makes sense. So if there are 3 inputs in a transaction, each input will contain a signature (they may be 3 different signatures) of the whole transaction (minus the inputs), correct?
    – Flavien
    Jan 24, 2013 at 13:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.