HMAC i hashiranje za potpise API-ja: zaštita web-dojavnika
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:
- Obični hash: Svatko može vidjeti vašu poruku i ponovno izračunati hash kako bi krivotvorio "važeću". Ne dokazuje ništa.
- HMAC: Samo netko s tajnim ključem može proizvesti ispravan HMAC. Kriptografski dokazuje da je poruka došla od vlasnika ključa i da nije promijenjena.
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:
- Dohvatite svoj tajni ključ iz sigurne konfiguracije (varijable okruženja, tajni upravitelj).
- Izračunajte HMAC-SHA256 neobrađenog tijela zahtjeva koristeći taj ključ.
- Usporedite svoj izračunati HMAC bajt za bajt sa zaglavljem potpisa (uvijek koristite usporedbu konstantnog vremena kako biste spriječili vremenske napade).
- 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.