Generatore HMAC

HMAC è l’algoritmo alla base della maggior parte dei webhook firmati, delle intestazioni AWS Signature v4 e dei token JWT HS256. Inserisci un messaggio e una chiave segreta, scegli una famiglia di hash, e questo generatore produce l’HMAC esattamente come specificato dalla RFC 2104, utile per verificare cosa sta per inviare il tuo backend o riprodurre una firma ricevuta da un’API.

Come calcolare un HMAC

  1. 1

    Incolla il messaggio

    I byte esatti da firmare, un payload webhook, una richiesta canonica o qualsiasi stringa.

  2. 2

    Inserisci la chiave segreta

    Può essere testo o esadecimale. Il generatore lo riempie o lo hash per la dimensione del blocco secondo la RFC.

  3. 3

    Scegli l'algoritmo di hash

    SHA-256 è il predefinito; scegli SHA-1, SHA-384, SHA-512 o MD5 per compatibilità legacy.

  4. 4

    Copia la firma

    L'output è esadecimale minuscolo, pronto da incollare in una configurazione webhook o in un'intestazione di autorizzazione.

HMAC sotto il cofano

HMAC avvolge una funzione hash semplice in una costruzione con chiave in modo che la firma non possa essere falsificata senza la chiave.

La ricetta RFC 2104

HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))

dove k' è la chiave riempita alla dimensione del blocco hash, opad = 0x5c ripetuto e ipad = 0x36 ripetuto.

Scelte dell’algoritmo

Algoritmo Dimensione blocco Lunghezza output Raccomandato per
HMAC-SHA-256 64 byte 32 byte Predefinito moderno, firma webhook
HMAC-SHA-384 128 byte 48 byte Firma API ad alta sicurezza
HMAC-SHA-512 128 byte 64 byte Token a lungo termine
HMAC-SHA-1 64 byte 20 byte Legacy (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 byte 16 byte Solo legacy; evitare per nuovi lavori

Dove appare HMAC

  • Webhook di GitHub, Stripe, Shopify: intestazione X-Hub-Signature-256, Stripe-Signature, ecc.
  • AWS Signature v4: una catena di HMAC-SHA256 sulla richiesta canonica.
  • JWT HS256: la firma del token è HMAC-SHA-256(header.payload, secret).
  • Token di reimpostazione password: HMAC su user_id + scadenza + un segreto del sito.

Errori comuni

  • Passare una chiave codificata in esadecimale come testo invece di decodificarla in byte prima.
  • Firmare i byte del payload sbagliato: alcuni webhook firmano il corpo della richiesta grezza includendo spazi bianchi, altri firmano una forma canonica.
  • Usare == in JavaScript o Python per confrontare le firme; usa sempre un confronto sicuro rispetto al tempo per resistere agli attacchi di timing.

Domande frequenti

Quasi sempre perché i byte del messaggio differiscono. Firmare il corpo JSON analizzato introduce cambiamenti negli spazi bianchi; firma il corpo della richiesta grezza. Verifica anche che la chiave sia decodificata allo stesso modo (esadecimale vs byte grezzi) su entrambi i lati.

Sì. Se la chiave è più corta della dimensione del blocco hash, viene riempita con zeri; se è più lunga, viene prima hashata. La RFC 2104 raccomanda chiavi lunghe almeno quanto l’output (32 byte per SHA-256).

HMAC è ancora resistente agli attacchi di collisione MD5 noti perché l’attacco non si trasferisce alla costruzione HMAC. Tuttavia, usa HMAC-SHA-256 per qualsiasi nuovo codice, gli strumenti e gli auditor se lo aspettano.

Sì. Il messaggio e la chiave segreta vengono inviati al nostro server tramite una connessione HTTPS crittografata per calcolare l’HMAC. Vengono usati solo per il calcolo e non vengono memorizzati né registrati.

Strumenti correlati

Strumento disponibile in altre lingue