HMAC generator
Izračunaj HMAC-SHA1, SHA-256, SHA-384 ili SHA-512 sa ključem kao tekst, heks ili Base64, dobij heks i Base64 izlaz i proveri potpis webhooka u pregledaču.
Poruka se potpisuje tačno onako kako je upisana, kodirana u 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, kao što bi trebalo da radi server, pa utrošeno vreme ne otkriva koliko se znakova poklapa.
Kako da izračunaš HMAC
- Nalepi Poruka. Za webhook, to mora biti sirovo telo zahteva, bajt po bajt.
- Unesi Tajni ključ i izaberi njegov Format ključa: Tekst (UTF-8), Heksadecimalno ili Base64.
- Izaberi Algoritam: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 ili HMAC-SHA512.
- Rezultat se osvežava dok kucaš, a možeš i da klikneš Generiši HMAC. Dobijaš HMAC (heks), HMAC (Base64) i Zaglavlje potpisa webhooka (GitHub stil), svaki sa dugmetom Kopiraj.
- Da proveriš potpis koji si primio, nalepi ga u Uporedi sa očekivanim potpisom (heks, Base64 ili sha256=…). Alat kaže da li se poklapa.
Poruka se kodira u UTF-8 tačno onako kako je upisana, uključujući razmake i prelome redova. Izračunavanje koristi Web Crypto API tvog pregledača; poruka i ključ nikada ne napuštaju tvoj uređaj.
Šta je HMAC
HMAC (kod za potvrdu autentičnosti poruke zasnovan na heš funkciji, RFC 2104) kombinuje tajni ključ sa heš funkcijom:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
gde je K′ ključ dopunjen do veličine bloka heša (prvo se heširaju ako je duži), a ipad/opad su fiksne konstante. Samo onaj ko zna ključ može da proizvede ispravan kod za poruku, a svaka promena poruke potpuno menja kod. Zato HMAC-ovi potpisuju webhookove, API zahteve (na primer AWS Signature Version 4) i JSON Web Tokene tipa HS256.
HMAC nije šifrovanje: poruka nije sakrivena. Nije ni heš lozinke; za čuvanje lozinki koristi sporu funkciju poput bcrypt-a 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 bezbednim kao MAC, ali za nove sisteme radije koristi SHA-256. Preporučuje se nasumičan ključ bar onoliko dug koliki je izlaz (32 bajta za HMAC-SHA256); heks ili Base64 ključevi omogućavaju da takve nasumične bajtove uneseš direktno.
Provera GitHub webhooka
GitHub potpisuje svaku isporuku tvojom tajnom webhooka i šalje rezultat u zaglavlju X-Hub-Signature-256 kao sha256= iza kojeg sledi heks HMAC-SHA256 tela. Primer iz GitHubove dokumentacije koristi tajnu It's a Secret to Everybody i telo Hello, World!; unesi ih ovde sa HMAC-SHA256 i zaglavlje prikazuje:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Polje za poređenje prihvata ceo red zaglavlja, vrednost sha256=… ili goli heks ili Base64 potpis (Stripe, Shopify i Slack koriste slične šeme sa sopstvenim zaglavljima i potpisanim nizovima). Za SHA-384 i SHA-512 alat prikazuje opšte 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. Merenjem vremena odgovora napadač bi mogao da pogodi ispravan potpis znak po znak. Poređenje u ovom alatu ispituje svaki bajt bez obzira na ishod, kao što bi server trebalo da radi 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 server?
Uobičajeni uzroci su drugačija poruka (server potpisuje sirovo telo, a ti si nalepio ponovo formatiran JSON, ili se razlikuju prelomi redova), ključ u pogrešnom Format ključa ili drugi algoritam. Čak i jedan suvišni razmak menja ceo rezultat.
Da li izlaz treba da bude 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 da koristim prazan ključ?
Alat ga prihvata i upozorava te: sa praznim ključem svako može da izračuna isti HMAC, pa on ništa ne dokazuje.
Da li je HMAC-SHA1 probijen kao SHA-1?
Napadi kolizijom na SHA-1 ne razbijaju HMAC-SHA1, koji se i dalje smatra bezbednim kao MAC. I dalje je podržan za nasleđene sisteme, poput starog zaglavlja X-Hub-Signature, ali novi sistemi treba da koriste HMAC-SHA256 ili jači.
Da li je moj tajni ključ bezbedan ovde?
Ključ i poruka obrađuju se samo u tvom pregledaču i nikada se nigde ne šalju. Ipak, sa produkcionom tajnom postupaj pažljivo i zameni je ako misliš da je izložena.
Srodni alati
- Generator heševa (MD5, SHA-256) Generiši MD5, SHA-1, SHA-256 i SHA-512 heševe teksta ili fajlova bilo koje veličine i proveri kontrolne sume. Sve radi u tvom pregledaču.
- JWT dekoder Dekodiraj zaglavlje i sadržaj JWT-a, pročitaj exp, iat i nbf kao datume i proveri HS256, RS256, PS256, ES256 ili EdDSA potpis lokalno u pregledaču.
- Base64 kodiranje i dekodiranje Besplatan Base64 koder i dekoder sa punom podrškom za UTF-8 i opcijom base64url. Radi u tvom pregledaču, ništa se ne otprema na server.
- Bcrypt generator i provera lozinke Generiši bcrypt heš sa faktorom troška od 4 do 14, proveri lozinku prema postojećem hešu i vidi njegovu verziju, trošak, so i vrednost heša.