Sobes.tech
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:

  1. Formarea cheilor interne și externe din cheia secretă și constantele (ipad, opad).
  2. Calcularea hash-ului intern: hash(cheie secretă XOR ipad + mesaj).
  3. 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.