Інструмент для розробників

Генератор HMAC

Підпишіть повідомлення секретним ключем. Нічого не передається.

Генератор HMAC Працює на вашому пристрої
  • Працює у вашому браузері — ваш текст нікуди не надсилається
  • Без реєстрації та квот, безкоштовно користуйтеся скільки завгодно

Як це працює

HMAC водночас підтверджує дві речі: що повідомлення не змінювали і що той, хто його створив, має спільний секрет. Саме так підписують вебхуки, запити до API та посилання для завантаження на більшості сайтів.

Відрізняється від звичайного хешу в найважливішому

SHA-256 повідомлення може обчислити будь-хто, тож голий хеш нічого не доводить щодо автора: змініть повідомлення, перерахуйте хеш — і ніхто цього не помітить. HMAC вмикає в обчислення секретний ключ, тому без ключа його не можна перерахувати. У цьому весь сенс, і саме тому підписи вебхуків використовують HMAC, а не хеш.

Безпечна перевірка

Коли ви перевіряєте HMAC на сервері, порівнюйте його функцією з постійним часом виконання: crypto.timingSafeEqual у Node, hash_equals у PHP. Звичайний == повертає результат, щойно два байти розрізняються, а витрачений час виказує, яка частина підпису була правильною, і цього за наявності терпіння досить, щоб підробити підпис. Це реальна атака, а не теоретична.

Який алгоритм

SHA-256, якщо не вказано іншого. SHA-1 додано, бо чимало старіших API досі вимагають HMAC-SHA-1, а HMAC-SHA-1 не зламано так, як звичайний SHA-1, — але вибирати його для нових задач немає підстав.

Hex чи Base64

Усе залежить лише від того, чого очікує інша сторона. Hex удвічі довший і легший для читання; Base64 компактніший і поширеніший у заголовках HTTP. Той самий підпис показано в обох виглядах.

Ваш ключ залишається тут

Створюється за допомогою власного Web Crypto API браузера. Ключ і повідомлення нікуди не надсилаються, і це єдиний відповідальний спосіб запропонувати такий інструмент: інструмент підпису, що завантажує ваш секрет, віддає саме те, що секрет має захищати.

Запитання й відповіді

Генератор HMAC: запитання

Чим HMAC відрізняється від хешу?

Хеш може обчислити будь-хто. Для HMAC потрібен секретний ключ, тому він підтверджує, хто його створив.

Який алгоритм використовувати?

SHA-256, якщо API не вимагає іншого. SHA-1 пропонується для старіших систем, які його досі вимагають.

Що вибрати: hex чи Base64?

Те, чого очікує інша сторона. Для того самого підпису показано обидва варіанти.

Чому порівняння має виконуватися за постійний час?

Звичайне порівняння завершується на першому ж розбіжному байті, а різниця в часі виказує, наскільки підпис був правильним, — цього достатньо, щоб підробити підпис.

Чи надсилається мій секретний ключ кудись?

Ні. Усе виконується у вашому браузері через Web Crypto API.