Middle
Kas yra HMAC ir kaip jis naudojamas?
sobes.tech AI
Atsakymas iš AI
HMAC (Hash-based Message Authentication Code) — tai mechanizmas, skirtas pranešimo vientisumui ir autentiškumui patikrinti, naudojant slaptažodį raktą ir kriptografinę maišos funkciją.
Veikimo algoritmas:
- Vidinis ir išorinis raktai sudaromi iš slaptažodžio rakto (
ipad,opadkonstanta). - Apskaičiuojamas vidinis maišas:
hash(slaptažodžio raktas XOR ipad + pranešimas). - Apskaičiuojamas išorinis maišas:
hash(slaptažodžio raktas XOR opad + vidinis maišas). Tai yra HMAC.
Naudojimas:
- API užklausų autentifikavimas: Serveris ir klientas turi bendrą slaptažodį raktą. Klientas apskaičiuoja HMAC duomenims ir siunčia jį antraštėje. Serveris apskaičiuoja tą patį HMAC ir palygina. Jei sutampa, užklausa laikoma autentiška.
- Duomenų vientisumo patikra: Jei pranešimo HMAC sutampa su pakartotinai apskaičiuotu HMAC, galima būti tikriems, kad duomenys nebuvo pakeisti perdavimo metu.
- Naudojimas JSON Web Tokens (JWT): HMAC dažnai naudojamas kaip skaitmeninio parašo algoritmas (HS256, HS384, HS512), siekiant užtikrinti duomenų vientisumą.
Pavyzdinis įgyvendinimas (pseudokodas):
function hmacSHA256(raktas, pranešimas) {
// užpildymo konstantos
const blockSize = 64; // SHA-256
const ipad = 0x36;
const opad = 0x5c;
// Raktų paruošimas
let paddedKey = raktas;
jei (raktas.length > blockSize) {
paddedKey = sha256(raktas);
}
kol (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Vidinis maišas
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + pranešimas);
// Išorinis maišas (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
grąžinti hmac;
}
// Tikrose bibliotekose įgyvendinimas yra optimizuotas ir skiriasi
Pagrindinis skirtumas nuo paprasto maišos su raktu (hash(raktas + pranešimas) arba hash(pranešimas + raktas)) tas, kad HMAC yra atsparus prailginimo atakoms, nes naudoja dvi maišos fazes su skirtingais užpildymo konstančiais.