CodeKitHub
Koodaustyökalut

HMAC-generaattori

Viimeksi päivitetty:

Tämä työkalu laskee HMAC-arvon (Hash-based Message Authentication Code) salaisesta avaimesta ja viestistä käyttäen SHA-1-, SHA-256-, SHA-384- tai SHA-512-algoritmia pohjana olevana tiivistefunktiona. Toisin kuin tavallinen tiiviste, HMAC vaatii jaetun salaisen avaimen, joten se todistaa, että viesti on peräisin avaimen haltijalta eikä sitä ole muutettu matkalla — juuri siksi API:t käyttävät HMAC:ia pyyntöjen allekirjoittamiseen ja webhookit sen todentamiseen, kuka lähetti hyötykuorman. Kaikki tapahtuu paikallisesti selaimesi sisäänrakennetun Web Crypto API:n kautta; salaista avaintasi ja viestiäsi ei koskaan lähetetä mihinkään palvelimelle.

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

Mikä tämä työkalu on?

HMAC tarkoittaa Hash-based Message Authentication Code -koodia. Se yhdistää salaisen avaimen viestiin ja standarditiivistefunktioon (kuten SHA-256) tuottaakseen kiinteän pituisen tiivisteen. Kuka tahansa, jolla on sama avain ja viesti, laskee täsmälleen saman HMAC-arvon — mutta ilman avainta on laskennallisesti mahdotonta tuottaa kelvollista HMAC-arvoa viestille, vaikka tuntisi käytetyn tiivistealgoritmin.

Tämä on keskeinen ero tavalliseen tiivisteeseen: tavallinen tiiviste (MD5, SHA-256 jne.) ottaa syötteenä vain viestin, joten kuka tahansa voi laskea sen, eikä se todista mitään sen luojasta. HMAC ottaa syötteenä viestin *ja* salaisen avaimen, joten kelvollinen HMAC todistaa, että lähettäjällä oli salaisuus hallussaan — se on todennusmekanismi, ei pelkkä eheystarkistus.

HMAC on virallisesti standardoitu NIST:n toimesta julkaisussa FIPS 198-1 ja määritelty internet-protokollille asiakirjassa IETF RFC 2104. Tämä työkalu laskee HMAC-arvot käyttäen selaimesi natiivia Web Crypto API:a (`crypto.subtle.sign` HMAC-algoritmilla), joka toteuttaa RFC 2104:n oikein sen sijaan, että käytettäisiin itse käsin kirjoitettua JavaScript-versiota.

Miksi käyttää sitä?

  • Allekirjoita API-pyyntöjä, jotta vastaanottava palvelin voi varmistaa, että pyyntö tuli jaetun salaisuuden haltijalta eikä sitä ole peukaloitu.
  • Vahvista webhook-hyötykuormat (Stripe, GitHub, Shopify ja vastaavat palvelut allekirjoittavat kaikki webhook-rungot HMAC-SHA256:lla).
  • Luo todennustokeneita tai kertakäyttökoodeja, jotka riippuvat jaetusta salaisuudesta.
  • Vertaa oman HMAC-toteutuksesi tulostetta tunnettuun oikeaan vertailuarvoon.
  • 100 % paikallinen: salainen avaimesi ja viestisi eivät koskaan poistu selaimesta, joten oikeiden salaisuuksien testaaminen on turvallista.

Käyttöohje

  1. Syötä salainen avaimesi "Secret Key"-kenttään.
  2. Syötä viesti, jonka haluat todentaa, "Message"-kenttään.
  3. HMAC-SHA1-, HMAC-SHA256-, HMAC-SHA384- ja HMAC-SHA512-tulokset luodaan välittömästi (valitse "Uppercase output", jos kohdejärjestelmäsi odottaa isoja kirjaimia).
  4. Napsauta "Copy" tarvitsemasi HMAC-arvon vieressä.

Esimerkki

Syöte

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

Tuloste

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Tämä on standardoitu, julkaistu testivektori: avaimella "key" ja tällä täsmällisellä viestillä HMAC-SHA256 ja HMAC-SHA1 tuottavat aina nämä arvot missä tahansa oikeassa toteutuksessa, joten voit varmistaa tämän työkalun tulosteen itsenäisesti.

HMAC vs. tavallinen tiiviste: milloin tarvitset avaimen

Ratkaiseva kysymys on: täytyykö sinun todistaa, kuka loi tämän tiivisteen, vai pelkästään, ettei sisältö ole muuttunut? Jos julkinen tarkistussumma riittää — ladatun tiedoston varmistaminen julkaisijan ilmoittamaa vastaavaksi, tietueiden monistuksenpoisto — tavallinen tiiviste toimii, ja kuka tahansa voi tarkistaa sen ilman avainta. Jos sinun täytyy todistaa, että tiiviste on voinut tulla vain tietyn salaisuuden haltijalta — API-kutsujan todentaminen, webhookin lähettäjän luottaminen — tarvitset HMAC:ia, koska tavallinen tiiviste antaa hyökkääjälle ilman salaisuutta samat mahdollisuudet väärentää kelvollinen tiiviste kuin todelliselle lähettäjälle.

Monialgoritminen tiivistegeneraattori · JWT-dekooderi · MD5-generaattori

