HMAC генератор
Изчислете HMAC-SHA1, SHA-256, SHA-384 или SHA-512 с ключ като текст, hex или Base64 и проверете подпис на webhook във вашия браузър.
Съобщението се подписва точно както е въведено, кодирано като UTF-8, включително интервалите и новите редове.
- HMAC (hex)
- HMAC (Base64)
- Заглавие с подпис за webhook (в стил GitHub)
Сравнението се изпълнява за постоянно време, както трябва да го прави сървърът, така че отнетото време не издава колко символа съвпадат.
Как да изчислите HMAC
- Поставете Съобщение. За webhook това трябва да е суровото тяло на заявката, байт по байт.
- Въведете Таен ключ и изберете Формат на ключа: Текст (UTF-8), Шестнадесетичен или Base64.
- Изберете Алгоритъм: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 или HMAC-SHA512.
- Резултатът се обновява, докато пишете; можете да щракнете и Генерирай HMAC. Получавате HMAC (hex), HMAC (Base64) и Заглавие с подпис за webhook (в стил GitHub), всяко с бутон Копирай.
- За да проверите получен подпис, поставете го в Сравни с очакван подпис (hex, Base64 или sha256=…). Инструментът казва дали съвпада.
Съобщението се кодира като UTF-8 точно както е въведено, включително интервалите и новите редове. Изчислението използва Web Crypto API на браузъра ви; съобщението и ключът никога не напускат устройството ви.
Какво е HMAC
HMAC (hash-based message authentication code, RFC 2104) съчетава таен ключ с хеш функция:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
където K′ е ключът, допълнен до размера на блока на хеша (първо се хешира, ако е по-дълъг), а ipad/opad са фиксирани константи. Само който знае ключа, може да създаде правилния код за дадено съобщение, а всяка промяна в съобщението променя изцяло кода. Затова HMAC подписват webhook заявки, API заявки (например AWS Signature Version 4) и JSON Web Token с HS256.
HMAC не е шифроване: съобщението не се скрива. Не е и хеш на парола; за съхранение на пароли използвайте бавна функция като bcrypt или Argon2.
Дължината на изхода зависи от алгоритъма: 20 байта за SHA-1, 32 за SHA-256, 48 за SHA-384 и 64 за SHA-512. HMAC-SHA1 все още се смята за сигурен като MAC, но за нови системи предпочитайте SHA-256. Препоръчва се случаен ключ, поне толкова дълъг, колкото изхода (32 байта за HMAC-SHA256); ключовете в hex или Base64 ви позволяват да въвеждате директно такива случайни байтове.
Проверка на webhook от GitHub
GitHub подписва всяко доставяне с тайната на вашия webhook и изпраща резултата в заглавието X-Hub-Signature-256 като sha256=, следвано от hex HMAC-SHA256 на тялото. Примерът от документацията на GitHub използва тайната It's a Secret to Everybody и тялото Hello, World!; въведете ги тук с HMAC-SHA256 и заглавието показва:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Полето за сравнение приема целия ред на заглавието, стойността sha256=… или гол подпис в hex или Base64 (Stripe, Shopify и Slack използват подобни схеми със свои заглавия и подписвани низове). За SHA-384 и SHA-512 инструментът показва общо заглавие X-Signature, тъй като няма общ стандарт.
Сравнение за постоянно време
Сървър, който сравнява подписи с обикновено сравнение на низове, спира при първия различен символ. Като измерва времената на отговор, атакуващият може да налучка валиден подпис символ по символ. Сравнението в този инструмент проверява всеки байт, каквото и да е резултатът, както трябва да прави сървърът с crypto.timingSafeEqual в Node.js, hmac.compare_digest в Python или hash_equals в PHP.
Често задавани въпроси
Защо моят HMAC се различава от изчисления от сървъра ми?
Обичайните причини са различно съобщение (сървърът подписва суровото тяло, а вие сте поставили преформатиран JSON или краищата на редовете се различават), ключ в грешен Формат на ключа или друг алгоритъм. Дори един излишен интервал променя целия резултат.
Изходът трябва ли да е hex, или Base64?
И двата кодират същите байтове. GitHub използва hex, а много други API, като Shopify, – Base64. Използвайте формата, който очаква получаващата система.
Мога ли да използвам празен ключ?
Инструментът го приема и ви предупреждава: с празен ключ всеки може да изчисли същия HMAC, така че той не доказва нищо.
Счупен ли е HMAC-SHA1, както SHA-1?
Атаките за колизии срещу SHA-1 не чупят HMAC-SHA1, който все още се смята за сигурен като MAC. Поддържа се за стари системи като старото заглавие X-Hub-Signature, но новите системи трябва да използват HMAC-SHA256 или по-силен.
Безопасен ли е тайният ми ключ тук?
Ключът и съобщението се обработват само във вашия браузър и никога не се изпращат никъде. Все пак се отнасяйте внимателно към производствена тайна и я сменете, ако смятате, че е разкрита.
Сродни инструменти
- Генератор на хеш (MD5, SHA-256) Генерирайте MD5, SHA-1, SHA-256 и SHA-512 хешове на текст или файлове с произволен размер и проверявайте контролни суми. Всичко работи във вашия браузър.
- JWT декодер Декодирайте хедъра и съдържанието на JWT, прочетете exp, iat и nbf като дати и проверете подписи HS256, RS256, ES256 или EdDSA във вашия браузър.
- Base64 кодиране и декодиране Безплатно Base64 кодиране и декодиране с пълна поддръжка на UTF-8 и вариант base64url. Работи във вашия браузър, нищо не се качва на сървър.
- Bcrypt генератор и проверка на хеш Генерирайте bcrypt хеш с фактор на цената от 4 до 14, проверете парола спрямо наличен хеш и вижте версията, цената, солта и хеша му.