La firma digitale in Italia offre un’altissima tutela del valore probatorio dei documenti: considerando la crescente diffusione è utile capire perché è sicura e come apporla affrontando diverse scelte. Da sottolineare subito che indipendentemente dal modo con cui è stata apposta la firma, questa deve essere sempre verificata, con il controllo di non revoca del certificato tramite la chiave pubblica del firmante, con esito affermativo o negativo. Inutile sottolineare che un documento firmato digitalmente non deve essere modificato, altrimenti falliranno le successive verifiche.
Dichiarazioni doganali d’importazione, come funziona la procedura di digitalizzazione
Firma digitale, le proprietà matematiche delle chiavi
Tutto nasce nel 1976 quando due ricercatori, Diffie ed Hellman (D-H), ebbero un’idea sulla crittografia (che fu poi chiamata “a chiave pubblica”) ed altri tre, Rivest, Shamir e Adleman, nel 1977, trovarono il modo di applicarla in pratica (RSA). I servizi segreti britannici avevano anticipato l’idea di qualche anno, ma la cosa non fu a quel tempo resa pubblica. In quanto segue userò come sinonimi i termini cifrare e criptare; similmente per decifrare e decriptare.
L’idea di D-H si basava sulla premessa di associare ad ogni soggetto una coppia di chiavi,[1] decidendo di chiamarle chiave privata e chiave pubblica. Ci riferiremo alla coppia di Alice usando la notazione (KA,Pu, KA,Pr), con ovvio significato dei simboli. L’approccio prevedeva il principio di diffondere quanto più possibile la chiave pubblica e custodire gelosamente, mantenendola assolutamente segreta, la chiave privata, che per questo viene talvolta detta “segreta”.[2] Secondo D-H le due chiavi dovevano essere legate da una relazione matematica particolare: se si cripta con una qualsiasi delle due, si decripta con l’altra. Non riuscirono a trovarla e il problema venne risolto pochi anni dopo con l’algoritmo RSA. Siano allora (KA,Pu, KA,Pr) le chiavi di Alice e (KB,Pu, KB,Pr) quelle di Bob. Un’applicazione immediata dell’idea è: Alice vuole mandare un messaggio M a Bob e vuole che Bob sia certo della sua identità. Alice invia a Bob: (M, F), essendo F la cifratura di M effettuata con la chiave privata di Alice; notazione F = KA,Pr{M}. Bob riceve una coppia (M’, F’), che dovrebbe coincidere con quella inviata; Bob può effettuare una verifica decifrando F’ (serve la chiave pubblica di Alice, che in quanto pubblica è disponibile a tutti), con l’aspettativa di ritrovare così M’.
Le proprietà matematiche delle chiavi sono tali che solo cifrando con KA,Pr si poteva decifrare con KA,Pu e, data la segretezza di KA,Pr, solo Alice poteva aver fatto tale cifratura. Questa idea di base non era perfetta e si prestava a degli attacchi[3] per cui l’idea è stata modificata leggermente, usando una funzione di hashing di qualità crittografica (nota).
Funzioni di hashing
Matematicamente una funzione di hashing, o semplicemente una funzione hash, è una funzione che trasforma un documento nella sua impronta, ove l’impronta di un documento digitale è una sequenza binaria di lunghezza prefissata associata al documento: una modifica nel documento, anche di un solo bit, determina una modifica radicale nell’impronta. Naturalmente non c’è significato alcuno da attribuire all’impronta; esse appare ed è una sequenza casuale di bit. Ad esempio, SHA256 è una nota funzione di hashing e se noi calcoliamo l’impronta di “vacanza” otteniamo
fabrizio@pc-damore:~$ echo “vacanza” | shasum -a256
c6fe7cd6700e41d9e7a2e88ab98734bf6b8610732416371902f17c1b1c88d04f –
Non si vede esplicitamente, ma nell’esempio la parola “vacanza” è seguita da un “a capo.” Omettendo questo:
fabrizio@pc-damore:~$ echo -n “vacanza” | shasum -a256
03c6848a249287ff4e39d0079e00ce3caa031a59f6d7af435ee1544d36533d13 –
con la modifica completa dell’impronta (scritta in esadecimale). I trattini che seguono l’impronta indicano che il documento digitale di cui calcoliamo l’impronta non è un file (ma è il prodotto del comando “echo”), altrimenti al posto dei trattini avremmo avuto il nome del file.
fabrizio@pc-damore:~$ shasum -a256 .profile
28b4a453b68dde64f814e94bab14ee651f4f162e15dd9920490aa1d49f05d2a4 .profile
In generale il numero di impronte differenti è assai minore del numero di documenti possibili, il che significa che è pacifico che esistono documenti differenti che hanno la stessa impronta (fenomeno chiamato collisione): l’importante è la difficoltà nel reperire tali documenti.
La qualità crittografica delle funzioni di hashing
Di qui nascono i requisiti affinché una funzione di hashing sia di qualità crittografica:
- Non-invertibilità. Difficoltà di reperire il documento di partenza data l’impronta.
- Resistenza alle collisioni. È difficile7 reperire due documenti differenti che siano collidenti.
- Lunghezza dell’impronta superiore a 160 bit.[4]
Non è stata mai provata formalmente l’esistenza di una funzione hash di qualità crittografica ma ci sono forti sospetti che varie funzioni oggi usate, appartenenti, ad es., alle famiglie SHA-2 e SHA-3, lo siano. Sia chiaro che deve essere difficile trovare collisioni, che sono comunque numerose. C’è molto da dire in più sulle funzioni hash, ma quanto detto basta ai fini della firma digitale.
I certificati della firma digitale: come funzionano
La crittografia a chiave pubblica, specie dopo l’avvento di RSA, che realizzava l’idea di D-H, ha subito offerto risposte brillanti a varie domande, ma soffriva di un problema fondamentale: come essere sicuri che la chiave pubblica di un utente, diciamo Alice, è veramente di Alice e non di un qualche impostore? La domanda è importante perché il mentire su una chiave pubblica determina l’inutilità di tutta la crittografia a chiave pubblica. Una soluzione è consistita nell’idea dei certificati digitali,[5] documenti digitali emessi da un’autorità di certificazione e firmati digitalmente dall’autorità, che stabiliscono l’associazione fra un soggetto e una chiave pubblica. Una autorità di certificazione è una organizzazione, normalmente a fini di lucro, che è stata approvata e che ha il compito di certificare chiavi pubbliche. In Italia esiste una lista di autorità di certificazione riconosciute da AgID, recentemente descritta con nuove modalità per conformità al regolamento europeo eIDAS[6] (l’acronimo sta per electronic IDentification Authentication and Signature). Di tali autorità AgID rende disponibile anche la chiave pubblica (usata per verificare la firma sul certificato).
Attenzione, esistono circostanze che provocano la revoca delle chiavi: non solo queste hanno una naturale scadenza, ma vengono revocate per specifici motivi: chiave privata persa o compromessa, ruolo cessato, morte ecc. Ci sono vari metodi per accertare la non revoca di una chiave (e quindi di un certificato): i due principali sono le Cerificate Revocation Lists (CRL) e il protocollo OCSP (Online Certificate Status Protocol). Le CRL sono documenti digitali emessi periodicamente dall’autorità (che in una CRL pubblica anche la data della pubblicazione della prossima lista), e firmati digitalmente dalla stessa, in cui sono elencati i numeri seriali dei certificati revocati, assieme ad altre informazioni, come ad esempio la data di revoca e il motivo. Il problema è che queste CRL, emesse periodicamente dall’autorità (una frequenza tipica potrebbe essere settimanale), non consentono di essere informati tempestivamente. Sono reperibili da una risorsa web indicata dall’autorità nel certificato da verificare.
Il protocollo OCSP consente invece la verifica puntuale ed istantanea, mediante una URL specificata nel certificato da verificare. Non sempre, e non necessariamente, tale risorsa è disponibile, specie nei certificati che sono stati redatti secondo i vecchi standard del protocollo che specifica il formato dei certificati, attualmente X509 versione 3. Sul protocollo OCSP v’è stata abbondante discussione e la tecnica si è raffinata a causa di problemi di privacy, di cui tuttavia non tratteremo.
Definizione di firma digitale
Concettualmente, la definizione è molto semplice ed agile. Dato un messaggio M la sua firma F è definita come la cifratura con chiave privata dell’impronta del messaggio, calcolata con funzione hash H nota: F = KA,Pr{H(M)}. Ovviamente la firma dipenderà da M; inoltre, nello standard PKCS #1, sono specificati una serie di dettagli operativi, che descrivono il trattamento subito dal messaggio prima della firma, dettaglio tecnico che non approfondiremo. Basti sapere che due firme apposte successivamente sullo stesso messaggio risulteranno non eguali.
Dato che la firma digitale appare come un ciphertext in cui non si può riconoscere nulla, risulta fondamentale effettuare una verifica sulla firma. Di nuovo, AgID ci aiuta fornendo una lista (non esaustiva) di software che permettono di fare la verifica; si tratta in genere di software commerciali nati per supportare l’utente nell’apporre una firma digitale, e in quanto tali richiederanno l’acquisto del servizio, ma che consentono generalmente lo svolgimento della verifica senza dover acquistare nulla. Anche Sapienza Università di Roma offre un sistema di verifica che può essere usato senza dover installare alcunché. La verifica della firma va sempre fatta quando si è in presenza di un documento firmato, precisando anche che si vuole il controllo del certificato e della non-revoca (in genere proposte come opzioni). Fintantoché la verifica non è stata completata con successo il file potrà “sembrare” firmato ma in effetti non sapremo nulla di realmente vero in merito alla validità della firma. In tal caso appare estremamente insidioso il fatto che alcuni software riconoscano immediatamente un file firmato: è necessario procedere con la verifica, che richiederà qualche secondo.
Come si svolge la verifica
Concettualmente, la verifica consiste nel confrontare due impronte: chiamando (M, F) la coppia inviata (messaggio, firma digitale sul messaggio) e (M’, F’) quella ricevuta si tratta di confrontare H(M’) con KA,Pu{F’} che dovrebbe essere restituire H(M) (un attaccante dovrebbe compromettere la chiave privata di Alice per produrre la cifratura dell’impronta di un documento con la chiave privata di Alice). Se H(M’) è uguale a KA,Pu{F’} allora la verifica ha esito positivo, altrimenti negativo.
In caso di esito positivo allora il file potrà essere accettato e la firma sarà legalmente valida. Se l’esito è invece negativo, non si accetterà la firma (né l’integrità del documento firmato) e la validità legale sarà compromessa. Si noti che in questo caso l’unica azione che si può fare per avere un file regolarmente firmato è chiedere una nuova firma e un nuovo invio. Si dirà, con estrema imprecisione, che la firma garantisce l’integrità del documento firmato (ambiguo, perché se la verifica fallisce, la versione integra del documento non la si avrà con un qualche procedimento automatico). Solo a verifica conclusa sarà valido il requisito del non-ripudio (il firmante non potrà rinnegare la firma apposta).
La firma è usata non solo per siglare legalmente documenti digitali, ma anche in fase di autenticazione, per provare – in vari modi possibili – la propria identità.
Marcatura temporale
In molte circostanze il software di verifica della firma o anche uno piccolo glifo apposto sul documento mostreranno l’istante di firma. Ciò è importante perché quando effettuiamo una verifica di firma possiamo specificare rispetto a quale data la verifica debba essere fatta. Ad esempio, Alice può firmare un documento oggi ed avere la scadenza delle chiavi domani. Se dopodomani effettuiamo una verifica della firma la domanda legittima sarà: erano valide le chiavi al momento della firma? In effetti una firma rimane valida per sempre, anche oltre la scadenza o revoca delle chiavi, con una importante eccezione: se una revoca delle chiavi è retroattiva, l’uso delle chiavi in una data posteriore alla data indicata nella revoca è invalido.[7]
Il tempo è dunque un parametro spesso critico e nasce il problema che una firma digitale apposta usando un dispositivo potrà indicare l’istante definito dal dispositivo. Ne segue la facilità di abuso legata al fatto che si può facilmente cambiare data e orario del proprio dispositivo. L’approccio generale nel produrre una marcatura temporale si basa sul contributo di qualcuno (timestamp authority, TSA) che fornisce data e ora: alla TSA si fa avere l’impronta H(M) a cui la TSA aggiungerà i dati di marcatura temporale. Dell’impronta, arricchita della marcatura temporale, viene calcolato un nuovo hash, che poi sarà firmato digitalmente dalla TSA, che alla fine restituirà marcatura temporale e firma digitale (cifratura dell’impronta ottenuta dall’impronta originale del documento da marcare temporalmente seguita dalla marcatura temporale, effettuata tramite chiave privata dalla TSA); si noti che tutto è costruito in modo che la TSA non conosca il documento da marcare temporalmente (ma solo la sua impronta, calcolata con una funzione di hashing crittografico e quindi non invertibile). Nel caso la TSA sia una autorità riconosciuta a fornire marcature temporali e la sua firma digitale sia verificabile tramite una chiave pubblica attendibile parliamo di trusted timestamping; ciò esclude il caso di usare il dispositivo di firma per apporre marche temporali.
Applicazioni della firma digitale italiana
Abbiamo già osservato che tutto è regolato dal già citato CAD. Ci sono due tipi di firma: locale e remota, ove la differenza sta nel fatto che la chiave privata è custodita (in forma crittografata) dal firmante o remotamente. Ci sono evidentemente vantaggi e svantaggi fra i due approcci: per la firma locale occorre un dispositivo di firma (spesso una smart-card) gestito dall’utente che avrà cura della propria chiave privata. In caso di smarrimento/perdita di questa le chiavi dovranno essere revocate. Nel caso di firma remota occorre avere fiducia in un soggetto remoto e in quel momento la disponibilità di una connessione a Internet, il che può divenire un ostacolo.
I formati
Altro tipo di classificazione sul tipo di firma vede tre tipi di firma: PAdES, CAdES e XAdES. Tutti e tre hanno validità legale. Diciamo subito che nel caso di firma PAdES, questa è possibile solo per i documenti in pdf. In questo caso le informazioni di firma, e sull’eventuale marcatura temporale, nonché il certificato attestante la chiave pubblica del firmante (ed eventuali altri certificati), sono direttamente inseriti nel documento risultante, ancora in formato pdf. I software di visualizzazione/stampa del pdf saranno comunque capaci di mostrare il corretto pdf, indipendentemente dalla presenza di firme. Ciò è senz’altro utile e permette comunque la visualizzazione immediata di un documento firmato.
La firma CAdES è più generale e può essere apposta su qualsiasi tipo di file; di contro produce un risultato in formato p7m solo visualizzabile dai software per apporre/verificare una firma. Il formato p7m prende il nome di busta crittografica ed è in sostanza un contenitore al cui interno sarà possibile trovare il documento originale, la firma ed uno o più certificati. Il software di verifica sarà in grado di estrarre le componenti desiderate. Di fatto per un file pdf sarà sempre preferibile la firma PAdES, sebbene sia possibile quella CAdES.
La firma XAdES è basata sul celebre linguaggio di mark-up e formato XML. È molto più verbosa e ricca di dettagli, può firmare file in XML, ed è tipicamente usata per le firme automatiche (via software), non direttamente apposte da un utente. Sfrutta agevolmente i vari metadati presenti nello XML, ma ha lo svantaggio che l’XML non è di facile lettura, benché usi il formato testo. Siamo in presenza, dunque, di sei casi (tre formati e due modalità), tutti aventi validità legale. A questi aggiungiamo la firma ASiC. Non si tratta di un vero e proprio modo di apporre una firma digitale, ma di un contenitore (in formato zip) di dati utilizzato per raggruppare un insieme di file, firme e/o marche temporali. Non andremo nel dettaglio, ma esistono più tipi di standard all’interno di ASiC.
__
Note
- Una chiave è una sequenza casuale di bit, di lunghezza prefissata. Simile a una password, ma maggiormente variabile e più difficile da indovinare (e ricordare). ↑
- Segreta è anche la chiave nella crittografia simmetrica, qui non trattata. ↑
- Per esempio, un forgery esistenziale (la capacità di un attaccante di produrre un documento, che magari non significa nulla, la cui cifratura con la chiave privata di Alice è nota, senza conoscere la chiave privata). ↑
- Secondo gli informatici difficoltà significa “impossibilità in tempi umani.” Non mi addentrerò maggiormente nel concetto. ↑
- Nel 2014, Google decretò che SHA-1, funzione hash avente un’impronta di 160 bit, era ormai obsoleto e permetteva attacchi, per esempio basati sul celebre paradosso del compleanno. Tutte le funzioni con impronta di 160 bit, o meno, possono essere attaccate mediante “l’attacco del compleanno”. ↑
- Il regolamento eIDAS fornisce una base normativa comune per interazioni elettroniche sicure fra cittadini, imprese e pubbliche amministrazioni e incrementa la sicurezza e l’efficacia dei servizi elettronici e delle transazioni di e-business e commercio elettronico nell’Unione Europea. ↑
- Ad essere precisi esiste anche la sospensione del certificato. Una firma digitale apposta dopo la data di revoca, sospensione o scadenza è invalida, altrimenti rimarrà valida. ↑