Come si applica la marca temporale?


Anche questa settimana l’argomento dell’articolo sarà una roba da informatici smanettoni, che bello!!!!

Sinekarta è prima di tutto un progetto software, quindi è meglio abbituarsi all’idea che gli atricoli tecnici inizino ad aumentare mentre quelli funzionali inizino a diminuire.

Ovviamente chiunque sia interessato ad approfondire un particolare aspetto della normativa, delle scelte funzionali o delle strategie di realizzazione, basta che chieda!

Che cosa è la marca temporale ed a cosa serve? ma soprattutto : perchè è necessario pagarla?

La funzione della marca temporale è di validare il momento (nel tempo) in cui il documento è stato prodotto. Un po’ come succede con alcuni cartacei (ad esmepio il passaporto) in cui viene applicata una marca da bollo che attesta il momento in cui il documento è stato reso ufficiale (o rinnovato).

Esiste un protocollo internet standard (RFC 3161) che definisce il comportamento di un ente (TSA – TimeStamp Authority o CA – Certification Authority) che intende erogare questi “bolli” virtuali. Questo standard è stato adottato anche per la marca temporale. Nel mondo esistono diversi enti che possono erogare questo servizio, diversi anche in modo gratuito (uno per tutti geotrust.com) ma solo alcuni sono considerati attendibili dalla normativa italiana.

L’elenco delle CA (o TSA), accreditate presso il CNIPA, con il relativi riferimenti, links e offerte di mercato, si può trovare sul sito web del CNIPA (www.cnipa.it).

Per capire esattamente in cosa consiste il processo di marca temporale (o validazione temporale) è utile studiare questa immagine :

  1. Per prima cosa viene estratta l’impronta (HASH) del documento sul quale si intende calcolare la marca temporale (nel caso di sinekarta il documento sarà l’xml che contiene diverse impronte).
  2. L’impronta viene inviata alla CA che accoda il timestamp (data e ora che devono essere conformi a specifiche di precisione)
  3. Il risultato del punto precedente viene firmato
  4. Al risutalto firmato viene accodato il timestamp della firma (questa volta in chiaro)
  5. Il risultato ottenuto è la marca temporale, viene restituita al richiedente

Questo scambio di dati avviene su protocollo HTTP (o HTTPS).

L’ultima domanda alla quale rispondere è : perchè si paga? Non ho idea se le CA debbano pagare allo stato una quota per ogni marca temporale assegnata (non mi stupirebbe se fosse così). Sicuramente le CA sono tenute, per legge, ad avere un’infrastruttura per conservare (almeno 20 anni) le marche temporali assegnate. Questo è il motivo per cui solo alcune CA vengono accreditate e possono rilasciare marche temporali a norma.

Ho la certezza che il processo per diventare una CA accreditata (considerando tutti gli aspetti del sistema) sia abbastanza complesso da giustificare (almeno in parte) i costi.

Fatturazione elettronica, una prima occhiata alla normativa.


Nell’ultimo articolo ho posto una domanda riguardo la conservazione sostitutiva delle fatture analogiche.

Anche in questo caso, le idee non mi si sono chiarite finchè non ho letto (con un minimo di attenzione) la normativa (in queso caso mi riferisco al decreto 23 gennaio 2004 – Modalità di assolvimento degli obblighi fiscali relativi ai documenti informatici ed alla loro riproduzione in diversi tipi di suppporto).

Nonostante i suggerimenti ricevuti sia da Francesco che da Lorenzo (peraltro entrambi corretti), ho girato attorno al problema senza che mi si accendesse la classica lampadina. Mi scuso con loro per la mia miopia…

La conservazione sostitutiva non si può applicare nello stesso modo a tutti i tipi di documenti, questo è un concetto che dobbiamo sempre tenere ben presente. La delibera CNIPA indica 3 procedure differenti per i documenti informatici, per i documenti analogici originali unici e per quelli non unici. La stessa delibera, inoltre, indica che alcuni documenti (quelli doganali e quelli di eccezionale valore storico) NON possono essere portati in conservazione sostitutiva.

