Middle
Mis on HMAC ja kuidas seda kasutatakse?
sobes.tech AI
Vastus AI-lt
HMAC (Hash-based Message Authentication Code) — see on mehhanism, mis kontrollib sõnumi terviklikkust ja autentsust, kasutades salajast võtit ja krüptograafilist hash-funktsiooni.
Töö algoritm:
- Sisemine ja välimine võti moodustatakse salajase võti põhjal (
ipad,opadkonstandid). - Arvutatakse sisemine hash:
hash(salajase võti XOR ipad + sõnum). - Arvutatakse välimine hash:
hash(salajase võti XOR opad + sisemine hash). See on HMAC.
Kasutus:
- API päringute autentimine: Server ja klient omavad ühise salajase võti. Klient arvutab HMAC andmete jaoks ja saadab selle päisesse. Server arvutab sama HMAC ja võrdleb. Kui nad kattuvad, loetakse päring autentsuseks.
- Andmete terviklikkuse kontroll: Kui sõnumi HMAC kattub uuesti arvutatud HMAC-iga, saab olla kindel, et andmed ei ole vahepeal muudetud.
- JSON Web Tokens (JWT) kasutamine: HMAC-d kasutatakse sageli digitaalse allkirja algoritmina (HS256, HS384, HS512), et tagada andmete terviklikkus.
Näide implementatsioonist (pseudokood):
function hmacSHA256(key, message) {
// padding konstandid
const blockSize = 64; // SHA-256 jaoks
const ipad = 0x36;
const opad = 0x5c;
// Võtme ettevalmistus
let paddedKey = key;
kui (key.length > blockSize) {
paddedKey = sha256(key);
}
kuni (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Sisemine hash
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Välimine hash (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
tagastada hmac;
}
// Reaalsetes teekides on implementatsioon optimeeritud ja erinev
HMAC-i ja lihtsa hash-funktsiooni erinevus seisneb selles, et HMAC on vastupidav sõnumi pikendamise rünnakutele, kuna kasutab kahte hash-faasist erinevate padding-konstantidega.