CodeKitHub
Kóðunarverkfæri

HMAC-gjafi

Síðast uppfært:

Þetta tól reiknar HMAC (Hash-based Message Authentication Code) úr leynilykli og skilaboðum, með SHA-1, SHA-256, SHA-384 eða SHA-512 sem undirliggjandi kássufall. Ólíkt venjulegri kássu krefst HMAC sameiginlegs leynilykils, þannig að það sannar að skilaboðin komu frá einhverjum sem hefur þann lykil og að þeim var ekki breytt í flutningi — einmitt þess vegna nota API undirritanir HMAC til að undirrita beiðnir og vefkrókar (webhooks) nota það til að staðfesta sendanda hleðslu. Allt keyrir staðbundið í gegnum innbyggt Web Crypto API vafrans þíns; leynilykillinn þinn og skilaboð eru aldrei send á neinn netþjón.

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

Hvað er þetta verkfæri?

HMAC stendur fyrir Hash-based Message Authentication Code. Það sameinar leynilykil með skilaboðum og staðlaðri kássufalli (eins og SHA-256) til að búa til útdrátt með fastri lengd. Hver sem hefur sama lykil og skilaboð mun reikna nákvæmlega sama HMAC — en án lykilsins er reiknifræðilega ómögulegt að búa til gilt HMAC fyrir skilaboð, jafnvel þótt þú vitir hvaða kássureiknirit er notað.

Það er lykilmunurinn frá venjulegri kássu: venjuleg kássa (MD5, SHA-256 o.s.frv.) tekur aðeins skilaboðin sem inntak, þannig að hver sem er getur reiknað hana og hún sannar ekkert um hver bjó hana til. HMAC tekur skilaboðin *og* leynilykil, þannig að gilt HMAC sannar að sendandinn hafði leyndarmálið — það er sannvottunaraðferð, ekki bara heilleikaathugun.

HMAC er formlega staðlað af NIST í FIPS 198-1 og skilgreint fyrir netsamskiptareglur í IETF RFC 2104. Þetta tól reiknar HMAC með innfæddu Web Crypto API vafrans þíns (`crypto.subtle.sign` með HMAC reikniritinu), sem útfærir RFC 2104 rétt í stað handskrifaðrar JavaScript útgáfu.

Af hverju að nota það?

  • Undirritaðu API beiðnir svo móttökuþjónninn geti staðfest að beiðnin kom frá einhverjum sem hefur sameiginlega leyndarmálið og henni var ekki breytt.
  • Staðfestu hleðslu vefkróka (Stripe, GitHub, Shopify og svipaðar þjónustur undirrita allar vefkróka-búnka sína með HMAC-SHA256).
  • Búðu til sannvottunarmerki eða einnota kóða sem byggja á sameiginlegu leyndarmáli.
  • Berðu úttak eigin HMAC útfærslu saman við þekkt rétt viðmiðunargildi.
  • 100% staðbundið: leynilykillinn þinn og skilaboð yfirgefa aldrei vafrann, þannig að öruggt er að prófa raunveruleg leyndarmál.

Hvernig á að nota það

  1. Sláðu inn leynilykilinn þinn í reitinn "Secret Key".
  2. Sláðu inn skilaboðin sem þú vilt sannvotta í reitinn "Message".
  3. HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 og HMAC-SHA512 niðurstöður eru búnar til samstundis (hakaðu við "Uppercase output" ef markkerfið þitt gerir ráð fyrir hástöfum).
  4. Smelltu á "Copy" við hlið þess HMAC sem þú þarft.

Dæmi

Inntak

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

Úttak

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Þetta er staðlað birt prófunarvigur: með lyklinum "key" og þessum nákvæmu skilaboðum gefa HMAC-SHA256 og HMAC-SHA1 alltaf þessi gildi í hvaða réttri útfærslu sem er, þannig að þú getur staðfest úttak þessa tóls sjálfstætt.

HMAC á móti venjulegri kássu: hvenær þarf lykil

Úrslitaspurningin er: þarftu að sanna hver bjó til þennan útdrátt, eða bara að innihaldinu hafi ekki verið breytt? Ef opinber gátsumma dugar — að staðfesta að niðurhalað skrá passi við það sem útgefandi tilgreindi, afritaeyðing skráa — virkar venjuleg kássa og hver sem er getur athugað hana, án lykils. Ef þú þarft að sanna að útdrátturinn hefði aðeins getað verið búinn til af einhverjum sem hefur ákveðið leyndarmál — sannvotta API-kallara, treysta sendanda vefkróks — þarftu HMAC, því venjuleg kássa gefur árásaraðila án leyndarmáls sömu getu til að falsa gilt útdrátt og raunverulegur sendandi hefur.

