2005-03-29

La firma digitale

Tramite la firma digitale è possibile garantire l'autore di un documento informatico e verificare che tale documento non abbia subito modifiche successive alla sottoscrizione. Per queste ragioni, negli ultimi anni, la firma digitale è stata oggetto di interesse giuridico e tecnologico.

Generalità

La firma digitale è un'informazione che viene aggiunta ad un documento informatico al fine di garantire:
autenticazione del mittente
il destinatario ha la possibilità di verificare l'identità del mittente;
integrità
è possibile provare che non sono state apportate modifiche al messaggio durante la trasmissione;
riservatezza (opzionale)
il messaggio è leggibile dal solo destinatario.
Sebbene l'uso in relazione a documenti su supporti informatici sia quello più naturale, essa può essere utilizzata per autenticare una qualunque sequenza di simboli binari, indipendentemente dal loro significato. La principale differenza tra firma autografa e firma digitale sta nel fatto che la prima è direttamente riconducibile all'identità di colui che la appone, poiché la calligrafia è un elemento identificativo della persona, mentre la seconda non possiede questa proprietà. Per coprire questa deficienza si ricorre all'autorità di certificazione, il cui compito è quello di stabilire, garantire e pubblicare l'associazione tra firma digitale e soggetto sottoscrittore. In presenza di un'autorità di certificazione affidabile, la firma digitale è più forte della firma "reale".

Vantaggi

  • Il documento firmato realmente può essere modificato, mentre una sequenza di bit firmata digitalmente, a meno di perdita della chiave privata o di vulnerabilità dell'algoritmo, non è modificabile.
  • La firma reale è sempre uguale e può essere riprodotta, la firma digitale varia a seconda dei bit del documento firmato.

Svantaggi

  • La firma "reale" è direttamente riconducibile all'identità di chi la appone, poiché la calligrafia è un elemento identificativo della persona. La firma digitale manca di questa proprietà e necessita di un'autorità di certificazione.
  • Bisogna prestare attenzione firmando alcuni tipi di documento in cui il contenuto non cambia ma quanto mostrato all'utente sì!
La firma autografa digitalizzata (riprodotta con uno scanner, tracciata su una tavoletta dotata di touch screen…) non è una firma, è una mera riproduzione.
Al contrario della firma autografa e della firma digitale, non è legata indissolubilmente al documento sulla quale viene apposta e per questo non ha valore legale.
Per usare le parole di Manlio Cammarata in Interlex:
Sul piano probatorio vale esattamente per quello che è: una rappresentazione meccanica, ai sensi dell'art. 2712 del codice civile. Se colui contro il quale viene prodotta ne disconosce la conformità alla propria firma autografa, l'onere della prova spetta alla controparte.
In Italia, a partire dal 1997, una serie di provvedimenti legislativi hanno conferito valore giuridico al documento informatico ed alla firma digitale. Inoltre, con la pubblicazione della Direttiva Europea 1999/93/CE, del gennaio 2000, si è imposto un quadro comune agli stati dell'Unione Europea, fornendo, nel contempo, ulteriori impulsi al processo legislativo.
Le tecnologie coinvolte si stanno continuamente evolvendo, per seguire le esigenze, sempre più complesse, nella sottoscrizione digitale, nell'interscambio dei documenti e nella loro successiva conservazione.

Crittografia asimmetrica - concetti base

