Генератор HMAC-SHA256
Створюйте підпис HMAC-SHA256 на основі повідомлення та секретного ключа. Інструмент кодує їх у UTF-8, застосовує конструкцію HMAC із RFC 2104 з SHA-256 і повертає тег довжиною 256 бітів у hex або Base64. Розробники використовують його для налагодження підписів вебхуків таких сервісів, як Stripe, GitHub або Slack, підписування запитів API і порівняння результатів із власним кодом. Ключ ніколи не повертається й не записується в журнал.
Поширені запитання
Що таке HMAC-SHA256?
HMAC-SHA256 — це код автентифікації повідомлення, побудований на основі SHA-256 і секретного ключа, як визначено в RFC 2104. Лише той, хто має ключ, може обчислити правильний тег для повідомлення. Результат становить 32 байти, або 64 hex-символи.
Як перевірити підпис вебхука?
Вставте точне необроблене тіло запиту як повідомлення, а секрет для підпису — як ключ, а потім порівняйте результат із заголовком підпису. Багато сервісів підписують комбінацію даних, наприклад часову позначку Stripe, крапку та тіло запиту, тож сформуйте повідомлення так, як описано в їхній документації. Навіть зміна одного байта дає інший тег.
Чи є відомий тестовий вектор?
У тестовому випадку 2 RFC 4231 використовуються ключ Jefe і повідомлення what do ya want for nothing?, очікуване значення — 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Цей інструмент повертає саме це значення.
Як кодуються ключ і повідомлення?
Обидва кодуються як текст UTF-8. Якщо секрет надано у форматі hex або Base64, як це роблять деякі сервіси, байти відрізняються від видимого вам тексту, тому спершу потрібно декодувати ключ у власному коді. Пробіли та розриви рядків враховуються в обох полях.
Чи зберігається мій секретний ключ?
Ні. Ключ використовується лише для обчислення тегу під час запиту. Він не додається до відповіді, не записується в журнал і не зберігається.
Чи може ключ бути порожнім або дуже довгим?
HMAC приймає ключі будь-якої довжини, зокрема порожні. Ключі довші за 64 байти спершу хешуються за допомогою SHA-256, як зазначено в RFC. Для реального використання оберіть випадковий ключ завдовжки щонайменше 32 байти.
Що вибрати: hex чи Base64?
Використовуйте формат, який надсилає інша сторона. GitHub і Stripe використовують hex, тоді як Slack додає до hex префікс v0=, а багато систем на основі AWS і JWT використовують Base64. Обидва формати кодують ті самі 32 байти.
Чи HMAC-SHA256 — це те саме, що SHA-256 ключа та об’єднаного з ним повідомлення?
Ні. HMAC двічі хешує повідомлення з внутрішнім і зовнішнім доповненням ключа, що захищає від атак із подовженням довжини. Об’єднання ключа й повідомлення з одноразовим хешуванням дає інший, слабший результат.
Як порівнювати підписи у своєму коді?
Використовуйте функцію порівняння з постійним часом виконання, наприклад crypto.timingSafeEqual у Node.js або hmac.compare_digest у Python. Звичайне порівняння рядків може розкрити часову інформацію про очікуваний тег.
Яким може бути максимальний розмір повідомлення?
Повідомлення та ключ разом можуть містити до 5 MiB тексту. Цього достатньо для типових даних вебхуків і запитів API.