HMAC-SHA256 für Nachrichtenintegrität
Erstellen und überprüfen Sie HMAC-SHA256-Signaturen, um die Integrität von API-Daten sicherzustellen.
HMAC-SHA256 für Nachrichtenintegrität ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist HMAC?
HMAC (Hash-basierter Message Authentication Code) kombiniert eine kryptografische Hashfunktion mit einem geheimen Schlüssel, um einen MAC zu erzeugen. Damit lässt sich sowohl nachweisen, dass die Daten nicht manipuliert wurden, als auch, dass der Absender den geheimen Schlüssel kennt.
HMAC vs. einfacher Hash
Ein einfacher SHA-256-Hash kann von jeder Person berechnet werden. Für HMAC ist der geheime Schlüssel erforderlich – nur Parteien, die den Schlüssel kennen, können einen gültigen HMAC erstellen oder überprüfen. Einfache Hashes gewährleisten Integrität, aber keine Authentifizierung.
HMAC-SHA256 in Java berechnen
Verwenden Sie Mac.getInstance("HmacSHA256"), initialisieren Sie ihn mit einer SecretKeySpec und rufen Sie doFinal(data) auf.
byte[] keyBytes = "my-secret-key".getBytes(StandardCharsets.UTF_8);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] hmac = mac.doFinal("payload data".getBytes(StandardCharsets.UTF_8));
String hmacHex = HexFormat.of().formatHex(hmac);
System.out.println(hmacHex); // 64-char hexHMAC überprüfen
Berechnen Sie den HMAC für die empfangenen Daten mit dem gemeinsamen Schlüssel erneut. Verwenden Sie einen Vergleich mit konstanter Laufzeit (MessageDigest.isEqual), um Timing-Angriffe zu verhindern.
byte[] expectedHmac = computeHmac(key, receivedPayload);
byte[] actualHmac = HexFormat.of().parseHex(receivedHmacHex);
boolean valid = MessageDigest.isEqual(expectedHmac, actualHmac);
if (!valid) throw new SecurityException("HMAC verification failed — data tampered!");Sicheren Schlüssel generieren
HMAC-Schlüssel sollten aus zufälligen Bytes bestehen, nicht aus Passwörtern. Verwenden Sie KeyGenerator oder SecureRandom, um einen 256-Bit-Schlüssel zu generieren.
KeyGenerator kg = KeyGenerator.getInstance("HmacSHA256");
kg.init(256);
SecretKey key = kg.generateKey();
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());HMAC zum Signieren von API-Anfragen
Berechnen Sie den HMAC über HTTP-Methode, Pfad, Zeitstempel und Body. Fügen Sie den HMAC in den Header X-Signature ein. Der Server berechnet ihn erneut und vergleicht ihn, um zu überprüfen, dass die Anfrage nicht manipuliert wurde.
String payload = method + "\n" + path + "\n" + timestamp + "\n" + body;
byte[] hmac = computeHmac(apiSecretKey, payload);
request.header("X-Signature", "hmac-sha256=" + HexFormat.of().formatHex(hmac));
request.header("X-Timestamp", timestamp);Replay-Angriffe verhindern
Ein Angreifer kann eine gültig signierte Anfrage erneut senden. Nehmen Sie einen Zeitstempel in die signierten Daten auf und lehnen Sie Anfragen ab, die älter als wenige Minuten sind.
long timestamp = Long.parseLong(request.getHeader("X-Timestamp"));
if (Math.abs(System.currentTimeMillis() / 1000 - timestamp) > 300) {
throw new SecurityException("Request too old — possible replay attack");
}HMAC zur Webhook-Überprüfung
GitHub, Stripe und viele andere Dienste signieren Webhooks mit HMAC. Überprüfen Sie den Header X-Hub-Signature-256, um sicherzustellen, dass der Webhook vom Dienst stammt und nicht verändert wurde.
// GitHub webhook verification:
String received = request.getHeader("X-Hub-Signature-256").replace("sha256=","");
byte[] expected = computeHmac(webhookSecret, request.getBody());
boolean valid = MessageDigest.isEqual(expected, HexFormat.of().parseHex(received));HMAC in JWT
HS256 (HMAC-SHA256) ist ein gängiger JWT-Signaturalgorithmus. Header und Payload werden mit einem gemeinsamen geheimen Schlüssel signiert. Sowohl der Aussteller als auch der Prüfer müssen den Schlüssel kennen – geeignet für Microservices innerhalb derselben Vertrauensgrenze.
HMAC-Schlüsselrotation
Rotieren Sie HMAC-Schlüssel regelmäßig. Akzeptieren Sie während der Rotation für kurze Zeit HMACs sowohl mit dem alten als auch mit dem neuen Schlüssel, und nehmen Sie den alten Schlüssel anschließend außer Betrieb.
Wann HMAC und wann digitale Signaturen verwenden?
HMAC: symmetrisch – beide Seiten teilen sich das Geheimnis, schnell, für interne APIs und die Webhook-Überprüfung. Digitale Signaturen (RSA/ECDSA): asymmetrisch – nur der Signierer besitzt den privaten Schlüssel, und jeder mit dem öffentlichen Schlüssel kann die Signatur überprüfen; geeignet für JWTs in verteilten Systemen.
Kurzer Test
Warum muss der HMAC-Vergleich in konstanter Zeit erfolgen?
Zusammenfassung
HMAC-SHA256 gewährleistet authentifizierte Integrität – es beweist die Herkunft der Daten und dass sie nicht manipuliert wurden. Verwenden Sie Mac.getInstance("HmacSHA256"). Verwenden Sie immer einen Vergleich mit konstanter Laufzeit. Nehmen Sie Zeitstempel auf, um Replay-Angriffe zu verhindern. Verwenden Sie HMAC zum Signieren von APIs, zur Webhook-Überprüfung und für HS256-JWTs.
Häufig gestellte Fragen
Ist die Lektion „HMAC-SHA256 für Nachrichtenintegrität“ kostenlos?
Ja — der vollständige Text von „HMAC-SHA256 für Nachrichtenintegrität“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „HMAC-SHA256 für Nachrichtenintegrität“?
Erstellen und überprüfen Sie HMAC-SHA256-Signaturen, um die Integrität von API-Daten sicherzustellen. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „HMAC-SHA256 für Nachrichtenintegrität“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Kryptografisches Hashing mit MessageDigest
- Symmetrische AES-Verschlüsselung
- HMAC-SHA256 für Nachrichtenintegrität
- JWT: Struktur, Erstellung und Überprüfung