Generator HMAC-SHA256
Utwórz podpis HMAC-SHA256 na podstawie wiadomości i tajnego klucza. Narzędzie koduje oba elementy w UTF-8, stosuje konstrukcję HMAC z RFC 2104 z użyciem SHA-256 i zwraca tag o długości 256 bitów w zapisie szesnastkowym lub Base64. Programiści używają go do debugowania podpisów webhooków z usług takich jak Stripe, GitHub lub Slack, podpisywania żądań API i porównywania wyników z własnym kodem. Klucz nigdy nie jest zwracany ani zapisywany w logach.
Najczęściej zadawane pytania
Czym jest HMAC-SHA256?
HMAC-SHA256 to kod uwierzytelniania wiadomości zbudowany na podstawie SHA-256 i tajnego klucza, zgodnie z definicją w RFC 2104. Tylko osoba posiadająca klucz może obliczyć prawidłowy tag dla wiadomości. Wynik ma 32 bajty, czyli 64 znaki szesnastkowe.
Jak zweryfikować podpis webhooka?
Wklej dokładną, surową treść żądania jako wiadomość, a swój tajny klucz podpisujący jako klucz, a następnie porównaj wynik z nagłówkiem podpisu. Wiele usług podpisuje połączenie kilku elementów, na przykład znacznik czasu Stripe, kropkę i treść żądania, więc przygotuj wiadomość zgodnie z dokumentacją danej usługi. Zmiana choćby jednego bajtu daje inny tag.
Czy istnieje znany wektor testowy?
Przypadek testowy 2 z RFC 4231 wykorzystuje klucz Jefe i wiadomość what do ya want for nothing?, a oczekiwany wynik to 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. To narzędzie zwraca dokładnie tę wartość.
Jak kodowane są klucz i wiadomość?
Oba elementy są kodowane jako tekst UTF-8. Jeśli Twój sekret jest podany w zapisie szesnastkowym lub Base64, jak ma to miejsce w niektórych usługach, bajty różnią się od widocznego tekstu, dlatego najpierw musisz zdekodować klucz we własnym kodzie. Spacje i znaki nowego wiersza są uwzględniane w obu polach.
Czy mój tajny klucz jest przechowywany?
Nie. Klucz jest używany wyłącznie do obliczenia tagu podczas obsługi żądania. Nie jest dołączany do odpowiedzi, zapisywany w logach ani przechowywany.
Czy klucz może być pusty lub bardzo długi?
HMAC akceptuje klucze o dowolnej długości, także pusty klucz. Klucze dłuższe niż 64 bajty są najpierw haszowane za pomocą SHA-256, zgodnie ze specyfikacją RFC. W praktyce wybieraj losowy klucz o długości co najmniej 32 bajtów.
Wybrać zapis szesnastkowy czy Base64?
Użyj formatu przesyłanego przez drugą stronę. GitHub i Stripe używają zapisu szesnastkowego, natomiast Slack poprzedza zapis szesnastkowy ciągiem v0=, a wiele systemów opartych na AWS i JWT używa Base64. Oba formaty kodują te same 32 bajty.
Czy HMAC-SHA256 daje to samo co SHA-256 połączonego klucza i wiadomości?
Nie. HMAC haszuje wiadomość dwukrotnie, używając wewnętrznych i zewnętrznych kluczy z dopełnieniem, co chroni przed atakami polegającymi na wydłużaniu wiadomości. Połączenie klucza i wiadomości, a następnie jednokrotne haszowanie daje inny, słabszy wynik.
Jak porównywać podpisy w swoim kodzie?
Użyj funkcji porównującej w stałym czasie, takiej jak crypto.timingSafeEqual w Node.js lub hmac.compare_digest w Pythonie. Zwykłe porównanie ciągów znaków może ujawnić informacje czasowe dotyczące oczekiwanego tagu.
Jak duża może być wiadomość?
Łączny rozmiar wiadomości i klucza może wynosić do 5 MiB tekstu. Wystarcza to na typowe ładunki webhooków i żądania API.