The message has been tampered with, or it was not signed by the provided address.
When verification passes, digital signatures cryptographically prove tamper-resistance and non-repudiablity
Digitally signed messages are tamper-resistant and non-repudiable
Message from Mo 🌍 Messages from around the world
🎓 How it works
Learn how it works in only 3 minutes
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.
📜 Other ways to verify signed messages
Bitcoin Node
Command Line
bitcoin-cli verifymessage address "signature" ""
RPC
curl --user <rpcuser>:<rpcpassword>
--data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "verifymessage", "params": ["address", "signature", ""] }'
-H 'content-type: text/plain;'
http://127.0.0.1:8332/
JavaScript
Command Line
npx verify-bitcoin-message --json
--address address
--message ""
--signature "signature"
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: 'address',
message: '',
signature: 'signature'
})
// If you're not a fan of throwing errors:
const isValid = await verifySafe({
address: 'address',
message: '',
signature: 'signature'
})