Middle
Mi az a HMAC és hogyan használják?
sobes.tech MI
Válasz az MI-től
HMAC (Hash-alapú Üzenet Hitelesítési Kód) egy mechanizmus az üzenet integritásának és hitelességének ellenőrzésére, titkos kulcs és kriptográfiai hash függvény használatával.
Működési algoritmus:
- Belső és külső kulcsok kialakítása a titkos kulcsból és állandókból (
ipad,opad). - Belső hash számítása:
hash(titkos kulcs XOR ipad + üzenet). - Külső hash számítása:
hash(titkos kulcs XOR opad + belső hash). Ez az HMAC.
Felhasználási területek:
- API kérések hitelesítése: A szerver és a kliens közös titkos kulcsot oszt meg. A kliens kiszámítja az HMAC-et a kérés adataira, és elküldi a fejlécben. A szerver ugyanazzal az adatokkal és kulccsal kiszámítja az HMAC-et, és összehasonlítja a küldött értékkel. Ha egyeznek, a kérés hitelesnek tekinthető.
- Adatok integritásának ellenőrzése: Ha az üzenet HMAC-e megegyezik a újraszámított HMAC-mel, akkor biztos lehet benne, hogy az adatok nem változtak a továbbítás során.
- Használat JSON Web Tokenekben (JWT): Az HMAC gyakran alkalmazott digitális aláírásként (HS256, HS384, HS512), az adatok integritásának biztosítására.
Implementációs példa (pseudokód):
function hmacSHA256(key, message) {
// Padding állandók
const blockSize = 64; // SHA-256-hoz
const ipad = 0x36;
const opad = 0x5c;
// Kulcs előkészítése
let paddedKey = key;
if (key.length > blockSize) {
paddedKey = sha256(key);
}
while (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// Belső hash
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Külső hash (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
return hmac;
}
// Valós könyvtárakban az implementáció optimalizált és eltérő
A fő különbség a sima kulccsal történő hash (hash(kulcs + üzenet) vagy hash(üzenet + kulcs)) között az, hogy az HMAC ellenáll a hosszabbításos támadásoknak, mivel két hash-fázist használ különböző padding konstansokkal.