Cos'è HMAC?

HMAC (Hash-based Message Authentication Code) è una tecnica crittografica che combina una chiave segreta con una funzione di hash per produrre un codice di autenticazione univoco. A differenza dell'hashing semplice, HMAC garantisce sia l'integrità dei dati che l'autenticità, verificando che un messaggio non sia stato manomesso e confermando l'identità del mittente.

HMAC funziona elaborando il messaggio attraverso una funzione di hash (come SHA-256) due volte, mescolata con la chiave segreta in un modo specifico. Questo approccio di doppio hashing lo rende resistente agli attacchi di estensione della lunghezza che colpiscono le funzioni di hash semplici.

Come funziona HMAC?

L'algoritmo HMAC segue questi passaggi:

  1. Preparazione della chiave: Se la chiave segreta è più lunga della dimensione del blocco di hash, viene prima sottoposta a hash. Se è più corta, viene riempita con zeri.
  2. Hash interno: La chiave viene combinata con una costante di padding interno (ipad) tramite XOR, quindi concatenata con il messaggio e sottoposta a hash.
  3. Hash esterno: La chiave viene combinata con una costante di padding esterno (opad) tramite XOR, quindi concatenata con il risultato dell'hash interno e sottoposta nuovamente a hash.

La formula è: HMAC(K, m) = H((K ⊕ opad) || H((K ⊕ ipad) || m))

Questa costruzione garantisce che anche se un attaccante conosce l'hash di un messaggio, non può falsificare un HMAC valido senza conoscere la chiave segreta.

Perché usare HMAC invece dell'hashing regolare?

Funzionalità Hash Regolare HMAC
Integrità dei dati
Autenticazione
Richiede chiave segreta
Protezione contro l'estensione della lunghezza
Adatto per l'autenticazione API

Gli hash regolari (MD5, SHA-256) verificano solo che i dati non siano cambiati. HMAC dimostra inoltre che il messaggio proviene da qualcuno che conosce la chiave segreta, rendendolo essenziale per comunicazioni sicure.

Comprensione degli algoritmi di hash

Algoritmo Dimensione Output Livello di Sicurezza Prestazioni Raccomandazione
SHA-1 160 bit (40 caratteri esadecimali) Debole Più veloce Solo sistemi legacy
SHA-256 256 bit (64 caratteri esadecimali) Forte Veloce Default consigliato
SHA-384 384 bit (96 caratteri esadecimali) Molto Forte Moderato Esigenze di alta sicurezza
SHA-512 512 bit (128 caratteri esadecimali) Molto Forte Moderato Sicurezza massima

SHA-256 offre il miglior equilibrio tra sicurezza e prestazioni per la maggior parte delle applicazioni. SHA-1 è incluso per la compatibilità con i sistemi legacy, ma dovrebbe essere evitato per nuove implementazioni a causa di vulnerabilità note.

Confronto formato di output

Esadecimale: Utilizza caratteri 0-9 e a-f. Produce una stringa più lunga ma più facile da leggere e debuggare. Comune nelle API e nei log.

Base64: Utilizza caratteri A-Z, a-z, 0-9, +, e /. Produce una stringa più corta (circa il 33% più breve rispetto all'esadecimale). Comune nei token JWT e nella trasmissione di dati compatti.

Esempio per lo stesso HMAC:

  • Esadecimale: 5d5d139563c95b5967b9bd9a8c9b8c8d8e8f9a9b9c9d9e9f0a0b0c0d0e0f1011
  • Base64: XV0TlWPJW1lnub2ajJuMjY6Pmpm9nZ6fCgsMDQ4PEQ==

Descrizione dello strumento

Questo Generatore HMAC crea codici di autenticazione crittografica utilizzando l'API Web Crypto per un calcolo sicuro lato client. Inserisci il tuo messaggio e la chiave segreta per generare istantaneamente firme HMAC con l'algoritmo di hash desiderato (SHA-1, SHA-256, SHA-384 o SHA-512) e il formato di output (esadecimale o base64).

Tutti i processi avvengono interamente nel tuo browser: le tue chiavi segrete e i messaggi non vengono mai trasmessi a nessun server, garantendo una privacy e sicurezza complete.

[Resto del documento tradotto seguendo le stesse regole...]