HMAC-generaattori
Laske HMAC-SHA1, SHA-256, SHA-384 tai SHA-512 teksti-, heksa- tai Base64-avaimella ja tarkista webhookin allekirjoitus selaimessa.
Viesti allekirjoitetaan täsmälleen kirjoitettuna UTF-8-koodattuna, välilyönnit ja rivinvaihdot mukaan lukien.
- HMAC (heksa)
- HMAC (Base64)
- Webhookin allekirjoitusotsikko (GitHub-tyyli)
Vertailu tehdään vakioajassa, kuten palvelimen pitäisi tehdä, joten kulunut aika ei paljasta, montako merkkiä täsmää.
Näin lasket HMACin
- Liitä Viesti. Webhookia varten sen on oltava pyynnön raakasisältö tavu tavulta.
- Syötä Salainen avain ja valitse sen Avaimen muoto: Teksti (UTF-8), Heksadesimaali tai Base64.
- Valitse Algoritmi: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 tai HMAC-SHA512.
- Tulos päivittyy kirjoittaessasi, ja voit myös napsauttaa Luo HMAC. Saat HMAC (heksa), HMAC (Base64) ja Webhookin allekirjoitusotsikon (GitHub-tyyli), kullekin oma Kopioi-painike.
- Jos haluat tarkistaa saamasi allekirjoituksen, liitä se kenttään Vertaa odotettuun allekirjoitukseen (heksa, Base64 tai sha256=…). Työkalu kertoo, täsmääkö se.
Viesti koodataan UTF-8:ksi täsmälleen kirjoitettuna, välilyönnit ja rivinvaihdot mukaan lukien. Laskenta käyttää selaimesi Web Crypto API:a, eivätkä viesti ja avain poistu laitteeltasi.
Mikä HMAC on
HMAC (hash-based message authentication code, RFC 2104) yhdistää salaisen avaimen ja tiivistefunktion:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
jossa K′ on tiivisteen lohkokokoon täytetty avain (tiivistetään ensin, jos se on pidempi) ja ipad/opad ovat kiinteitä vakioita. Vain avaimen tunteva voi tuottaa viestille oikean koodin, ja mikä tahansa viestin muutos muuttaa koodin kokonaan. Siksi HMACeilla allekirjoitetaan webhookit, API-pyynnöt (esimerkiksi AWS Signature Version 4) ja HS256-JSON Web Tokenit.
HMAC ei ole salausta: viesti ei piiloudu. Se ei myöskään ole salasanatiiviste. Salasanojen tallentamiseen käytä hidasta funktiota, kuten bcrypt tai Argon2.
Tulosteen pituus riippuu algoritmista: 20 tavua SHA-1:lle, 32 SHA-256:lle, 48 SHA-384:lle ja 64 SHA-512:lle. HMAC-SHA1:tä pidetään yhä turvallisena MAC-koodina, mutta uusissa järjestelmissä kannattaa suosia SHA-256:ta. Suositeltava avain on satunnainen ja vähintään tulosteen pituinen (32 tavua HMAC-SHA256:lle), ja heksa- tai Base64-avaimilla voit syöttää tällaiset satunnaiset tavut suoraan.
GitHub-webhookin tarkistaminen
GitHub allekirjoittaa jokaisen toimituksen webhook-salaisuudellasi ja lähettää tuloksen X-Hub-Signature-256-otsikossa muodossa sha256= ja sen perässä sisällön heksamuotoinen HMAC-SHA256. GitHubin oman dokumentaation esimerkissä käytetään salaisuutta It's a Secret to Everybody ja sisältöä Hello, World!; syötä ne tähän HMAC-SHA256:lla, niin otsikko näyttää:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Vertailukenttä hyväksyy koko otsikkorivin, sha256=…-arvon tai pelkän heksa- tai Base64-allekirjoituksen (Stripe, Shopify ja Slack käyttävät samankaltaisia malleja omine otsikkoineen ja allekirjoitettuine merkkijonoineen). SHA-384:lle ja SHA-512:lle työkalu näyttää yleisen X-Signature-otsikon, koska yhteistä standardia ei ole.
Vakioaikainen vertailu
Palvelin, joka vertaa allekirjoituksia tavallisella merkkijonovertailulla, pysähtyy ensimmäiseen eroavaan merkkiin. Mittaamalla vastausaikoja hyökkääjä voisi arvata kelvollisen allekirjoituksen merkki kerrallaan. Tämän työkalun vertailu tutkii jokaisen tavun tuloksesta riippumatta, kuten palvelimen pitäisi tehdä käyttämällä Node.js:ssä crypto.timingSafeEqual, Pythonissa hmac.compare_digest tai PHP:ssä hash_equals.
Usein kysytyt kysymykset
Miksi HMACini eroaa palvelimeni laskemasta?
Tavallisia syitä ovat eri viesti (palvelin allekirjoittaa raakasisällön, kun taas sinä liitit uudelleenmuotoillun JSONin tai rivinvaihdot eroavat), väärä Avaimen muoto tai eri algoritmi. Yksikin ylimääräinen välilyönti muuttaa koko tuloksen.
Pitäisikö tulosteen olla heksa vai Base64?
Molemmat koodaavat samat tavut. GitHub käyttää heksaa, kun taas monet muut rajapinnat, kuten Shopify, käyttävät Base64:ää. Käytä sitä muotoa, jota vastaanottava järjestelmä odottaa.
Voinko käyttää tyhjää avainta?
Työkalu hyväksyy sen ja varoittaa: tyhjällä avaimella kuka tahansa voi laskea saman HMACin, joten se ei todista mitään.
Onko HMAC-SHA1 murrettu kuten SHA-1?
SHA-1:n yhteentörmäyshyökkäykset eivät murra HMAC-SHA1:tä, jota pidetään yhä turvallisena MAC-koodina. Sitä tuetaan edelleen vanhoille järjestelmille, kuten vanhalle X-Hub-Signature-otsikolle, mutta uusien järjestelmien pitäisi käyttää HMAC-SHA256:ta tai vahvempaa.
Onko salainen avaimeni turvassa täällä?
Avain ja viesti käsitellään vain selaimessasi, eikä niitä lähetetä minnekään. Käsittele tuotantosalaisuutta silti huolellisesti ja vaihda se, jos epäilet sen paljastuneen.
Aiheeseen liittyvät työkalut
- Hash-generaattori Luo MD5-, SHA-1-, SHA-256- ja SHA-512-tiivisteet tekstistä tai minkä kokoisista tiedostoista tahansa ja tarkista tarkistussummat. Kaikki toimii selaimessa.
- JWT-dekooderi Pura JWT:n otsake ja sisältö, lue exp, iat ja nbf päivämäärinä ja tarkista HS256-, RS256-, PS256-, ES256- tai EdDSA-allekirjoitus selaimessasi.
- Base64-koodaus ja -purku Ilmainen Base64-koodaus ja -purku täydellä UTF-8-tuella ja URL-turvallisella base64url-vaihtoehdolla. Toimii selaimessa, mitään ei lähetetä palvelimelle.
- Bcrypt-generaattori ja -tarkistin Luo bcrypt-tiiviste kustannuskertoimella 4–14, tarkista salasana olemassa olevaa tiivistettä vasten ja katso version, kustannuksen, suolan ja tiivisteen osat.