HMAC – метод шифрования сообщения, который с помощью криптографического ключа защищает передаваемую информацию от утечки или перехвата третьей стороной.
Код проверки подлинности сообщений, использующий хеш-функции (Hash-based Message Authentication Code, HMAC) — это метод шифрования сообщений, в котором используется криптографический ключ в сочетании с хеш-функцией. HMAC предоставляет серверу и клиенту закрытый ключ, который известен только этому конкретному серверу и клиенту, обеспечивая более безопасные средства шифрования данных, чем простой код аутентификации сообщения (MAC).
HMAC — это метод криптографической аутентификации. Механизм использует как криптографическую хеш-функцию, так и общий секретный ключ для шифрования информации и защиты ее от несанкционированного доступа.
Хеш-функция — это алгоритм или математическая функция, которая преобразует сообщение, состоящее из переменного количества символов, в строку с фиксированным количеством символов. Выходное значение известно как «дайджест сообщения».
Секретный криптографический ключ — это секретная информация, которая позволяет пользователю расшифровать зашифрованное сообщение.
В транзакции HMAC клиент и сервер должны согласовать секретный ключ. Это обеспечивает способ декодирования сообщений, которые должны оставаться секретными, для поддержания целостности транзакции. Стороны также должны выбрать и согласовать хеш-функцию для своих сообщений.
HMAC можно использовать для проверки целостности данных и аутентификации сторон, участвующих в транзакции. Многие протоколы связи и передачи (HTTPS, SFTP и FTPS) используют HMAC. Криптографическая хеш-функция в HMAC обычно представляет собой SHA-1, SHA-256, MD5 или RIPEMD-128/160.
В HMAC используется криптографический ключ с хэш-функцией для защиты сообщений между клиентом и сервером
HMAC гарантирует участвующим в транзакции сторонам, что их сообщения не были перехвачены злоумышленником. Код (ключ) HMAC состоит из двух частей:
Формула для HMAC:
HMAC = hashFunc (секретный ключ + сообщение)
В процессе обмена сообщениями между клиентом и сервером с использованием HMAC клиент создает уникальный HMAC (хэш), хэшируя данные запроса с закрытыми ключами и отправляя их как часть запроса. Сервер получает запрос и регенерирует свой собственный уникальный HMAC. Затем он сравнивает два HMAC. Если они равны, клиент считается доверенным, и запрос выполняется. Этот процесс часто называют секретным рукопожатием (secret handshake).
HMAC безопаснее, чем MAC, потому что ключ и сообщение хэшируются на отдельных этапах:
HMAC(key, msg) = H(mod1(key) || H(mod2(key) || msg))
Благодаря процессу «секретного рукопожатия» в HMAC невозможна утечка элементов ключа при создании последовательных MAC-адресов. Кроме того, после завершения процесса отправленное сообщение становится устойчивым к перехвату. Однако даже если злоумышленник попытается перехватить сообщение, он не сможет угадать его длину или расшифровать, поскольку у него не будет ключа дешифрования. По сути, процесс HMAC делает содержимое сообщения нечитаемым и бесполезным для хакера.
HMAC считается безопасным методом аутентификации сообщений, поскольку его трудно подделать, если потенциальный мошенник не знает секретный ключ. Этот метод также устойчив к брутфорс-атакам. При этом важно использовать надежный и уникальный секретный ключ, чтобы максимизировать преимущества безопасности HMAC.
Поскольку HMAC обеспечивает два уровня защиты, он идеально подходит для приложений, использующих конфиденциальные данные, личную информацию или данные кредитных карт. HMAC обеспечивает более надежную защиту, чем традиционные меры, что делает его пригодным для использования в отраслях здравоохранения или финансов.
Шифрование HMAC также подходит для систем Интернета вещей (Internet of Things, IoT), маршрутизаторов и проверки email-адреса пользователя. HMAC также можно использовать в приложениях, где системы с открытым ключом запрещены, сюда входит:
Цифровая подпись — это способ проверки подлинности и целостности электронного документа и отправителя с помощью асимметричной криптографии с открытым ключом. Как и HMAC, цифровые подписи также используют хеш-функцию и общий ключ. Однако в HMAC используется симметричный ключ, т. е. один и тот же ключ используется отправителем и получателем, а в цифровой подписи используются асимметричные ключи, то есть отправитель и получатель используют два разных ключа.
И HMAC, и цифровые подписи обеспечивают целостность и подлинность сообщения. Целостность означает, что сообщение не было изменено. При этом хеш-функция возвращает другое значение, поэтому получатель знает, что кто-то подделал сообщение. Подлинность указывает, что сообщение исходит от ожидаемого отправителя, исключая факт внедрения третьи стороны.
В дополнение к обеспечению целостности и подлинности цифровые подписи также используются для отказоустойчивости – то есть ни отправитель, ни получатель не могут отрицать факт обработки информации после ее отправки. HMAC обычно не используются в целях сохранения авторства.
Одно найти легче, чем другое. Спойлер: это не темная материя