I documenti “rilevanti ai fini tributari” sono un’ulteriore categoria di documenti, la cui conservazione va applicata con regole diverse da quelle specificate dal CNIPA. Per meglio dire, le regole sono molto simili (la base è la stessa) ma ci sono alcuni dettagli che cambiano. In questo caso le regole sono dettate dal Ministero dell’Economia e delle Finanze, sulla base di quelle del CNIPA.

Il suddetto decreto fa una distinzione tra “documenti informatici rilevanti ai fini delle disposizioni tributarie” e le “scritture contabili e i documenti analogici rilevanti ai fini delle disposizioni tributarie”.

Applicare la fatturazione elettronica significa rientrare nella prima categoria, l’azienda produce delle fatture sottoforma di documenti informatici. Non è tutto qui, applicare la fatturazione elettronica implica altre regole, ma per rispondere alla mia domanda ci basta questo. Dettaglio importante : le fatture elettroniche vanno portate in conservazione (marca temporale) con cadenza almeno quindicinale (entro 15 giorni dalla data di emissione).

La mia domanda riguardava la conservazione sostitutiva delle fatture analogiche, quindi si rientra nella seconda categoria. Anche in questo caso la normativa è chiara : anche i documenti analogici (dopo essere stati firmati dall’RCS) seguono le stesse regole dei documenti informatici; quindi anche le fatture analogiche devono essere portate in conservazione entro 15 giorni dalla data di emissione.

Prima considerazione : chiunque sostenga ancora che la normativa non è completa, evidentemente non l’ha mai studiata! Troppo facile dire “non è completa” senza soffermarsi a valutare le singole parole dei diversi documenti (decreti, delibere, …).

Un aspetto che, da informatico, mi ha fatto rabbrividire riguarda la modalità di archiviazione delle fatture analogiche. In questo caso è esplicativa la Risoluzione 158/E dell’Agenzia delle Entrata che cita : “La materializzazione su supporto fisico … e, più in particolare, la stampa su carta, sono, dunque, adempimenti ineludibili ai fini dell”esistenza stessa del documento” e ancora “si sottolinea che soltanto a seguito della materializzazione il documento potrà considerarsi giuridicamente esistente e rilevante ai fini delle disposizioni tributarie”. Questo significa che se produco una fattura analogica (ad esempio un PDF), sono costretto a stamparla perchè questa diventi reale!!!!Certo! Stamparla per poi scannerizzarla e mandare in conservazione l’immagine.

Ma non finisce qui… Visto che stampare la fattura per poi scannerizzarla e distruggerla non ha molto senso, il Ministero ci ha messo una pezza ed ha stabilito che : “ferma restando la necessità della materializzazione su supporto fisico dei documenti rilevanti ai fini delle disposizioni tributarie, formati tramite strumenti informatici, ma non aventi, fin dall”origine i requisiti dei documenti informatici, per la loro conservazione si potrà procedere all”acquisizione della relativa immagine tramite il processo di generazione dello spool (o rappresentazione grafica) di stampa, a condizione che l”immagine così acquisita rispecchi in maniera, fedele, corretta e veritiera il contenuto rappresentativo del documento”.

Di fatto, a parte la questione dello spool (sulla quale torneremo più avanti) l’importante è che il documento mandato in conservazione sostitutiva rispecchi in maniera, fedele, corretta e veritiera il contenuto rappresentativo del documento. Cosa significa? Significa che il PDF/A che è stato stampato può essre mandato direttamente in conservazione, senza preoccuparsi di effettuare una scannerizzazione. Questo non vuole dire che la stampa non si debba fare…. ma subito dopo averla fatta la potremo cestinare. (CHE CAVOLATA!!!)

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!

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!!!