HMAC generatorius
Apskaičiuok HMAC-SHA1, SHA-256, SHA-384 ar SHA-512 su tekstiniu, hex ar Base64 raktu, gauk hex ir Base64 išvestį ir patikrink webhook parašą naršyklėje.
Pranešimas pasirašomas tiksliai kaip įvestas, užkoduotas UTF-8, įskaitant tarpus ir eilučių lūžius.
- HMAC (hex)
- HMAC (Base64)
- Webhook parašo antraštė (GitHub stiliaus)
Palyginimas vykdomas pastoviu laiku, kaip turėtų daryti serveris, todėl sugaištas laikas neatskleidžia, kiek simbolių sutampa.
Kaip apskaičiuoti HMAC
- Įklijuok Pranešimas. Webhook atveju tai turi būti neapdorotas užklausos turinys, baitas į baitą.
- Įvesk Slaptas raktas ir pasirink jo Rakto formatas: Tekstas (UTF-8), Šešioliktainis arba Base64.
- Pasirink Algoritmas: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 arba HMAC-SHA512.
- Rezultatas atsinaujina tau rašant; taip pat gali spustelėti Generuoti HMAC. Gausi HMAC (hex), HMAC (Base64) ir Webhook parašo antraštė (GitHub stiliaus), kiekvieną su mygtuku Kopijuoti.
- Norint patikrinti gautą parašą, įklijuok jį į Palyginti su tikėtinu parašu (hex, Base64 arba sha256=…). Įrankis parodo, ar jis sutampa.
Pranešimas užkoduojamas UTF-8 tiksliai kaip įvestas, įskaitant tarpus ir eilučių lūžius. Skaičiavimui naudojamas tavo naršyklės Web Crypto API; pranešimas ir raktas niekada nepalieka tavo įrenginio.
Kas yra HMAC
HMAC (maišos pagrindu sukurtas pranešimo autentifikavimo kodas, RFC 2104) sujungia slaptą raktą su maišos funkcija:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
čia K′ yra raktas, užpildytas iki maišos bloko dydžio (jei ilgesnis – pirmiausia sumaišytas), o ipad/opad – pastovios konstantos. Tik tas, kas žino raktą, gali sukurti tinkamą pranešimo kodą, o bet koks pranešimo pakeitimas kodą pakeičia visiškai. Todėl HMAC pasirašomi webhook, API užklausos (pavyzdžiui, AWS Signature Version 4) ir HS256 JSON Web Token.
HMAC nėra šifravimas: pranešimas neslepiamas. Tai taip pat nėra slaptažodžio maiša; slaptažodžiams saugoti naudok lėtą funkciją, pavyzdžiui, bcrypt ar Argon2.
Išvesties ilgis priklauso nuo algoritmo: 20 baitų SHA-1, 32 SHA-256, 48 SHA-384 ir 64 SHA-512. HMAC-SHA1 kaip MAC vis dar laikomas saugiu, bet naujoms sistemoms rinkis SHA-256. Rekomenduojamas atsitiktinis raktas, bent tokio ilgio kaip išvestis (32 baitai HMAC-SHA256); hex ar Base64 raktai leidžia tokius atsitiktinius baitus įvesti tiesiogiai.
GitHub webhook patikra
GitHub kiekvieną pristatymą pasirašo tavo webhook paslaptimi ir rezultatą siunčia antraštėje X-Hub-Signature-256 kaip sha256= ir turinio hex HMAC-SHA256. GitHub dokumentacijos pavyzdyje naudojama paslaptis It's a Secret to Everybody ir turinys Hello, World!; įvesk juos čia su HMAC-SHA256 ir antraštė parodys:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Palyginimo laukas priima visą antraštės eilutę, reikšmę sha256=… arba tik hex ar Base64 parašą (Stripe, Shopify ir Slack naudoja panašias schemas su savo antraštėmis ir pasirašomomis eilutėmis). SHA-384 ir SHA-512 atvejais įrankis rodo bendrą antraštę X-Signature, nes bendro standarto nėra.
Palyginimas pastoviu laiku
Serveris, parašus lyginantis įprastu eilučių palyginimu, sustoja ties pirmu skirtingu simboliu. Matuojant atsakymo laiką, užpuolikas galėtų atspėti galiojantį parašą po vieną simbolį. Šio įrankio palyginimas patikrina kiekvieną baitą, nesvarbu, koks rezultatas, kaip serveris turėtų daryti su crypto.timingSafeEqual Node.js, hmac.compare_digest Python ar hash_equals PHP.
Dažnai užduodami klausimai
Kodėl mano HMAC skiriasi nuo serverio apskaičiuoto?
Dažniausios priežastys: kitoks pranešimas (serveris pasirašo neapdorotą turinį, o tu įklijavai performatuotą JSON ar skiriasi eilučių lūžiai), raktas su netinkamu Rakto formatas arba kitas algoritmas. Net vienas papildomas tarpas pakeičia visą rezultatą.
Kokia turi būti išvestis: hex ar Base64?
Abu koduoja tuos pačius baitus. GitHub naudoja hex, o daug kitų API, pavyzdžiui, Shopify, – Base64. Naudok tą formatą, kurio tikisi gaunanti sistema.
Ar galiu naudoti tuščią raktą?
Įrankis jį priima ir įspėja: su tuščiu raktu bet kas gali apskaičiuoti tą patį HMAC, todėl jis nieko neįrodo.
Ar HMAC-SHA1 sulaužytas kaip SHA-1?
SHA-1 kolizijų atakos HMAC-SHA1 nesulaužo, jis kaip MAC vis dar laikomas saugiu. Jis lieka palaikomas senoms sistemoms, pavyzdžiui, senajai antraštei X-Hub-Signature, bet naujos sistemos turėtų naudoti HMAC-SHA256 ar stipresnį.
Ar mano slaptas raktas čia saugus?
Raktas ir pranešimas apdorojami tik tavo naršyklėje ir niekur nesiunčiami. Vis dėlto su gamybine paslaptimi elkis atsargiai ir pakeisk ją, jei manai, kad ji galėjo būti atskleista.
Susiję įrankiai
- Maišos generatorius (MD5, SHA-256) Sukurk teksto ar bet kokio dydžio failų MD5, SHA-1, SHA-256 ir SHA-512 maišas ir patikrink kontrolines sumas. Viskas vyksta tavo naršyklėje.
- JWT dekoderis Dekoduok JWT antraštę ir turinį, perskaityk exp, iat bei nbf kaip datas ir tikrink HS256, RS256, PS256, ES256 ar EdDSA parašus savo naršyklėje.
- Base64 kodavimas ir dekodavimas Nemokamas Base64 kodavimas ir dekodavimas su pilna UTF-8 parama ir base64url parinktimi. Veikia tavo naršyklėje, nieko neįkeliama.
- Bcrypt generatorius ir tikrintuvas Sukurk bcrypt maišą su 4–14 sudėtingumo koeficientu, patikrink slaptažodį pagal esamą maišą ir pamatyk jos versiją, druską ir rezultatą.