HMAC-SHA256, RSA, and Ed25519 can all authenticate webhook messages, but they use different key-trust models. HMAC shares one secret between sender and verifier; RSA and Ed25519 let the sender keep a private signing key while receivers verify with a public key. In every case, correct verification depends on following the provider’s exact protocol—not just choosing an algorithm name.
How the three signing methods differ
A webhook signature lets a receiver check that a message matches one produced by a party with the required signing key. The central distinction is who holds that key and what the protocol signs.
As an Amazon Associate I earn from qualifying purchases.
| Method | Key model | What the verifier can do | Implementation point |
|---|---|---|---|
| HMAC-SHA256 | Sender and receiver share a secret. | Anyone holding the secret can verify a MAC and create a valid one. | Use the exact secret, signed bytes, digest encoding, and a constant-time comparison. |
| RSA | Sender signs with a private key; receiver verifies with the corresponding public key. | A receiver with only the public key can verify but cannot sign. | Specify the padding scheme and hash as well as RSA; the name alone is incomplete. |
| Ed25519 | Sender signs with a private key; receiver verifies with the corresponding public key. | A receiver with only the public key can verify but cannot sign. | Use the provider’s specified key serialization and signature format. |
What each option means in practice
HMAC-SHA256: simple trust, shared authority
HMAC-SHA256 is a message authentication code built using a shared secret and SHA-256. Because every verifier needs that secret, each verifier also has the ability to produce valid MACs. This can be a good fit when the provider and receiver can distribute and protect the same secret, but it matters when deciding which systems or teams should be trusted with verification credentials. RFC 9421 defines HMAC-SHA256 over a signature base; GitHub’s webhook scheme uses the webhook secret to derive a digest from payload contents. GitHub’s validation guide recommends the `X-Hub-Signature-256` header and identifies the older HMAC-SHA1 header as legacy.
RSA: separate signing and verification keys
With RSA signatures, the sender holds the private signing key and the receiver can be given only the public verification key. “RSA” does not fully identify the cryptographic operation: both padding and digest must match the provider’s profile. RFC 9421 includes an RSA PKCS#1 v1.5 profile with SHA-256. Separately, RFC 7518 requires an RSA key size of at least 2048 bits for its defined RSA PKCS#1 v1.5 SHA-2 JWS algorithms; that is a specification requirement, not a benchmark or a universal guarantee about every RSA-based webhook scheme. RFC 7518
#1 Best Overall
- POWERFUL SECURITY KEY: The Security Key C NFC is the essential physical passkey for protecting your digital life from phishing attacks. It ensures only you can access your accounts.
- WORKS WITH 1000+ ACCOUNTS: Compatible with Google, Microsoft, and Apple. A single Security Key C NFC secures 100 of your favorite accounts, including email, password managers, and more.
- FAST & CONVENIENT LOGIN: Plug in your Security Key C NFC via USB-C and tap it, or tap it against your phone (NFC) to authenticate. No batteries, no internet connection, and no extra fees required.
- TRUSTED PASSKEY TECHNOLOGY: Uses the latest passkey standards (FIDO2/WebAuthn & FIDO U2F) but does not support One-Time Passwords. For complex needs, check out the YubiKey 5 Series.
- BUILT TO LAST: Made from tough, waterproof, and crush-resistant materials. Manufactured in Sweden and programmed in the USA with the highest security standards.
Ed25519: public-key signatures with a defined format
Ed25519 is an asymmetric signature scheme: the sender signs with a private key, and receivers can verify with the public key. RFC 9421 applies Ed25519 to the signature base without a prehash function and specifies a 64-octet signature. That output size describes the format, not comparative security or speed. Svix and Standard Webhooks document Ed25519 for webhook signing. RFC 9421 · Svix verification guide
Why the protocol matters more than the label
A provider’s signing contract defines the actual scheme: which bytes are signed, whether metadata is included, how headers are named, how keys and signatures are encoded, what timestamp policy applies, and how keys rotate. Two integrations that both say “RSA,” for example, may be incompatible if they use different padding or hash profiles.
Rank #2
- POWERFUL SECURITY KEY: The YubiKey 5C NFC is the most versatile physical passkey, protecting your digital life from phishing attacks. It ensures only you can access your accounts
- WORKS WITH 1000+ ACCOUNTS: Compatible with popular accounts like Google, Microsoft, and Apple. A single YubiKey 5C NFC secures 100+ of your favorite accounts, including email, password managers, and more
- FAST & CONVENIENT LOGIN: Plug in your YubiKey 5C NFC via USB and tap it, or tap it against your phone (NFC), to authenticate. No batteries, no internet connection, and no extra fees required
- MOST SECURE PASSKEY: Supports FIDO2/WebAuthn, FIDO U2F, Yubico OTP, OATH-TOTP/HOTP, Smart card (PIV), and OpenPGP. That means it’s versatile, working almost anywhere you need it
- PRIMARY & SPARE KEYS: Just like having a spare house key, we recommend buying two YubiKeys - one for daily use and one as a spare. That way you’ll never get locked out of your accounts
Signed input can include more than the request body. GitHub documents a digest derived from payload contents. Standard Webhooks signs the message ID, timestamp, and body together, and distinguishes `v1` HMAC from `v1a` Ed25519 identifiers. Its documentation also specifies key serialization. Standard Webhooks specification
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsHow to verify a webhook signature safely
- Read the provider’s signing contract. Identify the documented algorithm or full profile, header names, signed-input construction, signature encoding, key format, timestamp rules, and rotation behavior. Do not substitute a generic implementation for those details.
- Keep the original request body bytes. Verify before parsing and reserializing JSON. A change in whitespace, escaping, or field representation changes the bytes and can invalidate a signature. Standard Webhooks warns that even a stray space can cause verification to fail.
- Construct exactly the documented signed input. Include metadata such as a message ID or timestamp only where the provider specifies it, and preserve its required ordering and encoding.
- Verify with the matching key and profile. For HMAC, compute the expected MAC from the configured shared secret. For RSA, use the specified padding and digest with the public key. For Ed25519, use the provider’s required key format and library-compatible representation.
- Compare and enforce freshness as required. Compare HMAC values in constant time; GitHub explicitly warns, “Never use a plain
==operator.” If the signed protocol includes a timestamp, check that it falls within the provider’s allowed freshness window. Signing the timestamp binds it to the message and helps limit replay, but freshness checking is still needed. - Only process the delivery after validation. Treat a failed signature or stale timestamp according to the provider’s guidance; do not treat an unverified payload as an authenticated event.
Common reasons verification fails
- The body was transformed: JSON was parsed and serialized again, or middleware changed the bytes before verification.
- The wrong input was signed: the implementation omitted or reordered a message ID, timestamp, or other required component.
- The format does not match: a `sha256=` prefix, hexadecimal digest, version identifier such as `v1` or `v1a`, or key serialization was handled incorrectly.
- The cryptographic profile differs: RSA padding or digest does not match, or the configured public key is not the one associated with the signing private key.
- The secret or key is stale or wrong: configuration does not reflect the provider’s current key or rotation state.
- The timestamp is outside the accepted window: check the clock, timestamp parsing, and freshness policy as well as signature construction.
Which should you use?
Use the algorithm and protocol your webhook provider supports. If you control both ends, choose based on the trust boundary: a shared secret gives every verifier signing authority, while public-key verification allows receivers to verify without possessing the private signing key. Then assess operational fit—secret distribution for HMAC, or public-key distribution, serialization, and rotation for RSA or Ed25519.
Rank #3
- POWERFUL SECURITY KEY: The YubiKey 5 NFC is the most versatile physical passkey, protecting your digital life from phishing attacks. It ensures only you can access your accounts
- WORKS WITH 1000+ ACCOUNTS: Compatible with popular accounts like Google, Microsoft, and Apple. A single YubiKey 5 NFC secures 100+ of your favorite accounts, including email, password managers, and more
- FAST & CONVENIENT LOGIN: Plug in your YubiKey 5 NFC via USB and tap it, or tap it against your phone (NFC), to authenticate. No batteries, no internet connection, and no extra fees required
- MOST SECURE PASSKEY: Supports FIDO2/WebAuthn, FIDO U2F, Yubico OTP, OATH-TOTP/HOTP, Smart card (PIV), and OpenPGP. That means it’s versatile, working almost anywhere you need it
- PRIMARY & SPARE KEYS: Just like having a spare house key, we recommend buying two YubiKeys - one for daily use and one as a spare. That way you’ll never get locked out of your accounts
The cited standards and provider documents define mechanics; they do not establish a universal speed, security, or adoption ranking across deployments. Compare the exact profiles and libraries in the environment where the webhook will run.
Quick Recap
Best Value
- The information below is per-pack only
- POWERFUL SECURITY KEY: The Security Key C NFC is the essential physical passkey for protecting your digital life from phishing attacks. It ensures only you can access your accounts.
- WORKS WITH 1000+ ACCOUNTS: Compatible with Google, Microsoft, and Apple. A single Security Key C NFC secures 100 of your favorite accounts, including email, password managers, and more.
- FAST & CONVENIENT LOGIN: Plug in your Security Key C NFC via USB-C and tap it, or tap it against your phone (NFC) to authenticate. No batteries, no internet connection, and no extra fees required.
- TRUSTED PASSKEY TECHNOLOGY: Uses the latest passkey standards (FIDO2/WebAuthn & FIDO U2F) but does not support One-Time Passwords. For complex needs, check out the YubiKey 5 Series.
Rank #4
- POWERFUL SECURITY KEY: The Security Key NFC is the essential physical passkey for protecting your digital life from phishing attacks. It ensures only you can access your accounts.
- WORKS WITH 1000+ ACCOUNTS: Compatible with Google, Microsoft, and Apple. A single Security Key NFC secures 100 of your favorite accounts, including email, password managers, and more.
- FAST & CONVENIENT LOGIN: Plug in your Security Key NFC via USB-A and tap it, or tap it against your phone (NFC) to authenticate. No batteries, no internet connection, and no extra fees required.
- TRUSTED PASSKEY TECHNOLOGY: Uses the latest passkey standards (FIDO2/WebAuthn & FIDO U2F) but does not support One-Time Passwords. For complex needs, check out the YubiKey 5 Series.
- BUILT TO LAST: Made from tough, waterproof, and crush-resistant materials. Manufactured in Sweden and programmed in the USA with the highest security standards.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




