HMAC i haszowanie podpisów API: ochrona webhooków
Gdy usługa strony trzeciej wysyła dane za pośrednictwem webhooka lub musisz uwierzytelnić żądanie API, potrzebujesz sposobu, aby udowodnić, że wiadomość nie została zmodyfikowana i naprawdę pochodzi od tego, kto tak twierdzi. Samo haszowanie nie rozwiązuje tego problemu; potrzebujesz HMAC-a. Zrozumienie różnicy między zwykłym skrótem a HMAC oraz tym, jak poprawnie weryfikować podpisy, to różnica między bezpieczną integracją a integracją zagrożoną.
Co to jest hash
Hash to funkcja jednokierunkowa, która zamienia dowolne dane wejściowe — tekst, plik, odpowiedź API — na ciąg znaków o stałej długości. To samo wejście zawsze daje ten sam wynik. Typowe algorytmy mieszające obejmują SHA-256, SHA-1 i MD5. Możesz użyć A generator skrótu aby zobaczyć to w akcji: „cześć” zawsze staje się tym samym skrótem SHA-256. Kluczową właściwością jest to, że mieszanie jest deterministyczne, ale niemożliwe do odwrócenia; nie można odzyskać oryginalnych danych wejściowych z skrótu.
Co to jest HMAC
HMAC oznacza kod uwierzytelniania wiadomości oparty na haszu. W przeciwieństwie do zwykłego skrótu, HMAC łączy wiadomość z tajnym kluczem przed mieszaniem. Dostawca webhooka ma tajny klucz, miesza wiadomość za pomocą tego klucza i wysyła wiadomość wraz z hashem do Ciebie. Powtarzasz proces z tym samym tajnym kluczem; jeśli obliczony skrót odpowiada wysłanemu, wiesz, że wiadomość jest autentyczna i niezmodyfikowana. The generator HMAC narzędzie pozwala przetestować to za pomocą własnej wiadomości i sekretu.
Krytyczna różnica: hash vs HMAC
Oto dlaczego to ma znaczenie:
- Zwykły skrót: Każdy może zobaczyć Twoją wiadomość i ponownie obliczyć skrót, aby utworzyć „prawidłowy”. To niczego nie udowadnia.
- HMAC: Tylko osoba posiadająca tajny klucz może wygenerować poprawny kod HMAC. Kryptograficznie potwierdza, że wiadomość pochodzi od posiadacza klucza i nie została zmieniona.
Jeśli usługa wyśle Ci webhook zawierający tylko skrót, osoba atakująca może go przechwycić, zmienić dane, ponownie obliczyć skrót, a Ty tego nie zauważysz. Dzięki HMAC i wspólnemu sekretowi osoba atakująca nie może sfałszować prawidłowego podpisu bez klucza.
Weryfikowanie podpisów webhook w kodzie
Po nadejściu elementu webhook usługa udostępnia ładunek wiadomości i nagłówek podpisu (często X-Signature Lub X-Webhook-Signature). Twój kod powinien:
- Odzyskaj swój tajny klucz z bezpiecznej konfiguracji (zmienne środowiskowe, tajny menedżer).
- Oblicz HMAC-SHA256 nieprzetworzonej treści żądania, używając tego klucza.
- Porównaj obliczony bajt po bajcie HMAC z nagłówkiem podpisu (zawsze używaj porównania w czasie stałym, aby zapobiec atakom czasowym).
- Jeśli są zgodne, webhook jest autentyczny. Jeśli nie, odrzuć to.
Większość dostawców webhooków dokumentuje swój algorytm HMAC i dokładny format podpisu — czasami jest to surowa treść JSON, czasem sygnatura czasowa połączona z treścią. Postępuj dokładnie zgodnie z ich specyfikacją.
HMAC vs JWT: gdzie pasują
JWT (tokeny sieciowe JSON) są często mylone z podpisami HMAC. JWT to samodzielny token składający się z trzech części: nagłówka, ładunku (oświadczenia) i podpisu. Podpis może być oparty na HMAC lub RSA. Dekodery JWT pozwalają sprawdzać i weryfikować tokeny. Podczas gdy HMAC weryfikują pojedynczą wiadomość, JWT to tokeny, które przechowujesz i wysyłasz przy każdym żądaniu lub wywołaniu interfejsu API. W przypadku webhooków i uwierzytelniania wiadomości jednorazowych HMAC jest prostszy i wystarczający. W przypadku tokenów trwającej sesji lub poświadczeń interfejsu API token JWT jest często bardziej elastyczny.
Prywatność: podpisz i zweryfikuj całkowicie w swojej przeglądarce
HMAC i narzędzia mieszające TextArray działają całkowicie w przeglądarce. Żadna wiadomość, sekret ani podpis nie są przesyłane na serwer. Nie jest wymagane żadne konto, a narzędzia działają w trybie offline po załadowaniu strony. Możesz bezpiecznie wklejać ładunki elementu webhook i klucze API, aby testować i debugować podpisy bez ujawniania danych osobom trzecim lub usłudze rejestrowania. Jest to szczególnie cenne, gdy podczas programowania pracujesz z wrażliwymi kluczami API lub danymi klientów.
Rozpoczęcie
Zacznij od zrozumienia hashowania: użyj metody generator skrótu aby zobaczyć, jak to samo wejście zawsze daje to samo wyjście SHA-256. Następnie przejdź do Generacja HMAC aby zobaczyć, jak tajny klucz zmienia wynik. Spróbuj nieznacznie zmienić klucz lub wiadomość; HMAC odwraca się całkowicie, w przeciwieństwie do naiwnej sumy kontrolnej. Gdy już zrozumiesz mechanikę, zastosuj ją do logiki weryfikacji webhooka. W przypadku wrażliwych ładunków, takich jak zaszyfrowany tekst Lub rozszyfrowane tokeny, zawsze łącz je z żądaniami podpisanymi przez HMAC, aby zagwarantować integralność i pochodzenie.