Přeskočit na obsah
TextArray

HMAC a hash pro podpisy API: ochrana webhooků

Blog /

Když vám služba třetí strany posílá data prostřednictvím webhooku nebo potřebujete ověřit požadavek API, potřebujete způsob, jak dokázat, že zpráva nebyla zmanipulována a skutečně přišla od toho, kdo to říká. Samotný hash to nevyřeší; potřebujete HMAC. Pochopení rozdílu mezi prostým hashem a HMAC a to, jak správně ověřovat podpisy, je rozdíl mezi zabezpečenou integrací a kompromitovanou integrací.

Co je hash

Hash je jednosměrná funkce, která změní jakýkoli vstup – text, soubor, odpověď API – na řetězec pevné délky. Stejný vstup vždy produkuje stejný výstup. Mezi běžné hashovací algoritmy patří SHA-256, SHA-1 a MD5. Můžete použít a hash generátor vidět to v akci: „ahoj“ se vždy stane stejným hashem SHA-256. Klíčovou vlastností je, že hašování je deterministické, ale nelze jej zvrátit; nemůžete obnovit původní vstup z hashe.

Co je HMAC

HMAC je zkratka pro Hash-based Message Authentication Code. Na rozdíl od prostého hashe kombinuje HMAC zprávu s tajným klíčem před hashováním. Poskytovatel webhooku má tajný klíč, hashuje zprávu s tímto klíčem a odešle zprávu a hash vám. Opakujete proces se stejným tajným klíčem; pokud se váš vypočítaný hash shoduje s odeslaným, víte, že zpráva je autentická a nezměněná. Generátor HMAC nástroj vám to umožní otestovat pomocí vaší vlastní zprávy a tajemství.

Kritický rozdíl: hash vs HMAC

Zde je důvod, proč na tom záleží:

Pokud vám služba pošle webhook pouze s hashem, útočník ho může zachytit, změnit data, přepočítat hash a vy byste si toho nevšimli. Pomocí HMAC a sdíleného tajného klíče nemůže útočník zfalšovat platný podpis bez klíče.

Ověřování podpisů webhooku ve vašem kódu

Když dorazí webhook, služba poskytne užitečné zatížení zprávy a hlavičku podpisu (často X-Signature nebo X-Webhook-Signature). Váš kód by měl:

  1. Získejte svůj tajný klíč ze zabezpečené konfigurace (proměnné prostředí, správce tajných informací).
  2. Pomocí tohoto klíče vypočítejte HMAC-SHA256 nezpracovaného těla požadavku.
  3. Porovnejte svůj vypočítaný HMAC bajt po bajtu s hlavičkou podpisu (vždy používejte srovnání v konstantním čase, abyste zabránili útokům načasování).
  4. Pokud se shodují, webhook je autentický. Pokud ne, odmítněte to.

Většina poskytovatelů webhooků dokumentuje svůj algoritmus HMAC a přesný formát k podpisu – někdy je to nezpracované tělo JSON, někdy časové razítko spojené s tělem. Postupujte přesně podle jejich specifikace.

HMAC vs JWT: kam se hodí

JWT (JSON Web Tokeny) jsou často zaměňovány s podpisy HMAC. JWT je samostatný token se třemi částmi: záhlaví, užitečné zatížení (nároky) a podpis. Podpis může být založen na HMAC nebo RSA. dekodéry JWT vám umožní zkontrolovat a ověřit tokeny. Zatímco HMAC ověřují jednu zprávu, JWT jsou tokeny, které ukládáte a odesíláte s každým požadavkem nebo voláním API. Pro webhooky a jednorázové ověřování zpráv je HMAC jednodušší a dostačující. Pro tokeny probíhající relace nebo přihlašovací údaje API je JWT často flexibilnější.

Ochrana osobních údajů: podepište a ověřte zcela ve svém prohlížeči

TextArray's HMAC and hash tools run entirely in your browser. Na server není nahrána žádná zpráva, tajemství ani podpis. Není vyžadován žádný účet a nástroje fungují po načtení stránky offline. Můžete bezpečně vložit datové části webhooku a klíče API pro testování a ladění podpisů, aniž byste data vystavili třetí straně nebo protokolovací službě. To je zvláště cenné, když během vývoje pracujete s citlivými klíči API nebo daty zákazníků.

Začínáme

Začněte pochopením hashování: použijte hash generátor abyste viděli, jak stejný vstup vždy produkuje stejný výstup SHA-256. Pak se přesuňte do generace HMAC abyste viděli, jak tajný klíč změní výstup. Zkuste mírně změnit klíč nebo zprávu; HMAC se úplně překlopí, na rozdíl od naivního kontrolního součtu. Jakmile pochopíte mechaniku, použijte ji ve své logice ověření webhooku. Pro citlivé užitečné zatížení jako zašifrovaný text nebo dekódované tokeny, vždy je spárujte s požadavky podepsanými HMAC, aby byla zaručena integrita a původ.