Generatore HMAC-SHA256
Create una firma HMAC-SHA256 a partire da un messaggio e da una chiave segreta. Lo strumento codifica entrambi in UTF-8, applica la costruzione HMAC definita in RFC 2104 con SHA-256 e restituisce il tag di 256 bit in formato esadecimale o Base64. Gli sviluppatori lo usano per eseguire il debug delle firme webhook di servizi come Stripe, GitHub o Slack, firmare richieste API e confrontare i risultati con il proprio codice. La chiave non viene mai restituita né registrata nei log.
Domande frequenti
Che cos'è HMAC-SHA256?
HMAC-SHA256 è un codice di autenticazione del messaggio basato su SHA-256 e una chiave segreta, come definito in RFC 2104. Solo chi possiede la chiave può calcolare il tag corretto per un messaggio. Il risultato è di 32 byte, ovvero 64 caratteri esadecimali.
Come verifico una firma webhook?
Incollate il corpo esatto della richiesta grezza come messaggio e il segreto di firma come chiave, quindi confrontate il risultato con l'intestazione della firma. Molti servizi firmano una combinazione, ad esempio il timestamp di Stripe, un punto e il corpo: componete quindi il messaggio secondo le indicazioni della relativa documentazione. Basta modificare un solo byte per ottenere un tag diverso.
Esiste un vettore di test noto?
Il caso di test 2 di RFC 4231 usa la chiave Jefe e il messaggio what do ya want for nothing?; il risultato atteso è 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Questo strumento restituisce esattamente quel valore.
Come vengono codificati la chiave e il messaggio?
Entrambi vengono codificati come testo UTF-8. Se il segreto è fornito in formato esadecimale o Base64, come accade con alcuni servizi, i byte sono diversi dal testo visualizzato e dovete prima decodificare la chiave nel vostro codice. Gli spazi e le interruzioni di riga vengono conteggiati in entrambi i campi.
La mia chiave segreta viene memorizzata?
No. La chiave viene usata solo per calcolare il tag durante la richiesta. Non viene inclusa nella risposta, registrata nei log né memorizzata.
La chiave può essere vuota o molto lunga?
HMAC accetta chiavi di qualsiasi lunghezza, anche vuote. Le chiavi più lunghe di 64 byte vengono prima sottoposte a hash con SHA-256, come specificato nell'RFC. Per un uso reale, scegliete una chiave casuale di almeno 32 byte.
Dovrei scegliere l'esadecimale o Base64?
Usate il formato inviato dall'altra parte. GitHub e Stripe usano l'esadecimale, mentre Slack antepone v0= ai valori esadecimali e molti sistemi basati su AWS e JWT usano Base64. Entrambi codificano gli stessi 32 byte.
HMAC-SHA256 equivale a SHA-256 della chiave e del messaggio concatenati?
No. HMAC calcola l'hash del messaggio due volte, usando chiavi interne ed esterne con padding, proteggendo così dagli attacchi di estensione della lunghezza. Concatenare chiave e messaggio e calcolare l'hash una sola volta produce un risultato diverso e meno sicuro.
Come dovrei confrontare le firme nel mio codice?
Usate una funzione di confronto a tempo costante, come crypto.timingSafeEqual in Node.js o hmac.compare_digest in Python. Un normale confronto tra stringhe può rivelare informazioni temporali sul tag atteso.
Qual è la dimensione massima del messaggio?
Il messaggio e la chiave insieme possono contenere fino a 5 MiB di testo. È una dimensione sufficiente per i payload webhook tipici e le richieste API.