HMAC — Hash-based Message Authentication Code, ya’ni hash funksiyasi va maxfiy kalit asosida xabar yaxlitligini hamda haqiqiyligini tekshirish uchun ishlatiladigan kriptografik mexanizm. HMAC xabar o‘zgartirilmaganini va uni maxfiy kalitga ega tomon yaratganini tekshirishga yordam beradi.
HMAC API xavfsizligi, webhook tekshiruvi, token imzolash, OTP algoritmlari, server-to-server aloqa va authentication tizimlarida keng qo‘llanadi.
Vazifasi
HMAC xabar yoki so‘rovning ishonchli ekanini tekshirish uchun ishlatiladi.
HMAC quyidagi vazifalarni bajaradi:
- xabar yaxlitligini tekshirish;
- xabarni maxfiy kalitga ega tomon yuborganini aniqlash;
- API so‘rovlarini imzolash;
- webhook kelib chiqishini tekshirish;
- token yoki kod yaratishda kriptografik asos bo‘lish;
- OTP algoritmlarida kod hosil qilish;
- server-to-server aloqani himoyalash;
- so‘rov yo‘lda o‘zgartirilmaganini aniqlash.
Masalan, payment provider webhook yuborganda, HMAC signature orqali webhook haqiqatan provider tomonidan yuborilganini tekshirish mumkin.
HMAC qanday ishlaydi?
HMAC xabar va maxfiy kalitni hash funksiyasi orqali qayta ishlaydi. Natijada signature yoki MAC hosil bo‘ladi. Qabul qiluvchi tomon ham shu xabar va maxfiy kalit asosida HMAC hisoblaydi va kelgan signature bilan solishtiradi.
Oddiy jarayon:
- yuboruvchi xabar tayyorlaydi;
- maxfiy kalit olinadi;
- xabar va kalit HMAC algoritmiga beriladi;
- signature hosil bo‘ladi;
- xabar signature bilan birga yuboriladi;
- qabul qiluvchi tomon xabar va o‘zidagi kalit bilan signature hisoblaydi;
- ikkita signature solishtiriladi;
- mos kelsa, xabar haqiqiy deb hisoblanadi.
Agar xabar yo‘lda o‘zgartirilsa, HMAC natijasi ham o‘zgaradi.
Hash function
Hash function — ma’lumotni belgilangan uzunlikdagi hash qiymatga aylantiradigan algoritm. HMAC hash funksiyasi bilan birga ishlaydi.
HMAC’da ishlatiladigan hash algoritmlar:
Zamonaviy tizimlarda HMAC-SHA256 keng ishlatiladi.
Secret key
Secret key — HMAC hisoblashda ishlatiladigan maxfiy kalit. Bu kalit yuboruvchi va qabul qiluvchi tomonda bir xil bo‘ladi.
Secret key quyidagilar uchun kerak:
- signature yaratish;
- signature tekshirish;
- xabarni ishonchli manba bilan bog‘lash;
- boshqa tomonlar signature yasay olmasligini ta’minlash;
- API yoki webhook so‘rovini himoyalash.
Secret key ochiq yuborilmaydi va kod ichida public ko‘rinishda saqlanmaydi.
Message
Message — HMAC hisoblanadigan asosiy ma’lumot. Bu oddiy matn, JSON body, URL, timestamp, request payload yoki fayl bo‘lishi mumkin.
Message misollari:
- API request body;
- webhook payload;
- user ID;
- payment ma’lumoti;
- timestamp;
- token payload;
- OTP counter qiymati;
- TOTP vaqt qiymati.
Message o‘zgarsa, HMAC signature ham o‘zgaradi.
Signature
Signature — HMAC natijasida hosil bo‘ladigan tekshiruv qiymati. U xabar va secret key asosida yaratiladi.
Signature quyidagilarni bildiradi:
- xabar maxfiy kalit bilan imzolangan;
- xabar yo‘lda o‘zgarmagan;
- qabul qiluvchi tomon uni tekshirishi mumkin;
- noto‘g‘ri kalit bilan bir xil signature hosil qilib bo‘lmaydi.
Signature ko‘pincha hexadecimal yoki Base64 formatida yuboriladi.
MAC
MAC — Message Authentication Code. MAC xabar haqiqiyligini va yaxlitligini tekshirish uchun ishlatiladigan umumiy tushuncha. HMAC esa MAC’ning hash funksiyasiga asoslangan turi hisoblanadi.
MAC quyidagilarni tekshiradi:
- xabar o‘zgartirilmaganmi;
- xabar ishonchli manbadan kelganmi;
- maxfiy kalit mosmi;
- yuboruvchi va qabul qiluvchi bir xil kalitga egami.
HMAC MAC algoritmlarining eng ko‘p ishlatiladigan turlaridan biridir.
HMAC-SHA256
HMAC-SHA256 — HMAC mexanizmining SHA-256 hash funksiyasi bilan ishlaydigan ko‘rinishi.
HMAC-SHA256 quyidagilarda ishlatiladi:
- API request signing;
- webhook signature;
- payment provider tekshiruvi;
- cloud service authentication;
- JWT HS256 algoritmi;
- server-to-server security;
- integration xavfsizligi.
HMAC-SHA256 zamonaviy web va backend tizimlarda keng qo‘llanadigan variant hisoblanadi.
HMAC-SHA1
HMAC-SHA1 — HMAC mexanizmining SHA-1 hash funksiyasi bilan ishlaydigan ko‘rinishi.
HMAC-SHA1 quyidagilarda uchraydi:
- HOTP algoritmi;
- TOTP tizimlarining ayrim konfiguratsiyalari;
- eski API integrationlar;
- legacy authentication tizimlari;
- ayrim cloud va enterprise protokollar.
SHA-1 eski hash algoritm bo‘lsa ham, HMAC ichida tarixiy tizimlarda uchrashi mumkin.
HMAC-SHA512
HMAC-SHA512 — HMAC mexanizmining SHA-512 hash funksiyasi bilan ishlaydigan ko‘rinishi.
HMAC-SHA512 quyidagilarda ishlatilishi mumkin:
- kuchliroq hash talab qilingan tizimlarda;
- token imzolashda;
- maxsus security protokollarda;
- enterprise API security’da;
- cryptographic library konfiguratsiyalarida.
SHA-512 uzunroq hash qiymat hosil qiladi.
HMAC va oddiy hash farqi
HMAC oddiy hashdan farq qiladi, chunki unda maxfiy kalit ishlatiladi.
Farqlar:
- Oddiy hash faqat ma’lumotdan hash yaratadi;
- HMAC ma’lumot va secret key asosida signature yaratadi;
- oddiy hash yaxlitlikni ko‘rsatishi mumkin;
- HMAC xabarni maxfiy kalitga ega tomon bilan bog‘laydi;
- oddiy hashni har kim hisoblay oladi;
- HMACni to‘g‘ri secret keysiz hisoblab bo‘lmaydi.
Masalan, fayl hashini har kim tekshirishi mumkin, lekin HMAC signature faqat secret keyga ega tomon tomonidan tekshiriladi.
HMAC va encryption farqi
HMAC encryption emas. U xabarni yashirmaydi, balki uning haqiqiyligi va o‘zgarmaganini tekshiradi.
Farqlar:
- Encryption ma’lumotni shifrlaydi;
- HMAC ma’lumotga signature yaratadi;
- encryption ma’lumotni o‘qilmas holatga keltiradi;
- HMAC ma’lumotni yashirmaydi;
- encryption uchun decrypt qilish kerak;
- HMAC uchun signature tekshiriladi.
Masalan, JSON body ochiq ko‘rinishda yuborilishi mumkin, lekin HMAC orqali uning o‘zgarmagani tekshiriladi.
HMAC va digital signature farqi
HMAC va digital signature ikkalasi ham xabar haqiqiyligini tekshirishi mumkin, lekin kalit modeli farq qiladi.
Farqlar:
- HMAC symmetric key ishlatadi;
- Digital signature asymmetric key ishlatadi;
- HMAC’da bitta secret key yaratish va tekshirish uchun ishlatiladi;
- digital signature’da private key imzolaydi, public key tekshiradi;
- HMAC ichki service’lar orasida ko‘p ishlatiladi;
- digital signature public tekshiruv kerak bo‘lgan tizimlarda ishlatiladi.
Masalan, JWT HS256 HMAC asosida, JWT RS256 esa digital signature asosida ishlaydi.
Symmetric key
Symmetric key — bitta kalit yaratish va tekshirish uchun ishlatiladigan model. HMAC symmetric key asosida ishlaydi.
Symmetric key xususiyatlari:
- yuboruvchi va qabul qiluvchi bir xil kalitga ega;
- kalit maxfiy saqlanadi;
- signature yaratish va tekshirishda shu kalit ishlatiladi;
- kalit tarqalib ketsa, xavfsizlik buziladi.
HMAC’da secret key markaziy xavfsizlik elementi hisoblanadi.
Request signing
Request signing — API yoki server so‘rovlarini signature bilan imzolash jarayoni. HMAC request signing’da keng ishlatiladi.
Request signing jarayonida:
- client request ma’lumotlarini oladi;
- timestamp yoki nonce qo‘shadi;
- secret key bilan HMAC signature yaratadi;
- request signature bilan yuboriladi;
- server signature’ni qayta hisoblab tekshiradi.
Bu mexanizm API so‘rovining haqiqiyligini tekshirishga yordam beradi.
Webhook signature
Webhook tizimlarida HMAC kelgan webhook haqiqatan kerakli service’dan yuborilganini tekshirish uchun ishlatiladi.
- provider webhook payload yaratadi;
- secret key orqali HMAC signature hisoblaydi;
- signature headerda yuboriladi;
- qabul qiluvchi server payload va secret key orqali signature hisoblaydi;
- signature mos kelsa, webhook qabul qilinadi.
Payment, Git, messaging va automation service’larida webhook signature keng uchraydi.
API secret
API secret — API clientga beriladigan maxfiy kalit. HMAC request signing’da API secret asosida signature yaratiladi.
API secret quyidagilar uchun ishlatiladi:
- request imzolash;
- clientni tekshirish;
- webhook tekshirish;
- server-to-server aloqani himoyalash;
- API access boshqaruvi;
- integration xavfsizligi.
API secret public repository yoki frontend kod ichida ochiq turmasligi kerak.
Timestamp
Timestamp — request qachon yuborilganini bildiradigan vaqt qiymati. HMAC request signing’da timestamp replay attackni kamaytirish uchun ishlatiladi.
Timestamp orqali:
- eski requestlar rad qilinadi;
- signature ma’lum vaqt oralig‘ida amal qiladi;
- request yangiligi tekshiriladi;
- vaqtga bog‘liq security policy qo‘llanadi.
Masalan, server 5 daqiqadan eski timestampli requestni qabul qilmasligi mumkin.
Nonce
Nonce — bir marta ishlatiladigan tasodifiy qiymat. HMAC bilan birga nonce request qayta yuborilishining oldini olishda ishlatilishi mumkin.
Nonce quyidagilar uchun ishlatiladi:
- replay attackni kamaytirish;
- requestni noyob qilish;
- signature’ni har safar farqli qilish;
- eski so‘rov qayta ishlatilmasligini tekshirish.
Nonce odatda serverda vaqtincha saqlanadi yoki tekshiriladi.
Replay attack
Replay attack — oldin yuborilgan to‘g‘ri requestni qayta yuborib, tizimni aldashga urinish. HMAC signature bir o‘zi replay attackni to‘liq bartaraf qilmasligi mumkin, chunki eski requestdagi signature ham to‘g‘ri bo‘lishi mumkin.
Replay attackga qarshi quyidagilar ishlatiladi:
- timestamp;
- nonce;
- request ID;
- expiration window;
- server-side replay cache;
- idempotency key.
HMAC requestning o‘zgarmaganini tekshiradi, timestamp va nonce esa requestning yangiligini tekshiradi.
Constant-time comparison
Constant-time comparison — ikkita signature’ni vaqt farqidan ma’lumot chiqarmaydigan usulda solishtirish. Bu timing attack xavfini kamaytirish uchun ishlatiladi.
Constant-time comparison quyidagilar uchun muhim:
- HMAC signature tekshirish;
- token signature solishtirish;
- API request signing;
- webhook security;
- maxfiy qiymatlarni solishtirish.
Oddiy string comparison ayrim holatlarda timing farqi orqali zaiflik keltirib chiqarishi mumkin.
Timing attack
Timing attack — tizim javob berish vaqtidagi farqlar orqali maxfiy ma’lumotni taxmin qilishga qaratilgan hujum turi.
HMAC tekshiruvda timing attack quyidagilar bilan bog‘liq bo‘lishi mumkin:
- signature belgilarini ketma-ket solishtirish;
- noto‘g‘ri joyda tekshiruvni to‘xtatish;
- javob vaqtini o‘lchash;
- signature qiymatini bosqichma-bosqich taxmin qilish.
Constant-time comparison bu xavfni kamaytirish uchun ishlatiladi.
HMAC va JWT
JWT’da HMAC HS256, HS384 yoki HS512 algoritmlari orqali ishlatilishi mumkin.
JWT HMAC jarayonida:
- header va payload olinadi;
- secret key bilan HMAC hisoblanadi;
- signature yaratiladi;
- token yuboriladi;
- backend shu secret key bilan signature’ni tekshiradi.
Masalan, JWT HS256 algoritmi HMAC-SHA256 asosida ishlaydi.
HMAC va HOTP
HOTP algoritmi HMAC asosida ishlaydi. HOTP’da secret key va counter qiymati HMAC orqali qayta ishlanadi, keyin undan qisqa raqamli OTP kod hosil qilinadi.
HOTP’da HMAC quyidagilar uchun ishlatiladi:
- secret key asosida kod yaratish;
- counter qiymatini kriptografik hisoblash;
- har bir counter uchun alohida kod olish;
- bir martalik parol hosil qilish.
HOTP nomidagi “H” aynan HMAC tushunchasini bildiradi.
HMAC va TOTP
TOTP ham HOTP asosida ishlagani uchun HMAC’dan foydalanadi. TOTP’da counter o‘rniga vaqt bo‘lagi ishlatiladi.
TOTP’da HMAC quyidagilar bilan ishlaydi:
- secret key;
- joriy vaqt oralig‘i;
- time step;
- hash algoritm;
- dynamic truncation;
- raqamli OTP kod.
Authenticator app va server bir xil secret key hamda vaqt asosida HMAC hisoblab, bir xil TOTP kod hosil qiladi.
HMAC va API
API xavfsizligida HMAC client so‘rovini tekshirish uchun ishlatiladi. Bu ayniqsa server-to-server API’larda keng qo‘llanadi.
API’da HMAC quyidagilarni tekshiradi:
- client haqiqiyligini;
- request body o‘zgarmaganini;
- timestamp mosligini;
- signature to‘g‘riligini;
- API secret mosligini.
HMAC API keyga qo‘shimcha xavfsizlik qatlami sifatida ishlashi mumkin.
HMAC va webhook
Webhook qabul qiluvchi server HMAC yordamida payload haqiqiyligini tekshiradi.
Webhook’da HMAC quyidagi holatlarda ishlatiladi:
- payment status webhook;
- GitHub webhook;
- Telegram yoki messaging integration;
- CI/CD webhook;
- CRM yoki SaaS event webhook;
- order update webhook.
Webhook payload signature bilan tekshirilmasa, tashqi soxta so‘rovlar qabul qilinishi mumkin.
HMAC va payment tizimlari
Payment tizimlarida HMAC tranzaksiya ma’lumotlari, callback yoki webhook xavfsizligini tekshirishda ishlatilishi mumkin.
Payment tizimlarida HMAC quyidagilarni himoyalaydi:
- transaction payload;
- merchant ID;
- amount;
- order ID;
- callback URL;
- payment status;
- timestamp;
- webhook body.
Bu mexanizm payment provider va merchant server o‘rtasidagi ma’lumot yaxlitligini tekshiradi.
HMAC va microservice
Microservice arxitekturasida HMAC service-to-service so‘rovlarni tekshirish uchun ishlatilishi mumkin.
Microservice’da HMAC quyidagilar uchun qo‘llanadi:
- internal API so‘rovlarini imzolash;
- service identity tekshirish;
- request payload yaxlitligini tekshirish;
- gateway va service aloqasini himoyalash;
- webhookga o‘xshash ichki eventlarni tekshirish.
HMAC oddiy va tezkor signature mexanizmi sifatida ichki service’larda ishlatilishi mumkin.
HMAC va secret rotation
Secret rotation — HMAC secret keyni vaqti-vaqti bilan almashtirish jarayoni. Bu xavfsizlikni boshqarish uchun ishlatiladi.
Secret rotation jarayonida:
- yangi secret yaratiladi;
- yangi requestlar yangi secret bilan imzolanadi;
- eski secret ma’lum muddat qabul qilinishi mumkin;
- eski integrationlar yangilanadi;
- eski secret bekor qilinadi.
Secret rotation API va webhook integrationlarda muhim bo‘lishi mumkin.
HMAC xavfsizligi
HMAC xavfsizligi secret key, hash algoritm va tekshirish jarayoniga bog‘liq.
HMAC xavfsizligida quyidagilar muhim:
- secret keyni maxfiy saqlash;
- kuchli va yetarlicha uzun secret ishlatish;
- HTTPS orqali so‘rov yuborish;
- timestamp yoki nonce ishlatish;
- constant-time comparison qilish;
- secretni frontend kodga joylamaslik;
- signature’ni logga ehtiyotkorlik bilan chiqarish;
- secret rotation mexanizmini qo‘llash.
HMAC noto‘g‘ri ishlatilsa, API yoki webhook xavfsizligida zaiflik paydo bo‘lishi mumkin.
Dasturlashdagi o‘rni
HMAC backend, API, authentication va security tizimlarida xabar yaxlitligini tekshirish va maxfiy kalit asosida signature yaratish uchun ishlatiladigan muhim kriptografik mexanizmdir.
HMAC quyidagi loyihalarda uchraydi:
- REST API;
- webhook integrationlar;
- payment tizimlari;
- JWT tokenlar;
- OTP algoritmlari;
- HOTP;
- TOTP;
- server-to-server aloqa;
- microservice tizimlar;
- CI/CD webhooklar.
HMAC xabar, request yoki tokenning o‘zgartirilmaganini va maxfiy kalitga ega tomon tomonidan yaratilganini tekshirish uchun ishlatiladi.
Bog‘liq tushunchalar
Hash, SHA-256, Secret key, Signature, JWT, HOTP, TOTP, OTP, Webhook, API, Authentication, Security