HMAC Generator

HMAC-Signaturen mit SHA-256, SHA-384 oder SHA-512 generieren

Algorithmus

Nachricht

Läuft lokal · Sicher zum Einfügen von Secrets

Geheimer Schlüssel

Läuft lokal · Sicher zum Einfügen von Secrets

HMAC-Signatur

HMAC-Signatur wird hier angezeigt…

Was ist HMAC?

HMAC (Hash-based Message Authentication Code) ist eine kryptografische Konstruktion, die in RFC 2104 definiert ist und eine Hashfunktion mit einem geheimen Schlüssel kombiniert, um einen Authentication-Tag fester Länge zu erzeugen. Im Gegensatz zu einem einfachen Hash, den jeder berechnen kann, kann ein HMAC nur von Parteien erzeugt und verifiziert werden, die den geheimen Schlüssel kennen. HMAC ist der Standardmechanismus zur Prüfung von Integrität und Authentizität einer Nachricht — er bestätigt, dass die Daten nicht verändert wurden und von einem vertrauenswürdigen Absender stammen.

Der HMAC-Algorithmus funktioniert mit jeder iterativen Hashfunktion: SHA-256, SHA-384, SHA-512 und auch älteren Funktionen wie SHA-1 oder MD5. Das resultierende Konstrukt wird nach der verwendeten Hashfunktion benannt — HMAC-SHA256, HMAC-SHA384 oder HMAC-SHA512. Da der Sicherheitsbeweis von HMAC auf kollisionsresistenten Hashfunktionen mit bestimmten pseudozufälligen Eigenschaften beruht, sind SHA-2-Algorithmen die empfohlene Wahl für neue Systeme. HMAC-SHA256 ist die am häufigsten eingesetzte Variante, verwendet in AWS Signature V4, Stripe-Webhooks, GitHub-Webhook-Secrets, Slack Request Signing und JSON Web Tokens (HS256).

Das HMAC-Design bietet eine kritische Eigenschaft, die einfachem Hashing fehlt: Resistenz gegen Längenerweiterungsangriffe. Mit SHA-256 allein kann ein Angreifer, der H(Nachricht) kennt, H(Nachricht || Angreiferdaten) berechnen, ohne die ursprüngliche Nachricht zu kennen. HMACs doppelte Hashstruktur (innerer Hash und äußerer Hash mit unterschiedlich aufgefüllten Schlüsseln) verhindert diesen Angriff vollständig. Deshalb verwenden API-Signaturverfahren HMAC anstatt einen geheimen Schlüssel an die Nachricht anzuhängen und das Ergebnis zu hashen.

Warum einen Online-HMAC-Generator verwenden?

HMAC-Signaturen zu berechnen erfordert normalerweise Code oder CLI-Werkzeuge. Dieser browserbasierte HMAC-Generator ermöglicht es, HMAC-SHA256-, HMAC-SHA384- und HMAC-SHA512-Signaturen sofort zu erstellen — ohne Software zu installieren oder zum Terminal zu wechseln.

Sofortige HMAC-Berechnung
Nachricht und geheimen Schlüssel eingeben, den Hash-Algorithmus auswählen und die HMAC-Signatur sofort erhalten. Die Web Crypto API übernimmt die Berechnung nativ im Browser.
🔒
Datenschutzorientierte Verarbeitung
Nachricht und geheimer Schlüssel verlassen das Gerät niemals. Die gesamte HMAC-Berechnung läuft lokal über die Web Crypto API — keine Server-Anfragen, keine Protokollierung, keine Datenspeicherung.
📋
Unterstützung mehrerer Algorithmen
Mit einem Klick zwischen HMAC-SHA256, HMAC-SHA384 und HMAC-SHA512 wechseln. Ausgaben verschiedener Algorithmen vergleichen, um die Backend-Implementierung zu überprüfen.
🔍
Kein Konto oder Installation erforderlich
Funktioniert in jedem modernen Browser — Chrome, Firefox, Safari, Edge. Keine Registrierung, keine Erweiterung, kein CLI-Setup. Seite öffnen und HMAC-Signaturen generieren.

Anwendungsfälle des HMAC-Generators

