Kaj je to orodje?
HMAC pomeni Hash-based Message Authentication Code. Združuje skrivni ključ s sporočilom in standardno zgoščevalno funkcijo (npr. SHA-256), da ustvari izvleček fiksne dolžine. Vsakdo z istim ključem in sporočilom bo izračunal popolnoma enak HMAC — brez ključa pa je računsko neizvedljivo ustvariti veljaven HMAC za sporočilo, tudi če poznate uporabljeni zgoščevalni algoritem.
To je ključna razlika od navadne zgoščene vrednosti: navadna zgoščena vrednost (MD5, SHA-256 itd.) kot vhod sprejme samo sporočilo, zato jo lahko izračuna kdorkoli in ne dokazuje ničesar o tem, kdo jo je ustvaril. HMAC sprejme sporočilo *in* skrivni ključ, zato veljaven HMAC dokazuje, da je pošiljatelj imel skrivnost — gre za mehanizem avtentikacije, ne le za preverjanje celovitosti.
HMAC je uradno standardiziran s strani NIST v FIPS 198-1 in opredeljen za internetne protokole v IETF RFC 2104. To orodje izračuna HMAC z uporabo nativnega Web Crypto API vašega brskalnika (`crypto.subtle.sign` z algoritmom HMAC), ki pravilno implementira RFC 2104, namesto ročno napisane različice v JavaScriptu.
Zakaj ga uporabiti?
- Podpišite API zahtevke, da lahko strežnik prejemnik preveri, da zahtevek prihaja od imetnika skupne skrivnosti in ni bil spremenjen.
- Preverite vsebine spletnih klicev (Stripe, GitHub, Shopify in podobne storitve vse podpisujejo telesa svojih webhookov s HMAC-SHA256).
- Ustvarite avtentikacijske žetone ali enkratne kode, ki so odvisni od skupne skrivnosti.
- Primerjajte izhod lastne implementacije HMAC z znano pravilno referenčno vrednostjo.
- 100 % lokalno: vaš skrivni ključ in sporočilo nikoli ne zapustita brskalnika, zato je varno testirati resnične skrivnosti.
Kako ga uporabljati
- Vnesite svoj skrivni ključ v polje »Secret Key«.
- Vnesite sporočilo, ki ga želite avtenticirati, v polje »Message«.
- Rezultati HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 in HMAC-SHA512 se ustvarijo takoj (obkljukajte »Uppercase output«, če vaš ciljni sistem pričakuje velike črke).
- Kliknite »Copy« ob HMAC-u, ki ga potrebujete.
Primer
Vnos
Secret Key: key
Message: The quick brown fox jumps over the lazy dogRezultat
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9To je standarden objavljen testni vektor: s ključem »key« in tem natančnim sporočilom HMAC-SHA256 in HMAC-SHA1 v vsaki pravilni implementaciji vedno ustvarita te vrednosti, zato lahko izhod tega orodja neodvisno preverite.
HMAC proti navadni zgoščeni vrednosti: kdaj potrebujete ključ
Odločilno vprašanje je: ali morate dokazati, kdo je ustvaril ta izvleček, ali le, da se vsebina ni spremenila? Če zadostuje javna kontrolna vsota — preverjanje, da prenesena datoteka ustreza tistemu, kar je navedel izdajatelj, odprava podvajanja zapisov — deluje navadna zgoščena vrednost in jo lahko preveri kdorkoli, brez ključa. Če morate dokazati, da bi izvleček lahko ustvaril le nekdo, ki poseduje določeno skrivnost — avtentikacija klicatelja API-ja, zaupanje pošiljatelju webhooka — potrebujete HMAC, ker navadna zgoščena vrednost napadalcu brez skrivnosti daje enako sposobnost ponarejanja veljavnega izvlečka kot pravemu pošiljatelju.
→ Multi-Algorithm Hash Generator · JWT Decoder · MD5 Generator
Primerjava štirih algoritmov HMAC
Vsi štirje uporabljajo enako konstrukcijo HMAC iz RFC 2104, razlikujejo pa se le v osnovni zgoščevalni funkciji in posledično dolžini izhoda.
| Algoritem | Velikost izhoda | Tipična uporaba |
|---|---|---|
| HMAC-SHA1 | 160-bitno (40 šestnajstiških znakov) | Starejši API-ji, starejši podpisi OAuth 1.0a |
| HMAC-SHA256 | 256-bitno (64 šestnajstiških znakov) | Podpisovanje API zahtevkov, JWT HS256, preverjanje webhookov |
| HMAC-SHA384 | 384-bitno (96 šestnajstiških znakov) | Podpisi z višjo stopnjo zanesljivosti, kjer je potreben daljši izhod |
| HMAC-SHA512 | 512-bitno (128 šestnajstiških znakov) | Izvlečki maksimalne dolžine za visoko varnostne aplikacije |
Pogosti primeri uporabe
- Podpisovanje odhodnih API zahtevkov s skupno skrivnostjo, da lahko strežnik preveri identiteto klicatelja.
- Preverjanje prihodnih vsebin webhookov (glave Stripe-Signature, GitHub X-Hub-Signature-256 in podobne vse uporabljajo HMAC-SHA256).
- Ustvarjanje in preverjanje podpisnega dela JWT, podpisanega s HS256/HS384/HS512.
- Testiranje, da vaša strežniška ali odjemalska implementacija HMAC ustreza pričakovanemu izhodu, preden jo uvedete.
Pogosta vprašanja
Kaj je HMAC?
HMAC (Hash-based Message Authentication Code) združuje skrivni ključ s sporočilom z uporabo zgoščevalne funkcije, da ustvari izvleček, ki dokazuje tako celovitost sporočila kot to, da pošiljatelj poseduje ključ. Opredeljen je v NIST FIPS 198-1 in IETF RFC 2104.
Kakšna je razlika med HMAC in navadno zgoščeno vrednostjo?
Navadna zgoščena vrednost (SHA-256, MD5 itd.) kot vhod sprejme samo sporočilo — izračuna jo lahko kdorkoli, zato dokazuje le, da sporočilo ni bilo pokvarjeno, ne pa kdo ga je poslal. HMAC sprejme sporočilo in skrivni ključ: če morate dokazati, da sporočilo prihaja od nekoga, ki poseduje določeno skrivnost (API podpis, pošiljatelj webhooka), potrebujete HMAC. Če morate le preveriti, da se datoteka ali sporočilo ni spremenilo, in vam ni mar za dokazovanje avtorstva, zadostuje navadna zgoščena vrednost.
Ali je moj skrivni ključ poslan na strežnik?
Ne. To orodje izračuna HMAC v celoti v vašem brskalniku z uporabo Web Crypto API. Vaš ključ in sporočilo nikoli nista poslana nikamor — varno lahko testirate resnične produkcijske skrivnosti.
Kateri algoritem naj uporabim — SHA-1, SHA-256, SHA-384 ali SHA-512?
Uporabite HMAC-SHA256, razen če določen sistem zahteva drugače — to je dejanski standard za podpisovanje API-jev (uporabljajo ga AWS, Stripe, webhooki GitHub in večina sodobnih API-jev) in ponuja trdno varnostno rezervo. HMAC-SHA1 je še vedno pogost v starejših sistemih (npr. starejših implementacijah OAuth 1.0a), vendar velja osnovna zgoščena vrednost SHA-1 za šibkejšo; HMAC-SHA384/512 se uporabljata tam, kjer je izrecno potreben daljši izhod ali dodatna varnostna rezerva.
Ali je HMAC-SHA1 nevaren, glede na to, da je navadni SHA-1 zlomljen?
Napadi s trkom iz leta 2017 so zlomili SHA-1 kot navadno zgoščevalno funkcijo, vendar HMAC-SHA1 še vedno velja za kriptografsko zanesljivega, ker varnost HMAC ni odvisna od odpornosti na trke na enak način. Kljub temu za nove sisteme raje uporabite HMAC-SHA256 ali višje — praktičnih slabosti ni, s tem pa se popolnoma izognete vprašanju.
Katere so pogoste dejanske uporabe HMAC?
Podpisovanje REST API zahtevkov, da lahko strežnik preveri, ali klicatelj poseduje skupno API skrivnost; preverjanje vsebin webhookov iz storitev, kot so Stripe, GitHub in Shopify, da veste, ali zahtevek res prihaja od njih in ni ponarejen; ustvarjanje časovno omejenih enkratnih gesel (TOTP/HOTP) za dvofaktorsko avtentikacijo; ter podpisovanje žetonov JWT z algoritmi HS256/HS384/HS512.