Что такое HMAC?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
HMAC (Keyed-Hash Message Authentication Code) — это механизм для проверки целостности и подлинности сообщения с использованием криптографической хеш-функции и секретного ключа. Он гарантирует, что сообщение не было подделано и исходит от доверенного отправителя.
Принцип работы:
- Берется сообщение.
- Секретный ключ дополняется или усекается, чтобы соответствовать размеру блока хеш-функции.
- Результат XOR'ится с константой
ipad(inner pad). - Сообщение объединяется с этим результатом и обрабатывается хеш-функцией.
- Секретный ключ XOR'ится с константой
opat(outer pad). - Результат предыдущего хеширования объединяется с этим результатом и снова обрабатывается хеш-функцией.
- Результат второй хеш-функции является HMAC.
На стороне отправителя вычисляется HMAC для сообщения с использованием секретного ключа и отправляется вместе с сообщением получателю.
На стороне получателя вычисляется HMAC для полученного сообщения с использованием того же секретного ключа. Полученный HMAC сравнивается с тем, что был отправлен. Если они совпадают, сообщение считается подлинным и не измененным.
HMAC устойчив к атакам расширения длины сообщения (length-extension attacks), от которых могут страдать простые схемы hash(key + message) или hash(message + key).
Примеры использования:
- Аутентификация сообщений в сетевых протоколах (например, IPsec, TLS/SSL).
- Проверка целостности данных.
- Создание JSON Web Tokens (JWT).
// Пример на Node.js с использованием встроенного модуля 'crypto'
const crypto = require('crypto');
const secretKey = 'my-secret-key';
const message = 'This is the message to authenticate.';
// Создаем объект HMAC с алгоритмом SHA256 и ключом
const hmac = crypto.createHmac('sha256', secretKey);
// Обновляем HMAC данными сообщения
hmac.update(message);
// Получаем дайджест (HMAC) в шестнадцатеричном формате
const hmacDigest = hmac.digest('hex');
console.log(hmacDigest); // Выведет HMAC для сообщения