Sobes.tech
Middle

Was ist HMAC und wie wird es verwendet?

sobes.tech KI

Antwort von AI

HMAC (Hash-basierter Nachrichten-Authentifizierungscode) ist ein Mechanismus zur Überprüfung der Integrität und Authentizität einer Nachricht unter Verwendung eines geheimen Schlüssels und einer kryptografischen Hash-Funktion.

Funktionsweise:

  1. Bildung interner und externer Schlüssel aus dem geheimen Schlüssel und Konstanten (ipad, opad).
  2. Berechnung des internen Hashes: hash(geheimer Schlüssel XOR ipad + Nachricht).
  3. Berechnung des externen Hashes: hash(geheimer Schlüssel XOR opad + interner Hash). Das ist HMAC.

Verwendung:

  • Authentifizierung von API-Anfragen: Server und Client teilen einen gemeinsamen geheimen Schlüssel. Der Client berechnet den HMAC für die Anfragedaten und sendet ihn im Header. Der Server berechnet den HMAC mit denselben Daten und Schlüssel und vergleicht ihn mit dem gesendeten Wert. Bei Übereinstimmung gilt die Anfrage als authentisch.
  • Datenintegritätsprüfung: Wenn der HMAC der Nachricht mit dem neu berechneten HMAC übereinstimmt, kann man sicher sein, dass die Daten während der Übertragung nicht verändert wurden.
  • Verwendung in JSON Web Tokens (JWT): HMAC wird häufig als Algorithmus für digitale Signaturen (HS256, HS384, HS512) verwendet, um die Integrität der Token-Daten zu gewährleisten.

Implementierungsbeispiel (Pseudocode):

function hmacSHA256(key, message) {
    // Padding-Konstanten
    const blockSize = 64; // für SHA-256
    const ipad = 0x36;
    const opad = 0x5c;

    // Schlüssel vorbereiten
    let paddedKey = key;
    if (key.length > blockSize) {
        paddedKey = sha256(key);
    }
    while (paddedKey.length < blockSize) {
        paddedKey += 0x00;
    }

    // Innerer Hash
    const innerPaddedKey = xor(paddedKey, ipad);
    const innerHash = sha256(innerPaddedKey + message);

    // Äußerer Hash (HMAC)
    const outerPaddedKey = xor(paddedKey, opad);
    const hmac = sha256(outerPaddedKey + innerHash);

    return hmac;
}

// In echten Bibliotheken ist die Implementierung optimiert und unterscheidet sich

Der Hauptunterschied zum einfachen Hashing mit Schlüssel (hash(schlüssel + nachricht) oder hash(nachricht + schlüssel)) ist, dass HMAC gegen Angriffe auf die Nachrichtenverlängerung resistent ist, da es zwei Hash-Phasen mit unterschiedlichen Padding-Konstanten verwendet.