Preskočiť na obsah
TextArray

HMAC a hašovanie pre podpisy API: ochrana webhookov

Blog /

Keď vám služba tretej strany posiela údaje cez webhook alebo potrebujete overiť požiadavku API, potrebujete spôsob, ako dokázať, že správa nebola sfalšovaná a skutočne prišla od toho, kto to tvrdí. Samotné hashovanie to nerieši; potrebujete HMAC. Pochopenie rozdielu medzi obyčajným hashom a HMAC a ako správne overovať podpisy je rozdiel medzi zabezpečenou integráciou a kompromitovanou integráciou.

Čo je hash

Hash je jednosmerná funkcia, ktorá premení akýkoľvek vstup - text, súbor, odpoveď API - na reťazec s pevnou dĺžkou. Rovnaký vstup vždy produkuje rovnaký výstup. Bežné hashovacie algoritmy zahŕňajú SHA-256, SHA-1 a MD5. Môžete použiť a hash generátor vidieť to v akcii: „ahoj“ sa vždy stáva rovnakým hashom SHA-256. Kľúčovou vlastnosťou je, že hašovanie je deterministické, ale nemožno ho zvrátiť; nemôžete obnoviť pôvodný vstup z hashu.

Čo je HMAC

HMAC je skratka pre Hash-based Message Authentication Code. Na rozdiel od obyčajného hashu, HMAC kombinuje správu s tajným kľúčom pred hashovaním. Poskytovateľ webhooku má tajný kľúč, zahašuje správu s týmto kľúčom a odošle správu a hash vám. Opakujete proces s rovnakým tajným kľúčom; ak sa vypočítaný hash zhoduje s odoslaným, viete, že správa je autentická a nezmenená. Generátor HMAC nástroj vám to umožní otestovať pomocou vlastnej správy a tajomstva.

Kritický rozdiel: hash vs HMAC

Tu je dôvod, prečo je to dôležité:

Ak vám služba pošle webhook iba s hashom, útočník ho môže zachytiť, zmeniť údaje, prepočítať hash a vy by ste si to nevšimli. Pomocou HMAC a zdieľaného tajomstva nemôže útočník sfalšovať platný podpis bez kľúča.

Overenie podpisov webhooku vo vašom kóde

Keď príde webhook, služba poskytne užitočné zaťaženie správy a hlavičku podpisu (často X-Signature alebo X-Webhook-Signature). Váš kód by mal:

  1. Získajte svoj tajný kľúč zo zabezpečenej konfigurácie (premenné prostredia, tajný manažér).
  2. Pomocou tohto kľúča vypočítajte HMAC-SHA256 nespracovaného tela požiadavky.
  3. Porovnajte svoj vypočítaný HMAC bajt po bajte s hlavičkou podpisu (vždy používajte porovnanie v konštantnom čase, aby ste predišli útokom na čas).
  4. Ak sa zhodujú, webhook je autentický. Ak nie, odmietnite ho.

Väčšina poskytovateľov webhookov dokumentuje svoj algoritmus HMAC a presný formát na podpis - niekedy je to nespracované telo JSON, niekedy časová pečiatka spojená s telom. Presne dodržiavajte ich špecifikácie.

HMAC vs JWT: kam sa hodia

JWT (JSON Web Tokeny) sa často zamieňajú s podpismi HMAC. JWT je samostatný token s tromi časťami: hlavička, užitočné zaťaženie (nároky) a podpis. Podpis môže byť založený na HMAC alebo na RSA. dekodéry JWT vám umožní kontrolovať a overovať tokeny. Zatiaľ čo HMAC overujú jednu správu, JWT sú tokeny, ktoré ukladáte a odosielate s každou požiadavkou alebo volaním API. Pre webhooky a jednorazové overenie správ je HMAC jednoduchší a postačujúci. Pre tokeny prebiehajúcej relácie alebo poverenia API je JWT často flexibilnejší.

Ochrana osobných údajov: podpíšte sa a overte úplne vo svojom prehliadači

Nástroje HMAC a hash TextArray bežia výhradne vo vašom prehliadači. Na server nie je nahraná žiadna správa, tajomstvo ani podpis. Nevyžaduje sa žiadny účet a nástroje fungujú po načítaní stránky offline. Dáta webhooku a kľúče API môžete bezpečne prilepiť na testovanie a ladenie podpisov bez toho, aby ste údaje vystavili tretej strane alebo službe protokolovania. To je obzvlášť cenné, keď počas vývoja pracujete s citlivými kľúčmi API alebo údajmi o zákazníkoch.

Začíname

Začnite pochopením hashovania: použite hash generátor aby ste videli, ako ten istý vstup vždy vytvára rovnaký výstup SHA-256. Potom prejdite na generácie HMAC aby ste videli, ako tajný kľúč zmení výstup. Skúste mierne zmeniť kľúč alebo správu; HMAC sa úplne prevráti, na rozdiel od naivného kontrolného súčtu. Keď pochopíte mechaniku, aplikujte ju na logiku overenia webhooku. Pre citlivé zaťaženie ako napr zašifrovaný text alebo dekódované tokeny, vždy ich spárujte so žiadosťami podpísanými HMAC, aby ste zaručili integritu a pôvod.