HMAC-generaattori
Allekirjoita viesti salaisella avaimella. Mitään ei lähetetä.
- Toimii selaimessasi — tekstiäsi ei lähetetä minnekään
- Ei rekisteröitymistä, ei kiintiöitä, ilmainen käyttää niin usein kuin haluat
Näin se toimii
HMAC todistaa kaksi asiaa kerralla: että viestiä ei ole muutettu ja että sen tuottajalla on yhteinen salaisuus. Sillä allekirjoitetaan webhookit, rajapintapyynnöt ja latauslinkit suurimmassa osassa verkkoa.
Tavallisesta tiivisteestä eroaa olennaisella tavalla
Kuka tahansa voi laskea viestin SHA-256-tiivisteen, joten pelkkä tiiviste ei todista mitään sen tekijästä: muuta viestiä, laske tiiviste uudelleen, eikä kukaan huomaa eroa. HMAC sekoittaa laskentaan salaisen avaimen, joten sitä ei voi laskea uudelleen ilman avainta. Se on koko idea, ja siksi webhook-allekirjoituksissa käytetään HMAC:ia eikä tiivistettä.
Turvallinen tarkistus
Kun tarkistat HMAC:in palvelimella, vertaa sitä vakioaikaisella funktiolla: crypto.timingSafeEqual Node.js:ssä, hash_equals PHP:ssä. Tavallinen == palauttaa heti, kun kaksi tavua eroaa, ja siihen kuluva aika paljastaa, kuinka suuri osa allekirjoituksesta oli oikein, mikä riittää sellaisen väärentämiseen kärsivällisellä yrittämisellä. Hyökkäys on todellinen, ei teoreettinen.
Mikä algoritmi
SHA-256, ellei jokin muuta määrää. SHA-1 on mukana, koska monet vanhemmat rajapinnat vaativat edelleen HMAC-SHA-1:tä, eikä HMAC-SHA-1 ole murtunut samalla tavalla kuin pelkkä SHA-1 – mutta ei ole syytä valita sitä mihinkään uuteen.
Heksa vai Base64
Pelkästään kysymys siitä, mitä toinen osapuoli odottaa. Heksa on kaksi kertaa pidempi ja helpompi lukea; Base64 on tiiviimpi ja yleinen HTTP-otsakkeissa. Sama allekirjoitus näytetään molemmissa.
Avaimesi pysyy täällä
Luodaan selaimen oman Web Crypto API:n avulla. Avainta ja viestiä ei lähetetä minnekään, mikä on ainoa vastuullinen tapa tarjota tällainen työkalu – allekirjoitustyökalu, joka lähettää salaisuutesi palvelimelle, on luovuttanut juuri sen, mitä salaisuus suojaa.
HMAC-generaattori – kysymykset
Miten HMAC eroaa tiivisteestä?
Kuka tahansa voi laskea tiivisteen uudelleen. HMAC tarvitsee salaisen avaimen, joten se todistaa, kuka sen tuotti.
Mitä algoritmia minun pitäisi käyttää?
SHA-256, ellei rajapinta määrää toisin. SHA-1 on tarjolla vanhoille järjestelmille, jotka edelleen vaativat sitä.
Pitäisikö käyttää heksaa vai Base64:ää?
Sitä, mitä toinen osapuoli odottaa. Sama allekirjoitus näytetään molemmissa muodoissa.
Miksi vertailun pitää olla vakioaikainen?
Tavallinen vertailu päättyy heti ensimmäiseen eroavaan kohtaan, ja ajoituksen ero paljastaa, kuinka suuri osa oli oikein – tarpeeksi allekirjoituksen väärentämiseen.
Lähetetäänkö salainen avaimeni jonnekin?
Ei. Kaikki toimii selaimessasi Web Crypto API:n kautta.