Middle
Kas ir HMAC un kā tas tiek izmantots?
sobes.tech AI
Atbilde no AI
HMAC (Hash-based Message Authentication Code) — tas ir mehānisms, lai pārbaudītu ziņojuma integritāti un autentiskumu, izmantojot slepenu atslēgu un kriptogrāfisku hash funkciju.
Darba algoritms:
- Iekšējās un ārējās atslēgas veido no slepenās atslēgas (
ipad,opadkonstantes). - Aprēķina iekšējo hash:
hash(slepenā atslēga XOR ipad + ziņojums). - Aprēķina ārējo hash:
hash(slepenā atslēga XOR opad + iekšējais hash). Tas ir HMAC.
Izmantošana:
- API pieprasījumu autentifikācija: Serveris un klients ir kopīga slepena atslēga. Klients aprēķina HMAC datiem un nosūta to galvenes daļā. Serveris aprēķina to pašu HMAC un salīdzina. Ja sakrīt, pieprasījums tiek uzskatīts par autentisku.
- Datu integritātes pārbaude: Ja ziņojuma HMAC sakrīt ar atkārtoti aprēķināto HMAC, var būt pārliecināts, ka dati nav mainījušies pārraides laikā.
- JSON Web Tokens (JWT) lietošana: HMAC bieži tiek izmantots kā digitālas paraksta algoritms (HS256, HS384, HS512), lai nodrošinātu datu integritāti.
Piemērs implementācijā (pseudokods):
function hmacSHA256(raksts, ziņojums) {
// padding konstantes
const blockSize = 64; // SHA-256
const ipad = 0x36;
const opad = 0x5c;
// Atslēgas sagatavošana
let paddedKey = raksts;
ja (raksts.length > blockSize) {
paddedKey = sha256(raksts);
}
kamēr (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Iekšējais hash
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + ziņojums);
// Ārējais hash (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
atgriezt hmac;
}
// Reālas bibliotēkas realizācija ir optimizēta un atšķiras
Galvenā atšķirība no vienkāršā hashēšanas ar raktu (hash(raksts + ziņojums) vai hash(ziņojums + raksts)) ir tā, ka HMAC ir izturīgs pret uzlīmes uzbrukumiem, jo tas izmanto divas hash fāzes ar dažādām padding konstantiem.