Frontend-Entwickler — Webhook-Signaturverifizierung
Stripe, GitHub und Shopify signieren Webhook-Payloads mit HMAC-SHA256. Dieses Werkzeug verwenden, um die erwartete Signatur aus einem Payload und Secret zu berechnen und sie während der Entwicklung mit der Signatur im HTTP-Header zu vergleichen.
Backend-Entwickler — API-Request-Signierung
AWS Signature V4 erfordert HMAC-SHA256 in mehreren Schritten des Signierungsprozesses. Referenz-HMAC-Werte während der Entwicklung generieren, um Signierungsfehler zu debuggen und Zwischenberechnungsschritte zu überprüfen.
DevOps — Validierung bei Secret-Rotation
Beim Rotieren von Webhook-Secrets oder API-Signing-Keys HMAC-Signaturen mit dem alten und neuen Schlüssel berechnen, um sicherzustellen, dass die Anwendung den Übergang korrekt handhabt, bevor der alte Schlüssel abläuft.
QA-Ingenieur — Signatur-Testvektoren
HMAC-Testvektoren mit bekannten Eingaben und Schlüsseln generieren, um Regressionstests für Authentifizierungs-Middleware zu erstellen. Überprüfen, ob die Implementierung leere Nachrichten, Unicode-Eingaben und lange Schlüssel korrekt behandelt.
Data Engineer — Pipeline-Nachrichtenauthentifizierung
HMAC-Signaturen an Nachrichten in ereignisgesteuerten Pipelines (Kafka, SQS) anhängen, um sicherzustellen, dass Nachrichten beim Transit zwischen Diensten nicht manipuliert wurden.
Student — Kryptografie-Kursarbeit
Mit HMAC experimentieren, um zu verstehen, wie die Änderung eines einzelnen Zeichens in der Nachricht oder im Schlüssel eine völlig andere Signatur erzeugt. HMAC-Ausgabe mit reiner SHA-256-Ausgabe vergleichen, um den Unterschied zu beobachten, den ein geheimer Schlüssel einführt.

HMAC vs. einfacher Hash vs. Verschlüsselung

HMAC, einfaches Hashing und Verschlüsselung dienen unterschiedlichen Zwecken. HMAC bietet Nachrichtenauthentifizierung — den Nachweis, dass die Nachricht von jemandem mit dem geheimen Schlüssel erstellt wurde und nicht verändert wurde. Ein einfacher Hash bietet Integrität, aber keine Authentifizierung. Verschlüsselung bietet Vertraulichkeit. Die folgende Tabelle verdeutlicht die Unterschiede.

EigenschaftHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

HMAC-Algorithmenvergleich

HMAC kann jede Hashfunktion verwenden, aber die Wahl des zugrundeliegenden Algorithmus bestimmt Ausgabegröße, Sicherheitsniveau und Browser-Kompatibilität. HMAC-SHA256 ist die häufigste Wahl für neue Systeme. Die folgende Tabelle vergleicht die Varianten, denen man wahrscheinlich begegnet.

AlgorithmusDigest-GrößeHex-LängeWeb Crypto APIGeeignet für
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

Wie HMAC intern funktioniert

HMAC wendet die zugrundeliegende Hashfunktion zweimal mit zwei verschiedenen schlüsselabgeleiteten Pads an. Die Konstruktion ist in RFC 2104 definiert und als PRF (pseudozufällige Funktion) unter Standardannahmen der Kryptografie bewiesen. Der Schlüssel wird zunächst aufgefüllt oder gehasht, um der Blockgröße der Hashfunktion zu entsprechen (64 Bytes für SHA-256, 128 Bytes für SHA-512).

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

Der Algorithmus XOR-verknüpft den aufgefüllten Schlüssel mit einer inneren Pad-Konstante (ipad, 0x36 wiederholt), verknüpft ihn mit der Nachricht und hasht das Ergebnis. Anschließend XOR-verknüpft er den aufgefüllten Schlüssel mit einer äußeren Pad-Konstante (opad, 0x5C wiederholt), verknüpft ihn mit der inneren Hash-Ausgabe und hasht erneut. Diese doppelte Hashstruktur verhindert Längenerweiterungsangriffe und stellt sicher, dass die HMAC-Ausgabe ohne Kenntnis des geheimen Schlüssels nicht berechnet werden kann.

HMAC Code-Beispiele

HMAC wird nativ in jeder gängigen Sprache und Laufzeitumgebung unterstützt. Die Web Crypto API stellt HMAC-SHA256, HMAC-SHA384 und HMAC-SHA512 in Browsern ohne Bibliothek bereit. Die folgenden Beispiele zeigen reale Verwendungsmuster einschließlich Webhook-Verifizierung und zeitkonstantem Vergleich.

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

Häufig gestellte Fragen

