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