U.O. Autonoma Informatica
Relazione Tecnica
Libreria di firma digitale P7MUtility
Codice
Classificazio Ad uso interno
ne
Autorizzati
Autore
Enrico Doni
Nome file
LibreriaFirmaDigitale.odt
Versione
00.02.00
Stato
12/12/11
Data ultimo
aggiornamento
In stesura
Approvato
da
Data
creazione
15/12/11
Cronologia:
Data
Autore
12/12/2011 Enrico Doni
Motivazione
Creazione documento e prima stesura
Sommario
1. - PREMESSA .................................................................................. 4
2. - DEFINIZIONI................................................................................ 4
3. - CARATTERISTICHE TECNICHE.........................................................4
4. - DESCRIZIONE SINTETICA............................................................... 5
5. - PROCESSO DI FIRMA..................................................................... 5
5.1.PREREQUISITI........................................................................................... 5
5.2.PROCESSO DI FIRMA STEP BY STEP................................................................5
6. - SUGGERIMENTI............................................................................ 5
6.1.APPLET...................................................................................................5
6.2.UPLOAD DOCUMENTO FIRMATO................................................................... 6
7. - APPENDICE 1 – FILE PKCS11.CFG.............................................. 6
8. - APPENDICE 2 – DISPOSITIVI E PERIFERICHE TESTATE.......................7
1. PREMESSA
La presente relazione tecnica ha lo scopo di documentare sinteticamente la libreria
P7MUtility, sviluppata dalla Provincia di Verona nell'ambito del progetto Opero (applicativo
per la gestione dei procedimenti amministrativi) a fronte della necessità di poter firmare
digitalmente i documenti prodotti nel workflow di redazione di un procedimento.
2. DEFINIZIONI
Firma elettronica: l'insieme dei dati in forma elettronica,allegati oppure connessi tramite
associazione logica ad altri dati elettronici, utilizzati come metodo di autenticazione
informatica.
Firma digitale: firma elettronica qualificata basata su un sistema di chiavi crittografiche,
una pubblica e una privata, correlate tra loro, che consente al titolare tramite la chiave
privata ed al destinatario tramite la chiave pubblica, rispettivamente, di rendere manifesta
e di verificare la provenienza e l'integrità di un documento informatico o di un insieme di
documenti informatici.
Applet: programma scritto nel linguaggio di programmazione Java che può essere incluso
in una pagina HTML e il cui codice è quindi trasferito sul client target ed eseguito dalla sua
Java Virtual Machine.
CADES: CMS Advanced Electronic Signatures, formato di busta crittografica definito nella
norma ETSI TS 101 733 V1.7.4 basata a sua volta sulle specifiche RFC 3852 e RFC 2634 e
successive modificazioni che con la deliberazione 45/2009 del CNIPA sostituisce lo
standard P7M.
3. CARATTERISTICHE TECNICHE
Versione: 0.2.0
Standard di firma: CADES
Linguaggio di programmazione: java (livello compliance JDK: v. 1.6*)
Librerie esterne utilizzate:
Nome
Versione
Jar
JavaMail
1.4.4
Mail.jar
BouncyCastle Provider
1.46
bcprov-jdk16-146.jar
BouncyCastle SMIME/CMS
1.46
bcmail-jdk16-146.jar
BouncyCastle TSP
1.46
bctsp-jdk16-146.jar
BouncyCastle OpenPGP/BCPG
1.46
bcpg-jdk16-146.jar
4. DESCRIZIONE SINTETICA
La libreria P7MUtility si compone di una serie di librerie esterne (descritte al capitolo 3),
una classe di test (Test.java) e la classe FileToSign.java. In sostanza la classe
FileToSign.java utilizza il pattern Façade per accedere alle interfacce delle librerie
BouncyCastle, mascherandone la complessità e implementando il codice necessario alla
firma digitale secondo lo standard CADES.
5. PROCESSO DI FIRMA
Di seguito la descrizione del processo di firma di un documento in formato CADES.
5.1. PREREQUISITI
Sicurezza: a questo livello è obbligatorio che l'hash di firma non viaggi sulla rete, si rende
necessario effettuare tutte le operazioni di firma sul client, quindi sviluppando una applet
java che utilizzi la libreria P7MUtility per firmare digitalmente.
Configurazione: per riconoscere e utilizzare correttamente il lettore di smartcard la applet
dovrà utilizzare un file di configurazione lato client, chiamato per convenzione PKCS11.cfg,
contenente il path delle DLL per il provider PKCS11 utilizzato dal lettore di smartcard.
5.2. PROCESSO DI FIRMA STEP BY STEP
•
esecuzione dell'applet (vedi 6.1);
•
richiesta da parte dell'applet del pin per la smartcard dell'utente;
•
eventuale download del file PKCS11.cfg, se non già presente sul client;
•
download del documento da firmare lato client;
•
firma del documento;
•
upload del documento firmato (vedi 6.2).
6. SUGGERIMENTI
6.1. APPLET
Dati i vincoli di sicurezza legati all'esecuzione delle applet java, riguardanti in generale
l'accesso alle risorse della macchina e in particolare alle operazioni di I/O sarà necessario
creare una applet firmata. Per ottenere la coppia di chiavi necessarie a firmare la applet
potrà essere utilizzato lo strumento keytool (scaricabile qui)) tramite la stringa eseguita
da riga di comando:
keytool -genkey -alias appletFirmataKey -keyalg RSA
il certificato va poi esportato:
keytool -export -alias appletFirmataKey -file certificateAppletFirmata.cer
Vai po creato un archivio in cui inserire i file class. Ad es:
jar -cvf appletFirmata.jar *.class
e si firma l'archivio:
jarsigner appletFirmata.jar appletFirmataKey (alias).
6.2. UPLOAD DOCUMENTO FIRMATO
Per eseguire l'upload del documento firmato si identificano due soluzioni, di seguito
descritte.
Application Server
Questa soluzione prevede l'utilizzo di un Application Server dedicato (es. Tomcat) che
implementi i meccanismi di comunicazione con la applet tramite, ad esempio, una servlet o
altri meccanismi simili. L' AS dovrebbe poi farsi carico di trasferire il documento
all'applicazione P@Doc, ad esempio tramite Web Service.
Web Service
Potrebbe essere più conveniente, visti i costi maggiori in termini di sviluppo della soluzione
precedente, implementare direttamente sulla applet un client in grado di serializzare il
documento firmato e spedirlo tramite HTTP o XML Web Service direttamente
all'applicazione P@Doc.
7. APPENDICE 1 – FILE PKCS11.CFG
Come descritto nel capitolo 5 il file PKCS11.cfg è necessario alla libreria P7MUtility per
puntare correttamente il modulo crittografico PKCS11 del lettore di smartcard. Tale modulo
varia da lettore a lettore ma in un caso (miniLector e SCR3310 v 2.0, vedi Appendice 2)
una stessa DLL è risultata funzionare per due lettori.
La struttura del file di configurazione è la seguente
Property
name
contiene il nome del lettore
library
Il path assoluto del modulo PKCS11
disabledMechanisms
Esempio:
Value
{CKM_SHA1_RSA_PKCS}, necessario per
non avere l'errore CKR_ARGUMENTS_BAD
name = scr3310
library = C:\WINDOWS\system32\IpmPki32.dll
disabledMechanisms = {
CKM_SHA1_RSA_PKCS
}
8. APPENDICE 2 – DISPOSITIVI E PERIFERICHE TESTATE
Dispositivi
Tipo
Fornitore
Smartcard
Infocamere
Periferiche
Tipo
Fornitore
miniLector
Bit4id
PC USB-SW Reader
Gemalto
SCR3310 v 2.0
SCM Microsystems