Middle
Čo je HMAC a ako sa používa?
sobes.tech AI
Odpoveď od AI
HMAC (Hash-based Message Authentication Code) je mechanizmus na overenie integrity a autenticity správy pomocou tajného kľúča a kryptografickej hash funkcie.
Algoritmus fungovania:
- Vytvorenie vnútorného a vonkajšieho kľúča z tajného kľúča a konštánt (
ipad,opad). - Výpočet vnútorného hashu:
hash(tajný kľúč XOR ipad + správa). - Výpočet vonkajšieho hashu:
hash(tajný kľúč XOR opad + vnútorný hash). To je HMAC.
Použitie:
- Autentifikácia API požiadaviek: Server a klient zdieľajú spoločný tajný kľúč. Klient vypočíta HMAC pre údaje požiadavky a odošle ho v hlavičke. Server vypočíta rovnaký HMAC s rovnakými údajmi a kľúčom a porovná ho s odoslanou hodnotou. Ak sa zhodujú, požiadavka je považovaná za autentickú.
- Kontrola integrity dát: Ak HMAC správy zodpovedá znovu vypočítanému HMAC, môže sa byť istý, že dáta neboli počas prenosu zmenené.
- Použitie v JSON Web Tokens (JWT): HMAC sa často používa ako algoritmus digitálneho podpisu (HS256, HS384, HS512) na zabezpečenie integrity dát tokenu.
Príklad implementácie (pseudokód):
function hmacSHA256(key, message) {
// Konštanty paddingu
const blockSize = 64; // pre SHA-256
const ipad = 0x36;
const opad = 0x5c;
// Príprava kľúča
let paddedKey = key;
if (key.length > blockSize) {
paddedKey = sha256(key);
}
while (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Vnútorný hash
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Vonkajší hash (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
return hmac;
}
// V skutočných knižniciach je implementácia optimalizovaná a odlišná
Hlavný rozdiel od jednoduchého hashovania s kľúčom (hash(kľúč + správa) alebo hash(správa + kľúč)) je, že HMAC je odolný voči útokom na predĺženie správ, pretože používa dve fázy hashovania s rôznymi konštantami paddingu.