Prima di descrivere il funzionamento della firma digitale, è necessario introdurre alcuni elementi di crittologia. Nel 1976 Diffie, Hellman e Merkle (quest'ultimo indipendentemente dai primi due) introdussero un concetto che rivoluzionò le comunicazioni segrete: i cifrari a chiave pubblica.

Cifrario simmetrico

Un cifrario simmetrico prevede:
  1. una chiave segreta k;
  2. una funzione per cifrare Ck, parametrica in k, iniettiva (altrimenti non sarebbe possibile ricostruire in modo univoco il messaggio in chiaro), che trasforma un generico messaggio in chiaro m in un crittogramma c.
  3. una funzione per decifrare Dk, parametrica in k, che permette di riottenere il messaggio in chiaro m partendo dal crittogramma c.
Si ha:
  1. Dk e Ck sono l'una l'inversa dell'altra, quindi Dk(Ck(m)) = m;
Precedentemente il sistema tipico per cifrare un messaggio (cifrario simmetrico) prevedeva:
  1. una procedura per cifrare ed una per decifrare, generalmente di pubblico dominio;
  2. una chiave di cifratura, segreta (nota solo a mittente e destinatario), in grado di determinare il funzionamento delle procedure per cifrare e decifrare.
Un esempio pratico, banale, potrebbe essere:
  • messaggio in chiaro: "vendere tutto";
  • chiave segreta: 3;
  • procedura per cifrare: sostituire ogni lettera del messaggio in chiaro con quella che, nell'alfabeto, la segue di 3 posizioni (3 è la chiave segreta);
  • prodedura per decifrare: sostituire ogni lettera del messaggio cifrato (crittogramma) con quella che, nell'alfabeto, la precede di 3 posizioni;
  • poiché v→y, e→h, n→q, d→g, r→u, t→w, u→x, o→r il messaggio cifrato risulta essere "yhqghuh wxwwr".
Un cifrario asimmetrico prevede:
  1. una chiave pubblica k[pub] ed una chiave privata k[priv];
  2. una funzione per cifrare C(m,k);
  3. una funzione per decifrare D(c,k).
Si deve avere:
  1. D(C(m,k[pub]),k[priv]) = m;
  2. c = Ck[pub](m) è semplice da calcolare per il mittente;
  3. m = Dk[priv](c) è semplice da calcolare per il destinatario;
  4. la coppia <k[priv],k[pub]> è facile da generare e la probabilità che due utenti scelgano la stessa coppia prossima a zero.
C deve essere una funzione one way, cioè facile da calcolare e difficile da invertire (in senso computazionale), ma deve contenere un meccanismo segreto detto trap door che ne consenta la facile invertibilità a chi lo conosca. Nei cifrari a chiave pubblica, o asimmetrici, le chiavi di cifratura e di decifrazione sono diverse, scelte dal destinatario che ne rende pubblica una, usata per cifrare, e mantiene segreta l'altra, usata per decifrare. Come in precedenza le procedure per cifrare e decifrare sono note al pubblico e dipendono, per il loro funzionamento da una chiave. In questo caso, però, la cifratura è accessibile a tutti mentre la decifratura è riservata al destinatario (perché richiede la chiave privata nota solo a lui). Si intuisce che, perché il tutto funzioni, deve esserci una relazione di qualche genere fra la chiave pubblica e quella privata ma, certo, non deve essere semplice ottenere la chiave privata partendo da quella pubblica.

Protocollo 1: messaggio in chiaro firmato

  1. Il mittente A genera la firma f=D(m,kA[priv]).
  2. A invia al destinatario B la tripla <A,m,f> costituente il messaggio firmato.
  3. B riceve il messaggio firmato <A,m,f> e ne verifica l'autenticità calcolando C(f,kA[pub]) e verificando che il valore sia uguale ad m.
Si osserva che rispetto all'uso "standard" i processi di firma e verifica impiegano le funzioni C e D in ordine inverso (però D è ancora abbinata alla chiave privata e C a quella pubblica). Questo non porta a problemi perché C e D sono una l'inversa dell'altra. Inoltre l'indicazione esplicita del mittente A è necessaria per permettere al destinatario di selezionare l'appropriata chiave pubblica kA[pub] da utilizzare nel calcolo.
Firma e spedizione
Il mittente cifra il messaggio da firmare con l'apposita procedura abbinata alla propria chiave privata. Viene ottenuto un messaggio cifrato. Il documento firmato è l'insieme del messaggio in chiaro, del messaggio cifrato (secondo il sistema sopra indicato) e dell'indicazione del mittente.
Ricezione e verifica
Il destinatario riceve le tre informazioni sopra dette (messaggio in chiaro, messaggio cifrato, indicazione del mittente). Con l'indicazione dell'utente/mittente recupera la chiave pubblica associata allo stesso (per esempio da un registro ufficiale). Con l'apposita procedura di decifratura, abbinata alla chiave pubblica recuperata, decifra il messaggio cifrato ed ottiene un messaggio in chiaro da confrontare con quello ricevuto per assicurarsi che tutto sia a posto.

Perché funziona?

  • Se qualcuno altera il documento in chiaro, quando il destinatario decifra il documento cifrato otterrà un nuovo documento, diverso dall'originale, ed il confronto fra documento in chiaro ricevuto e documento in chiaro decifrato non avrà successo.
  • Il tentativo di alterare il documento in chiaro e contemporaneamente quello cifrato non è possibile senza conoscere la chiave privata del mittente (segreta) o a meno di forzare il cifrario a chiave pubblica.
  • Il mittente non può disconoscere la propria firma perché solo lui è a conoscenza della chiave privata necessaria per ottenere il messaggio cifrato a partire da quello in chiaro.
  • Il sistema è legato ad un particolare mittente e non ad un particolare destinatario. Chiunque può convincersi della correttezza della firma perché per farlo è necessaria la sola chiave pubblica del mittente.

Perché non si adotta questo protocollo?

  • Spedire un messaggio firmato in questo modo comporta un lavoro doppio: il messaggio cifrato ha, infatti, dimensione paragonabile a quella del messaggio in chiaro.
  • Non si può garantire la riservatezza della comunicazione perché fra le tre informazioni inoltrate c'é il messaggio in chiaro.

Protocollo 2: messaggio firmato in hash

Funzioni hash

Una funzione hash (hash function) f: X → Y è una regola che associa ad un elemento x un altro elemento y=f(x) (detto immagine o fingerprint o digest). È caratterizzata da:
  • n=|X| >> m=|Y|.
    Questa proprietà garantisce che la rappresentazione y sia più breve di x (log2m bit contro log2n bit). Oltre a questo può accadere che la minore cardinalità di Y permetta di individuare in questo insieme una qualche "struttura" assente in X (o troppo complessa per esser sfruttata). Il fatto che n < m comporta che la funzione f non sia iniettiva (vale a dire che alcune elementi di X avranno la stessa immagine);
  • se con X1, X2… Xm indichiamo la partizione di X in sottoinsiemi disgiunti tali che per ogni valore dell'indice i tutti gli elementi di Xi hanno come immagine uno stesso elemento di Y, una buona funzione hash deve assicurare che i sottoinsiemi Xi abbiano, all'incirca, la stessa cardinalità e che elementi "simili" di X appartengano a sottoinsiemi diversi.
Generalmente, quando si parla di funzioni hash nel campo della crittografia, si richiedono ulteriori proprietà (che caratterizzano le funzioni hash one way):
calcolabilità
f(x) sia facile da calcolare;
proprietà one way
per la maggior parte degli y in Y sia difficile determinare un x tale che f(x)=y;
proprietà claw free
sia difficile determinare una coppia di elementi x1, x2 tali che f(x1)=f(x2).
Con il "difficile" si intende la complessità computazionale. Alcune funzioni molto note in crittografia sono la MD5, la SHA-1 (o semplicemente SHA), la SHA-256… La MD5 è stata forzata e non è più considerata sicura. Per la SHA-1 sono state scoperte tecniche di attacco più efficienti rispetto alla "forza bruta", ma vari enti governativi non prevedono problemi nel breve termine (il NIST la considera sicura almeno fino al 2010). Prima di descrivere questo protocollo, bisogna introdurre il concetto di funzione hash crittografica. Si tratta di una procedura per trasformare un messaggio in un numero di molte cifre (comunque, tipicamente, di dimensioni trascurabili rispetto al messaggio in chiaro). La proprietà che caratterizza questa procedura è la sua unidirezionalità (one-way): non è possibile ricostruire le caratteristiche del messaggio partendo dal numero ottenuto.

Tecnica corrente per la firma digitale

  1. Il mittente A calcola:
    • h(m) (dove h è una funzione hash one-way ed m il messaggio in chiaro);
    • la firma f=D(h(m),kA[priv]);
    • il crittogramma c=C(m,kB[pub]).
  2. A invia al destinatario B la tripla <A,c,f> costituente il messaggio firmato.
  3. B riceve il messaggio firmato <A,c,f> e calcola m1=D(c,kB[priv]). Per verificarne l'autenticità controlla che h(m) e C(f,kA[pub]) siano uguali.
Si procede come precedentemente descritto, con la differenza che ad esser cifrata è l'impronta (o digest, o fingerprint) del messaggio, anziché l'intero messaggio. Al destinatario è inviata l'informazione sul mittente, il messaggio in chiaro e l'impronta cifrata. Il tutto è riassunto nella figura seguente: