Con la firma digitale non si scherza!


Quest’oggi ho partecipato ad un convengo in SMAU (lo so che quello vero è in Ottobre, io sono andato alla versione business di Bologna) riguardante la conservazione sostitutiva e la fatturazione elettronica.

Ho apprezzato molto gli interventi dei relatori, e, per fortuna, non sono state dette cose che hanno sconvolto la mia interpretazione della normativa; ovvero: la strada intrapresa da sinekarta è buona, andiamo avanti così!

Due argomenti hanno però attirato la mia attenzione in modo particolare.

Il primo argomento (da qui il titolo dell’articolo) riguarda la firma digitale. L’ipotesi che avevo percorso nell’analisi dei requisiti di sinekarta prevedeva che il lettore di smartcard fosse attaccato al server (quello sul quale è installato alfresco) e la smartcard dell’RCS fosse sempre inserita nel lettore. Mi spiace dirlo ma questa ipotesi non stà in piedi!

In realtà il concetto (quello che vi stò per esporre) lo avevo già chiaro, non mi erano chiare le possibili implicazioni. La firma digitale (quella presente nella CNS) ha la stessa valenza della vostra firma autografa. Lasciarla abbandonata ed incustodita è MOLTO rischioso. Se un malintenzionato scrivesse un documento in cui si dichiara la vostra intenzione di regalargli 100.000 euro, e lo firmasse con la vostra firma digitale (trovata incustodita in sala server), sarebbe come se voi l’aveste firmato di vostro pugno.

Insomma, sarebbero GRANE

E’ importante capire che la firma digitale va trattata come la carta di credito, anzi con maggiore attenzione! Chiunque ne abbia una deve usarla con cura e conservarla in modo adeguato.

Detto questo modificherò quanto prima l’analisi dei requisiti funzionali di sinekarta, correggendo quello che si può definire tranquillamente un “buco di analisi”.

Il secondo argomento non è prioritario ma ci riguarderà quando implementeremo la fatturazione elettronica.

Devo premettere che non ho approfondito la normativa riguardante la fatturazione elettronica, quindi non mi stupisce questa mia lacuna, ma avere delle risposte non sarebbe male. Il mio dubbio riguarda le fatture attive.

Se un’azienda produce le fatture attive sotto forma di documenti analogici (non fatture elettroniche ma semplici PDF NON firmati) può mandarle in conservazione sostitutiva? Se si, quando? Da subuito o deve aspettare la chiusura dell’anno fiscale? L’azienda può evitare di stampare queste fatture?

Quindi, generalizzando, il mio quesito è: se voglio applicare il processo di conservazione sostitutiva alle fatture attive, senza realizzare la fatturazione elettronica, quali sono le regole da applicare?

Attendo fiducioso le vostre indicazioni!

Annunci

Firma digitale: firmiamo un documento PDF/A


Prima di tutto un doveroso GRAZIE a Giuseppe, che, tramite la discussione sul gruppo Il Mercato Italiano del Lavoro di linkedin, mi ha aiutato fare chiarezza sulla differenza tra Carta Nazionale dei Servizi (CNS) e Firma Digitale.

Devo ammettere che non mi ero posto il problema, ero convinto che le due cose fossero una unica…

Invece non è cosi! La CNS è “una smart card per accedere ai servizi online della Pubblica Amministrazione su tutto il territorio nazionale”, questo è quanto indicato nel sito http://www.progettocns.it/. Di fatto la CNS è un contenitore nel quale possono essere “caricati” diversi servizi, tra i quali la firma digitale.

Un elenco di servizi abilitati all’utilizzo della CNS oggi attivati dalle Pubbliche Amministrazioni è disponibile sul Portale Nazionale del Cittadino (per ora non funziona, ma spero che nei prossimi giorni possa godere di miglior salute…).

Ma torniamo a noi ed ai nostri argomenti tecnici da smanettoni che tanto ci piacciono.

Nell’ultimo articolo abbiamo visto come utilizzare uno degli strumenti gratuiti trovati in rete per applicare la firma digitale ad un documento.

Non tutti sanno, però che, da un’anno a questa parte, è possibile firmare i documenti, oltre che nello scomodo formato p7m, anche in un più semplice PDF. Per chi volesse saperne di più, nel wiki di progetto trovate tutti i riferimenti del caso.

Messaggio per chi utilizza il noto software di infocert, lo sapevate che (parlo esclusivamente della versione gratuita) dike è in grado di verificare anche la firma di un documento PDF, oltre che di un p7m? Dike non sembra però in grado di produrre file PDF come risultato della firma.

Come è possibile firmare un PDF? In realtà è più semplice di quello che sembra, in rete si trovano diversi esempio, sia applicati alle realtà internazionali che applicate a quelle italiane. In particolare mi rifaccio (ma gaurda un po’) al software che abbiamo deciso di utilizzare per sinekarta : javasign.

Nel sito di javasign è presente una paginetta con un pezzo di codice java che permette di firmare un PDF, eccola : http://javasign.sourceforge.net/pdf.shtml

Ovviamente questo è stato il primo esempio che ho fatto girare sul mio PC al quale ho attaccato il lettore di smartcard nel quale ho inserito la mia carta nazionale dei servizi contenente la mia firma digitale…. fiuuuuuuu, sembrava una strofa della canzone di branduardi “alla fiera dell’est”

ecco il codice :

Security.addProvider(new BouncyCastleProvider());
String driver = “incryptoki2.dll”;
String KEY_LABEL = “DSPrivateKey#0”;
String PIN = “********”;
String SIGN_PIN = “000000”;
Calendar now = Calendar.getInstance();
Certificate[] certs = new Certificate[1];
// connessione al lettore smartcard per ottenere il certificato
SinekartaCryptokiGenerator p7genSC = new SinekartaCryptokiGenerator(driver, KEY_LABEL, PIN, SIGN_PIN);
certs[0] = p7genSC.getCertificate();
// documento in input
PdfReader reader = new PdfReader(PDF_PREFIX+PRIMO_PDF);
// documento in output
FileOutputStream fout = new FileOutputStream(PDF_PREFIX+”signed_”+PRIMO_PDF);
// inizio procedura di firma
PdfStamper stamper = PdfStamper.createSignature(reader, fout, ”);
// definisco i cirteri di visualizzazione della firma
PdfSignatureAppearance sap = stamper.getSignatureAppearance();
sap.setCrypto(null, certs, null,PdfSignatureAppearance.SELF_SIGNED);
sap.setReason(“Esempio di firma digitale applicata ad un documento PDF/A”);
sap.setLocation(“Italy”);
sap.setExternalDigest(new byte[128], new byte[20], “RSA”);
sap.setProvider(“sinekarta/javasign”);
sap.setSignDate(now);
sap.preClose();
PdfPKCS7 sig = sap.getSigStandard().getSigner();
// creo la firma del documento
byte[] content = streamToByteArray(sap.getRangeStream());
byte[] fingerprint = MessageDigest.getInstance(“SHA-1”, “BC”).digest(content);
byte[] signatureBytes = p7genSC.buildSignatureFromDigestedContent(fingerprint);
// appongo la firma al documento
sig.setExternalDigest(signatureBytes, null, “RSA”);
sig.setLocation(sap.getLocation());
sig.setReason(sap.getReason());
sig.setSignName(((X509Certificate)certs[0]).getSubjectX500Principal().getName());
sig.setSignDate(now);
// scrivo la firma e chiudo il PDF
PdfDictionary dic = new PdfDictionary();
dic.put(PdfName.CONTENTS, new PdfString(sig.getEncodedPKCS1()).setHexWriting(true));
sap.close(dic);

e questo è il risultato : signed_HelloWorld.pdf

E’ stato veramente molto facile… Ho anche provato a leggere il documento tramite dike, per verificare la firma digitale apposta, ovviamente la firma è valida!!!

Implementare la conservazione sostitutiva, da dove si comincia?


