Utilia

HMAC ģenerators

Aprēķiniet HMAC-SHA1, SHA-256, SHA-384 vai SHA-512 ar teksta, hex vai Base64 atslēgu, iegūstiet hex un Base64 izvadi un pārbaudiet webhook parakstu.

Ziņojums tiek parakstīts tieši tāds, kā ierakstīts, kodēts UTF-8, ieskaitot atstarpes un rindu pārnesumus.

Salīdzināšana notiek nemainīgā laikā, kā to dara serveris, tāpēc patērētais laiks neatklāj, cik rakstzīmju sakrīt.

Kā aprēķināt HMAC

  1. Ielīmējiet Ziņojums. Webhook gadījumā tam jābūt neapstrādātam pieprasījuma pamattekstam, baitu pa baitam.
  2. Ievadiet Slepenā atslēga un izvēlieties tās Atslēgas formāts: Teksts (UTF-8), Heksadecimāli vai Base64.
  3. Izvēlieties Algoritms: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 vai HMAC-SHA512.
  4. Rezultāts atjaunojas rakstot; varat arī noklikšķināt uz Ģenerēt HMAC. Iegūstat HMAC (hex), HMAC (Base64) un Webhook paraksta galvene (GitHub stilā), katru ar pogu Kopēt.
  5. Lai pārbaudītu saņemtu parakstu, ielīmējiet to laukā Salīdzināt ar gaidīto parakstu (hex, Base64 vai sha256=…). Rīks pasaka, vai tas sakrīt.

Ziņojums tiek kodēts UTF-8 tieši tāds, kā ierakstīts, ieskaitot atstarpes un rindu pārnesumus. Aprēķins izmanto jūsu pārlūkprogrammas Web Crypto API; ziņojums un atslēga nekad neatstāj jūsu ierīci.

Kas ir HMAC

HMAC (uz jaucējfunkciju balstīts ziņojuma autentifikācijas kods, RFC 2104) apvieno slepenu atslēgu ar jaucējfunkciju:

HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))

kur K′ ir atslēga, papildināta līdz jaucējfunkcijas bloka izmēram (vispirms sajaukta, ja tā ir garāka), un ipad/opad ir fiksētas konstantes. Pareizo kodu ziņojumam var izveidot tikai tas, kas zina atslēgu, un jebkura ziņojuma izmaiņa kodu pilnībā maina. Tāpēc ar HMAC paraksta webhook, API pieprasījumus (piemēram, AWS Signature Version 4) un HS256 JSON Web Token.

HMAC nav šifrēšana: ziņojums netiek slēpts. Tā nav arī paroļu jaukšana; paroļu glabāšanai izmantojiet lēnu funkciju, piemēram, bcrypt vai Argon2.

Izvades garums ir atkarīgs no algoritma: 20 baiti SHA-1, 32 SHA-256, 48 SHA-384 un 64 SHA-512. HMAC-SHA1 kā MAC joprojām tiek uzskatīts par drošu, taču jaunām sistēmām dodiet priekšroku SHA-256. Ieteicama nejauša atslēga, kas ir vismaz tikpat gara kā izvade (32 baiti HMAC-SHA256); hex vai Base64 atslēgas ļauj šādus nejaušus baitus ievadīt tieši.

GitHub webhook pārbaude

GitHub paraksta katru piegādi ar jūsu webhook noslēpumu un sūta rezultātu galvenē X-Hub-Signature-256 kā sha256=, kam seko pamatteksta HMAC-SHA256 hex formā. GitHub dokumentācijas piemērā izmantots noslēpums It's a Secret to Everybody un pamatteksts Hello, World!; ievadiet tos šeit ar HMAC-SHA256, un galvene parāda:

X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17

Salīdzināšanas lauks pieņem visu galvenes rindu, vērtību sha256=… vai tīru hex vai Base64 parakstu (Stripe, Shopify un Slack izmanto līdzīgas shēmas ar savām galvenēm un parakstāmām virknēm). SHA-384 un SHA-512 gadījumā rīks rāda vispārīgu galveni X-Signature, jo kopēja standarta nav.

Salīdzināšana nemainīgā laikā

Serveris, kas parakstus salīdzina ar parastu virkņu salīdzināšanu, apstājas pie pirmās atšķirīgās rakstzīmes. Mērot atbildes laikus, uzbrucējs varētu uzminēt derīgu parakstu pa vienai rakstzīmei. Šī rīka salīdzināšana pārbauda katru baitu neatkarīgi no rezultāta, kā to vajadzētu darīt serverim ar crypto.timingSafeEqual Node.js, hmac.compare_digest Python vai hash_equals PHP.

Biežāk uzdotie jautājumi

Kāpēc mans HMAC atšķiras no servera aprēķinātā?

Parastie cēloņi ir cits ziņojums (serveris paraksta neapstrādātu pamattekstu, bet jūs ielīmējāt pārformatētu JSON, vai atšķiras rindu pārnesumi), atslēga nepareizā Atslēgas formāts vai cits algoritms. Pat viena lieka atstarpe maina visu rezultātu.

Vai izvadei jābūt hex vai Base64?

Abi kodē tos pašus baitus. GitHub izmanto hex, bet daudzi citi API, piemēram, Shopify, – Base64. Izmantojiet to formātu, ko sagaida saņemošā sistēma.

Vai drīkst izmantot tukšu atslēgu?

Rīks to pieņem un brīdina: ar tukšu atslēgu ikviens var aprēķināt to pašu HMAC, tāpēc tas neko nepierāda.

Vai HMAC-SHA1 ir salauzts kā SHA-1?

SHA-1 kolīziju uzbrukumi HMAC-SHA1 nesalauž, un tas joprojām tiek uzskatīts par drošu kā MAC. Tas paliek atbalstīts mantotām sistēmām, piemēram, vecajai galvenei X-Hub-Signature, taču jaunām sistēmām jāizmanto HMAC-SHA256 vai spēcīgāks.

Vai mana slepenā atslēga šeit ir droša?

Atslēga un ziņojums tiek apstrādāti tikai jūsu pārlūkprogrammā un nekad netiek nekur sūtīti. Tomēr ar ražošanas noslēpumu rīkojieties uzmanīgi un nomainiet to, ja domājat, ka tas ir atklāts.