HMAC


HMAC (иногда расшифровывается как англ. hash-based message authentication code, код аутентификации (проверки подлинности) сообщений, использующий хеш-функции, или как англ. keyed-hash message authentication code, код аутентификации сообщений, использующий хеш-функции с ключом) — в информатике (криптографии), один из механизмов проверки целостности информации, позволяющий гарантировать то, что данные, передаваемые или хранящиеся в ненадёжной среде, не были изменены посторонними лицами (см. человек посередине). Механизм HMAC использует имитовставку (MAC), описан в RFC 2104, в стандартах организаций ANSI, IEF, ISO и NIST. MAC — стандарт, описывающий способ обмена данными и способ проверки целостности передаваемых данных с использованием секретного ключа. Два клиента, использующие MAC, как правило, используют общий секретный ключ. HMAC — надстройка над MAC; механизм обмена данными с использованием секретного ключа (как в MAC) и хеш-функций. В названии может уточняться используемая хеш-функция[1]: HMAC-MD5, HMAC-SHA1, HMAC-RIPEMD128, HMAC-RIPEMD160 и т. п.

Было замечено[кем?], что скорость работы хеш-функций (например, MD5, SHA-1, RIPEMD128, RIPEMD-160) обычно выше скорости работы симметричных блочных шифров (например, DES). Возникло желание использовать хеш-функции в MAC, а наличие готовых библиотек с реализациями различных хеш-функций только подтолкнуло эту идею.

Но использовать некоторые хеш-функции в MAC было невозможно. Например, хеш-функция MD5 не может применяться в MAC, так как принимает только один аргумент — данные (строку, последовательность байт) и не использует секретного ключа.

В июне 1996 года[2] Хьюго Кравчик (англ. Hugo Krawczyk, сотрудник фирмы IBM), Михир Беллар[англ.] (англ. Mihir Bellare, сотрудник калифорнийского университета в Сан-Диего (UCSD)) и Ран Каннетти (англ. Ran Canetti, сотрудник фирмы IBM) опубликовали описание механизма HMAC, а в феврале 1997 года ими же был выпущен RFC 2104. В HMAC данные «смешивались» с ключом, и хеш-функция применялась дважды.

Были предложены и другие механизмы, позволяющие одновременно использовать данные и секретный ключ в существующих алгоритмах хеширования, но HMAC получил наибольшую поддержку[источник не указан 1087 дней].