HMAC Generator

Генерує підписи HMAC з SHA-256, SHA-384 або SHA-512

Алгоритм

Повідомлення

Працює локально · Безпечно вставляти секрети

Таємний ключ

Працює локально · Безпечно вставляти секрети

Підпис HMAC

Підпис HMAC буде відображено тут…

Що таке HMAC?

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

Алгоритм HMAC працює з будь-якою ітеративною хеш-функцією: SHA-256, SHA-384, SHA-512, а також з застарілими функціями SHA-1 або MD5. Отримана конструкція позначається за базовим хешем — HMAC-SHA256, HMAC-SHA384 або HMAC-SHA512. Оскільки доведена безпека HMAC залежить від стійкості хеш-функції до колізій і певних псевдовипадкових властивостей, алгоритми сімейства SHA-2 є рекомендованим вибором для нових систем. HMAC-SHA256 є найбільш поширеним варіантом: він використовується у AWS Signature V4, вебхуках Stripe, GitHub webhook secrets, підписанні запитів Slack та JSON Web Tokens (HS256).

Структура HMAC забезпечує критичну властивість, якої бракує простому хешуванню: стійкість до атак розширення довжини. Маючи лише SHA-256, зловмисник, який знає H(message), може обчислити H(message || attacker_data), не знаючи вихідного повідомлення. Подвійне хешування HMAC (внутрішній хеш і зовнішній хеш із різними доповненими ключами) повністю унеможливлює цю атаку. Саме тому схеми підпису API використовують HMAC, а не просто додають таємний ключ до повідомлення перед хешуванням.

Навіщо використовувати онлайн-генератор HMAC?

Обчислення підписів HMAC зазвичай потребує написання коду або використання CLI-інструментів. Цей браузерний генератор HMAC дозволяє миттєво створювати підписи HMAC-SHA256, HMAC-SHA384 і HMAC-SHA512 без встановлення програм або перемикання до термінала.

Миттєве обчислення HMAC
Введіть повідомлення та таємний ключ, оберіть алгоритм хешування — і отримайте підпис HMAC негайно. Web Crypto API виконує обчислення нативно у вашому браузері.
🔒
Обробка з пріоритетом конфіденційності
Ваше повідомлення та таємний ключ ніколи не покидають пристрій. Усі обчислення HMAC виконуються локально через Web Crypto API — без серверних запитів, без журналювання, без зберігання даних.
📋
Підтримка кількох алгоритмів
Перемикайтеся між HMAC-SHA256, HMAC-SHA384 і HMAC-SHA512 одним кліком. Порівнюйте виводи за різними алгоритмами, щоб перевірити відповідність реалізації на бекенді.
🔍
Без реєстрації та встановлення
Працює в будь-якому сучасному браузері — Chrome, Firefox, Safari, Edge. Без реєстрації, розширень і налаштування CLI. Відкрийте сторінку та починайте генерувати підписи HMAC.

Варіанти використання генератора HMAC

Фронтенд-розробник — перевірка підписів вебхуків
Stripe, GitHub і Shopify підписують корисні навантаження вебхуків за допомогою HMAC-SHA256. Використовуйте цей інструмент для обчислення очікуваного підпису з навантаження та таємного ключа, а потім порівняйте його з підписом у HTTP-заголовку під час розробки.
Бекенд-інженер — підписання запитів API
AWS Signature V4 вимагає HMAC-SHA256 на кількох етапах процесу підписання. Генеруйте еталонні значення HMAC під час розробки, щоб відлагоджувати розбіжності у підписах і перевіряти проміжні кроки обчислення.
DevOps — перевірка ротації секретів
При ротації секретів вебхуків або ключів підписання API обчислюйте підписи HMAC як зі старим, так і з новим ключем, щоб переконатися, що застосунок коректно обробляє перехід до закінчення терміну дії старого ключа.
QA-інженер — тестові вектори підписів
Генеруйте тестові вектори HMAC із відомими вхідними даними та ключами для побудови регресійних тестів автентифікаційного middleware. Перевіряйте, що реалізація коректно обробляє порожні повідомлення, Unicode-введення та довгі ключі.
Інженер з даних — автентифікація повідомлень у конвеєрах
Додавайте підписи HMAC до повідомлень у подієво-орієнтованих конвеєрах (Kafka, SQS), щоб переконатися, що повідомлення не були підроблені під час транзиту між сервісами.
Студент — практичне вивчення криптографії
Експериментуйте з HMAC, щоб зрозуміти, як зміна одного символу у повідомленні або ключі дає повністю інший підпис. Порівнюйте вивід HMAC із виводом простого SHA-256, щоб спостерігати різницю, яку вносить таємний ключ.

HMAC проти простого хешу та шифрування

HMAC, просте хешування і шифрування слугують різним цілям. HMAC забезпечує автентифікацію повідомлення — підтвердження того, що повідомлення створено стороною з таємним ключем і не було змінено. Простий хеш забезпечує цілісність, але не автентифікацію. Шифрування забезпечує конфіденційність. Таблиця нижче роз'яснює відмінності.

ВластивістьHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

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

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

АлгоритмРозмір дайджестуДовжина hexWeb Crypto APIНайкраще для
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

Як HMAC працює всередині

