HMAC in Java
L’HMAC in java viene utilizzato per autenticare, nell’algoritmo viene usata una chiave simmetrica, che serve per firmare o verificare. HmacSHA1, HmacSha256.
Introduzione
L’Hmac in java è una tipologia di codice per l’autenticazione di messaggi basata su una funzione hash, utilizzata in diverse applicazioni legate alla sicurezza informatica. Tramite l’Hmac è infatti possibile garantire sia l’integrità che l’autenticità di un messaggio. Il messaggio originale viene codificato tramite una chiave simmetria condivisa tra i due agenti generando un codice che sarà inviato insieme al testo in chiaro.
Implementazione
Principali classi ed interfacce utilizzate nella Demo per l’Hmac sono state:
- crypto.Mac
- getInstance(“algoritmo”, “provider”)
- algoritmo
- HmacSHA1
- HmacSha256
- algoritmo
- getInstance(“algoritmo”, “provider”)
- init(key)
- update(bytes)
- doFinal()
I passi della codifica
Adesso vedremo un esempio di codifica Hmac usando come funzione hash Sha-1.
- Generazione della chiave
- KeyGenerator keygen = KeyGenerator(“HmacSha1”)
- Key maKey = keygen.generateKey();
- Creazione di un oggetto MAC
- Mac mac = Mac.getInstance(“HmacShai1”);
- Inizializzazione del MAC
- init(macKey);
- Restituzione del MAC
- update(text.getByte());
- byte[] result = mac.doFinal();
- Verifica del MAC
- Si prende in input (messaggio, mac)
- Si calcola il mac del messaggio con la chiave Simmetrica
- Si confronta il mac calcolato con il mac ricevuto, se sono uguali torna esito positivo se sono diversi torna esito negativo
Sicurezza Hmac
L’Hmac è soggetto ad attacchi di tipo replay in quanto un messaggio con la stessa chiave torna sempre lo stesso codice mac. Una soluzione a questo tipo di attacco è cifrare con cifratura simmetrica in modalità CBC il codice mac e spedirlo. Oppure usare crittografia asimmetria con il vantaggio di non dover avere il problema della confidenzialità della chiave. Oppure mantenere condiviso, e segreto tra i due agenti, un valore SAB da concatenare al messaggio su cui calcolare l’Hmac:
HMAC(SAB||M)
Un altro problema è che non si ha la sicurezza di chi ha generato l’Hmac tra i due agenti quindi non garantisce autenticazione su chi ha generato il codice.
In allegato una demo realizzata in Java da me:
La relazione dove è presente quest’articolo:
Delitala_Oreste_Crittografia_Java_Relazione
Una breve presentazione sull’argomento: