Ctrl + K
Security9 min read

HMAC Explained

Understand how HMAC protects data integrity and authenticity, how it differs from hashing and encryption, and when to use it in modern applications.

Published: 2026-08-07

HMAC (Hash-based Message Authentication Code) is a cryptographic mechanism used to verify both the integrity and authenticity of data. Unlike a regular hash, HMAC combines a cryptographic hash function with a secret key, allowing the recipient to confirm that the message has not been modified and was created by someone who knows the shared secret.

HMAC is widely used in REST APIs, webhook verification, cloud services, authentication systems and network protocols. Its combination of simplicity, efficiency and strong security makes it one of the most common methods for signing data transmitted between trusted parties.

What Is HMAC?

HMAC is a message authentication algorithm that generates a cryptographic signature using two inputs: the original message and a secret key. Any change to either the message or the key produces a completely different HMAC value.

Why HMAC Is Needed

A standard hash can verify that data has not changed accidentally, but anyone can generate a new hash after modifying the data. HMAC solves this problem by requiring a secret key that only trusted parties possess. Without that key, attackers cannot create a valid signature for modified content.

  • Verifies message integrity.
  • Authenticates the sender.
  • Protects against unauthorized modifications.
  • Works efficiently with existing hash algorithms.

How HMAC Works

Both communicating parties share the same secret key. The sender generates an HMAC using the message and the secret key, then sends both the message and the resulting signature. The receiver performs the same calculation using the shared key. If the calculated HMAC matches the received one, the message is considered authentic and unmodified.

Simplified Process

StepDescription
1Sender prepares the message
2Sender generates an HMAC using the secret key
3Message and HMAC are transmitted
4Receiver calculates a new HMAC using the same key
5The signatures are compared

What Makes HMAC Secure?

The security of HMAC comes from the shared secret key. Even if an attacker knows the hashing algorithm and intercepts the message and its HMAC, they cannot generate a valid signature for modified data without the secret key.

Common Hash Functions Used with HMAC

AlgorithmTypical Usage
HMAC-SHA-256Most modern APIs
HMAC-SHA-384High-security environments
HMAC-SHA-512Large-scale security systems
HMAC-SHA-1Legacy applications

HMAC vs Regular Hashing

Although both produce fixed-length outputs, their purposes are different. Hashing verifies data integrity, while HMAC verifies both integrity and authenticity through the use of a secret key.

HashHMAC
No secret keyRequires a secret key
Integrity onlyIntegrity and authenticity
Anyone can calculate itOnly trusted parties can generate it

HMAC vs Encryption

Encryption protects confidentiality by making data unreadable without a decryption key. HMAC does not hide information—it simply proves that the message is authentic and has not been altered during transmission.

💡 Use HMAC when recipients need to verify authenticity, not when data must remain confidential. If confidentiality is required, combine encryption with HMAC or use an authenticated encryption scheme.
⚠️ An HMAC does not encrypt data. Anyone who intercepts the message can still read it unless it is encrypted separately.

Where HMAC Is Used

HMAC is used anywhere two trusted parties need to verify that transmitted data has not been modified. It is especially common in web services, cloud platforms and security protocols where data travels across untrusted networks.

  • REST API authentication.
  • Webhook signature verification.
  • Cloud storage request signing.
  • JWT signing (HS256, HS384, HS512).
  • OAuth implementations.
  • Network security protocols.

HMAC in REST APIs

Many APIs require clients to generate an HMAC signature from the request body, timestamp and other request information. The server performs the same calculation using the shared secret key. If both signatures match, the request is accepted as authentic.

Webhook Verification

Services such as payment providers, Git hosting platforms and messaging systems often attach an HMAC signature to every webhook request. Before processing the payload, the receiving application recalculates the HMAC using the shared secret to confirm that the request genuinely originated from the expected service.

HMAC and JWT

JSON Web Tokens can be signed using HMAC algorithms such as HS256, HS384 and HS512. These algorithms use a shared secret key to protect the token from unauthorized modification. Any change to the token payload invalidates the signature.

JWT AlgorithmBased On
HS256HMAC-SHA-256
HS384HMAC-SHA-384
HS512HMAC-SHA-512

Choosing a Secret Key

The security of HMAC depends heavily on the quality of the secret key. Keys should be generated using a cryptographically secure random number generator and contain sufficient entropy. Predictable or reused secrets significantly weaken the protection provided by HMAC.

Key Rotation

Organizations should periodically rotate HMAC keys to reduce the impact of potential key exposure. During rotation, systems commonly accept both the old and new keys for a short transition period before retiring the previous secret completely.

HMAC vs Digital Signatures

Although both provide authentication and integrity, HMAC and digital signatures solve different problems. HMAC relies on a shared secret known by both parties, while digital signatures use public-key cryptography, allowing anyone with the public key to verify a signature without knowing the private key.

HMACDigital Signature
Shared secret keyPublic/private key pair
Fast computationMore computationally intensive
Both parties share the secretPrivate key remains secret
Ideal for trusted systemsSuitable for public verification

Performance

HMAC is computationally efficient because it builds upon existing cryptographic hash functions. It is significantly faster than public-key digital signature algorithms, making it well suited for high-volume APIs and services that process large numbers of authenticated requests.

💡 Generate HMAC keys using cryptographically secure random generators rather than passwords or manually chosen strings.
⚠️ Never hardcode production HMAC secrets directly into application source code or commit them to version control repositories.

Common HMAC Mistakes

Most security issues involving HMAC are caused by implementation mistakes rather than weaknesses in the algorithm itself. Using strong keys, verifying signatures correctly and following established cryptographic practices are essential for maintaining secure systems.

  • Using short or predictable secret keys.
  • Embedding secret keys directly in source code.
  • Comparing HMAC values using ordinary string comparison.
  • Using deprecated hash functions in new applications.
  • Reusing the same secret across unrelated systems.
  • Treating HMAC as an encryption mechanism.

Timing Attacks

When verifying HMAC values, applications should use constant-time comparison functions rather than ordinary string comparisons. Standard comparisons may stop at the first mismatched character, potentially leaking small timing differences that sophisticated attackers could exploit to guess valid signatures.

Choosing the Right Hash Function

Modern applications should generally use HMAC-SHA-256 unless there is a specific requirement for a different algorithm. HMAC-SHA-384 and HMAC-SHA-512 provide larger outputs and higher security margins, while HMAC-SHA-1 should only be maintained for compatibility with legacy systems.

Best Practices

  • Generate long, cryptographically secure secret keys.
  • Store HMAC secrets outside application source code.
  • Rotate keys periodically.
  • Use constant-time signature comparison functions.
  • Prefer HMAC-SHA-256 or stronger algorithms for new projects.
  • Verify every signed request before processing its contents.
💡 Keep HMAC keys in secure secret management systems or environment variables instead of configuration files stored alongside application code.
⚠️ Anyone who obtains the shared HMAC secret can generate valid signatures. Protect secret keys with the same level of care as passwords, API credentials and encryption keys.

Frequently Asked Questions

What does HMAC stand for?

HMAC stands for Hash-based Message Authentication Code. It combines a cryptographic hash function with a secret key to verify both message integrity and authenticity.

Does HMAC encrypt data?

No. HMAC does not provide confidentiality. It only verifies that data has not been modified and that it originated from someone who knows the shared secret key.

Why is HMAC more secure than a regular hash?

A regular hash can be generated by anyone. HMAC requires a secret key, preventing attackers from creating valid signatures for modified messages without knowing that key.

Which HMAC algorithm should I use?

HMAC-SHA-256 is the most common choice for modern applications. HMAC-SHA-384 and HMAC-SHA-512 are also widely used when larger security margins are desired.

Can HMAC replace encryption?

No. HMAC guarantees integrity and authenticity but does not hide the contents of a message. If confidentiality is required, encryption must also be used.

Helpful Security Tools

An HMAC Generator lets you generate signatures using different algorithms and secret keys, a Hash Generator demonstrates how ordinary hashes differ from keyed HMAC signatures, a Hash Compare tool quickly verifies whether two digests match, a Checksum Calculator is useful for comparing integrity checks that do not require authentication, and a Hash Identifier helps recognize common hash and HMAC output formats encountered during development and security analysis.

Conclusion

HMAC is one of the most widely used mechanisms for verifying message authenticity and integrity across modern software systems. By combining a cryptographic hash function with a shared secret key, it protects APIs, webhooks, authentication tokens and network protocols from unauthorized modification. When implemented with strong keys, modern hash algorithms and proper verification techniques, HMAC provides a fast, reliable and well-established foundation for secure communication between trusted parties.