Kas yra šis įrankis?
HMAC reiškia Hash-based Message Authentication Code. Jis sujungia slaptą raktą su pranešimu ir standartine maišos funkcija (pvz., SHA-256), kad gautų fiksuoto ilgio santrauką. Bet kas, turintis tą patį raktą ir pranešimą, apskaičiuos lygiai tokį patį HMAC — tačiau neturint rakto, praktiškai neįmanoma sukurti galiojančio HMAC pranešimui, net žinant naudojamą maišos algoritmą.
Tai pagrindinis skirtumas nuo paprastos maišos: paprasta maiša (MD5, SHA-256 ir kt.) kaip įvestį priima tik pranešimą, todėl bet kas gali ją apskaičiuoti ir ji nieko neįrodo apie tai, kas ją sukūrė. HMAC priima pranešimą *ir* slaptą raktą, todėl galiojantis HMAC įrodo, kad siuntėjas turėjo slaptą raktą — tai autentifikavimo mechanizmas, o ne vien vientisumo patikra.
HMAC oficialiai standartizuotas NIST dokumente FIPS 198-1 ir apibrėžtas interneto protokolams dokumente IETF RFC 2104. Šis įrankis apskaičiuoja HMAC naudodamas jūsų naršyklės natyvų Web Crypto API (`crypto.subtle.sign` su HMAC algoritmu), kuris teisingai įgyvendina RFC 2104, o ne pačiam parašytą JavaScript versiją.
Kodėl jį naudoti?
- Pasirašykite API užklausas, kad priimantis serveris galėtų patikrinti, jog užklausa atėjo iš bendro slapto rakto turėtojo ir nebuvo pakeista.
- Patikrinkite webhook duomenis (Stripe, GitHub, Shopify ir panašios paslaugos webhook turinį pasirašo HMAC-SHA256).
- Generuokite autentifikavimo žetonus ar vienkartinius kodus, priklausančius nuo bendro slapto rakto.
- Palyginkite savo HMAC realizacijos rezultatą su žinoma teisinga atskaitos verte.
- 100% lokaliai: jūsų slaptas raktas ir pranešimas niekada nepalieka naršyklės, todėl saugu testuoti realias paslaptis.
Kaip naudoti
- Įveskite slaptą raktą lauke „Secret Key“.
- Įveskite pranešimą, kurį norite autentifikuoti, lauke „Message“.
- HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 ir HMAC-SHA512 rezultatai sugeneruojami akimirksniu (pažymėkite „Uppercase output“, jei jūsų sistemai reikia didžiųjų raidžių).
- Spustelėkite „Copy“ šalia reikiamo HMAC.
Pavyzdys
Įvestis
Secret Key: key
Message: The quick brown fox jumps over the lazy dogIšvestis
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Tai standartinis paskelbtas testinis vektorius: naudojant raktą „key“ ir šį tikslų pranešimą, HMAC-SHA256 ir HMAC-SHA1 bet kurioje teisingoje realizacijoje visada duoda šias reikšmes, todėl galite nepriklausomai patikrinti šio įrankio rezultatą.
HMAC ir paprasta maiša: kada reikalingas raktas
Lemiamas klausimas yra: ar jums reikia įrodyti, kas sukūrė šią santrauką, ar tik tai, kad turinys nepasikeitė? Jei pakanka viešos kontrolinės sumos — patikrinti, ar atsisiųstas failas atitinka tai, ką nurodė leidėjas, ar pašalinti pasikartojančius įrašus — paprasta maiša veikia, ir bet kas gali ją patikrinti be rakto. Jei jums reikia įrodyti, kad santrauką galėjo sukurti tik kažkas, turintis konkretų raktą — autentifikuojant API iškvietėją, pasitikint webhook siuntėju — jums reikia HMAC, nes paprasta maiša suteikia užpuolikui be jokios paslapties tokią pačią galimybę suklastoti galiojančią santrauką kaip ir tikram siuntėjui.
→ Daugiaalgoritminis maišos generatorius · JWT dekoderis · MD5 generatorius
Keturių HMAC algoritmų palyginimas
Visi keturi naudoja tą pačią HMAC konstrukciją iš RFC 2104, skirdamiesi tik pagrindine maišos funkcija ir dėl to — rezultato ilgiu.
| Algoritmas | Rezultato dydis | Tipinis naudojimas |
|---|---|---|
| HMAC-SHA1 | 160 bitų (40 šešioliktainiai simboliai) | Senos API, senesni OAuth 1.0a parašai |
| HMAC-SHA256 | 256 bitų (64 šešioliktainiai simboliai) | API užklausų pasirašymas, JWT HS256, webhook tikrinimas |
| HMAC-SHA384 | 384 bitų (96 šešioliktainiai simboliai) | Aukštesnio patikimumo parašai, kai reikalingas ilgesnis rezultatas |
| HMAC-SHA512 | 512 bitų (128 šešioliktainiai simboliai) | Ilgiausios santraukos didelio saugumo programoms |
Dažni naudojimo atvejai
- Siunčiamų API užklausų pasirašymas bendru slaptu raktu, kad serveris galėtų patikrinti iškvietėjo tapatybę.
- Gaunamų webhook duomenų tikrinimas (Stripe-Signature, GitHub X-Hub-Signature-256 ir panašios antraštės naudoja HMAC-SHA256).
- JWT, pasirašyto HS256/HS384/HS512, parašo dalies generavimas ir tikrinimas.
- Serverio ar kliento pusės HMAC realizacijos patikrinimas prieš diegiant, ar ji atitinka laukiamą rezultatą.
Dažniausiai užduodami klausimai
Kas yra HMAC?
HMAC (Hash-based Message Authentication Code) sujungia slaptą raktą su pranešimu naudodamas maišos funkciją, kad sukurtų santrauką, įrodančią tiek pranešimo vientisumą, tiek tai, kad siuntėjas turi raktą. Jis apibrėžtas NIST FIPS 198-1 ir IETF RFC 2104 dokumentuose.
Kuo skiriasi HMAC ir paprasta maiša?
Paprasta maiša (SHA-256, MD5 ir kt.) kaip įvestį priima tik pranešimą — bet kas gali ją apskaičiuoti, todėl ji tik įrodo, kad pranešimas nebuvo sugadintas, bet ne tai, kas jį siuntė. HMAC priima pranešimą ir slaptą raktą: jei jums reikia įrodyti, kad pranešimas atėjo iš kažko, turinčio konkretų raktą (API parašas, webhook siuntėjas), jums reikia HMAC. Jei jums tik reikia patikrinti, ar failas ar pranešimas nepasikeitė, ir nesvarbu autorystės įrodymas, pakanka paprastos maišos.
Ar mano slaptas raktas siunčiamas į serverį?
Ne. Šis įrankis apskaičiuoja HMAC visiškai jūsų naršyklėje naudodamas Web Crypto API. Jūsų raktas ir pranešimas niekur nesiunčiami — galite saugiai testuoti realias gamybos paslaptis.
Kurį algoritmą naudoti — SHA-1, SHA-256, SHA-384 ar SHA-512?
Naudokite HMAC-SHA256, nebent konkreti sistema reikalauja kitaip — tai faktinis API pasirašymo standartas (naudojamas AWS, Stripe, GitHub webhookuose ir daugelyje šiuolaikinių API) ir suteikia stiprų saugumo rezervą. HMAC-SHA1 vis dar dažnas senesnėse sistemose (pvz., senesnėse OAuth 1.0a realizacijose), tačiau SHA-1 pagrindinė maiša laikoma silpnesne; HMAC-SHA384/512 naudojami, kai konkrečiai reikalingas ilgesnis rezultatas ar papildomas saugumo rezervas.
Ar HMAC-SHA1 nesaugus, nes paprastas SHA-1 yra sulaužytas?
2017 m. kolizijų atakos prieš SHA-1 sulaužė SHA-1 kaip paprastą maišos funkciją, tačiau HMAC-SHA1 vis dar laikomas kriptografiškai patikimu, nes HMAC saugumas nepriklauso nuo atsparumo kolizijoms tokiu pačiu būdu. Vis dėlto naujoms sistemoms rekomenduojama rinktis HMAC-SHA256 ar aukštesnį — tai neturi jokių praktinių trūkumų ir visiškai išvengia šio klausimo.
Kokie yra dažniausi realaus pasaulio HMAC panaudojimo atvejai?
REST API užklausų pasirašymas, kad serveris galėtų patikrinti, ar iškvietėjas turi bendrą API paslaptį; webhook duomenų iš paslaugų, tokių kaip Stripe, GitHub ir Shopify, tikrinimas, kad žinotumėte, jog užklausa tikrai atėjo iš jų ir nebuvo suklastota; laiku pagrįstų vienkartinių slaptažodžių (TOTP/HOTP) generavimas dviejų faktorių autentifikavimui; ir JWT žetonų pasirašymas HS256/HS384/HS512 algoritmais.