Генератор 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.