Как пользоваться
- Введите секретный ключ и укажите, задан ли он обычным текстом или в виде байтов в шестнадцатеричном формате.
- Вставьте сообщение, например данные вебхука в точности в том виде, в каком вы их получили.
- Выберите алгоритм и формат результата, которые использует ваш сервис. HMAC обновляется по мере ввода.
- Чтобы проверить подпись, вставьте её в поле проверки и убедитесь, что появилась надпись «Совпадает».
Как это работает
HMAC (RFC 2104) объединяет секретный ключ с хеш-функцией, создавая подпись, которую может сформировать только владелец ключа. Такие сервисы, как вебхуки и API с подписанными запросами, отправляют HMAC с каждым сообщением, чтобы получатель мог проверить его подлинность и убедиться, что сообщение не изменили.
Этот инструмент использует Web Crypto API вашего браузера (crypto.subtle.importKey и sign); его результаты проверены по тестовым векторам RFC 4231 и RFC 2202. Текстовый ключ и сообщение кодируются в UTF-8. Шестнадцатеричный ключ преобразуется в исходные байты; пробелы, двоеточия и начальный 0x игнорируются. Чаще всего используют HMAC-SHA-256. HMAC-SHA-1 по-прежнему считается безопасным MAC, но в основном применяется в старых API.
Если подпись не совпадает, проверьте наиболее частые причины: точные байты сообщения (многие провайдеры вебхуков подписывают исходное тело запроса, а не заново отформатированный JSON), метку времени или префикс, который провайдер добавляет к строке подписи, используется ли ключ как текст или его сначала нужно декодировать из HEX либо Base64, а также совпадает ли формат ожидаемой подписи (HEX или Base64). Удалите перед сравнением префикс, например «sha256=».
Примеры
Тестовый пример RFC 4231
Ключ «Jefe» (текст), сообщение «what do ya want for nothing?» и HMAC-SHA-256 дают результат 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Нажмите «Попробовать пример», чтобы загрузить его.
Проверка подписи вебхука
Провайдер отправляет с каждым запросом заголовок X-Signature: sha256=…. Вставьте исходное тело запроса в поле сообщения, секрет вебхука — в поле ключа, выберите HMAC-SHA-256 и HEX, а затем вставьте в поле проверки значение после «sha256=».
Ключ в шестнадцатеричном формате
Некоторые системы выдают ключи в виде шестнадцатеричных строк, например 0b0b0b…. Выберите HEX в качестве формата ключа, чтобы инструмент подписывал данные декодированными байтами. Если использовать ту же строку как текст, результат будет совершенно другим.
Часто задаваемые вопросы
Чем HMAC отличается от обычного хеша?
Любой может вычислить обычный хеш сообщения, например SHA-256. HMAC зависит также от секретного ключа, поэтому создать или проверить его может только владелец ключа. Это подтверждает, что сообщение отправил владелец ключа и что его не изменяли.
Почему мой HMAC не совпадает с результатом сервера?
Чаще всего различаются входные байты: окончания строк, пробелы, порядок ключей JSON, кодировка символов или ключ, который нужно декодировать из HEX либо Base64. Также проверьте, что используется один и тот же формат (HEX или Base64), и удалите префиксы вроде «sha256=».
Мой секретный ключ куда-нибудь отправляется?
Нет. Ключ и сообщение используются только в Web Crypto API этой вкладки браузера. Они не загружаются на сервер, не сохраняются и не включаются в аналитику.
Безопасен ли HMAC-SHA-1?
Коллизии SHA-1 напрямую не нарушают безопасность HMAC-SHA-1, и его по-прежнему используют для совместимости. Для новых систем выбирайте HMAC-SHA-256 или более надёжный алгоритм.
Конфиденциальность
Ключ, сообщение и результат доступны только в этой вкладке браузера. Данные не загружаются, не сохраняются и не отправляются в системы аналитики; записывается только анонимное событие об использовании инструмента.