HMAC generator
Izračunaj HMAC-SHA1, SHA-256, SHA-384 ili SHA-512 s tekstnim, hex ili Base64 ključem, dobij hex i Base64 izlaz i provjeri potpis webhooka u pregledniku.
Poruka se potpisuje točno onako kako je upisana, kodirana kao UTF-8, uključujući razmake i prijelome redaka.
- HMAC (hex)
- HMAC (Base64)
- Zaglavlje potpisa webhooka (u stilu GitHuba)
Usporedba se izvodi u konstantnom vremenu, kako bi je trebao raditi poslužitelj, pa utrošeno vrijeme ne otkriva koliko se znakova podudara.
Kako izračunati HMAC
- Zalijepi Poruka. Za webhook to mora biti sirovo tijelo zahtjeva, bajt po bajt.
- Upiši 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 osvježava dok tipkaš; možeš kliknuti i Generiraj HMAC. Dobivaš HMAC (hex), HMAC (Base64) i Zaglavlje potpisa webhooka (u stilu GitHuba), svaki s gumbom Kopiraj.
- Da provjeriš primljeni potpis, zalijepi ga u Usporedi s očekivanim potpisom (hex, Base64 ili sha256=…). Alat javlja podudara li se.
Poruka se kodira kao UTF-8 točno onako kako je upisana, uključujući razmake i prijelome redaka. Izračun koristi Web Crypto API tvog preglednika; poruka i ključ nikada ne napuštaju tvoj uređaj.
Što je HMAC
HMAC (kôd za provjeru autentičnosti poruke temeljen na hashu, RFC 2104) kombinira tajni ključ s hash funkcijom:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
pri čemu je K′ ključ dopunjen do veličine bloka hasha (najprije se sažima ako je dulji), a ipad/opad su fiksne konstante. Samo onaj tko zna ključ može proizvesti ispravan kôd za poruku, a svaka promjena poruke potpuno mijenja kôd. Zato HMAC-ovi potpisuju webhookove, API zahtjeve (na primjer AWS Signature Version 4) i JSON Web Tokene HS256.
HMAC nije šifriranje: poruka nije skrivena. Nije ni hash lozinke; za pohranu lozinki upotrijebi sporu funkciju poput bcrypta ili Argon2.
Duljina izlaza ovisi o algoritmu: 20 bajtova za SHA-1, 32 za SHA-256, 48 za SHA-384 i 64 za SHA-512. HMAC-SHA1 se kao MAC i dalje smatra sigurnim, ali za nove sustave preferiraj SHA-256. Preporučuje se nasumični ključ barem jednako dug kao izlaz (32 bajta za HMAC-SHA256); hex ili Base64 ključevi omogućuju da takve nasumične bajtove upišeš izravno.
Provjera GitHub webhooka
GitHub potpisuje svaku isporuku tvojom tajnom webhooka i šalje rezultat u zaglavlju X-Hub-Signature-256 kao sha256= iza kojeg slijedi hex HMAC-SHA256 tijela. Primjer iz GitHubove dokumentacije koristi tajnu It's a Secret to Everybody i tijelo Hello, World!; upiši ih ovdje s HMAC-SHA256 i zaglavlje prikazuje:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Polje za usporedbu prihvaća cijeli redak zaglavlja, vrijednost sha256=… ili goli hex ili Base64 potpis (Stripe, Shopify i Slack koriste slične sheme sa svojim zaglavljima i potpisanim nizovima). Za SHA-384 i SHA-512 alat prikazuje opće zaglavlje X-Signature, jer ne postoji zajednički standard.
Usporedba u konstantnom vremenu
Poslužitelj koji potpise uspoređuje običnom usporedbom nizova staje kod prvog različitog znaka. Mjerenjem vremena odgovora napadač bi mogao pogoditi valjan potpis znak po znak. Usporedba u ovom alatu ispituje svaki bajt bez obzira na rezultat, kao što bi poslužitelj 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 izračunava moj poslužitelj?
Uobičajeni uzroci su drukčija poruka (poslužitelj potpisuje sirovo tijelo, a ti si zalijepio preformatirani JSON, ili se razlikuju prijelomi redaka), ključ u pogrešnom Format ključa ili drugi algoritam. Čak i jedan suvišan razmak mijenja cijeli rezultat.
Treba li izlaz biti hex ili Base64?
Oboje kodira iste bajtove. GitHub koristi hex, dok mnogi drugi API-ji, poput Shopifyja, koriste Base64. Upotrijebi format koji očekuje sustav koji prima potpis.
Mogu li koristiti prazan ključ?
Alat ga prihvaća i upozorava te: s praznim ključem svatko može izračunati isti HMAC pa on ništa ne dokazuje.
Je li HMAC-SHA1 probijen kao SHA-1?
Napadi kolizijom na SHA-1 ne probijaju HMAC-SHA1, koji se kao MAC i dalje smatra sigurnim. Ostaje podržan za naslijeđene sustave poput starog zaglavlja X-Hub-Signature, ali novi sustavi 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 nikamo se ne šalju. Ipak, s produkcijskom tajnom postupaj pažljivo i promijeni je ako sumnjaš da je razotkrivena.
Slični alati
- Generator hasheva Generiraj MD5, SHA-1, SHA-256 i SHA-512 hasheve teksta ili datoteka bilo koje veličine i provjeri kontrolne zbrojeve. Sve radi u tvom pregledniku.
- JWT dekoder Dekodiraj zaglavlje i sadržaj JWT-a, pročitaj exp, iat i nbf kao datume te provjeri HS256, RS256, PS256, ES256 ili EdDSA potpis u pregledniku.
- Base64 koder i dekoder Besplatni Base64 koder i dekoder s potpunom UTF-8 podrškom i opcijom base64url. Radi u pregledniku, ništa se ne šalje na poslužitelj.
- Bcrypt generator i provjera Generiraj bcrypt hash s faktorom troška od 4 do 14, provjeri lozinku prema postojećem hashu i pogledaj njegovu verziju, trošak, sol i sažetak.