CodeKitHub
Инструменти за кодиране

HMAC генератор

Последна актуализация:

Този инструмент изчислява HMAC (Hash-based Message Authentication Code) от секретен ключ и съобщение, използвайки SHA-1, SHA-256, SHA-384 или SHA-512 като основна хеш функция. За разлика от обикновен хеш, HMAC изисква споделен секретен ключ, така че доказва, че съобщението идва от някого, който притежава този ключ, и не е било променено при пренос — точно затова API-та използват HMAC за подписване на заявки, а webhook-ите — за проверка на подателя на съдържанието. Всичко се изпълнява локално чрез вградения Web Crypto API на браузъра ви; секретният ви ключ и съобщението никога не се изпращат до сървър.

HMAC-SHA1
HMAC-SHA256
HMAC-SHA384
HMAC-SHA512

Какво представлява този инструмент?

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% локално: секретният ви ключ и съобщението никога не напускат браузъра, така че е безопасно да тествате реални секрети.

Как да го използвате

  1. Въведете секретния си ключ в полето „Секретен ключ“.
  2. Въведете съобщението, което искате да удостоверите, в полето „Съобщение“.
  3. Резултатите за HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 и HMAC-SHA512 се генерират мигновено (отметнете „Изход с главни букви“, ако целевата система очаква главни букви).
  4. Кликнете „Копирай“ до желания 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-SHA1160 бита (40 hex символа)Стари API-та, по-стари OAuth 1.0a подписи
HMAC-SHA256256 бита (64 hex символа)Подписване на API заявки, JWT HS256, проверка на webhook
HMAC-SHA384384 бита (96 hex символа)Подписи с по-висока сигурност, изискващи по-дълъг изход
HMAC-SHA512512 бита (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.