Was ist der Unterschied zwischen HMAC und einem einfachen Hash?
Ein einfacher Hash (SHA-256, MD5) nimmt nur eine Nachricht als Eingabe und erzeugt einen Digest, den jeder berechnen kann. HMAC nimmt sowohl eine Nachricht als auch einen geheimen Schlüssel und erzeugt eine Signatur, die nur jemand mit dem Schlüssel generieren oder verifizieren kann. Das bedeutet, HMAC bietet Authentifizierung (Nachweis der Absenderidentität) zusätzlich zur Integritätsprüfung. Ein einfacher Hash beweist nur, dass sich Daten nicht verändert haben, nicht wer sie erstellt hat.
Ist HMAC-SHA256 sicher?
Ja. HMAC-SHA256 gilt ab 2026 als sicher. Seine Sicherheit beruht auf den pseudozufälligen Eigenschaften von SHA-256 und der HMAC-Konstruktion selbst (RFC 2104). Kein praktischer Angriff gegen HMAC-SHA256 wurde nachgewiesen. Selbst HMAC-MD5 und HMAC-SHA1 bleiben in der Praxis sicher, da HMACs Sicherheit keine vollständige Kollisionsresistenz der zugrundeliegenden Hashfunktion erfordert — für neue Systeme werden jedoch SHA-2-Varianten empfohlen.
Warum verwenden Webhooks HMAC statt den Payload zu verschlüsseln?
Webhook-Payloads enthalten typischerweise Daten, die der Empfänger bereits erwartet — Bestelldetails, Ereignisbenachrichtigungen, Statusaktualisierungen. Das Ziel ist nicht, die Daten zu verbergen (Vertraulichkeit), sondern zu beweisen, dass sie vom legitimen Absender stammen und nicht im Transit verändert wurden (Authentizität und Integrität). HMAC erreicht dies mit minimalem Aufwand: Der Absender berechnet ein HMAC des Payloads mit einem gemeinsamen Secret und fügt es in einen HTTP-Header ein. Der Empfänger berechnet das HMAC neu und vergleicht. Verschlüsselung würde unnötige Komplexität und Schlüsselverwaltungsaufwand hinzufügen.
Wie sollte ich HMAC-Signaturen sicher vergleichen?
Immer eine zeitkonstante Vergleichsfunktion verwenden. In Python: hmac.compare_digest(). In Node.js: crypto.timingSafeEqual(). In Go: hmac.Equal(). Normale String-Gleichheitsoperatoren (== oder ===) können Timing-Informationen preisgeben: Ein Angreifer kann messen, wie lange der Vergleich dauert, um zu bestimmen, wie viele Bytes seiner gefälschten Signatur mit der korrekten übereinstimmen, und dann die verbleibenden Bytes einzeln per Brute-Force ermitteln.
Kann HMAC umgekehrt werden, um den geheimen Schlüssel zu ermitteln?
Nein. HMAC basiert auf einer Einwegfunktion, sodass es keinen mathematischen Abkürzungsweg gibt, den Schlüssel aus einer HMAC-Ausgabe zu extrahieren. Ein Angreifer müsste den Schlüsselraum per Brute-Force durchsuchen, was für Schlüssel ab 128 Bit nicht praktikabel ist. Schwache oder kurze Schlüssel (wie einfache Passwörter) können jedoch anfällig für Wörterbuchangriffe sein — daher sollten für HMAC-SHA256 stets kryptografisch zufällige Schlüssel mit mindestens 256 Bit verwendet werden.
Was passiert, wenn der HMAC-Schlüssel länger als die Hash-Blockgröße ist?
Wenn der geheime Schlüssel länger als die Blockgröße der Hashfunktion ist (64 Bytes für SHA-256, 128 Bytes für SHA-512), hasht der HMAC-Algorithmus zunächst den Schlüssel mit der zugrundeliegenden Hashfunktion auf die Hash-Ausgabelänge und verwendet diesen Hash dann als effektiven Schlüssel. Das bedeutet, sehr lange Schlüssel bieten keine zusätzliche Sicherheit über die Hash-Ausgabegröße hinaus. Bei HMAC-SHA256 werden Schlüssel länger als 64 Bytes auf 32 Bytes gehasht und bieten keine Sicherheitsverbesserung gegenüber einem 64-Byte-Schlüssel; Schlüssel bis zu 64 Bytes werden in ihrer vollen Länge verwendet.
Wann sollte HMAC-SHA512 statt HMAC-SHA256 verwendet werden?
HMAC-SHA512 sollte verwendet werden, wenn das Protokoll es erfordert (einige Schlüsselableitungsfunktionen wie HKDF-SHA512, Ed25519-Schlüsselgenerierung), wenn eine breitere Signatur zur Verteidigungstiefe benötigt wird oder wenn auf 64-Bit-Hardware SHA-512 tatsächlich schneller als SHA-256 ist. Für die meisten Web-Anwendungen, API-Signierung und Webhook-Verifizierung bietet HMAC-SHA256 ausreichende Sicherheit und ist die häufigere Wahl in allen Ökosystemen.