Alla base della conservazione sostitutiva c’è la firma digitale, questo articolo vi spiegherà come fare per applicare la firma digitale (ed il riferimento temporale) ad un documento.

Come prima cosa dovete procurarvi una carta nazionale dei servizi (CNS).

Questa (il formato è lo stesso delle carte di credito, il termine tecnico è smartcard) è una tessera a microchip che contiene la firma digitale di una persona. La firma digitale è infatti sempre associata ad una persona fisica, MAI ad un’azienda. Quindi, un’azienda che voglia applicare la firma digitale ad un documento, deve utilizzare la smartcard del proprio legale rappresentante.

Un’azienda (o una ditta individuale) ha diritto ad avere gratuitamente la prima CNS, il costo altrimenti è di 25 euro. Il costo della smartcard per un “normale cittadino” è comunque di 25 euro, anche per la prima. La carta nazionale dei servizi va richiesta alla camera di commercio.

Ora che avete la smartcard è necessario procurarsi un lettore di smartcard, ovvero un dispositivo hardware che sia in grado di leggere la CNS.

Esistono diversi tipi di lettore, cercando su e-bay (classico) le parole “lettore smartcard firma digitale” i prezzi vanno dai 7 ai 15 euro (più le spese di spedizione). I più recenti hanno un’interfaccia di tipo USB, quelli più datati hanno una più “antica” porta seriale.

Ho provato ad andare in un negozio di una famosa catena specializzata in articoli per ufficio ed i prezzi erano decisamente più alti (intorno ai 50 euro).

In alternativa alla coppia smartcard + lettore c’è la possibilità di ottenere un token di firma digitale. Un token è un dispositivo USB (molto simile ad una chiavetta di memoria) che contiene direttamente la firma digitale ed, essendo fornito di interfaccia USB, non necessita di un lettore. I costi sono decisamente più alti, il costo per il primo token è di 40 euro, i successivi costano 70 euro.
Inutile dire che un token è più comodo.

Abbiamo l’hardware, manca solo il software.

Anche in questo caso esistono diversi software che permettono di applicare la firma digitale ad un documento, ma visto il nostro interesse in javasign esploreremo questo.

Potete trovare javasign su sourceforge : http://sourceforge.net/projects/javasign/ , scaricate l’ultima versione ed installatelo. L’interfaccia di javasign è piuttosto spartana, come spesso avviene con i software java per desktop, ma a noi interessa perchè espone anche un’api java (che useremo da alfresco).

L’interfaccia di javasign è piuttosto spartana (come spesso avviene con i software java per desktop) ma a noi interessa perchè espone anche un’api java che useremo, a tempo debito, da Alfresco.
Colleghiamo il lettore USB, inseriamo la carta (facendo attenzione al verso) e facciamo partire javasign. Cerchiamo la directory che contiene il documento che intendiamo firmare e selezioniamolo; a questo punto clickiamo col bottone destro del mouse per attivare un menù a tendina all’interno del quale sceglieremo la voce “sign”. Questa operazione ci permetterà di creare una copia del documento originale che avrà estensione p7m, questo è un documento firmato con la firma digitale. Il formato p7m è un formato standard per la firma dei documenti, per poter visualizzare un tale documento è necessario un software specifico. Verisign è in grado di visualizzare i documenti p7m, basterà un semplice doppio click.

Ma dove possiamo arrivare con uno strumento del genere? Se pensassimo ad un software automatico che firmasse tutti i documenti aggiunti in una particolare directory che chiameremo (ad esempio) archivio? Guarda caso questo è il modo di pensare di Alfresco….

Facciamo 2 conti : in un’ora ci sono 3600 secondi, ipotizziamo di riuscire a firmare 100 documenti (ovviamente il processo di firma è più veloce, ma le stime è meglio sottostimarle) in un giorno (contando solo 20 ore) riusciremmo a firmare 2000 documenti, in un anno (contando 250 giorni lavorativi) firmeremmo …. 500.000 documenti … porca miseria sono mezzo milione e la stima è sicuramente bassa, è plausibile riuscire a quadruplicarla.