The message has been tampered with, or it was not signed by the provided address.
When verified, digital signatures cryptographically prove
Digital signatures cryptographically prove
- Integrity The message has not been altered since it was signed
- Non-repudiation The signer cannot deny having signed the message
🎓 How it works (3 mins)
Asymmetric cryptography
Also known as public-key cryptography, allows for secure communication between two parties.
Each party creating a pair of unique keys, a public key and a private key.
Private keys are used to digitally sign messages, then the corresponding public keys are used to verify those message signatures.
Elliptic curves
Elliptic curve cryptography is a very common implementation of asymmetric cryptography.
It's used to secure every day internet communication, peer-to-peer messaging (whatsapp, signal, etc.) and even bitcoin.
Elliptic Curve Digital Signature Algorithm ensures that the digital signatures cannot be forged and do not leak the private key.
What makes this so secure is the difficulty of solving the Elliptic Curve Discrete Logarithm Problem.
Bitcoin
Bitcoin uses the following cryptographic primitives
- secp256k1 as the elliptic curve
- RIPEMD-160 and SHA-256 hash functions
- Base58Check encoding for converting public keys to Bitcoin addresses
Message Verifier
This website uses the verify-bitcoin-message library to verify signatures on device — without an internet connection.
All the core logic can be found in a single file, verify.ts.
📢 View Details & Publish ⛔ Reason for failure
Verification finished in .📜 Other ways to verify signed messages
Bitcoin Node
Command Line
bitcoin-cli verifymessage <address> <signature> <message>
RPC
curl --user <rpcuser>:<rpcpassword>
--data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "verifymessage", "params": [<address>, <signature>, <message>] }'
-H 'content-type: text/plain;'
http://127.0.0.1:8332/
JavaScript
Command Line
npx verify-bitcoin-message --json
--address 1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV
--message "This is an example of a signed message."
--signature "H9L5yLFjti0QTHhPyFrZCT1V/MMnBtXKmoiKDZ78NDBjERki6ZTQZdSMCtkgoNmp17By9ItJr8o7ChX0XxY91nk="
Install in Browser
<script type="module">
import verify, { verifySafe } from 'https://unpkg.com/verify-bitcoin-message';
</script>
<!-- Legacy Script Tag -->
<script type="text/javascript" src="https://unpkg.com/verify-bitcoin-message">
</script>
Install via Node
npm i verify-bitcoin-message
Install via Bun
bun add verify-bitcoin-message
Usage
import verify, { verifySafe } from 'verify-bitcoin-message';
await verify({
address: '1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV',
message: 'This is an example of a signed message.',
signature: 'H9L5yLFjti0QTHhPyFrZCT1V/MMnBtXKmoiKDZ78NDBjERki6ZTQZdSMCtkgoNmp17By9ItJr8o7ChX0XxY91nk='
})
// If you're not a fan of throwing errors:
const isValid = await verifySafe({
address: '1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV',
message: 'This is an example of a signed message.',
signature: 'H9L5yLFjti0QTHhPyFrZCT1V/MMnBtXKmoiKDZ78NDBjERki6ZTQZdSMCtkgoNmp17By9ItJr8o7ChX0XxY91nk='
})