Перейти к содержанию
TextArray

HMAC и хеширование подписей API: защита веб-перехватчиков

Blog /

Когда сторонняя служба отправляет вам данные через веб-перехватчик или вам необходимо аутентифицировать запрос API, вам нужен способ доказать, что сообщение не было подделано и действительно пришло от того, кто это сказал. Одно только хеширование не решает эту проблему; вам нужен HMAC. Понимание разницы между простым хешем и HMAC, а также того, как правильно проверять подписи, — это разница между безопасной интеграцией и скомпрометированной.

Что такое хеш

Хэш — это односторонняя функция, которая преобразует любые входные данные — текст, файл, ответ API — в строку фиксированной длины. Один и тот же вход всегда производит один и тот же результат. Общие алгоритмы хеширования включают SHA-256, SHA-1 и MD5. Вы можете использовать хэш-генератор чтобы увидеть это в действии: «привет» всегда становится одним и тем же хешем SHA-256. Ключевое свойство заключается в том, что хеширование является детерминированным, но его невозможно отменить; вы не можете восстановить исходный ввод из хеша.

Что такое HMAC

HMAC означает код аутентификации сообщения на основе хэша. В отличие от обычного хэша, HMAC перед хешированием объединяет сообщение с секретным ключом. У поставщика веб-перехватчиков есть секретный ключ, он хеширует сообщение с помощью этого ключа и отправляет вам сообщение и хэш. Вы повторяете процесс с тем же секретным ключом; Если вычисленный хэш совпадает с отправленным, вы знаете, что сообщение является подлинным и немодифицированным. HMAC-генератор Инструмент позволяет вам проверить это с вашим собственным сообщением и секретом.

Критическая разница: хэш против HMAC

Вот почему это важно:

Если сервис отправляет вам вебхук только с хешем, злоумышленник может его перехватить, изменить данные, пересчитать хеш, а вы этого не заметите. Благодаря HMAC и общему секрету злоумышленник не сможет подделать действительную подпись без ключа.

Проверка подписей веб-перехватчиков в вашем коде

Когда приходит вебхук, служба предоставляет полезную нагрузку сообщения и заголовок подписи (часто X-Signature или X-Webhook-Signature). Ваш код должен:

  1. Получите свой секретный ключ из безопасной конфигурации (переменные среды, секретный менеджер).
  2. Вычислите HMAC-SHA256 тела необработанного запроса, используя этот ключ.
  3. Сравните вычисленный HMAC побайтно с заголовком подписи (всегда используйте сравнение с постоянным временем, чтобы предотвратить атаки по времени).
  4. Если они совпадают, вебхук подлинный. Если нет, отклоните его.

Большинство поставщиков веб-перехватчиков документируют свой алгоритм HMAC и точный формат для подписи — иногда это необработанное тело JSON, иногда метка времени, объединенная с телом. Точно следуйте их спецификации.

HMAC против JWT: где они подходят

JWT (веб-токены JSON) часто путают с подписями HMAC. JWT — это автономный токен, состоящий из трех частей: заголовка, полезных данных (утверждений) и подписи. Подпись может быть основана на HMAC или RSA. JWT-декодеры позволяют вам проверять и проверять токены. В то время как HMAC проверяют одно сообщение, JWT — это токены, которые вы храните и отправляете с каждым запросом или вызовом API. Для веб-перехватчиков и аутентификации одноразовых сообщений HMAC проще и достаточен. Для токенов текущего сеанса или учетных данных API JWT часто является более гибким.

Конфиденциальность: подпишите и подтвердите полностью в своем браузере

HMAC и инструменты хеширования TextArray полностью работают в вашем браузере. Никакое сообщение, секрет или подпись не загружаются на сервер. Никакая учетная запись не требуется, и инструменты работают в автономном режиме после загрузки страницы. Вы можете безопасно вставлять полезные данные веб-перехватчика и ключи API для тестирования и отладки подписей, не передавая данные третьим лицам или службе журналирования. Это особенно ценно, когда вы работаете с конфиденциальными ключами API или данными клиентов во время разработки.

Начиная

Начните с понимания хеширования: используйте хэш-генератор чтобы увидеть, как один и тот же ввод всегда дает один и тот же вывод SHA-256. Затем перейдите к поколение HMAC чтобы увидеть, как секретный ключ меняет вывод. Попробуйте слегка изменить ключ или сообщение; HMAC полностью переворачивается, в отличие от простой контрольной суммы. Как только вы поймете механику, примените ее к логике проверки вашего вебхука. Для чувствительных полезных нагрузок, таких как зашифрованный текст или декодированные токены, всегда связывайте их с запросами, подписанными HMAC, чтобы гарантировать целостность и происхождение.