In this guide, you will learn how to sign a message with a private key of an address you control, thereby proving you have the private key to the address without revealing the private key.
Did you know that a Bitcoin transaction is a message? The signature (of the message) proves that the address provided is created from the private key that signed the message.
Well, you can sign ANY message with a private key, not just a transaction.
By doing so, you prove you control the address – The address could be inside the message, but it doesn’t have to be. It simply needs to be provided to the verifier, in order to claim that they have the private key to the address.
For example, if Craig Wright wrote this message:
“I am Satoshi Nakamoto”
…and signed it with the private key of one of Satoshi’s addresses, then anyone with the trio of: 1) address 2) signature 3) and message, can enter it into a computation and confirm the signature is valid, and that Craig is Satoshi. He never did that because he isn’t Satoshi!
The above was signed with the private key to the address: bc1q3xxkuf2f0353fa0zqkrnf7u9gytr99jazmarft
Here is what a signature looks like:
IGo6eQP8L9/j8LJQvAIewyrWjzroEH4xo+2x3m+tWfBVGc2RAf+k6rZLa04IfcND3cGlY/3sbJl6kKF5CDGbZ2E=
To do this yourself, open your Electrum Wallet and select tools -> Sign/verify message:

Type in any message you want in the top field. In the Address field, paste in an address that belongs to the current wallet. Then click “sign”, and the signature will appear, as below:

If you were to verify a message instead, say Craig Wright gave you a message, address, and signature combination as text, you can paste in each of those values in the respective fields and click “verify”. If the trio is valid, you get this:

And that’s enough, that’s all you really need to know about signing a message with an address’s private key.
