CodeKitHub
Alati za kodiranje

HMAC generator

Zadnje ažurirano:

Ovaj alat izračunava HMAC (Hash-based Message Authentication Code) iz tajnog ključa i poruke, koristeći SHA-1, SHA-256, SHA-384 ili SHA-512 kao temeljnu hash funkciju. Za razliku od običnog hasha, HMAC zahtijeva dijeljeni tajni ključ, pa dokazuje da je poruka došla od nekoga tko posjeduje taj ključ i da nije izmijenjena u prijenosu — upravo zato API-ji koriste HMAC za potpisivanje zahtjeva, a webhookovi za provjeru pošiljatelja sadržaja. Sve se izvodi lokalno putem ugrađenog Web Crypto API-ja vašeg preglednika; vaš tajni ključ i poruka nikada se ne šalju ni na jedan poslužitelj.

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

Što je ovaj alat?

HMAC znači Hash-based Message Authentication Code. Kombinira tajni ključ s porukom i standardnom hash funkcijom (poput SHA-256) kako bi proizveo digest fiksne duljine. Svatko tko ima isti ključ i poruku izračunat će potpuno isti HMAC — ali bez ključa je računski nemoguće proizvesti valjan HMAC za poruku, čak i ako se zna koji se hash algoritam koristi.

To je ključna razlika u odnosu na obični hash: obični hash (MD5, SHA-256 itd.) kao ulaz uzima samo poruku, pa ga svatko može izračunati i on ne dokazuje ništa o tome tko ga je stvorio. HMAC kao ulaz uzima poruku *i* tajni ključ, pa valjan HMAC dokazuje da je pošiljatelj posjedovao tajnu — to je mehanizam autentikacije, a ne samo provjera integriteta.

HMAC je formalno standardiziran od strane NIST-a u dokumentu FIPS 198-1 i definiran za internetske protokole u IETF RFC 2104. Ovaj alat izračunava HMAC-ove koristeći izvorni Web Crypto API vašeg preglednika (`crypto.subtle.sign` s HMAC algoritmom), koji ispravno implementira RFC 2104 umjesto ručno napisane JavaScript verzije.

Zašto ga koristiti?

  • Potpisujte API zahtjeve kako bi poslužitelj primatelj mogao provjeriti da zahtjev dolazi od posjednika dijeljene tajne i da nije mijenjan.
  • Provjerite sadržaje webhookova (Stripe, GitHub, Shopify i slične usluge potpisuju tijela webhookova pomoću HMAC-SHA256).
  • Generirajte autentikacijske tokene ili jednokratne kodove koji ovise o dijeljenoj tajni.
  • Usporedite izlaz vlastite implementacije HMAC-a s poznatom, ispravnom referentnom vrijednošću.
  • 100% lokalno: vaš tajni ključ i poruka nikada ne napuštaju preglednik, pa je sigurno testirati stvarne tajne.

Kako ga koristiti

  1. Unesite svoj tajni ključ u polje "Secret Key".
  2. Unesite poruku koju želite autenticirati u polje "Message".
  3. Rezultati HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 i HMAC-SHA512 generiraju se trenutno (označite "Uppercase output" ako vaš ciljni sustav očekuje velika slova).
  4. Kliknite "Copy" pored HMAC-a koji vam treba.

Primjer

Ulaz

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

Izlaz

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Ovo je standardni objavljeni testni vektor: s ključem "key" i ovom točnom porukom, HMAC-SHA256 i HMAC-SHA1 uvijek proizvode ove vrijednosti u bilo kojoj ispravnoj implementaciji, tako da možete neovisno provjeriti izlaz ovog alata.

HMAC nasuprot običnom hashu: kada vam treba ključ

Odlučujuće je pitanje: trebate li dokazati tko je stvorio ovaj digest, ili samo da se sadržaj nije promijenio? Ako je javna kontrolna suma dovoljna — provjera da preuzeta datoteka odgovara onome što je izdavač naveo, deduplikacija zapisa — obični hash funkcionira i svatko ga može provjeriti, bez ključa. Ako trebate dokazati da digest može proizvesti samo netko tko posjeduje određenu tajnu — autentikacija API pozivatelja, povjerenje u pošiljatelja webhooka — trebate HMAC, jer obični hash daje napadaču bez tajne istu mogućnost krivotvorenja valjanog digesta kao i pravom pošiljatelju.

Generator hasheva s više algoritama · JWT dekoder · MD5 generator

