Бұл құрал не істейді?
HMAC — Hash-based Message Authentication Code дегенді білдіреді. Ол тұрақты ұзындықтағы дайджест алу үшін құпия кілтті хабармен және стандартты хэш функциясымен (мысалы, SHA-256) біріктіреді. Бір кілт пен хабары бар кез келген адам дәл сол HMAC-ты есептейді — бірақ кілтсіз, хэш алгоритмі белгілі болса да, хабар үшін жарамды HMAC жасау есептеу тұрғысынан мүмкін емес.
Бұл қарапайым хэштен басты айырмашылығы: қарапайым хэш (MD5, SHA-256 және т.б.) кіріс ретінде тек хабарды алады, сондықтан оны кез келген адам есептей алады және ол кімнің жасағанын дәлелдемейді. HMAC хабарды *және* құпия кілтті алады, сондықтан жарамды HMAC жіберушінің құпияны иеленгенін дәлелдейді — бұл тек тұтастықты тексеру емес, аутентификация механизмі.
HMAC ресми түрде NIST ұйымымен FIPS 198-1 құжатында стандартталған және интернет протоколдары үшін IETF RFC 2104 құжатында анықталған. Бұл құрал HMAC-ты браузеріңіздің тумасы Web Crypto API (`crypto.subtle.sign`, HMAC алгоритмімен) арқылы есептейді, ол қолмен жазылған JavaScript нұсқасынан гөрі RFC 2104-ті дұрыс іске асырады.
Оны неге пайдалану керек?
- Қабылдаушы сервер сұраудың ортақ құпияны иеленуші тарапынан келгенін және өзгертілмегенін тексере алуы үшін API сұрауларына қол қойыңыз.
- Webhook жүктемелерін тексеріңіз (Stripe, GitHub, Shopify және ұқсас қызметтердің барлығы webhook денелеріне HMAC-SHA256 арқылы қол қояды).
- Ортақ құпияға тәуелді аутентификация токендерін немесе бір реттік кодтарды жасаңыз.
- Өз HMAC іске асыруыңыздың нәтижесін белгілі дұрыс анықтамалық мәнмен салыстырыңыз.
- 100% жергілікті: құпия кілтіңіз бен хабарыңыз ешқашан браузерден шықпайды, сондықтан нақты құпияларды тексеру қауіпсіз.
Оны қалай пайдалану керек
- «Secret Key» өрісіне құпия кілтіңізді енгізіңіз.
- «Message» өрісіне аутентификациялағыңыз келетін хабарды енгізіңіз.
- HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 және HMAC-SHA512 нәтижелері бірден жасалады (мақсатты жүйеңіз бас әріптерді күтсе, «Uppercase output» құсбелгісін қойыңыз).
- Керек HMAC-тың жанындағы «Copy» түймесін басыңыз.
Мысал
Енгізу
Secret Key: key
Message: The quick brown fox jumps over the lazy dogНәтиже
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Бұл — стандартты жарияланған тест векторы: «key» кілтімен және дәл осы хабармен HMAC-SHA256 мен HMAC-SHA1 кез келген дұрыс іске асыруда әрқашан осы мәндерді береді, сондықтан бұл құралдың нәтижесін өз бетіңізше тексере аласыз.
HMAC пен қарапайым хэш: кілт қашан қажет
Шешуші сұрақ мынау: осы дайджестті кім жасағанын дәлелдеу керек пе, әлде тек мазмұнның өзгермегенін дәлелдеу керек пе? Егер жалпыға қолжетімді бақылау қосындысы жеткілікті болса — жүктеп алынған файлдың баспагер көрсеткенімен сәйкес келетінін тексеру, жазбаларды қайталанудан тазарту — қарапайым хэш жұмыс істейді, оны кез келген адам кілтсіз тексере алады. Ал дайджестті тек белгілі бір құпияны иеленуші жасай алатынын дәлелдеу керек болса — API шақырушысын аутентификациялау, webhook жіберушісіне сену — сізге HMAC керек, себебі қарапайым хэш құпиясы жоқ шабуылдаушыға да нақты жіберуші сияқты жарамды дайджест жасау мүмкіндігін береді.
→
Төрт HMAC алгоритмін салыстыру
Барлық төртеуі де RFC 2104-тен алынған бір HMAC құрылымын пайдаланады, олар тек негізгі хэш функциясы бойынша, демек шығыс ұзындығы бойынша ажыратылады.
| Алгоритм | Шығыс өлшемі | Әдеттегі қолданысы |
|---|---|---|
| HMAC-SHA1 | 160-бит (40 hex таңба) | Ескі API-лер, ескі OAuth 1.0a қолтаңбалары |
| HMAC-SHA256 | 256-бит (64 hex таңба) | API сұрауларына қол қою, JWT HS256, webhook тексеру |
| HMAC-SHA384 | 384-бит (96 hex таңба) | Ұзынырақ шығыс талап етілетін жоғары сенімді қолтаңбалар |
| HMAC-SHA512 | 512-бит (128 hex таңба) | Жоғары қауіпсіздік қолданбалары үшін ең ұзын дайджестер |
Кең таралған қолданыс жағдайлары
- Сервер шақырушының жеке басын тексере алуы үшін шығыс API сұрауларына ортақ құпиямен қол қою.
- Кіріс webhook жүктемелерін тексеру (Stripe-Signature, GitHub X-Hub-Signature-256 және ұқсас тақырыптардың барлығы HMAC-SHA256 пайдаланады).
- HS256/HS384/HS512 арқылы қол қойылған JWT-тың қолтаңба бөлігін жасау және растау.
- Серверлік немесе клиенттік HMAC іске асыруыңызды енгізу алдында күтілетін нәтижемен сәйкестігін тексеру.
Жиі қойылатын сұрақтар
HMAC дегеніміз не?
HMAC (Hash-based Message Authentication Code) хабардың тұтастығын да, жіберушінің кілтті иеленгенін де дәлелдейтін дайджест алу үшін құпия кілтті хабармен хэш функциясы арқылы біріктіреді. Ол NIST FIPS 198-1 және IETF RFC 2104 құжаттарында анықталған.
HMAC пен қарапайым хэштің айырмашылығы неде?
Қарапайым хэш (SHA-256, MD5 және т.б.) кіріс ретінде тек хабарды алады — оны кез келген адам есептей алады, сондықтан ол тек хабардың бұзылмағанын дәлелдейді, кім жібергенін емес. HMAC хабар мен құпия кілтті алады: егер хабардың белгілі бір құпияны иеленуші тараптан келгенін дәлелдеу керек болса (API қолтаңбасы, webhook жіберушісі), сізге HMAC керек. Тек файлдың немесе хабардың өзгермегенін тексеру керек болса, авторлықты дәлелдеу қажет болмаса, қарапайым хэш жеткілікті.
Менің құпия кілтім серверге жіберіле ме?
Жоқ. Бұл құрал HMAC-ты толығымен браузеріңізде Web Crypto API арқылы есептейді. Кілтіңіз бен хабарыңыз ешқашан ешқайда жіберілмейді — нақты өндірістік құпияларды қауіпсіз тексере аласыз.
Қай алгоритмді қолдану керек — SHA-1, SHA-256, SHA-384 немесе SHA-512?
Нақты жүйе басқаша талап етпесе, HMAC-SHA256 қолданыңыз — ол API қолтаңбасының нақты стандарты (AWS, Stripe, GitHub webhook-тары және көптеген заманауи API-лерде қолданылады) және берік қауіпсіздік қорын ұсынады. HMAC-SHA1 әлі де ескі жүйелерде (мысалы, ескі OAuth 1.0a іске асыруларында) кездеседі, бірақ SHA-1-дің негізгі хэші әлсіз саналады; HMAC-SHA384/512 ұзынырақ шығыс немесе қосымша қауіпсіздік қоры нақты талап етілгенде қолданылады.
Қарапайым SHA-1 бұзылған болса, HMAC-SHA1 қауіпсіз емес пе?
2017 жылғы SHA-1-ге қарсы соқтығысу шабуылдары SHA-1-ді қарапайым хэш функциясы ретінде бұзды, бірақ HMAC-SHA1 әлі де криптографиялық тұрғыдан дұрыс саналады, себебі HMAC-тың қауіпсіздігі соқтығысуға төзімділікке сол дәрежеде тәуелді емес. Дегенмен, жаңа жүйелер үшін HMAC-SHA256 немесе одан жоғарысын таңдаған дұрыс — бұдан ешбір практикалық кемшілік жоқ және бұл мәселені толығымен болдырмайды.
HMAC-тың нақты өмірдегі кең тараған қолданыстары қандай?
Сервердің шақырушының ортақ API құпиясын иеленгенін тексере алуы үшін REST API сұрауларына қол қою; Stripe, GitHub және Shopify сияқты қызметтерден келген webhook жүктемелерін тексеру, сол арқылы сұраудың шынымен солардан келгенін және жалғандандырылмағанын білу; екі факторлы аутентификация үшін уақытқа негізделген бір реттік құпия сөздер (TOTP/HOTP) жасау; және JWT токендеріне HS256/HS384/HS512 алгоритмдерімен қол қою.