Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Java: Tools per la generazione ed applicazione di firme digitali

In questo articolo vengono introdotte le applicazioni per la generazione di certificati e firme digitali descrivendo il ruolo delle Certification Authority
In questo articolo vengono introdotte le applicazioni per la generazione di certificati e firme digitali descrivendo il ruolo delle Certification Authority
Link copiato negli appunti

La sicurezza nella trasmissione elettronica di documenti richiede che il ricevente sia in grado di verificare l'integrità del contenuto ricevuto e che esso appartenga effettivamente a chi lo dichiara come proprio. L'integrità è in particolare la verifica dell'assenza di alterazioni prodotte, ad esempio, da azioni malevole da parte di terzi nella comunicazione (attacco Man in the Middle).

Certificati e cifratura a chiave pubblica

Nella crittografia a chiave simmetrica le due entità comunicanti condividono una chiave privata segreta che utilizzano per scambiare messaggi cifrati. Il problema legato a questo tipo di comunicazione è la modalità con cui le parti devono accordarsi per la scelta della chiave segreta e dell'algoritmo di cifratura. Occorre infatti fare in modo che nessuno possa in qualche modo intercettare questa fase.

La crittografia a chiave pubblica è concettualmente molto semplice e non richiede la delicata fase di determinazione di una chiave segreta condivisa. Supponiamo che Mario e Luisa vogliano comunicare utilizzando la crittografia a chiave pubblica. Mario, il destinatario dei messaggi di Luisa, ha due chiavi: una chiave pubblica disponibile a chiunque nel mondo e una chiave privata che conosce soltanto lui.

Per comunicare con Mario, Luisa prima recupera la chiave pubblica di Mario, poi cifra il suo messaggio usando questa chiave e un algoritmo di cifratura. Mario riceve il messaggio cifrato di Luisa e utilizza la sua chiave privata e un algoritmo per decifrare il messaggio. Le due chiavi, pubblica e privata, vengono poste in un certificato.

Come vedremo successivamente, attraverso l'utilizzo dell'applicazione keytool, saremo in grado di creare dei keystore contenenti le chiavi generate e di esportare da quest'ultimo sia il certificato contenente la chiave pubblica da distribuire, sia il certificato con la chiave privata da custodire segretamente.

Firma digitale

Ripensando con attenzione allo scenario precedente è facile intuire che manchi qualcosa a completamento di una comunicazione sicura. Un attaccante che si intromette nella comunicazione, sapendo che Mario e Luisa comunicano segretamente, potrebbe tentate di carpire informazioni da Mario spacciandosi per Luisa.

L'attaccante potrebbe tranquillamente recuperare la chiave pubblica di Mario e scrivere messaggi cifrati con questa chiave. Per Mario che riceve il messaggio, non c'è modo di capire se tale messaggio provenga effettivamente da Luisa.

In questo ambito si collocano le firme digitali. Una firma digitale è un'impronta elettronica applicata ad un messaggio che permette al ricevente di verificare non solo l'origine del messaggio, ma anche la sua integrità. Come vedremo successivamente l'utility jarsigner, congiuntamente all'utilizzo della chiave privata, consente di applicare una firma digitale a un documento.

Autorità di certificazione

Negli scenari precedenti abbiamo dato per scontato che il recupero di un certificato a chiave pubblica sia sicuro. In realtà non è cosi, chi può assicurarci che un certificato etichettato come appartenente a Mario, e da noi recuperato, sia effettivamente di Mario? Sembra mancare una qualche forma di garanzia che permetta di avviare una comunicazione sicura effettivamente nella sua fase iniziale.

Le Autorità di certificazione risolvono questo problema, esse infatti fungono da garanti sull'identità dei certificati. L'utilizzo del keytool porta alla generazione di un keystore contenente una coppia di chiavi (pubblica e privata).

La chiave pubblica è auto-firmata (self-signed) utilizzando la chiave privata, in poche parole stiamo facendo da garanti di noi stessi. Questa situazione è utile e accettabile solo in fase di sviluppo e test. Il modo corretto di proseguire è invece quello di richiedere ad una CA (Certification Authority) di firmare il nostro certificato a chiave pubblica per garantire a chi lo recupera l'identità del proprietario.

Il keytool non è soltanto un strumento per generare chiavi e keystore ma anche per inviare richieste di firma verso un'autorità di certificazione. In generale quindi chi recupererà il nostro certificato a chiave pubblica sarà anche in grado di contattare un'autorità di certificazione per verificare l'autenticità del certificato stesso.

Ti consigliamo anche