Usporedba četiri HMAC algoritma

Sva četiri koriste istu HMAC konstrukciju iz RFC 2104, razlikujući se samo po temeljnoj hash funkciji, a time i po duljini izlaza.

AlgoritamVeličina izlazaTipična upotreba
HMAC-SHA1160-bitni (40 hex znakova)Stariji API-ji, starije OAuth 1.0a potpise
HMAC-SHA256256-bitni (64 hex znaka)Potpisivanje API zahtjeva, JWT HS256, provjera webhookova
HMAC-SHA384384-bitni (96 hex znakova)Potpisi s višom razinom pouzdanosti gdje je potreban dulji izlaz
HMAC-SHA512512-bitni (128 hex znakova)Digesti maksimalne duljine za visoko sigurnosne primjene

Uobičajeni slučajevi upotrebe

  • Potpisivanje odlaznih API zahtjeva dijeljenom tajnom kako bi poslužitelj mogao provjeriti identitet pozivatelja.
  • Provjera dolaznih sadržaja webhookova (Stripe-Signature, GitHub X-Hub-Signature-256 i slična zaglavlja koriste HMAC-SHA256).
  • Generiranje i validacija dijela potpisa JWT-a potpisanog s HS256/HS384/HS512.
  • Testiranje da implementacija HMAC-a na strani poslužitelja ili klijenta odgovara očekivanom izlazu prije primjene.

Često postavljana pitanja

Što je HMAC?

HMAC (Hash-based Message Authentication Code) kombinira tajni ključ s porukom pomoću hash funkcije kako bi proizveo digest koji dokazuje i integritet poruke i da pošiljatelj posjeduje ključ. Definiran je u NIST FIPS 198-1 i IETF RFC 2104.

Koja je razlika između HMAC-a i običnog hasha?

Obični hash (SHA-256, MD5 itd.) kao ulaz uzima samo poruku — svatko ga može izračunati, pa dokazuje samo da poruka nije oštećena, ne i tko ju je poslao. HMAC kao ulaz uzima poruku i tajni ključ: ako trebate dokazati da je poruka došla od nekoga tko posjeduje određenu tajnu (API potpis, pošiljatelj webhooka), trebate HMAC. Ako samo trebate provjeriti da se datoteka ili poruka nije promijenila i ne zanima vas dokazivanje autorstva, dovoljan je obični hash.

Šalje li se moj tajni ključ na poslužitelj?

Ne. Ovaj alat izračunava HMAC u potpunosti u vašem pregledniku koristeći Web Crypto API. Vaš ključ i poruka nikada se nikamo ne prenose — možete sigurno testirati stvarne produkcijske tajne.

Koji algoritam trebam koristiti — SHA-1, SHA-256, SHA-384 ili SHA-512?

Koristite HMAC-SHA256 osim ako specifičan sustav ne zahtijeva drugačije — to je de facto standard za potpisivanje API-ja (koriste ga AWS, Stripe, GitHub webhookovi i većina modernih API-ja) i nudi snažnu sigurnosnu marginu. HMAC-SHA1 još je uvijek uobičajen u starijim sustavima (poput starijih implementacija OAuth 1.0a), ali temeljni hash SHA-1 smatra se slabijim; HMAC-SHA384/512 koriste se kada je posebno potreban dulji izlaz ili dodatna sigurnosna margina.

Je li HMAC-SHA1 nesiguran jer je obični SHA-1 probijen?

Napadi kolizijom iz 2017. probili su SHA-1 kao običnu hash funkciju, ali HMAC-SHA1 se i dalje smatra kriptografski ispravnim jer sigurnost HMAC-a ne ovisi o otpornosti na kolizije na isti način. Ipak, za nove sustave preferirajte HMAC-SHA256 ili viši — nema praktičnog nedostatka, a time se izbjegava cijelo pitanje.

Koje su uobičajene stvarne primjene HMAC-a?

Potpisivanje REST API zahtjeva kako bi poslužitelj mogao provjeriti da pozivatelj posjeduje dijeljenu API tajnu; provjera sadržaja webhookova od usluga poput Stripea, GitHuba i Shopifyja kako biste znali da zahtjev doista dolazi od njih i da nije krivotvoren; generiranje vremenski ograničenih jednokratnih lozinki (TOTP/HOTP) za dvofaktorsku autentikaciju; i potpisivanje JWT tokena algoritmima HS256/HS384/HS512.

Povezani alati