Sobes.tech
Middle

HMAC эмне жана ал кандайча колдонулат?

sobes.tech AI

AIден жооп

HMAC (Hash-based Message Authentication Code) — бул билдирүүнүн бүтүндүгүн жана аныктуулугун текшерүү үчүн механизм, сырткы ачкыч жана криптографикалык хеш-функцияны колдонуу менен.

Ишке ашыруу алгоритми:

  1. Сырткы жана ички ачкычтарды түзүү, аларды ipad, opad константтары менен түзүү.
  2. Ички хешти эсептөө: hash(сырткы ачкыч XOR ipad + билдирүү).
  3. Чыгарган хешти эсептөө: hash(сырткы ачкыч XOR opad + ички хеш). Бул HMAC.

Колдонуу:

  • API суроолорун аутентификациялоо: Сервер жана кардар жалпы сырткы ачкычка ээ. Кардар сурактын маалыматтарына HMAC эсептейт жана аны баштамага жүктөйт. Сервер ошол эле маалыматтар жана ачкыч менен HMAC эсептейт жана салыштырат. Эгер салышса, сурак аутентификацияланган деп эсептелет.
  • Маалыматтын бүтүндүгүн текшерүү: Эгер билдирүүнүн HMACи кайра эсептелген HMAC менен дал келсе, маалыматтар өткөрүү учурунда өзгөрбөгөнүн ишенимдүү айта аласыз.
  • JSON Web Tokens (JWT) колдонууда: HMAC көбүнчө сандык кол коюу алгоритми (HS256, HS384, HS512) катары колдонулат, токендин бүтүндүгүн камсыз кылуу үчүн.

Псевдокод мисалы:

function hmacSHA256(key, message) {
    // padding константалары
    const blockSize = 64; // SHA-256 үчүн
    const ipad = 0x36;
    const opad = 0x5c;

    // ачкычты даярдоо
    let paddedKey = key;
    эгер (key.length > blockSize) {
        paddedKey = sha256(key);
    }
    дагы (paddedKey.length < blockSize) {
        paddedKey += 0x00;
    }

    // ички хеш
    const innerPaddedKey = xor(paddedKey, ipad);
    const innerHash = sha256(innerPaddedKey + message);

    // тышкы хеш (HMAC)
    const outerPaddedKey = xor(paddedKey, opad);
    const hmac = sha256(outerPaddedKey + innerHash);

    кайтаруу hmac;
}

// Чынжыр китепканаларында ишке ашыруу оптимизацияланган жана айырмаланат

HMAC менен жөнөкөй хештин айырмасы — hash(ачкыч + билдирүү) же hash(билдирүү + ачкыч) колдонуу менен салыштырганда, HMAC эки фазалуу хештөө колдонулуп, ал узундуулукка каршы туруктуу болуп саналат, анткени ал эки ар башка padding константалар менен иштелип чыккан.