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

  1. Sisemine ja välimine võti moodustatakse salajase võti põhjal (ipad, opad konstandid).
  2. Arvutatakse sisemine hash: hash(salajase võti XOR ipad + sõnum).
  3. 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.