MokaByte
Numero 34 - Ottobre 99
|
||||
|
|
|
||
|
|
|
||
Con
il completamento dell’iter legislativo inerente la firma digitale e relative
norme tecniche (DPR n. 513 del 10 Novembre 1997 e successive circolari
emanate dall’ AIPA), si apre per la Pubblica Amministrazione e i cittadini,
una nuova era che dovrebbe portare a fruire per via telematica di una serie
di servizi il cui espletamento era vincolato dalla presenza fisica dei
soggetti interessati. Operazioni come la richiesta di un certificato all’anagrafe,
la sottoscrizione di una polizza assicurativa o la stipula di un normale
contratto tra due società, con il riconoscimento della validità
della firma digitale ai fini legali (art. 5 del DPR 513/97), potranno essere
svolte stando comodamente seduti in poltrona davanti al computer.
Del resto con lo sviluppo e la diffusione di applicazione di e-commerce su Internet il problema della sicurezza della rete è stato in questo ultimo periodo enfatizzato tanto da provocare un forte incremento degli investimenti delle aziende in questo settore per il quale è prevista una forte crescita negli anni a venire. La piattaforma Java (e mi riferisco ovviamente al JDK 1.2 o Java 2) mette a disposizione, attraverso il framework denominato Java Cryptography Architecture (JCA) , una serie di facility per il supporto della firma digitale e dei servizi di crittografia più comunemente utilizzati. Inoltre, attraverso la firma digitale è possibile estendere le funzionalità di Applet scaricati dalla rete, consentendogli l’accesso alle risorse di una macchina client dopo averli autenticati per l’appunto come “Signed Applet”. Rimandando, per motivi di tempo e spazio, questo argomento ad una prossima occasione, in questo articolo ci limiteremo a fare una carrellata su quelle che sono le funzionalità messe a disposizione dalla JCA non prima di aver esaminato il paradigma sul quale si basa il funzionamento della firma digitale. L’architettura di riferimentoNella nostra architettura di riferimento (Figura 1), abbiamo un messaggio e/o documento che deve viaggiare attraverso la rete tra due soggetti (Mittente e Destinatario). Il problema è quello di garantire l’autenticità delle informazioni trasmesse e la loro integrità : dopo che il mittente ha firmato il messaggio, una qualsiasi manomissione del messaggio deve poter essere rilevata dal destinatario. Per soddisfare tale esigenze, è necessario che per ogni soggetto in grado di inviare messaggi, siano generate due chiavi asimmetriche : una pubblica, attraverso la quale coloro che riceveranno i messaggi effettueranno la verifica, e una privata con la quale sarà firmato il messaggio. Queste chiavi saranno in relazione matematica tra loro, ma in nessun caso sarà possibile risalire a partire dalla chiave pubblica a quella privata.
La chiave pubblica
sarà distribuita attraverso un certificato reso disponibile da un
ente certificatore ( in Italia, le modalità di iscrizione all’albo
degli enti certificatori sono prescritte in una circolare dell’AIPA in
cui è previsto che, in base al DPR 513/97, si dovrà trattare
di società per azioni, SpA, con un capitale sociale di almeno 12,5
miliardi di lire).
Java Cryptography ArchitectureCome abbiamo già detto, JCA è un framework estendibile ed interoperabile attraverso il quale in Java 2 viene reso disponibile un insieme completo di servizi di crittografia tra cui anche le API per il supporto della firma digitale.In JCA uno dei concetti più interessanti è quello del Provider : un vendor di servizi crittografici resi disponibili e manipolabili attraverso il framework stesso. Per aggiungere un Provider al framework è necessario estendere la classe java.security.Provider. Ma ora concentriamoci sul codice da scrivere (per la verità non molto complesso ed anche intuitivo) che ci permette di realizzare i servizi principali dell’architettura precedentemente descritta. Per fare questo, ci serviremo del provider di default (quello della Sun) che il JCA ci mette a disposizione. Le funzionalità a cui siamo interessati per realizzare la nostra architettura sono i seguenti :
Generazione del message digestMessageDigest sha=MessgeDigest.getInstance(“SHA-1”);
KeyPairGenerator keyGen=KeyPairGenerator.getInstance(“DSA”) ;
Generazione e
verifica della firma digitale
Signature dsa=Signature.getInstance(“DSA”) ;
PublicKey pub=pair.getPublic() ;
ConclusioniCome abbiamo visto JCA mette a disposizione un set di servizi di crittografia completo, flessibile, facile da usare ed ulteriormente estendibile con il download e l’installazione della Java Cryptography Extension (JCE). Ciascun servizio può essere usato in combinazione con ciascun altro per ottenere il livello di sicurezza desiderato, implementando così l’architettura di security che più si adatta alle proprie esigenze. Ad esempio, in un modello in cui si non vuole garantire l’integrità delle informazioni che viaggiano attraverso la rete, ma si vuole che mittente e destinatario si scambino messaggi criptati, si può utilizzare la chiave pubblica e privata in modo inverso a come erano utilizzate combinate con la firma digitale : criptare i messaggi con la chiave pubblica e decriptarli con quella privata, scambiando così di ruolo anche mittente e destinatario.Il package di riferimento per chi volesse approfondire tali argomenti è il java.security. |
||
Antonio Furone è laureato in Informatica. Attualmente si occupa della progettazione, dello sviluppo e dell’integrazione di applicazioni internet/intranet, distribuite e client/server. E’ uno specialista nella progettazione e nella programmazione object oriented ed event driven. |
|
||
|
||
MokaByte ricerca
nuovi collaboratori
|
||
|