HMAC и хеширование подписей API: защита веб-перехватчиков
Когда сторонняя служба отправляет вам данные через веб-перехватчик или вам необходимо аутентифицировать запрос API, вам нужен способ доказать, что сообщение не было подделано и действительно пришло от того, кто это сказал. Одно только хеширование не решает эту проблему; вам нужен HMAC. Понимание разницы между простым хешем и HMAC, а также того, как правильно проверять подписи, — это разница между безопасной интеграцией и скомпрометированной.
Что такое хеш
Хэш — это односторонняя функция, которая преобразует любые входные данные — текст, файл, ответ API — в строку фиксированной длины. Один и тот же вход всегда производит один и тот же результат. Общие алгоритмы хеширования включают SHA-256, SHA-1 и MD5. Вы можете использовать хэш-генератор чтобы увидеть это в действии: «привет» всегда становится одним и тем же хешем SHA-256. Ключевое свойство заключается в том, что хеширование является детерминированным, но его невозможно отменить; вы не можете восстановить исходный ввод из хеша.
Что такое HMAC
HMAC означает код аутентификации сообщения на основе хэша. В отличие от обычного хэша, HMAC перед хешированием объединяет сообщение с секретным ключом. У поставщика веб-перехватчиков есть секретный ключ, он хеширует сообщение с помощью этого ключа и отправляет вам сообщение и хэш. Вы повторяете процесс с тем же секретным ключом; Если вычисленный хэш совпадает с отправленным, вы знаете, что сообщение является подлинным и немодифицированным. HMAC-генератор Инструмент позволяет вам проверить это с вашим собственным сообщением и секретом.
Критическая разница: хэш против HMAC
Вот почему это важно:
- Обычный хэш: Любой может увидеть ваше сообщение и пересчитать хеш, чтобы получить «действительное». Это ничего не доказывает.
- ХМАС: Только тот, у кого есть секретный ключ, может создать правильный HMAC. Это криптографически доказывает, что сообщение пришло от владельца ключа и не было изменено.
Если сервис отправляет вам вебхук только с хешем, злоумышленник может его перехватить, изменить данные, пересчитать хеш, а вы этого не заметите. Благодаря HMAC и общему секрету злоумышленник не сможет подделать действительную подпись без ключа.
Проверка подписей веб-перехватчиков в вашем коде
Когда приходит вебхук, служба предоставляет полезную нагрузку сообщения и заголовок подписи (часто X-Signature или X-Webhook-Signature). Ваш код должен:
- Получите свой секретный ключ из безопасной конфигурации (переменные среды, секретный менеджер).
- Вычислите HMAC-SHA256 тела необработанного запроса, используя этот ключ.
- Сравните вычисленный HMAC побайтно с заголовком подписи (всегда используйте сравнение с постоянным временем, чтобы предотвратить атаки по времени).
- Если они совпадают, вебхук подлинный. Если нет, отклоните его.
Большинство поставщиков веб-перехватчиков документируют свой алгоритм 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, чтобы гарантировать целостность и происхождение.