HMAC застосовує базову хеш-функцію двічі з двома різними ключовими підкладками. Конструкція визначена у RFC 2104 і доведена як PRF (псевдовипадкова функція) за стандартними криптографічними припущеннями. Ключ спочатку доповнюється або хешується до відповідності розміру блоку хеш-функції (64 байти для SHA-256, 128 байтів для SHA-512).

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

Алгоритм виконує XOR доповненого ключа з константою внутрішньої підкладки (ipad, 0x36 повторений), конкатенує з повідомленням і хешує результат. Потім виконує XOR доповненого ключа з константою зовнішньої підкладки (opad, 0x5C повторений), конкатенує з виводом внутрішнього хешу і хешує знову. Ця подвійна структура хешування запобігає атакам розширення довжини і гарантує, що вивід HMAC неможливо обчислити без знання таємного ключа.

Приклади коду HMAC

HMAC підтримується нативно в кожній основній мові та середовищі виконання. Web Crypto API забезпечує HMAC-SHA256, HMAC-SHA384 і HMAC-SHA512 у браузерах без жодних бібліотек. Наведені нижче приклади демонструють реальні патерни використання, включно з перевіркою вебхуків і порівнянням за постійним часом.

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

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

У чому різниця між HMAC і простим хешем?
Простий хеш (SHA-256, MD5) приймає лише повідомлення і виробляє дайджест, який може обчислити будь-хто. HMAC приймає і повідомлення, і таємний ключ, генеруючи підпис, який може створити або перевірити лише той, хто має ключ. Це означає, що HMAC забезпечує автентифікацію (підтвердження особи відправника) на додаток до перевірки цілісності. Простий хеш лише доводить, що дані не змінилися, але не встановлює, хто їх створив.
Чи надійний HMAC-SHA256?
Так. HMAC-SHA256 вважається надійним станом на 2026 рік. Його безпека ґрунтується на псевдовипадкових властивостях SHA-256 і конструкції HMAC (RFC 2104). Жодної практичної атаки проти HMAC-SHA256 не було продемонстровано. Навіть HMAC-MD5 і HMAC-SHA1 залишаються надійними на практиці, оскільки безпека HMAC не вимагає повної стійкості до колізій базового хешу, хоча для нових систем рекомендуються варіанти SHA-2.
Чому вебхуки використовують HMAC замість шифрування навантаження?
Корисні навантаження вебхуків зазвичай містять дані, які отримувач вже очікує — деталі замовлень, сповіщення про події, оновлення статусу. Мета не в тому, щоб приховати дані (конфіденційність), а в тому, щоб довести, що вони надійшли від легітимного відправника і не були змінені під час транзиту (автентичність та цілісність). HMAC досягає цього з мінімальними накладними витратами: відправник обчислює HMAC навантаження з таємним ключем і включає його в HTTP-заголовок. Отримувач повторно обчислює HMAC і порівнює. Шифрування додало б зайву складність і тягар управління ключами.
Як безпечно порівнювати підписи HMAC?
Завжди використовуйте функцію порівняння за постійним часом. У Python використовуйте hmac.compare_digest(). У Node.js — crypto.timingSafeEqual(). У Go — hmac.Equal(). Стандартні оператори рівності рядків (== або ===) можуть витікати інформацію часу: зловмисник може виміряти тривалість порівняння, щоб визначити, скільки байтів підробленого підпису збігається з правильним, і потім послідовно перебрати решту байтів.
Чи можна відновити таємний ключ із виводу HMAC?
Ні. HMAC базується на односпрямованій хеш-функції, тому немає математичного скорочення для вилучення ключа з виводу HMAC. Зловмисник мав би перебирати простір ключів, що неможливо для ключів від 128 бітів і довше. Проте слабкі або короткі ключі (наприклад, прості паролі) можуть бути вразливі до словникових атак, тому завжди використовуйте криптографічно випадкові ключі довжиною не менше 256 бітів для HMAC-SHA256.
Що відбувається, якщо ключ HMAC довший за розмір блоку хеш-функції?
Якщо таємний ключ довший за розмір блоку хеш-функції (64 байти для SHA-256, 128 байтів для SHA-512), алгоритм HMAC спочатку хешує ключ базовою хеш-функцією, щоб скоротити його до довжини виводу хешу, а потім використовує цей хеш як ефективний ключ. Це означає, що дуже довгі ключі не забезпечують додаткового захисту понад розмір виводу хешу. Для HMAC-SHA256 ключі довші за 64 байти хешуються до 32 байтів і не дають жодного покращення безпеки порівняно з 64-байтним ключем; ключі до 64 байтів використовуються у повній довжині.
Коли слід використовувати HMAC-SHA512 замість HMAC-SHA256?
Використовуйте HMAC-SHA512, якщо протокол вимагає цього (деякі функції виведення ключів, як-от HKDF-SHA512, генерація ключів Ed25519), якщо потрібен ширший підпис для глибокого захисту або при роботі на 64-бітному обладнанні, де SHA-512 насправді швидший за SHA-256. Для більшості вебзастосунків, підписання API та перевірки вебхуків HMAC-SHA256 забезпечує достатній рівень безпеки і є більш поширеним вибором у різних екосистемах.