Preskoči na sadržaj
TextArray

HMAC i hashiranje za potpise API-ja: zaštita web-dojavnika

Blog /

Kada vam usluga treće strane pošalje podatke putem webhooka ili trebate potvrditi autentičnost API zahtjeva, potreban vam je način da dokažete da poruka nije neovlašteno mijenjana i da je doista došla od onoga tko kaže da jest. Samo raspršivanje ne rješava ovo; trebate HMAC. Razumijevanje razlike između običnog raspršivanja i HMAC-a, te kako ispravno provjeriti potpise, razlika je između sigurne integracije i one ugrožene.

Što je hash

Raspršivanje je jednosmjerna funkcija koja pretvara bilo koji unos - tekst, datoteku, API odgovor - u niz fiksne duljine. Isti input uvijek proizvodi isti output. Uobičajeni algoritmi raspršivanja uključuju SHA-256, SHA-1 i MD5. Možete koristiti a hash generator da vidite ovo na djelu: "hello" uvijek postaje isti SHA-256 hash. Ključno svojstvo je da je hashiranje determinističko, ali ga je nemoguće poništiti; ne možete vratiti izvorni unos iz hash-a.

Što je HMAC

HMAC je kratica za Hash-based Message Authentication Code. Za razliku od običnog raspršivanja, HMAC kombinira poruku s tajnim ključem prije raspršivanja. Pružatelj webhooka ima tajni ključ, hashira poruku s tim ključem i šalje poruku i hash vama. Ponovite postupak s istim tajnim ključem; ako se vaš izračunati hash podudara s poslanim, znate da je poruka autentična i nepromijenjena. The HMAC generator Alat vam omogućuje da to testirate pomoću vlastite poruke i tajne.

Kritična razlika: hash vs HMAC

Evo zašto je ovo važno:

Ako vam usluga pošalje webhook samo s hashom, napadač ga može presresti, promijeniti podatke, ponovno izračunati hash, a vi to ne biste primijetili. Uz HMAC i dijeljenu tajnu, napadač ne može krivotvoriti valjani potpis bez ključa.

Provjera potpisa webhooka u vašem kodu

Kada stigne webhook, usluga pruža sadržaj poruke i zaglavlje potpisa (često X-Signature ili X-Webhook-Signature). Vaš kod bi trebao:

  1. Dohvatite svoj tajni ključ iz sigurne konfiguracije (varijable okruženja, tajni upravitelj).
  2. Izračunajte HMAC-SHA256 neobrađenog tijela zahtjeva koristeći taj ključ.
  3. Usporedite svoj izračunati HMAC bajt za bajt sa zaglavljem potpisa (uvijek koristite usporedbu konstantnog vremena kako biste spriječili vremenske napade).
  4. Ako se podudaraju, webhook je autentičan. Ako nije, odbijte ga.

Većina pružatelja webhookova dokumentira svoj HMAC algoritam i točan format za potpisivanje—ponekad je to neobrađeno JSON tijelo, ponekad vremenska oznaka spojena s tijelom. Točno slijedite njihove specifikacije.

HMAC protiv JWT: gdje se uklapaju

JWT (JSON web tokeni) često se brkaju s HMAC potpisima. JWT je samostalni token s tri dijela: zaglavlje, korisni teret (zahtjevi) i potpis. Potpis se može temeljiti na HMAC-u ili RSA-u. JWT dekoderi omogućuju pregled i provjeru tokena. Dok HMAC-ovi provjeravaju jednu poruku, JWT-ovi su tokeni koje pohranjujete i šaljete uz svaki zahtjev ili API poziv. Za webhookove i jednokratnu autentifikaciju poruka, HMAC je jednostavniji i dovoljan. Za tokene sesije u tijeku ili vjerodajnice API-ja, JWT je često fleksibilniji.

Privatnost: potpišite i potvrdite u potpunosti u svom pregledniku

TextArray HMAC i alati za raspršivanje rade u potpunosti u vašem pregledniku. Na poslužitelj se ne učitava poruka, tajna ili potpis. Račun nije potreban, a alati rade offline nakon učitavanja stranice. Možete sigurno zalijepiti korisni sadržaj web-dojavnika i API ključeve za testiranje i otklanjanje pogrešaka u potpisima bez izlaganja podataka trećoj strani ili usluzi zapisivanja. Ovo je posebno vrijedno kada radite s osjetljivim API ključevima ili podacima o korisnicima tijekom razvoja.

Početak rada

Počnite s razumijevanjem hashiranja: koristite hash generator da vidimo kako isti ulaz uvijek proizvodi isti SHA-256 izlaz. Zatim prijeđite na HMAC generacija da vidite kako tajni ključ mijenja izlaz. Pokušajte lagano promijeniti ključ ili poruku; HMAC se potpuno okrene, za razliku od naivnog kontrolnog zbroja. Nakon što shvatite mehaniku, primijenite je na svoju logiku provjere web-dojavnika. Za osjetljiva korisna opterećenja poput šifrirani tekst ili dekodirane žetone, uvijek ih uparite sa zahtjevima koje je potpisao HMAC kako biste jamčili integritet i podrijetlo.