Middle
Какво е HMAC и как се използва?
sobes.tech AI
Отговор от AI
HMAC (Hash-based Message Authentication Code) е механизъм за проверка на цялостта и автентичността на съобщение, използвайки тайна ключ и криптографска хеш-функция.
Алгоритъм на работа:
- Формиране на вътрешен и външен ключ от тайния ключ и константи (
ipad,opad). - Изчисляване на вътрешния хеш:
hash(тайният ключ XOR ipad + съобщение). - Изчисляване на външния хеш:
hash(тайният ключ XOR opad + вътрешния хеш). Това е HMAC.
Използване:
- Автентикация на API заявки: Сървърът и клиентът споделят общ тайна ключ. Клиентът изчислява HMAC за данните на заявката и го изпраща в заглавката. Сървърът изчислява същия HMAC с същите данни и ключ и го сравнява с изпратената стойност. Ако съвпадат, заявката се счита за автентична.
- Проверка на цялостта на данните: Ако HMAC на съобщението съвпада с пресмятания HMAC, може да се уверите, че данните не са били променени по време на предаването.
- Използване в JSON Web Tokens (JWT): HMAC често се използва като алгоритъм за цифров подпис (HS256, HS384, HS512), за да се гарантира цялостта на данните на токена.
Пример за реализация (псевдокод):
function hmacSHA256(key, message) {
// Константи за padding
const blockSize = 64; // за SHA-256
const ipad = 0x36;
const opad = 0x5c;
// Подготовка на ключа
let paddedKey = key;
if (key.length > blockSize) {
paddedKey = sha256(key);
}
while (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Вътрешен хеш
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Външен хеш (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
return hmac;
}
// В реалните библиотеки реализацията е оптимизирана и се различава
Ключовата разлика от простото хеширане с ключ (hash(ключ + съобщение) или hash(съобщение + ключ)) е, че HMAC е устойчив на атаки за удължаване на съобщения, тъй като използва две фази на хеширане с различни константи за padding.