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
- Syötä salainen avaimesi "Secret Key"-kenttään.
- Syötä viesti, jonka haluat todentaa, "Message"-kenttään.
- 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).
- Napsauta "Copy" tarvitsemasi HMAC-arvon vieressä.
Esimerkki
Syöte
Secret Key: key
Message: The quick brown fox jumps over the lazy dogTuloste
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Tä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.
| Algoritmi | Tulosteen koko | Tyypillinen käyttö |
|---|---|---|
| HMAC-SHA1 | 160-bittinen (40 hex-merkkiä) | Vanhat API:t, vanhemmat OAuth 1.0a -allekirjoitukset |
| HMAC-SHA256 | 256-bittinen (64 hex-merkkiä) | API-pyyntöjen allekirjoitus, JWT HS256, webhook-vahvistus |
| HMAC-SHA384 | 384-bittinen (96 hex-merkkiä) | Korkeamman varmuuden allekirjoitukset, joissa vaaditaan pidempi tuloste |
| HMAC-SHA512 | 512-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.