Middle
HMAC nima va qanday ishlatiladi?
sobes.tech AI
AIdan javob
HMAC (Hash asosida xabarni autentifikatsiya kodi) — bu maxfiy kalit va kriptografik hash funktsiyasidan foydalanib, xabarning yaxlitligi va autentifikatsiyasini tekshirish uchun mexanizm.
Ishlash algoritmi:
- Maxfiy kalit va konstantalardan (
ipad,opad) ichki va tashqi kalitlar shakllantiriladi. - Ichki hash hisoblanadi:
hash(maxfiy kalit XOR ipad + xabar). - Tashqi hash hisoblanadi:
hash(maxfiy kalit XOR opad + ichki hash). Bu HMAC.
Qo‘llanilishi:
- API so‘rovlarini autentifikatsiya qilish: Server va mijoz umumiy maxfiy kalitga ega. Mijoz so‘rov ma’lumotlari uchun HMAC hisoblaydi va uni sarlavhada yuboradi. Server shuningdek, ayni ma’lumotlar va kalit bilan HMAC hisoblaydi va yuborilgan qiymat bilan solishtiradi. Agar mos kelsa, so‘rov autentifikatsiya qilingan hisoblanadi.
- Ma’lumotlarning yaxlitligini tekshirish: Agar xabar HMAC-isi qayta hisoblangan HMAC bilan mos kelsa, ma’lumotlar uzatish davomida o‘zgarmaganiga ishonch hosil qilish mumkin.
- JSON Web Tokens (JWT) da foydalanish: HMAC ko‘pincha raqamli imzo algoritmi sifatida (HS256, HS384, HS512) ishlatiladi, token ma’lumotlarining yaxlitligini ta’minlash uchun.
Misol uchun (psevdokod):
function hmacSHA256(key, message) {
// Padding konstantalari
const blockSize = 64; // SHA-256 uchun
const ipad = 0x36;
const opad = 0x5c;
// Kalitni tayyorlash
let paddedKey = key;
if (key.length > blockSize) {
paddedKey = sha256(key);
}
while (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Ichki hash
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Tashqi hash (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
return hmac;
}
// Haqiqiy kutubxonalar ichida, amalga oshirish optimallashtirilgan va farq qiladi
Asosiy farq oddiy kalit bilan hash (hash(kalit + xabar) yoki hash(xabar + kalit)) bilan taqqoslaganda, HMAC xabarlarni uzaytirish hujumlariga qarshi chidamli, chunki u ikki fazali hash va turli padding konstantalarini ishlatadi.