Middle
Ce este HMAC și cum este utilizat?
sobes.tech AI
Răspuns de la AI
HMAC (Hash-based Message Authentication Code) este un mecanism pentru verificarea integrității și autenticității unui mesaj folosind o cheie secretă și o funcție hash criptografică.
Algoritmul de funcționare:
- Formarea cheilor interne și externe din cheia secretă și constantele (
ipad,opad). - Calcularea hash-ului intern:
hash(cheie secretă XOR ipad + mesaj). - Calcularea hash-ului extern:
hash(cheie secretă XOR opad + hash intern). Acesta este HMAC.
Utilizări:
- Autentificarea cererilor API: Serverul și clientul împart o cheie secretă comună. Clientul calculează HMAC pentru datele cererii și îl trimite în antet. Serverul calculează HMAC cu aceleași date și cheie, comparând cu valoarea trimisă. Dacă se potrivește, cererea este considerată autentică.
- Verificarea integrității datelor: Dacă HMAC-ul mesajului corespunde cu HMAC-ul recalculat, se poate fi sigur că datele nu au fost modificate în timpul transmiterii.
- Utilizarea în JSON Web Tokens (JWT): HMAC este adesea folosit ca algoritm de semnare digitală (HS256, HS384, HS512) pentru a asigura integritatea datelor token-ului.
Exemplu de implementare (pseudocod):
function hmacSHA256(key, message) {
// Constante de padding
const blockSize = 64; // pentru SHA-256
const ipad = 0x36;
const opad = 0x5c;
// Pregătirea cheii
let paddedKey = key;
if (key.length > blockSize) {
paddedKey = sha256(key);
}
while (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Hash intern
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Hash extern (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
return hmac;
}
// În biblioteci reale, implementarea este optimizată și diferită
Diferența principală față de hashing-ul simplu cu cheie (hash(cheie + mesaj) sau hash(mesaj + cheie)) este că HMAC este rezistent la atacurile de tip extension, deoarece folosește două faze de hash cu constante de padding diferite.