Firma Digitale in Java
La Firma Digitale in java viene utilizzata per autenticare, l’algoritmo viene implementato usando due chiavi asimmetriche, una privata per firmare ed una pubblica per verificare.
Introduzione
La Firma Digitale come l’Hmac è una tipologia di codice per l’autenticazione di messaggi utilizzata in diverse applicazioni legate alla sicurezza informatica. Tramite la Firma Digitale sempre come l’Hmac è infatti possibile garantire sia l’integrità che l’autenticità di un messaggio. La differenza sta sia nell’algoritmo di implementazione ma la differenza sostanziale sta nell’utilizzo di due chiavi asimmetriche (pubblica, privata), la chiave privata usata per firmare e la chiave pubblica per verificare la firma ricevuta.
Implementazione
Principali classi ed interfacce utilizzate nella Demo per la Firma Digitale sono state:
- crypto.Signature
- getInstance(“algoritmo”, “provider”)
- algoritmo
- SHA1whithDSA
- algoritmo
- getInstance(“algoritmo”, “provider”)
- initSign(privKey) (per inizializzare la firma)
- initVerify(pubKey) (per inizializzare la verifica)
- update(bytes)
- sign() (genera la firma)
- verify(sign) (verifica che la firma sia corretta)
I passi della Firma
Adesso vedremo un esempio di Firma Digitale implementato nella Demo.
- Generazione di una coppia di chiavi
- KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“DSA”, “SUN”);
- SecureRandom random = SecureRandom.getInstance(“SHA1PRNG”, “SUN”);
- inizialize(1024, random);
- KeyPair keyPair = keyGen.generateKey();
- Generazione di un Signature engine
- Signature sig = Signature.getInstance(“SHA1withDSA”, “SUN”);
- Generazione della Firma Digitale
- initSign(privKey);
- update(data);
- Byte[] signByte = sig.sign();
- Verifica della Firma Digitale
- initVerify(pubKey);
- update(data);
- try{
- verified = sig.verify(signByte);
- }catch(SignatureException e){
- verified = false;
- }
Sicurezza Firma Digitale
La Firma Digitale rispetto all’Hmac riesce a risolvere il problema di autenticare chi generare il codice, in quanto si usa la chiave privata per crittografare. Quindi riesce a garantire a livello di sicurezza la non ripudiabilità.
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: