HMAC
Főnév
HMAC (tsz. HMACs)
A HMAC, vagyis Hash-based Message Authentication Code egy kriptográfiai mechanizmus, amelyet az adatok hitelesítésére és integritásának ellenőrzésére használnak. Célja, hogy egy adott üzenetről vagy adatcsomagról megbízható módon eldönthető legyen, hogy valóban a küldőtől származik-e, és hogy az adatot nem módosították menet közben.
Ez különösen fontos olyan környezetekben, ahol az adatkommunikáció nem biztonságos csatornán történik, például az interneten. Az HMAC a hashfüggvények (mint például a SHA-256 vagy SHA-1) és egy titkos kulcs kombinációját használja annak érdekében, hogy egy egyedi „lenyomatot” (kódot) generáljon az adott üzenetről.
Alapfogalmak
Ahhoz, hogy megértsük, mi az HMAC és hogyan működik, előbb tisztázzunk néhány alapfogalmat:
1. Hashfüggvény
A hashfüggvény olyan matematikai algoritmus, amely tetszőleges hosszúságú bemenetet vesz, és abból egy fix hosszúságú kimenetet állít elő. A legismertebb hashfüggvények közé tartozik:
- MD5 (már elavult és nem biztonságos),
- SHA-1 (szintén gyengülő biztonságú),
- SHA-256, SHA-3 (erősebb, mai napig használatos algoritmusok).
A hashfüggvények alapvető tulajdonságai:
- Determinisztikusak (ugyanarra a bemenetre mindig ugyanaz a kimenet),
- Gyorsan kiszámíthatók,
- Nehéz visszafejteni (preimage resistance),
- Nehéz két bemenetet találni, amik ugyanazt a kimenetet adják (collision resistance).
2. Üzenethitelesítési kód (MAC)
A Message Authentication Code (MAC) célja, hogy egy adatcsomaghoz hitelesítési információt csatoljon, mely biztosítja, hogy:
- az üzenetet nem változtatták meg,
- az üzenet a megfelelő (titkos kulcsot ismerő) féltől származik.
A MAC-ek egyik népszerű típusa az HMAC.
Hogyan működik az HMAC?
Az HMAC működéséhez szükség van:
- egy titkos kulcsra (K),
- egy hashfüggvényre (pl. SHA-256),
- és az üzenetre (M), amit hitelesíteni szeretnénk.
Az HMAC működésének alapötlete: először a kulcsot és az üzenetet egy speciális módon kombináljuk, majd ezeket kétszer is „áthasholjuk”.
A hivatalos HMAC képlet:
HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M))
Ahol:
Ha kiválasztott hashfüggvény (pl. SHA-256),K'a kulcs kiegészítve vagy levágva a hashfüggvény blokk méretére (pl. 64 bájt SHA-256 esetén),ipadaz „inner padding” (0x36 bájtértékekből álló tömb),opadaz „outer padding” (0x5c bájtértékekből álló tömb),⊕XOR művelet (bitek összehasonlítása),||a bitek konkatenálása (egymás után fűzése).
Lépésről lépésre
- Kulcs előkészítése:
- Ha a kulcs hosszabb, mint a hashfüggvény blokk mérete, először hasheljük.
- Ha rövidebb, kiegészítjük nullákkal, hogy pontosan a blokk méretű legyen.
- Inner hash:
- A kulcsot XOR-oljuk az
ipad-dal, majd hozzáfűzzük az üzenetet, és az egészet hasheljük.
- A kulcsot XOR-oljuk az
- Outer hash:
- A kulcsot XOR-oljuk az
opad-dal, majd hozzáfűzzük az előző hash eredményét, és újra hasheljük.
- A kulcsot XOR-oljuk az
Az eredmény az HMAC kód, amelyet az üzenethez csatolhatunk. A címzett ugyanezt a folyamatot végrehajtva ellenőrizheti, hogy az üzenet valódi-e és érintetlen.
Miért biztonságos az HMAC?
Az HMAC védelmet nyújt két fő támadástípus ellen:
- Integritás-sértés:
Ha valaki módosítja az üzenetet, az új hash érték nem fog egyezni a várt HMAC-kal.
- Hamisítás:
Mivel az HMAC-hez szükséges a titkos kulcs ismerete, csak az tudja érvényes HMAC-et készíteni, aki ismeri a kulcsot.
A biztonság alapja tehát:
- a hashfüggvény kriptográfiai ereje (nincs hatékony módja az ütközések vagy visszafejtés megtalálásának),
- a titkos kulcs titkossága.
Felhasználási területek
Az HMAC-et széles körben használják az informatikai rendszerekben, többek között:
1. Hitelesített API-kommunikáció
Sok webszolgáltatás (pl. AWS, Azure, Google APIs) használ HMAC-et arra, hogy biztosítsa, a kérés egy jogosult ügyféltől származik. A kliens kiszámítja az üzenet HMAC-ját, és elküldi az üzenettel együtt. A szerver a saját kulcsával kiszámítja ugyanezt, és ha egyezik, elfogadja a kérést.
2. SSL/TLS protokoll
A biztonságos kommunikációt biztosító protokollok (mint az SSL és TLS) is használják az HMAC-et a kapcsolat során továbbított adatok hitelesítésére.
3. VPN-ek és IPsec
A virtuális magánhálózatok (VPN) és IPsec protokollokban is gyakori az HMAC a csomagok integritásának biztosítására.
4. Digitális aláírások alternatívája
Olyan környezetekben, ahol nincs szükség nyilvános kulcsú infrastruktúrára, az HMAC egy könnyebb, de hatékony alternatíva lehet digitális aláírásra.
Gyakori hashfüggvények HMAC-ben
- HMAC-MD5 (ma már nem ajánlott)
- HMAC-SHA1 (egyre kevésbé biztonságos, de még használatos)
- HMAC-SHA256 (széles körben elfogadott, biztonságos)
- HMAC-SHA512 (nagyobb biztonság, nagyobb teljesítményigény)
Előnyök és hátrányok
Előnyök
- Egyszerű implementálás – meglévő hashfüggvényekre épül,
- Hatékony – gyorsan számolható,
- Biztonságos – ha jó kulcs és erős hashfüggvény van mögötte,
- Széles körben elfogadott és szabványosított (pl. RFC 2104 szerint).
Hátrányok
- Szimmetrikus kulcsot igényel – a kulcsot minden résztvevőnek titokban kell tartani,
- Nem biztosít aláírási lehetőséget vagy visszakereshetőséget – nem használható nyilvános kulcsú aláírásként.
Összefoglalás
Az HMAC egy egyszerű, hatékony és biztonságos módja az üzenetek hitelesítésének és integritásellenőrzésének. A titkos kulcs és a hashfüggvény kombinációja miatt az adatok módosítása vagy hamisítása nagyon nehéz az illetéktelen támadók számára. Ezért az HMAC széles körben elterjedt a modern informatikai rendszerekben, különösen olyan környezetekben, ahol a biztonság kiemelten fontos.