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

  1. Iekšējās un ārējās atslēgas veido no slepenās atslēgas (ipad, opad konstantes).
  2. Aprēķina iekšējo hash: hash(slepenā atslēga XOR ipad + ziņojums).
  3. 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.