HMAC și hashing pentru semnăturile API: protejarea webhook-urilor
Când un serviciu terță parte vă trimite date prin webhook sau trebuie să autentificați o solicitare API, aveți nevoie de o modalitate de a demonstra că mesajul nu a fost modificat și că a venit cu adevărat de la cine spune că a făcut-o. Numai hashingul nu rezolvă acest lucru; ai nevoie de HMAC. Înțelegerea diferenței dintre un hash simplu și un HMAC și modul de verificare corectă a semnăturilor este diferența dintre o integrare sigură și una compromisă.
Ce este un hash
Un hash este o funcție unidirecțională care transformă orice intrare (text, fișier, răspuns API) într-un șir de lungime fixă. Aceeași intrare produce întotdeauna aceeași ieșire. Algoritmii de hashing obișnuiți includ SHA-256, SHA-1 și MD5. Puteți folosi a generator de hash pentru a vedea asta în acțiune: „bună ziua” devine întotdeauna același hash SHA-256. Proprietatea cheie este că hashingul este determinist, dar imposibil de inversat; nu puteți recupera intrarea inițială din hash.
Ce este HMAC
HMAC înseamnă codul de autentificare a mesajelor bazat pe hash. Spre deosebire de un hash simplu, HMAC combină un mesaj cu o cheie secretă înainte de hashing. Furnizorul de webhook are o cheie secretă, stochează mesajul cu cheia respectivă și vă trimite mesajul și hash-ul. Repetați procesul cu aceeași cheie secretă; dacă hash-ul calculat se potrivește cu cel trimis, știți că mesajul este autentic și nemodificat. The generator HMAC Instrumentul vă permite să testați acest lucru cu propriul mesaj și secret.
Diferența critică: hash vs HMAC
Iată de ce contează acest lucru:
- Hash simplu: Oricine vă poate vedea mesajul și recalcula hash-ul pentru a crea unul „valid”. Nu dovedeste nimic.
- HMAC: Doar cineva cu cheia secretă poate produce HMAC-ul corect. Acesta dovedește criptografic că mesajul a venit de la deținătorul cheii și nu a fost modificat.
Dacă un serviciu vă trimite un webhook doar cu un hash, un atacator îl poate intercepta, schimba datele, recalcula hash-ul și nu veți observa. Cu HMAC și un secret partajat, atacatorul nu poate falsifica o semnătură validă fără cheie.
Verificarea semnăturilor webhook în codul dvs
Când sosește un webhook, serviciul furnizează încărcătura utilă a mesajului și un antet de semnătură (adesea X-Signature sau X-Webhook-Signature). Codul dvs. ar trebui să:
- Preluați cheia secretă din configurația securizată (variabile de mediu, un manager secret).
- Calculați HMAC-SHA256 al corpului cererii brute folosind acea cheie.
- Comparați bit-cu-octet HMAC calculat cu antetul semnăturii (utilizați întotdeauna comparația în timp constant pentru a preveni atacurile de sincronizare).
- Dacă se potrivesc, webhook-ul este autentic. Dacă nu, respingeți-l.
Majoritatea furnizorilor de webhook își documentează algoritmul HMAC și formatul exact de semnat - uneori este vorba de corpul JSON brut, uneori de un marcaj temporal concatenat cu corpul. Urmărește-le exact specificațiile.
HMAC vs JWT: unde se potrivesc
JWT-urile (JSON Web Tokens) sunt adesea confundate cu semnăturile HMAC. Un JWT este un token autonom cu trei părți: un antet, o sarcină utilă (revendicări) și o semnătură. Semnătura poate fi bazată pe HMAC sau RSA. Decodoare JWT vă permite să inspectați și să verificați jetoanele. În timp ce HMAC-urile verifică un singur mesaj, JWT-urile sunt jetoane pe care le stocați și le trimiteți la fiecare solicitare sau apel API. Pentru webhook-uri și autentificarea unică a mesajelor, HMAC este mai simplu și suficient. Pentru jetoanele de sesiune în curs sau acreditările API, un JWT este adesea mai flexibil.
Confidențialitate: semnează și verifică în întregime în browser
Instrumentele HMAC și hash ale lui TextArray rulează în întregime în browserul dvs. Niciun mesaj, secret sau semnătură nu este încărcat pe un server. Nu este necesar niciun cont, iar instrumentele funcționează offline după ce pagina se încarcă. Puteți lipi în siguranță încărcături utile webhook și chei API pentru a testa și depana semnăturile fără a expune datele unei terțe părți sau unui serviciu de înregistrare. Acest lucru este deosebit de valoros atunci când lucrați cu chei API sensibile sau date despre clienți în timpul dezvoltării.
Noțiuni de bază
Începeți prin a înțelege hashingul: utilizați generator de hash pentru a vedea cum aceeași intrare produce întotdeauna aceeași ieșire SHA-256. Apoi trece la Generația HMAC pentru a vedea cum o cheie secretă modifică rezultatul. Încercați să schimbați ușor cheia sau mesajul; HMAC se întoarce complet, spre deosebire de o sumă de control naivă. După ce înțelegeți mecanica, aplicați-o logicii de verificare a webhook-ului. Pentru sarcini utile sensibile, cum ar fi text criptat sau jetoane decodificate, asociați-le întotdeauna cu solicitări semnate de HMAC pentru a garanta integritatea și originea.