Samanburður á reikniritunum fjórum

Öll fjögur nota sömu HMAC-smíðina úr RFC 2104, sem eingöngu er ólík í undirliggjandi kássufalli og þar með lengd úttaksins.

ReikniritStærð úttaksDæmigerð notkun
HMAC-SHA1160 bita (40 sextándarstafir)Eldri API, eldri OAuth 1.0a undirskriftir
HMAC-SHA256256 bita (64 sextándarstafir)Undirritun API beiðna, JWT HS256, staðfesting vefkróka
HMAC-SHA384384 bita (96 sextándarstafir)Undirskriftir með meira öryggi þar sem lengra úttak er nauðsynlegt
HMAC-SHA512512 bita (128 sextándarstafir)Útdrættir með hámarkslengd fyrir mjög örugg forrit

Algeng notkunartilvik

  • Undirritun útgangandi API beiðna með sameiginlegu leyndarmáli svo þjónninn geti staðfest auðkenni kallara.
  • Staðfesting innkomandi vefkróka-hleðslu (Stripe-Signature, GitHub X-Hub-Signature-256 og svipaðir hausar nota allir HMAC-SHA256).
  • Að búa til og staðfesta undirskriftarhluta JWT sem er undirritað með HS256/HS384/HS512.
  • Að prófa að HMAC útfærsla þín, hvort sem er á þjóni eða í biðlara, samsvari væntu úttaki áður en henni er dreift.

Algengar spurningar

Hvað er HMAC?

HMAC (Hash-based Message Authentication Code) sameinar leynilykil með skilaboðum með kássufalli til að búa til útdrátt sem sannar bæði heilleika skilaboðanna og að sendandinn hafi leyfilykilinn. Það er skilgreint í NIST FIPS 198-1 og IETF RFC 2104.

Hver er munurinn á HMAC og venjulegri kássu?

Venjuleg kássa (SHA-256, MD5 o.s.frv.) tekur aðeins skilaboð sem inntak — hver sem er getur reiknað hana, þannig að hún sannar aðeins að skilaboðin hafi ekki skemmst, ekki hver sendi þau. HMAC tekur skilaboð auk leynilykils: ef þú þarft að sanna að skilaboð komu frá einhverjum sem hefur ákveðið leyndarmál (API undirskrift, vefkróka-sendandi), þarftu HMAC. Ef þú þarft aðeins að athuga að skrá eða skilaboð hafi ekki breyst og þér er sama um að sanna höfundarrétt, dugar venjuleg kássa.

Er leynilykillinn minn sendur á netþjón?

Nei. Þetta tól reiknar HMAC að fullu í vafranum þínum með Web Crypto API. Lykillinn þinn og skilaboð eru aldrei send neitt — þú getur með öryggi prófað raunveruleg framleiðslu-leyndarmál.

Hvaða reiknirit ætti ég að nota — SHA-1, SHA-256, SHA-384 eða SHA-512?

Notaðu HMAC-SHA256 nema ákveðið kerfi krefjist annars — það er hinn raunverulegi staðall fyrir API undirritun (notað af AWS, Stripe, GitHub vefkrókum og flestum nútíma API) og býður upp á sterkt öryggismörk. HMAC-SHA1 er enn algengt í eldri kerfum (eins og eldri OAuth 1.0a útfærslum) en undirliggjandi kássa SHA-1 er talin veikari; HMAC-SHA384/512 eru notuð þar sem lengri úttak eða auka öryggismörk eru sérstaklega nauðsynleg.

Er HMAC-SHA1 óöruggt, þar sem venjulegt SHA-1 er brotið?

Árekstrarárásirnar 2017 brutu SHA-1 sem venjulegt kássufall, en HMAC-SHA1 er enn talið dulmálslega traust því öryggi HMAC byggist ekki á árekstrarþoli á sama hátt. Engu að síður er mælt með HMAC-SHA256 eða hærra fyrir ný kerfi — það er enginn hagnýtur ókostur og það forðast spurninguna alveg.

Hver eru algeng raunveruleg notkunartilvik fyrir HMAC?

Undirritun REST API beiðna svo þjónn geti staðfest að sá sem kallar hafi sameiginlega API leyndarmálið; staðfesting vefkróka-hleðslu frá þjónustum eins og Stripe, GitHub og Shopify til að vita að beiðni kom sannarlega frá þeim og var ekki fölsuð; að búa til tímabundin einnota lykilorð (TOTP/HOTP) fyrir tveggja þátta auðkenningu; og að undirrita JWT-merki með HS256/HS384/HS512 reikniritunum.