HMAC і хешування для підписів API: захист вебхуків
Коли служба третьої сторони надсилає вам дані через вебхук або вам потрібно автентифікувати запит API, вам потрібен спосіб довести, що повідомлення не було підроблено та дійсно надійшло від того, хто каже, що це було. Само по собі хешування не вирішить цю проблему; вам потрібен HMAC. Розуміння різниці між звичайним хешем і HMAC і того, як правильно перевіряти підписи, є різницею між безпечною інтеграцією та скомпрометованою.
Що таке хеш
Хеш — це одностороння функція, яка перетворює будь-які вхідні дані — текст, файл, відповідь API — на рядок фіксованої довжини. Той самий вхід завжди дає той самий вихід. Загальні алгоритми хешування включають SHA-256, SHA-1 і MD5. Ви можете використовувати a генератор хешів щоб побачити це в дії: "hello" завжди стає тим самим хешем SHA-256. Ключовою властивістю є те, що хешування є детермінованим, але його неможливо скасувати; ви не можете відновити вихідні дані з хешу.
Що таке HMAC
HMAC означає код автентифікації повідомлення на основі хешу. На відміну від простого хешу, HMAC поєднує повідомлення з секретним ключем перед хешуванням. Постачальник webhook має секретний ключ, хешує повідомлення цим ключем і надсилає повідомлення та хеш вам. Ви повторюєте процес з тим самим секретним ключем; якщо ваш розрахований хеш збігається з надісланим, ви знаєте, що повідомлення автентичне та не змінене. The Генератор 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, щоб гарантувати цілісність і походження.