Открыть сервис

HMAC-SHA256

HMAC-SHA256 (Hash-Based Message Authentication Code with SHA-256) — это криптографический алгоритм, предназначенный для проверки целостности и подлинности данных, а также для аутентификации сообщений. Он представляет собой реализацию механизма HMAC (RFC 2104) с использованием хеш-функции SHA-256 (Secure Hash Algorithm 2 с длиной дайджеста 256 бит). HMAC-SHA256 позволяет двум сторонам, обладающим общим секретным ключом, убедиться, что передаваемое сообщение не было изменено в пути и что оно исходит от доверенного отправителя. Алгоритм широко применяется в протоколах безопасности, API-аутентификации, электронной подписи и системах контроля целостности данных.

История и стандартизация

Концепция HMAC была впервые предложена исследователями Михиром Белларом, Раном Канетти и Хьюго Кравчиком в 1996 году. В том же году алгоритм был опубликован в виде интернет-стандарта RFC 2104 (HMAC: Keyed-Hashing for Message Authentication). В качестве базовой хеш-функции в стандарте допускается использование любой криптостойкой хеш-функции, в том числе SHA-256.

SHA-256 был разработан Агентством национальной безопасности США (NSA) и опубликован Национальным институтом стандартов и технологий США (NIST) в 2001 году как часть семейства SHA-2. С 2002 года SHA-256 является официальным федеральным стандартом США (FIPS PUB 180-2). Сочетание HMAC и SHA-256 (HMAC-SHA256) получило широкое распространение благодаря устойчивости SHA-256 к коллизиям и высокой вычислительной эффективности.

Принцип работы

Общая схема HMAC

HMAC-SHA256 строится на основе итеративного применения хеш-функции SHA-256 к сообщению и секретному ключу. Формально алгоритм описывается формулой:

`` HMAC(K, m) = H( (K' ⊕ opad) || H( (K' ⊕ ipad) || m ) ) ``

где:

Этапы вычисления

  1. Подготовка ключа. Если длина ключа K превышает 64 байта, он хешируется с помощью SHA-256, и результат используется как новый ключ. Если ключ короче 64 байт, он дополняется нулевыми байтами до длины 64 байта.
  2. Вычисление внутреннего хеша. Ключ XOR-ится с константой ipad, затем к результату дописывается исходное сообщение m, и вся последовательность хешируется с помощью SHA-256. Получается промежуточный дайджест (32 байта).
  3. Вычисление внешнего хеша. Ключ XOR-ится с константой opad, затем к результату дописывается промежуточный дайджест, и вся последовательность снова хешируется с помощью SHA-256. Результат — итоговый код аутентификации сообщения (HMAC) длиной 32 байта (256 бит).

Характеристики и свойства

Длина выходного значения

Выходное значение HMAC-SHA256 имеет фиксированную длину — 256 бит (32 байта). В отличие от простого хеширования, HMAC не является хеш-функцией в чистом виде, так как зависит от секретного ключа.

Криптостойкость

Безопасность HMAC-SHA256 основана на двух факторах:

Длина ключа

Рекомендуемая длина ключа для HMAC-SHA256 составляет не менее 256 бит (32 байта). Более короткие ключи снижают стойкость алгоритма. Ключи длиннее 64 байт автоматически хешируются, что уменьшает их эффективную длину до 256 бит.

Применение

Аутентификация в API

HMAC-SHA256 широко используется для подписи запросов в REST API и веб-сервисах. Например, в протоколах Amazon AWS Signature Version 4, Google Cloud API и многих других системах. Клиент вычисляет HMAC от тела запроса, заголовков и других параметров, используя секретный ключ, и передаёт результат в заголовке запроса. Сервер, зная ключ, повторяет вычисление и сравнивает результат.

Протоколы безопасности

Электронная подпись и блокчейн

HMAC-SHA256 используется в некоторых криптовалютах и блокчейн-системах для генерации ключей и подписи транзакций. Например, в алгоритме BIP32 (иерархические детерминированные кошельки) HMAC-SHA512 применяется для генерации дочерних ключей.

Контроль целостности файлов

В системах резервного копирования и распространения программного обеспечения HMAC-SHA256 может использоваться для проверки того, что файл не был изменён злоумышленником или повреждён при передаче.

Примеры использования

Пример 1: Аутентификация запроса к API

Предположим, клиент отправляет POST-запрос на сервер с телом {"user": "alice", "action": "login"}. Секретный ключ — my_secret_key. Клиент вычисляет HMAC-SHA256 от конкатенации метода запроса, пути, тела и временной метки:

`` HMAC-SHA256("my_secret_key", "POST/api/login{\"user\":\"alice\",\"action\":\"login\"}2025-01-01T12:00:00Z") ``

Результат (в шестнадцатеричном представлении): a1b2c3d4e5f67890... (32 байта). Этот код добавляется в заголовок Authorization. Сервер, зная ключ, повторяет вычисление и сравнивает.

Пример 2: Проверка целостности сообщения

Два пользователя обмениваются сообщениями через незащищённый канал. Они заранее договорились о секретном ключе shared_key. Отправитель вычисляет HMAC-SHA256 от текста сообщения и прикладывает его к сообщению. Получатель, получив сообщение, повторно вычисляет HMAC и сравнивает с полученным значением. Если они совпадают, сообщение не было изменено.

Сравнение с другими алгоритмами

АлгоритмДлина выходаСкорость (относительно)Криптостойкость (на 2025 г.)
HMAC-MD5128 битВысокаяНизкая (известны коллизии)
HMAC-SHA1160 битВысокаяСредняя (атаки на SHA-1)
HMAC-SHA256256 битСредняяВысокая
HMAC-SHA512512 битНизкаяВысокая
HMAC-SHA3-256256 битСредняяВысокая (новый стандарт)

HMAC-SHA256 является сбалансированным выбором между производительностью и безопасностью, что делает его наиболее распространённым вариантом в современных системах.

Критика и ограничения

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →