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í:
- Vytvoření vnitřního a vnějšího klíče z tajného klíče a konstant (
ipad,opad). - Výpočet vnitřního hashe:
hash(tajný klíč XOR ipad + zpráva). - 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.