CodeKitHub
Kodavimo įrankiai

HMAC generatorius

Paskutinį kartą atnaujinta:

Šis įrankis apskaičiuoja HMAC (Hash-based Message Authentication Code) iš slapto rakto ir pranešimo, naudodamas SHA-1, SHA-256, SHA-384 arba SHA-512 kaip pagrindinę maišos funkciją. Skirtingai nuo paprastos maišos, HMAC reikalauja bendro slapto rakto, todėl jis įrodo, kad pranešimas atėjo iš to, kas turi šį raktą, ir nebuvo pakeistas kelyje — būtent todėl API naudoja HMAC užklausoms pasirašyti, o webhookai — siuntėjui patikrinti. Viskas vyksta lokaliai, naudojant jūsų naršyklės integruotą Web Crypto API; jūsų slaptas raktas ir pranešimas niekada nesiunčiami į jokį serverį.

HMAC-SHA1
HMAC-SHA256
HMAC-SHA384
HMAC-SHA512

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

  1. Įveskite slaptą raktą lauke „Secret Key“.
  2. Įveskite pranešimą, kurį norite autentifikuoti, lauke „Message“.
  3. 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ų).
  4. Spustelėkite „Copy“ šalia reikiamo HMAC.

Pavyzdys

Įvestis

Secret Key: key
Message: The quick brown fox jumps over the lazy dog

Išvestis

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Tai 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.

AlgoritmasRezultato dydisTipinis naudojimas
HMAC-SHA1160 bitų (40 šešioliktainiai simboliai)Senos API, senesni OAuth 1.0a parašai
HMAC-SHA256256 bitų (64 šešioliktainiai simboliai)API užklausų pasirašymas, JWT HS256, webhook tikrinimas
HMAC-SHA384384 bitų (96 šešioliktainiai simboliai)Aukštesnio patikimumo parašai, kai reikalingas ilgesnis rezultatas
HMAC-SHA512512 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.

Susiję įrankiai