Ustvarjalnik HMAC-SHA256
Ustvarite podpis HMAC-SHA256 iz sporočila in skrivnega ključa. Orodje oba kodira v UTF-8, uporabi konstrukcijo HMAC iz RFC 2104 z SHA-256 in vrne oznako z 256 biti v šestnajstiški obliki ali kot Base64. Razvijalci ga uporabljajo za odpravljanje napak pri podpisih spletnih kavljev storitev, kot so Stripe, GitHub ali Slack, za podpisovanje zahtev API in primerjavo rezultatov z lastno kodo. Ključ se nikoli ne vrne ali zabeleži.
Pogosta vprašanja
Kaj je HMAC-SHA256?
HMAC-SHA256 je koda za preverjanje pristnosti sporočila, ustvarjena z uporabo SHA-256 in skrivnega ključa, kot določa RFC 2104. Pravilno oznako za sporočilo lahko izračuna samo nekdo, ki pozna ključ. Rezultat je dolg 32 bajtov oziroma 64 šestnajstiških znakov.
Kako preverim podpis spletnega kavlja?
Kot sporočilo prilepite natančno surovo telo zahteve, kot ključ pa skrivnost za podpisovanje, nato pa rezultat primerjajte z glavo podpisa. Številne storitve podpišejo kombinacijo podatkov, na primer časovni žig Stripe, piko in telo, zato sporočilo sestavite tako, kot je opisano v njihovi dokumentaciji. Že en spremenjen bajt povzroči drugačno oznako.
Ali obstaja znani testni vektor?
Testni primer 2 v RFC 4231 uporablja ključ Jefe in sporočilo what do ya want for nothing?; pričakovana vrednost je 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. To orodje vrne natanko to vrednost.
Kako sta kodirana ključ in sporočilo?
Oba sta kodirana kot besedilo UTF-8. Če je vaša skrivnost podana v šestnajstiški obliki ali kot Base64, kot to počnejo nekatere storitve, se bajti razlikujejo od prikazanega besedila, zato morate ključ najprej dekodirati v svoji kodi. Presledki in prelomi vrstic se upoštevajo v obeh poljih.
Ali se moj skrivni ključ shranjuje?
Ne. Ključ se uporabi samo za izračun oznake med zahtevo. Ni vključen v odgovor, se ne beleži in se ne shranjuje.
Je lahko ključ prazen ali zelo dolg?
HMAC sprejema ključe poljubne dolžine, tudi prazen ključ. Ključi, daljši od 64 bajtov, se najprej zgostijo z SHA-256, kot določa RFC. Za dejansko uporabo izberite naključen ključ, dolg vsaj 32 bajtov.
Naj izberem šestnajstiško obliko ali Base64?
Uporabite obliko, ki jo pošlje druga stran. GitHub in Stripe uporabljata šestnajstiško obliko, Slack pred šestnajstiško vrednostjo doda v0=, številni sistemi, ki temeljijo na AWS in JWT, pa uporabljajo Base64. Obe obliki kodirata istih 32 bajtov.
Je HMAC-SHA256 enak zgoščeni vrednosti ključa in sporočila, združenih skupaj, z uporabo SHA-256?
Ne. HMAC dvakrat zgosti sporočilo z notranjim in zunanjim dopolnjenim ključem, kar ščiti pred napadi s podaljšanjem dolžine. Če združite ključ in sporočilo ter ju enkrat zgostite, dobite drugačen in manj varen rezultat.
Kako naj v svoji kodi primerjam podpise?
Uporabite funkcijo za primerjavo s konstantnim časom, kot je crypto.timingSafeEqual v Node.js ali hmac.compare_digest v Pythonu. Običajna primerjava nizov lahko razkrije časovne informacije o pričakovani oznaki.
Kako veliko je lahko sporočilo?
Sporočilo in ključ skupaj sta lahko velika do 5 MiB besedila. To zadostuje za običajne vsebine spletnih kavljev in zahteve API.