Neljän HMAC-algoritmin vertailu

Kaikki neljä käyttävät samaa RFC 2104:n mukaista HMAC-rakennetta, eroten vain pohjana olevan tiivistefunktion ja siten tulosteen pituuden osalta.

AlgoritmiTulosteen kokoTyypillinen käyttö
HMAC-SHA1160-bittinen (40 hex-merkkiä)Vanhat API:t, vanhemmat OAuth 1.0a -allekirjoitukset
HMAC-SHA256256-bittinen (64 hex-merkkiä)API-pyyntöjen allekirjoitus, JWT HS256, webhook-vahvistus
HMAC-SHA384384-bittinen (96 hex-merkkiä)Korkeamman varmuuden allekirjoitukset, joissa vaaditaan pidempi tuloste
HMAC-SHA512512-bittinen (128 hex-merkkiä)Maksimipituiset tiivisteet korkean turvallisuuden sovelluksiin

Yleiset käyttötapaukset

  • Lähtevien API-pyyntöjen allekirjoittaminen jaetulla salaisuudella, jotta palvelin voi varmistaa kutsujan identiteetin.
  • Saapuvien webhook-hyötykuormien vahvistaminen (Stripe-Signature, GitHub X-Hub-Signature-256 ja vastaavat otsikot käyttävät kaikki HMAC-SHA256:ta).
  • HS256/HS384/HS512-algoritmilla allekirjoitetun JWT:n allekirjoitusosan luominen ja validointi.
  • Palvelin- tai asiakaspuolen HMAC-toteutuksen testaaminen odotettua tulostetta vasten ennen käyttöönottoa.

Usein kysytyt kysymykset

Mikä on HMAC?

HMAC (Hash-based Message Authentication Code) yhdistää salaisen avaimen viestiin tiivistefunktion avulla tuottaen tiivisteen, joka todistaa sekä viestin eheyden että lähettäjän hallussa olevan avaimen. Se on määritelty NIST:n FIPS 198-1- ja IETF:n RFC 2104 -asiakirjoissa.

Mikä ero on HMAC:lla ja tavallisella tiivisteellä?

Tavallinen tiiviste (SHA-256, MD5 jne.) ottaa syötteenä vain viestin — kuka tahansa voi laskea sen, joten se todistaa vain, ettei viesti ole vioittunut, ei sitä, kuka sen lähetti. HMAC ottaa syötteenä viestin ja salaisen avaimen: jos sinun täytyy todistaa, että viesti on peräisin tietyn salaisuuden haltijalta (API-allekirjoitus, webhookin lähettäjä), tarvitset HMAC:ia. Jos sinun tarvitsee vain tarkistaa, ettei tiedosto tai viesti ole muuttunut, etkä välitä lähettäjän todistamisesta, tavallinen tiiviste riittää.

Lähetetäänkö salainen avaimeni palvelimelle?

Ei. Tämä työkalu laskee HMAC-arvon kokonaan selaimessasi Web Crypto API:a käyttäen. Avaintasi ja viestiäsi ei koskaan lähetetä mihinkään — voit turvallisesti testata todellisia tuotantosalaisuuksia.

Kumpaa algoritmia minun pitäisi käyttää — SHA-1, SHA-256, SHA-384 vai SHA-512?

Käytä HMAC-SHA256:ta, ellei jokin tietty järjestelmä vaadi muuta — se on de facto -standardi API-allekirjoituksissa (käytössä AWS:llä, Stripellä, GitHub-webhookeissa ja useimmissa moderneissa API:issa) ja tarjoaa vahvan turvamarginaalin. HMAC-SHA1 on yhä yleinen vanhoissa järjestelmissä (kuten vanhemmissa OAuth 1.0a -toteutuksissa), mutta SHA-1:n pohjana olevaa tiivistettä pidetään heikompana; HMAC-SHA384/512:ta käytetään, kun tarvitaan erikseen pidempi tuloste tai lisäturvamarginaali.

Onko HMAC-SHA1 turvaton, koska tavallinen SHA-1 on murrettu?

Vuoden 2017 törmäyshyökkäykset SHA-1:tä vastaan murtivat SHA-1:n tavallisena tiivistefunktiona, mutta HMAC-SHA1:tä pidetään yhä kryptografisesti turvallisena, koska HMAC:n turvallisuus ei riipu törmäysresistenssistä samalla tavalla. Uusissa järjestelmissä kannattaa silti suosia HMAC-SHA256:ta tai korkeampaa — siitä ei ole käytännön haittaa, ja se välttää koko kysymyksen.

Mitkä ovat HMAC:n yleisiä käyttökohteita käytännössä?

REST-API-pyyntöjen allekirjoittaminen, jotta palvelin voi varmistaa, että kutsujalla on jaettu API-salaisuus; webhook-hyötykuormien vahvistaminen palveluilta kuten Stripe, GitHub ja Shopify, jotta tiedät pyynnön todella tulleen niiltä eikä se ole väärennetty; aikaperusteisten kertakäyttösalasanojen (TOTP/HOTP) luominen kaksivaiheiseen todennukseen; ja JWT-tokenien allekirjoittaminen HS256/HS384/HS512-algoritmeilla.

Liittyvät työkalut