Middle
Šta je HMAC i kako se koristi?
sobes.tech АИ
Одговор од АИ
HMAC (Hash-based Message Authentication Code) je mehanizam za proveru integriteta i autentičnosti poruke koristeći tajni ključ i kriptografski hash funkciju.
Algoritam rada:
- Formiranje unutrašnjeg i spoljnjeg ključa od tajnog ključa i konstanti (
ipad,opad). - Izračunavanje unutrašnjeg hasha:
hash(tajni ključ XOR ipad + poruka). - Izračunavanje spoljnjeg hasha:
hash(tajni ključ XOR opad + unutrašnji hash). To je HMAC.
Upotreba:
- Autentifikacija API zahteva: Server i klijent dele zajednički tajni ključ. Klijent računa HMAC za podatke zahteva i šalje ga u zaglavlju. Server računa isti HMAC sa istim podacima i ključem i ga upoređuje sa poslatom vrednošću. Ako se poklapaju, zahtev se smatra autentičnim.
- Provera integriteta podataka: Ako HMAC poruke odgovara ponovo izračunatom HMAC-u, može se biti siguran da podaci nisu menjani tokom prenosa.
- Korišćenje u JSON Web Tokens (JWT): HMAC se često koristi kao algoritam digitalnog potpisa (HS256, HS384, HS512) za obezbeđivanje integriteta podataka tokena.
Primer implementacije (pseudokod):
function hmacSHA256(key, message) {
// Konstantne padding-a
const blockSize = 64; // za SHA-256
const ipad = 0x36;
const opad = 0x5c;
// Priprema ključa
let paddedKey = key;
if (key.length > blockSize) {
paddedKey = sha256(key);
}
while (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Unutrašnji hash
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Spoljašnji hash (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
return hmac;
}
// U pravim bibliotekama, implementacija je optimizovana i razlikuje se
Ključna razlika od jednostavnog hash-a sa ključem (hash(ključ + poruka) ili hash(poruka + ključ)) je u tome što je HMAC otporan na napade produženja poruka, jer koristi dve faze hashiranja sa različitim konstantama padding-a.