HMAC generator
Izračunaj HMAC-SHA1, SHA-256, SHA-384 ili SHA-512 s tekstualnim, heks ili Base64 ključem, dobij heks i Base64 izlaz i provjeri potpis webhooka u pregledniku.
Poruka se potpisuje tačno onako kako je upisana, kodirana kao UTF-8, uključujući razmake i prelome redova.
- HMAC (heks)
- HMAC (Base64)
- Zaglavlje potpisa webhooka (GitHub stil)
Poređenje se izvršava u konstantnom vremenu, kako bi to trebao raditi server, pa utrošeno vrijeme ne otkriva koliko se znakova poklapa.
Kako izračunati HMAC
- Zalijepi Poruku. Za webhook to mora biti sirovo tijelo zahtjeva, bajt po bajt.
- Unesi Tajni ključ i odaberi njegov Format ključa: Tekst (UTF-8), Heksadecimalno ili Base64.
- Odaberi Algoritam: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 ili HMAC-SHA512.
- Rezultat se ažurira dok tipkaš; možeš kliknuti i Generiši HMAC. Dobijaš HMAC (heks), HMAC (Base64) i Zaglavlje potpisa webhooka (GitHub stil), svaki s dugmetom Kopiraj.
- Da provjeriš potpis koji si primio, zalijepi ga u Uporedi s očekivanim potpisom (heks, Base64 ili sha256=…). Alat kaže odgovara li.
Poruka se kodira kao UTF-8 tačno onako kako je upisana, uključujući razmake i prelome redova. Izračun koristi Web Crypto API tvog preglednika; poruka i ključ nikada ne napuštaju tvoj uređaj.
Šta je HMAC
HMAC (hash-based message authentication code, RFC 2104) kombinuje tajni ključ s heš funkcijom:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
gdje je K′ ključ dopunjen do veličine bloka heš funkcije (prvo se hešira ako je duži), a ipad/opad su fiksne konstante. Samo onaj ko zna ključ može proizvesti ispravan kod za poruku, a svaka promjena poruke potpuno mijenja kod. Zato HMAC-ovi potpisuju webhookove, API zahtjeve (na primjer AWS Signature Version 4) i JSON Web Tokene HS256.
HMAC nije šifrovanje: poruka nije skrivena. Nije ni heš lozinke; za pohranu lozinki koristi spor algoritam poput bcrypta ili Argon2.
Dužina izlaza zavisi od algoritma: 20 bajtova za SHA-1, 32 za SHA-256, 48 za SHA-384 i 64 za SHA-512. HMAC-SHA1 se i dalje smatra sigurnim kao MAC, ali za nove sisteme preferiraj SHA-256. Preporučuje se nasumičan ključ barem jednake dužine kao izlaz (32 bajta za HMAC-SHA256); heks ili Base64 ključevi omogućavaju direktan unos takvih nasumičnih bajtova.
Provjera GitHub webhooka
GitHub potpisuje svaku isporuku tvojom tajnom webhooka i šalje rezultat u zaglavlju X-Hub-Signature-256 kao sha256= iza kojeg slijedi heks HMAC-SHA256 tijela. Primjer iz GitHubove dokumentacije koristi tajnu It's a Secret to Everybody i tijelo Hello, World!; unesi ih ovdje s HMAC-SHA256 i zaglavlje prikazuje:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Polje za poređenje prihvata cijeli red zaglavlja, vrijednost sha256=… ili goli heks ili Base64 potpis (Stripe, Shopify i Slack koriste slične šeme s vlastitim zaglavljima i potpisanim nizovima). Za SHA-384 i SHA-512 alat prikazuje generičko zaglavlje X-Signature, jer ne postoji zajednički standard.
Poređenje u konstantnom vremenu
Server koji potpise poredi običnim poređenjem nizova staje na prvom različitom znaku. Mjerenjem vremena odgovora napadač bi mogao pogoditi ispravan potpis znak po znak. Poređenje u ovom alatu provjerava svaki bajt bez obzira na rezultat, kao što bi server trebao raditi pomoću crypto.timingSafeEqual u Node.js-u, hmac.compare_digest u Pythonu ili hash_equals u PHP-u.
Česta pitanja
Zašto se moj HMAC razlikuje od onog koji računa moj server?
Uobičajeni uzroci su drugačija poruka (server potpisuje sirovo tijelo, a ti si zalijepio preformatirani JSON, ili se razlikuju prelomi redova), ključ u pogrešnom Formatu ključa ili drugi algoritam. Čak i jedan suvišni razmak mijenja cijeli rezultat.
Treba li izlaz biti heks ili Base64?
Oba kodiraju iste bajtove. GitHub koristi heks, dok mnogi drugi API-ji, poput Shopifyja, koriste Base64. Koristi format koji očekuje sistem koji prima potpis.
Mogu li koristiti prazan ključ?
Alat ga prihvata i upozorava te: s praznim ključem svako može izračunati isti HMAC, pa on ništa ne dokazuje.
Je li HMAC-SHA1 probijen kao SHA-1?
Napadi kolizijama na SHA-1 ne probijaju HMAC-SHA1, koji se i dalje smatra sigurnim kao MAC. I dalje je podržan za naslijeđene sisteme, poput starog zaglavlja X-Hub-Signature, ali novi sistemi trebaju koristiti HMAC-SHA256 ili jači.
Je li moj tajni ključ ovdje siguran?
Ključ i poruka obrađuju se samo u tvom pregledniku i nikada se nigdje ne šalju. Ipak, s produkcijskom tajnom postupaj pažljivo i zamijeni je ako sumnjaš da je izložena.
Srodni alati
- Generator hasheva Generiši MD5, SHA-1, SHA-256 i SHA-512 heševe teksta ili datoteka bilo koje veličine i provjeri kontrolne zbirove. Sve radi u tvom pregledniku.
- JWT dekoder Dekodiraj zaglavlje i payload JWT tokena, pročitaj exp, iat i nbf kao datume te lokalno provjeri HS256, RS256, PS256, ES256 ili EdDSA potpis.
- Base64 koder i dekoder Besplatan Base64 koder i dekoder s punom podrškom za UTF-8 i opcijom base64url. Radi u pregledniku, ništa se ne šalje na server.
- Bcrypt generator i provjera Generiši bcrypt heš s faktorom troška od 4 do 14, provjeri lozinku prema postojećem hešu i vidi njegovu verziju, trošak, sol i sažetak.