Какво представлява този инструмент?
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 алгоритъм), който реализира правилно RFC 2104, вместо ръчно написана JavaScript версия.
Защо да го използвате?
- Подписване на API заявки, за да може получаващият сървър да провери, че заявката идва от притежател на споделения секрет и не е била манипулирана.
- Проверка на webhook съдържание (Stripe, GitHub, Shopify и подобни услуги подписват телата на webhook-ите с HMAC-SHA256).
- Генериране на удостоверителни токени или еднократни кодове, зависещи от споделен секрет.
- Сравняване на изхода от собствена HMAC реализация с известна коректна референтна стойност.
- 100% локално: секретният ви ключ и съобщението никога не напускат браузъра, така че е безопасно да тествате реални секрети.
Как да го използвате
- Въведете секретния си ключ в полето „Секретен ключ“.
- Въведете съобщението, което искате да удостоверите, в полето „Съобщение“.
- Резултатите за HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 и HMAC-SHA512 се генерират мигновено (отметнете „Изход с главни букви“, ако целевата система очаква главни букви).
- Кликнете „Копирай“ до желания HMAC.
Пример
Вход
Секретен ключ: key
Съобщение: 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 алгоритъма
И четирите използват една и съща HMAC конструкция от RFC 2104, различавайки се само по основната хеш функция и следователно по дължината на изхода.
| Алгоритъм | Размер на изхода | Типична употреба |
|---|---|---|
| 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).
- Генериране и валидиране на подписната част на JWT, подписан с HS256/HS384/HS512.
- Тестване, че реализацията ви на 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 webhooks и повечето съвременни API-та) и предлага силен марж на сигурност. HMAC-SHA1 все още е разпространен в стари системи (като по-стари OAuth 1.0a реализации), но основният хеш на SHA-1 се смята за по-слаб; HMAC-SHA384/512 се използват там, където конкретно се изисква по-дълъг изход или допълнителен марж на сигурност.
Опасен ли е HMAC-SHA1, след като обикновеният SHA-1 е компрометиран?
Атаките с колизии от 2017 г. компрометираха SHA-1 като обикновена хеш функция, но HMAC-SHA1 все още се смята за криптографски стабилен, защото сигурността на HMAC не зависи от устойчивостта на колизии по същия начин. При все това за нови системи предпочитайте HMAC-SHA256 или по-висок — няма практически недостатък и това напълно избягва въпроса.
Кои са често срещаните реални приложения на HMAC?
Подписване на REST API заявки, за да може сървър да провери, че извикващият притежава споделения API секрет; проверка на webhook съдържание от услуги като Stripe, GitHub и Shopify, за да сте сигурни, че заявката наистина идва от тях и не е фалшифицирана; генериране на времево базирани еднократни пароли (TOTP/HOTP) за двуфакторна автентикация; и подписване на JWT токени с алгоритмите HS256/HS384/HS512.