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
- Ievadiet savu slepeno atslēgu laukā „Secret Key”.
- Ievadiet ziņojumu, kuru vēlaties autentificēt, laukā „Message”.
- 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).
- Noklikšķiniet „Copy” pie vajadzīgā HMAC.
Piemērs
Ievade
Secret Key: key
Message: The quick brown fox jumps over the lazy dogIzvade
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.
| Algoritms | Izvades izmērs | Tipiskais lietojums |
|---|---|---|
| HMAC-SHA1 | 160 biti (40 heksadecimālas rakstzīmes) | Novecojušas API, vecāki OAuth 1.0a paraksti |
| HMAC-SHA256 | 256 biti (64 heksadecimālas rakstzīmes) | API pieprasījumu parakstīšana, JWT HS256, webhook pārbaude |
| HMAC-SHA384 | 384 biti (96 heksadecimālas rakstzīmes) | Augstākas uzticamības paraksti, kur nepieciešama garāka izvade |
| HMAC-SHA512 | 512 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.