Generator HMAC
Izračunaj HMAC-SHA1, SHA-256, SHA-384 ali SHA-512 s ključem v besedilu, hex ali Base64, dobi izhod hex in Base64 ter preveri podpis webhooka v brskalniku.
Sporočilo je podpisano natančno tako, kot je vneseno, kodirano v UTF-8, vključno s presledki in prelomi vrstic.
- HMAC (šestnajstiško)
- HMAC (Base64)
- Glava podpisa webhooka (v slogu GitHub)
Primerjava poteka v konstantnem času, kot bi jo moral izvajati strežnik, zato porabljeni čas ne razkrije, koliko znakov se ujema.
Kako izračunati HMAC
- Prilepi Sporočilo. Pri webhooku mora biti to surovo telo zahteve, bajt za bajtom.
- Vnesi Skrivni ključ in izberi njegov Format ključa: Besedilo (UTF-8), Šestnajstiško ali Base64.
- Izberi Algoritem: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 ali HMAC-SHA512.
- Rezultat se osvežuje med tipkanjem; lahko tudi klikneš Ustvari HMAC. Dobiš HMAC (šestnajstiško), HMAC (Base64) in Glava podpisa webhooka (v slogu GitHub), vsakega z gumbom Kopiraj.
- Če želiš preveriti prejeti podpis, ga prilepi v Primerjaj s pričakovanim podpisom (hex, Base64 ali sha256=…). Orodje pove, ali se ujema.
Sporočilo je kodirano v UTF-8 natančno tako, kot je vneseno, vključno s presledki in prelomi vrstic. Izračun uporablja vmesnik Web Crypto API tvojega brskalnika; sporočilo in ključ nikoli ne zapustita tvoje naprave.
Kaj je HMAC
HMAC (koda za overjanje sporočila na osnovi zgoščevanja, RFC 2104) združuje skrivni ključ z zgoščevalno funkcijo:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
pri čemer je K′ ključ, dopolnjen na velikost bloka zgoščevalne funkcije (najprej zgoščen, če je daljši), ipad/opad pa sta stalni konstanti. Pravo kodo za sporočilo lahko ustvari samo tisti, ki pozna ključ, vsaka sprememba sporočila pa kodo popolnoma spremeni. Zato HMAC podpisujejo webhooke, zahteve API (na primer AWS Signature Version 4) in žetone JSON Web Token HS256.
HMAC ni šifriranje: sporočilo ni skrito. Ni tudi zgostitev gesla; za shranjevanje gesel uporabi počasno funkcijo, kot sta bcrypt ali Argon2.
Dolžina izhoda je odvisna od algoritma: 20 bajtov za SHA-1, 32 za SHA-256, 48 za SHA-384 in 64 za SHA-512. HMAC-SHA1 se kot MAC še vedno šteje za varnega, vendar za nove sisteme raje izberi SHA-256. Priporočen je naključen ključ, vsaj tako dolg kot izhod (32 bajtov za HMAC-SHA256); šestnajstiški ali Base64 ključi omogočajo neposreden vnos takih naključnih bajtov.
Preverjanje webhooka GitHub
GitHub vsako dostavo podpiše z geslom tvojega webhooka in rezultat pošlje v glavi X-Hub-Signature-256 kot sha256=, ki mu sledi šestnajstiški HMAC-SHA256 telesa. V GitHubovem primeru iz dokumentacije se uporabljata skrivnost It's a Secret to Everybody in telo Hello, World!; vnesi ju tu s HMAC-SHA256 in glava prikaže:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Polje za primerjavo sprejme celotno vrstico glave, vrednost sha256=… ali goli šestnajstiški ali Base64 podpis (Stripe, Shopify in Slack uporabljajo podobne sheme z lastnimi glavami in podpisanimi nizi). Za SHA-384 in SHA-512 orodje prikaže splošno glavo X-Signature, saj skupnega standarda ni.
Primerjava v konstantnem času
Strežnik, ki podpise primerja z navadno primerjavo nizov, se ustavi pri prvem različnem znaku. Z merjenjem odzivnih časov bi napadalec lahko ugibal veljaven podpis znak za znakom. Primerjava v tem orodju preveri vsak bajt, ne glede na rezultat, kot bi moral strežnik s crypto.timingSafeEqual v Node.js, hmac.compare_digest v Pythonu ali hash_equals v PHP.
Pogosta vprašanja
Zakaj se moj HMAC razlikuje od tistega, ki ga izračuna moj strežnik?
Običajni vzroki so drugačno sporočilo (strežnik podpiše surovo telo, ti pa si prilepil preoblikovan JSON ali pa se razlikujejo prelomi vrstic), ključ v napačnem Format ključa ali drug algoritem. Že en odvečen presledek spremeni ves rezultat.
Ali naj bo izhod hex ali Base64?
Oba kodirata iste bajte. GitHub uporablja hex, številni drugi vmesniki API, kot je Shopify, pa Base64. Uporabi tisti format, ki ga pričakuje sprejemni sistem.
Ali lahko uporabim prazen ključ?
Orodje ga sprejme in te opozori: s praznim ključem lahko vsakdo izračuna isti HMAC, zato nič ne dokazuje.
Ali je HMAC-SHA1 zlomljen kot SHA-1?
Napadi s trki na SHA-1 HMAC-SHA1 ne zlomijo, ki se še vedno šteje za varen MAC. Ostaja podprt za starejše sisteme, kot je stara glava X-Hub-Signature, novi sistemi pa naj uporabljajo HMAC-SHA256 ali močnejši.
Ali je moj skrivni ključ tu varen?
Ključ in sporočilo se obdelata samo v tvojem brskalniku in se nikoli ne pošljeta nikamor. Kljub temu s produkcijsko skrivnostjo ravnaj previdno in jo zamenjaj, če meniš, da je bila razkrita.
Sorodna orodja
- Generator zgoščenih vrednosti (hash) Ustvari zgoščene vrednosti MD5, SHA-1, SHA-256 in SHA-512 za besedilo ali datoteke poljubne velikosti in preveri kontrolne vsote. Deluje v brskalniku.
- Dekodiranje JWT Dekodiraj glavo in vsebino žetona JWT, preberi exp, iat in nbf kot datume ter lokalno v brskalniku preveri podpise HS256, RS256, PS256, ES256 ali EdDSA.
- Base64 kodirnik in dekodirnik Brezplačno kodiranje in dekodiranje Base64 s polno podporo za UTF-8 in možnostjo base64url. Deluje v brskalniku, nič se ne naloži na strežnik.
- Generator in preverjevalnik bcrypt Ustvari zgoščeno vrednost bcrypt s faktorjem 4–14, preveri geslo glede na obstoječo vrednost in oglej si različico, faktor, sol in zgostitev.