CodeKitHub
Kodēšanas rīki

HMAC ģenerators

Pēdējoreiz atjaunināts:

Šis rīks aprēķina HMAC (Hash-based Message Authentication Code) no slepenas atslēgas un ziņojuma, izmantojot SHA-1, SHA-256, SHA-384 vai SHA-512 kā pamata jaucējfunkciju. Atšķirībā no vienkārša jaucējkoda, HMAC pieprasa koplietotu slepenu atslēgu, tāpēc tas pierāda, ka ziņojums nāk no kāda, kuram ir šī atslēga, un nav mainīts pārsūtīšanas laikā — tieši tāpēc API izmanto HMAC pieprasījumu parakstīšanai, un webhooki — sūtītāja pārbaudei. Viss notiek lokāli, izmantojot pārlūka iebūvēto Web Crypto API; jūsu slepenā atslēga un ziņojums nekad netiek nosūtīti nevienam serverim.

HMAC-SHA1
HMAC-SHA256
HMAC-SHA384
HMAC-SHA512

Kas ir šis rīks?

HMAC nozīmē Hash-based Message Authentication Code. Tas apvieno slepenu atslēgu ar ziņojumu un standarta jaucējfunkciju (piemēram, SHA-256), lai iegūtu fiksēta garuma kopsavilkumu. Ikviens ar tādu pašu atslēgu un ziņojumu aprēķinās tieši tādu pašu HMAC — bet bez atslēgas praktiski nav iespējams izveidot derīgu HMAC ziņojumam, pat zinot izmantoto jaucējalgoritmu.

Tā ir galvenā atšķirība no vienkārša jaucējkoda: vienkāršs jaucējkods (MD5, SHA-256 u.c.) kā ievadi izmanto tikai ziņojumu, tāpēc jebkurš var to aprēķināt, un tas neko nepierāda par to, kas to izveidoja. HMAC izmanto ziņojumu *un* slepenu atslēgu, tāpēc derīgs HMAC pierāda, ka sūtītājam bija slepenā atslēga — tas ir autentifikācijas mehānisms, nevis tikai integritātes pārbaude.

HMAC oficiāli standartizējis NIST dokumentā FIPS 198-1 un definējis interneta protokoliem IETF RFC 2104. Šis rīks aprēķina HMAC, izmantojot pārlūka pamata Web Crypto API (`crypto.subtle.sign` ar HMAC algoritmu), kas pareizi īsteno RFC 2104, nevis pašrakstītu JavaScript versiju.

Kāpēc to izmantot?

  • Parakstiet API pieprasījumus, lai saņēmējserveris varētu pārbaudīt, ka pieprasījums nāk no koplietotās slepenās atslēgas turētāja un nav manipulēts.
  • Pārbaudiet webhook datu kravas (Stripe, GitHub, Shopify un līdzīgi pakalpojumi paraksta webhook saturu ar HMAC-SHA256).
  • Ģenerējiet autentifikācijas marķierus vai vienreizējus kodus, kas balstīti uz koplietotu slepenu atslēgu.
  • Salīdziniet savas HMAC implementācijas rezultātu ar zināmu pareizu atsauces vērtību.
  • 100% lokāli: jūsu slepenā atslēga un ziņojums nekad nepamet pārlūku, tāpēc droši var testēt reālas slepenas atslēgas.

Kā to lietot

  1. Ievadiet savu slepeno atslēgu laukā „Secret Key”.
  2. Ievadiet ziņojumu, kuru vēlaties autentificēt, laukā „Message”.
  3. HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 un HMAC-SHA512 rezultāti tiek ģenerēti nekavējoties (atzīmējiet „Uppercase output”, ja jūsu mērķa sistēmai nepieciešami lielie burti).
  4. Noklikšķiniet „Copy” pie vajadzīgā HMAC.

Piemērs

Ievade

Secret Key: key
Message: The quick brown fox jumps over the lazy dog

Izvade

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Šis ir standarta publicēts testa vektors: ar atslēgu „key” un tieši šo ziņojumu HMAC-SHA256 un HMAC-SHA1 jebkurā pareizā implementācijā vienmēr dod šīs vērtības, tāpēc varat neatkarīgi pārbaudīt šī rīka rezultātu.

HMAC pret vienkāršu jaucējkodu: kad nepieciešama atslēga

Izšķirošais jautājums ir šāds: vai jums jāpierāda, kas izveidoja šo kopsavilkumu, vai vienkārši tas, ka saturs nav mainīts? Ja pietiek ar publisku kontrolsummu — pārbaudot, vai lejupielādētais fails atbilst tam, ko norādījis izdevējs, vai dublikātu noņemšanu ierakstos — vienkāršs jaucējkods darbojas, un ikviens var to pārbaudīt bez atslēgas. Ja jums jāpierāda, ka kopsavilkumu varēja izveidot tikai kāds ar konkrētu slepenu atslēgu — autentificējot API izsaucēju, uzticoties webhook sūtītājam — jums nepieciešams HMAC, jo vienkāršs jaucējkods uzbrucējam bez slepenās atslēgas dod tādu pašu iespēju viltot derīgu kopsavilkumu kā īstajam sūtītājam.

Vairāku algoritmu jaucējkoda ģenerators · JWT dekodētājs · MD5 ģenerators

Četru HMAC algoritmu salīdzinājums

Visi četri izmanto to pašu HMAC konstrukciju no RFC 2104, atšķiroties tikai ar pamata jaucējfunkciju un tātad izvades garumu.

AlgoritmsIzvades izmērsTipiskais lietojums
HMAC-SHA1160 biti (40 heksadecimālas rakstzīmes)Novecojušas API, vecāki OAuth 1.0a paraksti
HMAC-SHA256256 biti (64 heksadecimālas rakstzīmes)API pieprasījumu parakstīšana, JWT HS256, webhook pārbaude
HMAC-SHA384384 biti (96 heksadecimālas rakstzīmes)Augstākas uzticamības paraksti, kur nepieciešama garāka izvade
HMAC-SHA512512 biti (128 heksadecimālas rakstzīmes)Maksimāla garuma kopsavilkumi augstas drošības lietojumprogrammām

Bieži lietošanas gadījumi

  • Izejošo API pieprasījumu parakstīšana ar koplietotu slepeno atslēgu, lai serveris varētu pārbaudīt izsaucēja identitāti.
  • Ienākošo webhook datu kravu pārbaude (Stripe-Signature, GitHub X-Hub-Signature-256 un līdzīgas galvenes visas izmanto HMAC-SHA256).
  • JWT paraksta daļas ģenerēšana un validēšana ar HS256/HS384/HS512 parakstītam JWT.
  • Servera vai klienta puses HMAC implementācijas pārbaude pirms izvietošanas, lai pārliecinātos, ka tā atbilst gaidītajam rezultātam.

Biežāk uzdotie jautājumi

Kas ir HMAC?

HMAC (Hash-based Message Authentication Code) apvieno slepenu atslēgu ar ziņojumu, izmantojot jaucējfunkciju, lai iegūtu kopsavilkumu, kas pierāda gan ziņojuma integritāti, gan to, ka sūtītājam ir šī atslēga. Tas definēts NIST FIPS 198-1 un IETF RFC 2104.

Kāda ir atšķirība starp HMAC un vienkāršu jaucējkodu?

Vienkāršs jaucējkods (SHA-256, MD5 u.c.) kā ievadi izmanto tikai ziņojumu — jebkurš var to aprēķināt, tāpēc tas pierāda tikai to, ka ziņojums nav bojāts, bet ne to, kas to nosūtīja. HMAC izmanto ziņojumu plus slepenu atslēgu: ja jums jāpierāda, ka ziņojums nāk no kāda, kam ir konkrēta slepena atslēga (API paraksts, webhook sūtītājs), jums nepieciešams HMAC. Ja jums vienkārši jāpārbauda, ka fails vai ziņojums nav mainīts, un autorības pierādīšana nav svarīga, pietiek ar vienkāršu jaucējkodu.

Vai mana slepenā atslēga tiek nosūtīta serverim?

Nē. Šis rīks aprēķina HMAC pilnībā jūsu pārlūkā, izmantojot Web Crypto API. Jūsu atslēga un ziņojums nekad netiek nosūtīti nekur — varat droši testēt reālas produkcijas slepenās atslēgas.

Kuru algoritmu izmantot — SHA-1, SHA-256, SHA-384 vai SHA-512?

Izmantojiet HMAC-SHA256, ja vien konkrēta sistēma nepieprasa citādi — tas ir faktiskais API parakstīšanas standarts (izmanto AWS, Stripe, GitHub webhookos un lielākajā daļā mūsdienu API) un piedāvā stipru drošības rezervi. HMAC-SHA1 joprojām ir izplatīts vecākās sistēmās (piemēram, vecākās OAuth 1.0a implementācijās), taču SHA-1 pamatā esošais jaucējkods tiek uzskatīts par vājāku; HMAC-SHA384/512 izmanto, ja konkrēti nepieciešams garāks izvades garums vai papildu drošības rezerve.

Vai HMAC-SHA1 ir nedrošs, jo vienkāršs SHA-1 ir uzlauzts?

2017. gada sadursmju uzbrukumi pret SHA-1 padarīja SHA-1 kā vienkāršu jaucējfunkciju neuzticamu, taču HMAC-SHA1 joprojām tiek uzskatīts par kriptogrāfiski drošu, jo HMAC drošība neatkarīga no izturības pret sadursmēm tādā pašā veidā. Tomēr jaunām sistēmām ieteicams izvēlēties HMAC-SHA256 vai augstāku — tam nav praktisku trūkumu, un tas pilnībā novērš šo jautājumu.

Kādi ir izplatītākie reālās pasaules HMAC lietojumi?

REST API pieprasījumu parakstīšana, lai serveris varētu pārbaudīt, vai izsaucējam ir koplietotā API slepenā atslēga; webhook datu kravu pārbaude no pakalpojumiem, piemēram, Stripe, GitHub un Shopify, lai zinātu, ka pieprasījums patiešām nāk no tiem un nav viltots; uz laiku balstītu vienreizējo paroļu (TOTP/HOTP) ģenerēšana divfaktoru autentifikācijai; un JWT marķieru parakstīšana ar HS256/HS384/HS512 algoritmiem.

Saistītie rīki