CodeKitHub
Інструменти кодування

Генератор HMAC

Останнє оновлення:

Цей інструмент обчислює HMAC (Hash-based Message Authentication Code) із секретного ключа та повідомлення, використовуючи SHA-1, SHA-256, SHA-384 або SHA-512 як базову хеш-функцію. На відміну від звичайного хешу, HMAC вимагає спільного секретного ключа, тому він доводить, що повідомлення надійшло від власника цього ключа і не було змінено під час передавання — саме тому API використовують HMAC для підпису запитів, а webhook-и — для перевірки відправника корисного навантаження. Усе виконується локально через вбудований Web Crypto API вашого браузера; ваш секретний ключ і повідомлення ніколи не надсилаються на жоден сервер.

HMAC-SHA1
HMAC-SHA256
HMAC-SHA384
HMAC-SHA512

Що це за інструмент?

HMAC означає Hash-based Message Authentication Code. Він поєднує секретний ключ із повідомленням і стандартною хеш-функцією (наприклад, SHA-256), щоб створити дайджест фіксованої довжини. Будь-хто з тим самим ключем і повідомленням обчислить точно такий самий HMAC — але без ключа обчислювально неможливо створити дійсний HMAC для повідомлення, навіть знаючи, який хеш-алгоритм використовується.

Це ключова відмінність від звичайного хешу: звичайний хеш (MD5, SHA-256 тощо) приймає на вхід лише повідомлення, тому будь-хто може його обчислити, і він нічого не доводить про те, хто його створив. HMAC приймає повідомлення *та* секретний ключ, тому дійсний HMAC доводить, що відправник володів секретом — це механізм автентифікації, а не лише перевірка цілісності.

HMAC офіційно стандартизований NIST у FIPS 198-1 і визначений для інтернет-протоколів у IETF RFC 2104. Цей інструмент обчислює HMAC за допомогою нативного Web Crypto API вашого браузера (`crypto.subtle.sign` з алгоритмом HMAC), який коректно реалізує RFC 2104, а не саморобну версію на JavaScript.

Навіщо його використовувати?

  • Підписуйте API-запити, щоб сервер-отримувач міг перевірити, що запит надійшов від власника спільного секрету і не був підроблений.
  • Перевіряйте корисні навантаження webhook-ів (Stripe, GitHub, Shopify та подібні сервіси підписують тіла своїх webhook-ів за допомогою HMAC-SHA256).
  • Генеруйте токени автентифікації або одноразові коди, що залежать від спільного секрету.
  • Порівнюйте вихід власної реалізації HMAC із відомим правильним еталонним значенням.
  • 100% локально: ваш секретний ключ і повідомлення ніколи не залишають браузер, тому безпечно тестувати реальні секрети.

Як користуватися

  1. Введіть свій секретний ключ у поле «Secret Key».
  2. Введіть повідомлення, яке хочете автентифікувати, у поле «Message».
  3. Результати HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 та HMAC-SHA512 генеруються миттєво (позначте «Uppercase output», якщо ваша цільова система очікує великі літери).
  4. Натисніть «Copy» біля потрібного HMAC.

Приклад

Введення

Secret Key: key
Message: The quick brown fox jumps over the lazy dog

Результат

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Це стандартний опублікований тестовий вектор: із ключем «key» і саме цим повідомленням HMAC-SHA256 та HMAC-SHA1 завжди дають ці значення в будь-якій коректній реалізації, тому ви можете незалежно перевірити результат цього інструмента.

HMAC проти звичайного хешу: коли потрібен ключ

Вирішальне питання: чи потрібно вам довести, хто створив цей дайджест, чи лише те, що вміст не змінився? Якщо достатньо публічної контрольної суми — перевірка, що завантажений файл відповідає тому, що вказав видавець, усунення дублікатів записів — звичайний хеш працює, і будь-хто може його перевірити без ключа. Якщо вам потрібно довести, що дайджест міг створити лише власник певного секрету — автентифікація того, хто викликає API, довіра до відправника webhook-а — вам потрібен HMAC, оскільки звичайний хеш дає зловмиснику без секрету таку саму здатність підробити дійсний дайджест, як і справжньому відправнику.

Multi-Algorithm Hash Generator · JWT Decoder · MD5 Generator

