Cryptology Academy · Lektion

HMAC i API'er: Signering af forespørgsler

Implementér HMAC-baseret signering af forespørgsler og forebyggelse af replay-angreb.

Lektion 3 af 413 trin

HMAC i API'er: Signering af forespørgsler er en gratis Cryptology Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cryptology Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cryptology Academy-kurset indeholder 4 lektioner i alt.

Velkommen

HMAC-baseret signering af forespørgsler bruges af AWS, GitHub, Stripe og Twilio til at autentificere API-kald. I denne lektion opbygger du et komplet system til signering af forespørgsler.

Hvorfor signere API-forespørgsler?

API-nøgler i URL'er kan blive logget på proxyservere, i browserhistorikken og i serverlogfiler. Signering af forespørgsler inkluderer hele forespørgselsbrødteksten i MAC'en – det sikrer, at nyttedataene ikke er blevet ændret, og at nøglen ikke afsløres alene.

AWS Signature Version 4

AWS SigV4 beregner: 1. Kanonisk forespørgsel (metode + URL + headere + hash af brødtekst) 2. Streng, der skal signeres (dato + region + tjeneste + hash af kanonisk forespørgsel) 3. Signeringsnøgle = HMAC(HMAC(HMAC(HMAC('AWS4'+secret, date), region), service), 'aws4_request') 4. Signatur = HMAC(signing_key, string_to_sign)

Verifikation af GitHub-webhook

GitHub signerer hver webhook-nyttelast: X-Hub-Signature-256: sha256=HMACHEX Verificer: import hmac expected = 'sha256=' + hmac.new(secret, payload, 'sha256').hexdigest() hmac.compare_digest(expected, received_signature)

Trussel fra gentagelsesangreb

Hvis en angriber opsnapper en gyldigt signeret forespørgsel, kan den sendes igen flere gange. En overførsel på 100 $, der er signeret én gang, kan blive gentaget 1000 gange. HMAC alene forhindrer IKKE gentagelser.

Forebyggelse af gentagelsesangreb baseret på tidsstempler

Inkluder et tidsstempel i den signerede meddelelse. Afvis forespørgsler, der er over 5 minutter gamle. Stripe sender X-Stripe-Signature med et tidsstempel. GitHub bruger X-GitHub-Delivery (UUID), ikke en tidsstempelbaseret løsning.

Forebyggelse af gentagelsesangreb med nonce

Inkluder en tilfældig nonce i hver forespørgsel. Serveren gemmer brugte noncer (i Redis med TTL). Afvis enhver forespørgsel med en nonce, der allerede er set. Det er mere pålideligt end tidsstempler i distribuerede systemer.

Implementering af signering af forespørgsler

import hmac, hashlib, time, os def sign_request(secret, method, path, body, timestamp=None): ts = timestamp or str(int(time.time())) payload = f'{method}\n{path}\n{ts}\n' + hashlib.sha256(body).hexdigest() sig = hmac.new(secret.encode(), payload.encode(), 'sha256').hexdigest() return ts, sig

Verifikation på serversiden

def verify_request(secret, method, path, body, ts, received_sig): # Check timestamp freshness if abs(time.time() - int(ts)) > 300: # 5 minutes return False # Recompute and compare _, expected = sign_request(secret, method, path, body, ts) return hmac.compare_digest(expected, received_sig)

JWT med HMAC (HS256)

HS256-JWT'er bruger HMAC-SHA256 med en delt hemmelighed. Serveren både signerer og verificerer. Begrænsning: Alle parter med nøglen kan forfalske tokens. Til asymmetrisk tillid (tredjepartsautentificering) skal du bruge RS256 eller ES256.

Strategi for nøglerotation

Rotér HMAC-nøgler med jævne mellemrum: generér en ny nøgle, understøt både den gamle og den nye i overgangsvinduet (24 timer), og udfas derefter den gamle nøgle. AWS SigV4 udleder nøgler fra datomærkede hemmeligheder for at muliggøre daglig rotation.

Hurtigt tjek

Hvorfor er signering af forespørgsler med HMAC alene ikke nok til at forhindre gentagelsesangreb?

Opsummering

Signering af HMAC-forespørgsler med beskyttelse mod gentagelsesangreb er implementeret. Nu sammenligner vi CMAC og Poly1305 som MAC-alternativer baseret på blokchifre.
Gratis at komme i gang

Lær Cryptology Academy med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
67
Lektioner
261

Ofte stillede spørgsmål

Er lektionen “HMAC i API'er: Signering af forespørgsler” gratis?

Ja — hele teksten til “HMAC i API'er: Signering af forespørgsler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cryptology Academy-kurset, skal du opgradere til CoddyKit PRO. Cryptology Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “HMAC i API'er: Signering af forespørgsler”?

Implementér HMAC-baseret signering af forespørgsler og forebyggelse af replay-angreb. Du øver dig i Cryptology Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Cryptology Academy?

Der kræves ingen tidligere erfaring. Cryptology Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “HMAC i API'er: Signering af forespørgsler”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Cryptology Academy-lektion?

Ja. Alle Cryptology Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. MAC-begreber og længdeudvidelsesangreb
  2. HMAC-konstruktion og sikkerhedsbevis
  3. HMAC i API'er: Signering af forespørgsler
  4. CMAC og Poly1305: MAC'er baseret på blokchifre
← Tilbage til Cryptology Academy