Sobes.tech
Middle

Co je HMAC a jak se používá?

sobes.tech AI

Odpověď od AI

HMAC (Hash-based Message Authentication Code) je mechanismus pro ověření integrity a autenticity zprávy pomocí tajného klíče a kryptografické hashovací funkce.

Algoritmus fungování:

  1. Vytvoření vnitřního a vnějšího klíče z tajného klíče a konstant (ipad, opad).
  2. Výpočet vnitřního hashe: hash(tajný klíč XOR ipad + zpráva).
  3. Výpočet vnějšího hashe: hash(tajný klíč XOR opad + vnitřní hash). To je HMAC.

Použití:

  • Autentizace API požadavků: Server a klient sdílejí společný tajný klíč. Klient vypočítá HMAC pro data požadavku a odešle ho v hlavičce. Server vypočítá HMAC se stejnými daty a klíčem a porovná s odeslanou hodnotou. Pokud se shodují, požadavek je považován za autentický.
  • Kontrola integrity dat: Pokud HMAC zprávy odpovídá znovu vypočtenému HMAC, lze si být jistý, že data nebyla během přenosu změněna.
  • Použití v JSON Web Tokens (JWT): HMAC je často používán jako algoritmus digitálního podpisu (HS256, HS384, HS512) k zajištění integrity dat tokenu.

Příklad implementace (pseudokód):

function hmacSHA256(key, message) {
    // Konstanty paddingu
    const blockSize = 64; // pro SHA-256
    const ipad = 0x36;
    const opad = 0x5c;

    // Příprava klíče
    let paddedKey = key;
    if (key.length > blockSize) {
        paddedKey = sha256(key);
    }
    while (paddedKey.length < blockSize) {
        paddedKey += 0x00;
    }

    // Vnitřní hash
    const innerPaddedKey = xor(paddedKey, ipad);
    const innerHash = sha256(innerPaddedKey + message);

    // Vnější hash (HMAC)
    const outerPaddedKey = xor(paddedKey, opad);
    const hmac = sha256(outerPaddedKey + innerHash);

    return hmac;
}

// V reálných knihovnách je implementace optimalizovaná a odlišná

Hlavní rozdíl od jednoduchého hashování s klíčem (hash(klic + zprava) nebo hash(zprava + klic)) je, že HMAC je odolný vůči útokům na prodlužování zpráv, protože používá dvě fáze hashování s různými konstantami paddingu.