Порівняння чотирьох алгоритмів HMAC

Усі чотири використовують ту саму конструкцію HMAC із RFC 2104, відрізняючись лише базовою хеш-функцією і, відповідно, довжиною виходу.

АлгоритмРозмір виходуТипове використання
HMAC-SHA1160 біт (40 шістнадцяткових символів)Застарілі API, старіші підписи OAuth 1.0a
HMAC-SHA256256 біт (64 шістнадцяткові символи)Підпис API-запитів, JWT HS256, перевірка webhook-ів
HMAC-SHA384384 біти (96 шістнадцяткових символів)Підписи з вищим рівнем надійності, де потрібен довший вихід
HMAC-SHA512512 біт (128 шістнадцяткових символів)Дайджести максимальної довжини для застосунків із високою безпекою

Поширені випадки використання

  • Підпис вихідних API-запитів спільним секретом, щоб сервер міг перевірити особу того, хто викликає.
  • Перевірка вхідних корисних навантажень webhook-ів (заголовки Stripe-Signature, GitHub X-Hub-Signature-256 і подібні всі використовують HMAC-SHA256).
  • Генерація та перевірка частини підпису JWT, підписаного за допомогою HS256/HS384/HS512.
  • Перевірка того, що ваша серверна або клієнтська реалізація HMAC відповідає очікуваному виходу перед розгортанням.

Часті запитання

Що таке HMAC?

HMAC (Hash-based Message Authentication Code) поєднує секретний ключ із повідомленням за допомогою хеш-функції, щоб створити дайджест, який доводить як цілісність повідомлення, так і те, що відправник володіє ключем. Він визначений у NIST FIPS 198-1 та IETF RFC 2104.

У чому різниця між HMAC і звичайним хешем?

Звичайний хеш (SHA-256, MD5 тощо) приймає на вхід лише повідомлення — будь-хто може його обчислити, тому він доводить лише те, що повідомлення не пошкоджене, а не хто його надіслав. HMAC приймає повідомлення плюс секретний ключ: якщо вам потрібно довести, що повідомлення надійшло від власника певного секрету (підпис API, відправник webhook-а), вам потрібен HMAC. Якщо вам потрібно лише перевірити, що файл або повідомлення не змінилися, і вас не хвилює доведення авторства, звичайного хешу достатньо.

Чи надсилається мій секретний ключ на сервер?

Ні. Цей інструмент обчислює HMAC повністю у вашому браузері за допомогою Web Crypto API. Ваш ключ і повідомлення ніколи нікуди не передаються — ви можете безпечно тестувати реальні виробничі секрети.

Який алгоритм слід використовувати — SHA-1, SHA-256, SHA-384 чи SHA-512?

Використовуйте HMAC-SHA256, якщо конкретна система не вимагає іншого — це фактичний стандарт для підпису API (використовується AWS, Stripe, webhook-ами GitHub і більшістю сучасних API) і пропонує надійний запас безпеки. HMAC-SHA1 усе ще поширений у застарілих системах (наприклад, старіших реалізаціях OAuth 1.0a), але базовий хеш SHA-1 вважається слабшим; HMAC-SHA384/512 використовуються там, де конкретно потрібен довший вихід або додатковий запас безпеки.

Чи є HMAC-SHA1 небезпечним, оскільки звичайний SHA-1 зламано?

Атаки на колізії 2017 року зламали SHA-1 як звичайну хеш-функцію, але HMAC-SHA1 усе ще вважається криптографічно надійним, оскільки безпека HMAC не залежить від стійкості до колізій таким самим чином. Тим не менш, для нових систем віддавайте перевагу HMAC-SHA256 або вищому — практичних недоліків немає, і це повністю знімає це питання.

Які поширені реальні застосування HMAC?

Підпис REST API-запитів, щоб сервер міг перевірити, що той, хто викликає, володіє спільним API-секретом; перевірка корисних навантажень webhook-ів від таких сервісів, як Stripe, GitHub і Shopify, щоб знати, що запит справді надійшов від них і не підроблений; генерація одноразових паролів на основі часу (TOTP/HOTP) для двофакторної автентифікації; та підпис токенів JWT алгоритмами HS256/HS384/HS512.

Схожі інструменти