🔐 HMAC: подпись, которую нельзя подделать

Кратко: HMAC (Hash‑based Message Authentication Code) — это механизм, который одновременно проверяет целостность и подлинность сообщения. Он берёт секретный ключ, исходные данные и криптографическую хеш-функцию (SHA‑256, SHA‑3) и выдаёт короткую сигнатуру — код аутентификации. Если изменить хотя бы бит данных или подобрать не тот ключ, HMAC перестанет совпадать. Благодаря этому он защищает API‑запросы, JWT‑токены, cookies, TLS и даже блокчейн.

▫️Как дошли до жизни такой · 1996 г. — Михаэль Беллэр, Ран Канати и Хьюго Кравчик формализуют HMAC в научной статье. · 1997 г. — IETF принимает стандарт RFC 2104. HMAC становится официальным. · 2000-е — н.в. — HMAC встраивают в TLS, IPsec, AWS, JWT, OAuth, банковские протоколы и тысячи других систем.

▫️Как работает (простыми словами) Вместо простого хеширования HMAC «склеивает» секретный ключ с данными особым способом: 1. Выравнивание ключа — если ключ короче блока хеш-функции, он дополняется нулями; если длиннее — сначала хешируется. 2. Внутренний хеш — к ключу добавляется константа ipad, затем сами данные — и всё хешируется. 3. Внешний хеш — к тому же ключу добавляется константа opad, затем результат внутреннего хеша — и хешируется повторно. Финальное значение и есть HMAC. Благодаря двухпроходной конструкции злоумышленник не может восстановить ключ даже зная множество пар (сообщение → HMAC).

▫️Что даёт HMAC · Целостность — малейшее изменение сообщения меняет HMAC. · Аутентичность — только владелец ключа может вычислить правильную подпись. · Невозможность подделки без ключа — даже зная тысячи подписей, без ключа подделать HMAC нельзя.

▫️Пример на Python import hmac, hashlib secret = b"super-secret-key-2026" message = b"transfer 1000 USD to account 12345" signature = hmac.new(secret, message, hashlib.sha256).hexdigest() print(f"HMAC: {signature}")

▫️Безопасность · Хеш-функции — используйте SHA‑256 или SHA‑3. MD5 и SHA‑1 лучше не брать. · Длина ключа — не менее 32 байт (256 бит). · Сравнение — используйте hmac.compare_digest (константное время). · Хранение — не в коде! Переменные окружения, Vault, AWS Secrets Manager.

▫️Культурный феномен · «HMAC везде» — от смарт-карт до платежных терминалов. · «Не придумывайте свой HMAC» — берите готовую библиотеку, реализация должна быть константной по времени. · JWT‑холивары — HS256 (HMAC) быстрее, но требует доверия. RS256 безопаснее для третьих сторон.

▫️Современное положение (2026) · HMAC остаётся стандартом для внутренней аутентификации в микросервисах и API-шлюзах. · AWS Signature V4 — модификация HMAC с каноническими запросами. · KMAC (на основе SHA‑3) быстрее классического HMAC, но широкого распространения пока не получил. · Квантово-устойчивая атака на HMAC напрямую не страшна (HMAC не опирается на сложность факторизации), но если взломают хеш-функцию — пострадает и HMAC.

▫️Что запомнить HMAC — это быстрая и проверенная конструкция для проверки целостности и подлинности данных. Если нужно подписать запрос между двумя доверенными сторонами или защитить cookie — выбирайте HMAC. Для подписей между независимыми участниками — асимметричные алгоритмы.

#hmac #криптография #аутентификация #безопасность #jwt #hmacsha256

🔐 HMAC: подпись, которую нельзя подделать | Сетка — социальная сеть от hh.ru