HMAC-generaator
Arvuta HMAC-SHA1, SHA-256, SHA-384 või SHA-512 teksti-, hex- või Base64-võtmega, saa hex- ja Base64-väljund ning kontrolli webhooki allkirja brauseris.
Sõnum allkirjastatakse täpselt nii, nagu see on kirjutatud, UTF-8-na kodeeritult, koos tühikute ja reavahetustega.
- HMAC (hex)
- HMAC (Base64)
- Webhooki allkirjapäis (GitHubi stiilis)
Võrdlus toimub konstantse ajaga, nagu server seda tegema peaks, nii et kulunud aeg ei reeda, mitu märki kattub.
Kuidas HMAC-i arvutada
- Kleebi Sõnum. Webhooki puhul peab see olema päringu toorsisu bait baidi haaval.
- Sisesta Salavõti ja vali selle Võtme vorming: Tekst (UTF-8), Kuueteistkümnendsüsteem või Base64.
- Vali Algoritm: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 või HMAC-SHA512.
- Tulemus uueneb kirjutamise ajal; võid klõpsata ka nuppu Loo HMAC. Saad HMAC (hex), HMAC (Base64) ja Webhooki allkirjapäis (GitHubi stiilis), igaühel nupp Kopeeri.
- Saadud allkirja kontrollimiseks kleebi see väljale Võrdle oodatud allkirjaga (hex, Base64 või sha256=…). Tööriist ütleb, kas see vastab.
Sõnum kodeeritakse UTF-8-na täpselt nii, nagu see on kirjutatud, sealhulgas tühikud ja reavahetused. Arvutus kasutab brauseri Web Crypto API-t; sõnum ja võti ei lahku sinu seadmest.
Mis on HMAC
HMAC (hash-based message authentication code, RFC 2104) ühendab salavõtme räsifunktsiooniga:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
kus K′ on räsi plokisuuruseni täidetud võti (kui see on pikem, räsitakse see esmalt) ning ipad/opad on fikseeritud konstandid. Ainult see, kes teab võtit, saab sõnumile õige koodi luua, ja sõnumi iga muutus muudab koodi täielikult. Seepärast allkirjastavad HMAC-id webhooke, API päringuid (näiteks AWS Signature Version 4) ja HS256 JSON Web Tokeneid.
HMAC ei ole krüpteerimine: sõnum ei ole peidetud. See ei ole ka parooliräsi; paroolide hoidmiseks kasuta aeglast funktsiooni nagu bcrypt või Argon2.
Väljundi pikkus sõltub algoritmist: SHA-1 puhul 20 baiti, SHA-256 puhul 32, SHA-384 puhul 48 ja SHA-512 puhul 64. HMAC-SHA1 loetakse MAC-ina endiselt turvaliseks, kuid uute süsteemide jaoks eelista SHA-256. Soovitatav on juhuslik võti, mis on vähemalt sama pikk kui väljund (HMAC-SHA256 puhul 32 baiti); hex- või Base64-võtmed võimaldavad sellised juhuslikud baidid otse sisestada.
GitHubi webhooki kontrollimine
GitHub allkirjastab iga edastuse sinu webhooki saladusega ja saadab tulemuse päises X-Hub-Signature-256 kujul sha256=, millele järgneb sisu hex-HMAC-SHA256. GitHubi enda dokumentatsiooni näites kasutatakse saladust It's a Secret to Everybody ja sisu Hello, World!; sisesta need siia algoritmiga HMAC-SHA256 ja päis näitab:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Võrdlusväli aktsepteerib kogu päisereat, väärtust sha256=… või paljast hex- või Base64-allkirja (Stripe, Shopify ja Slack kasutavad sarnaseid skeeme omaenda päiste ja allkirjastatavate stringidega). SHA-384 ja SHA-512 puhul näitab tööriist üldist päist X-Signature, sest ühist standardit ei ole.
Konstantse ajaga võrdlus
Server, mis võrdleb allkirju tavalise stringivõrdlusega, peatub esimesel erineval märgil. Vastuseaegu mõõtes võiks ründaja pakkuda kehtiva allkirja märk märgi haaval. Selle tööriista võrdlus uurib iga baiti tulemusest sõltumata, nagu server peaks tegema funktsiooniga crypto.timingSafeEqual Node.js-is, hmac.compare_digest Pythonis või hash_equals PHP-s.
Korduma kippuvad küsimused
Miks minu HMAC erineb serveri arvutatust?
Tavalised põhjused on erinev sõnum (server allkirjastab toorsisu, sina aga kleebisid ümber vormindatud JSON-i või reavahetused erinevad), vales Võtme vormingus võti või muu algoritm. Isegi üks lisatühik muudab kogu tulemuse.
Kas väljund peaks olema hex või Base64?
Mõlemad kodeerivad samu baite. GitHub kasutab hex-i, paljud muud API-d, näiteks Shopify, Base64. Kasuta seda vormingut, mida vastuvõttev süsteem ootab.
Kas saan kasutada tühja võtit?
Tööriist aktsepteerib seda ja hoiatab: tühja võtmega saab igaüks sama HMAC-i arvutada, seega ei tõesta see midagi.
Kas HMAC-SHA1 on murtud nagu SHA-1?
SHA-1 kokkupõrkerünnakud HMAC-SHA1 ei murra ja seda loetakse MAC-ina endiselt turvaliseks. See on toetatud pärandsüsteemide jaoks, näiteks vana päis X-Hub-Signature, kuid uued süsteemid peaksid kasutama HMAC-SHA256 või tugevamat.
Kas minu salavõti on siin turvaline?
Võtit ja sõnumit töödeldakse ainult sinu brauseris ning neid ei saadeta kuhugi. Siiski käsitle tootmissaladust ettevaatlikult ja vaheta see välja, kui arvad, et see on lekkinud.
Seotud tööriistad
- Räsigeneraator Loo teksti või mis tahes suurusega failide MD5, SHA-1, SHA-256 ja SHA-512 räsid ning kontrolli kontrollsummasid. Kõik töötab sinu brauseris.
- JWT dekooder Dekodeeri JWT päis ja sisu, vaata exp, iat ja nbf kuupäevadena ning kontrolli HS256, RS256, ES256 või EdDSA allkirja otse oma brauseris.
- Base64 kodeerija ja dekodeerija Tasuta Base64 kodeerija ja dekodeerija täieliku UTF-8 toe ning base64url valikuga. Töötab täielikult sinu brauseris, midagi ei saadeta serverisse.
- Bcrypt räsigeneraator ja kontrollija Loo bcrypt räsi kuluteguriga 4–14, kontrolli parooli olemasoleva räsi vastu ning vaata räsi versiooni, kulutegurit, soola ja kokkuvõtet. Töötab brauseris.