HMAC e hashing per le firme API: protezione dei webhook
Quando un servizio di terze parti ti invia dati tramite webhook o devi autenticare una richiesta API, hai bisogno di un modo per dimostrare che il messaggio non è stato manomesso e proviene realmente da chi dice di averlo fatto. L'hashing da solo non risolve questo problema; hai bisogno dell'HMAC. Comprendere la differenza tra un hash semplice e un HMAC e come verificare correttamente le firme fa la differenza tra un'integrazione sicura e una compromessa.
Cos'è un hash
Un hash è una funzione unidirezionale che trasforma qualsiasi input (testo, file, risposta API) in una stringa di lunghezza fissa. Lo stesso input produce sempre lo stesso output. Gli algoritmi di hashing comuni includono SHA-256, SHA-1 e MD5. Puoi usare a generatore di hash per vederlo in azione: "ciao" diventa sempre lo stesso hash SHA-256. La proprietà chiave è che l'hashing è deterministico ma impossibile da invertire; non è possibile recuperare l'input originale dall'hash.
Cos'è l'HMAC
HMAC sta per codice di autenticazione del messaggio basato su hash. A differenza di un semplice hash, HMAC combina un messaggio con una chiave segreta prima dell'hashing. Il provider del webhook ha una chiave segreta, esegue l'hashing del messaggio con quella chiave e ti invia il messaggio e l'hash. Ripeti il processo con la stessa chiave segreta; se l'hash calcolato corrisponde a quello inviato, sai che il messaggio è autentico e non modificato. IL Generatore HMAC lo strumento ti consente di testarlo con il tuo messaggio e segreto.
La differenza fondamentale: hash vs HMAC
Ecco perché è importante:
- Hash semplice: Chiunque può vedere il tuo messaggio e ricalcolare l'hash per crearne uno "valido". Non prova nulla.
- HMAC: Solo qualcuno con la chiave segreta può produrre l'HMAC corretto. Dimostra crittograficamente che il messaggio proviene dal detentore della chiave e non è stato alterato.
Se un servizio ti invia un webhook con solo un hash, un utente malintenzionato può intercettarlo, modificare i dati, ricalcolare l'hash e tu non te ne accorgeresti. Con HMAC e un segreto condiviso, l'aggressore non può falsificare una firma valida senza la chiave.
Verifica delle firme dei webhook nel codice
Quando arriva un webhook, il servizio fornisce il payload del messaggio e un'intestazione della firma (spesso X-Signature O X-Webhook-Signature). Il tuo codice dovrebbe:
- Recupera la tua chiave segreta dalla configurazione sicura (variabili d'ambiente, un gestore segreto).
- Calcola l'HMAC-SHA256 del corpo della richiesta grezza utilizzando quella chiave.
- Confronta il byte per byte dell'HMAC calcolato con l'intestazione della firma (utilizza sempre il confronto a tempo costante per evitare attacchi temporali).
- Se corrispondono, il webhook è autentico. In caso contrario, rifiutalo.
La maggior parte dei provider di webhook documenta il proprio algoritmo HMAC e il formato esatto da firmare: a volte si tratta del corpo JSON non elaborato, a volte di un timestamp concatenato con il corpo. Seguire esattamente le loro specifiche.
HMAC vs JWT: dove si adattano
I JWT (JSON Web Token) vengono spesso confusi con le firme HMAC. Un JWT è un token autonomo composto da tre parti: un'intestazione, un carico utile (attestazioni) e una firma. La firma può essere basata su HMAC o RSA. Decodificatori JWT ti consente di ispezionare e verificare i token. Mentre gli HMAC verificano un singolo messaggio, i JWT sono token che archivi e invii con ogni richiesta o chiamata API. Per i webhook e l'autenticazione dei messaggi una tantum, HMAC è più semplice e sufficiente. Per i token di sessione in corso o le credenziali API, un JWT è spesso più flessibile.
Privacy: firma e verifica interamente nel tuo browser
Gli strumenti HMAC e hash di TextArray vengono eseguiti interamente nel tuo browser. Nessun messaggio, segreto o firma viene caricato su un server. Non è richiesto alcun account e gli strumenti funzionano offline dopo il caricamento della pagina. Puoi incollare in modo sicuro i payload webhook e le chiavi API per testare ed eseguire il debug delle firme senza esporre i dati a terze parti o a servizi di registrazione. Ciò è particolarmente utile quando lavori con chiavi API sensibili o dati dei clienti durante lo sviluppo.
Iniziare
Inizia comprendendo l'hashing: usa il file generatore di hash per vedere come lo stesso input produce sempre lo stesso output SHA-256. Quindi spostati a Generazione HMAC per vedere come una chiave segreta modifica l'output. Prova a cambiare leggermente la chiave o il messaggio; l'HMAC si capovolge completamente, a differenza di un checksum ingenuo. Una volta compresi i meccanismi, applicali alla logica di verifica del webhook. Per carichi utili sensibili come testo crittografato O gettoni decodificati, abbinali sempre alle richieste firmate HMAC per garantire l'integrità e l'origine.