Il velocissimo progresso delle tecnologie informatiche, delle reti di telecomunicazioni ad alta velocità e l’enorme proliferazione di dispositivi mobili ha avuto – e continua ad avere – un impatto molto profondo sulla nostra società. In particolare, negli ultimi anni, abbiamo assistito ad uno spostamento progressivo ed inesorabile delle capacità di calcolo e di archiviazione dati nel cloud. Il salvataggio dei dati nel cloud offre benefici estremamente vantaggiosi, sia a singole persone sia ad organizzazioni, quali ad esempio, l’accesso ubiquo ai propri dati e la possibilità di salvare grandi quantità di informazioni a condizioni economicamente vantaggiose.
Come è ben noto, la possibilità di memorizzare dati su server remoti pone enormi problemi legati alla sicurezza, in quanto essi sono (per lo più) dati sensibili (finanziari, cartelle mediche, dati relativi a pubbliche amministrazioni, oltre a dati personali scambiati, ad esempio, attraverso social network) e non sono sotto il controllo dei legittimi possessori, poiché entità potenzialmente potrebbero accedervi.
Senza adeguate contromisure, rischiamo devastanti falle nella nostra privacy o – ancor peggio – rischiamo di vivere in uno stato di perenne sorveglianza digitale.
I limiti della crittografia tradizionale
Usualmente, le tecniche ed i metodi utilizzati per proteggere i dati sono di natura crittografica. Ma la crittografia tradizionale (ad esempio la crittografia a chiave pubblica) non fornisce gli strumenti necessari per garantire la sicurezza di grandi quantità di dati complessi. Infatti, gli strumenti crittografici tradizionali consentono un accesso ‘a grana grossa’ ai dati. Più precisamente, solamente un’unica chiave può decifrare i dati criptati. D’altro canto, un individuo potrebbe voler condividere in modo selettivo i propri dati personali e documenti. Analogamente, un’azienda potrebbe voler condividere dati con diversi insiemi di utenti, in funzione delle loro credenziali.
Ancora, utilizzando strumenti crittografici tradizionali l’accesso ai dati è ‘o tutto o niente’. Cioè, chi detiene la chiave di decifratura accede a tutti i dati decriptati e chi non possiede tale chiave non ottiene — ovviamente — alcuna informazione. In applicazioni quali il data mining su dati medici cifrati o su dati provenienti da reti sociali, è utile fornire accesso parziale ai dati e permettere di eseguire computazioni sui dati criptati, ad esempio, permettere di calcolare statistiche o eseguire interrogazioni.
Idealmente, vorremmo poter criptare i dati in modo tale da garantire un controllo degli accessi ‘a grana fine’ e la capacità di eseguire calcoli in modo selettivo direttamente sui dati criptati. Detto in altro modo, vorremmo avere il controllo su chi ha accesso ai dati criptati e su cosa si può calcolare, avendo a disposizione tali dati. In questo modo, verrebbe riconciliato il conflitto tra la possibilità di dare in outsourcing la gestione e le computazioni sui nostri dati e la necessità di proteggerli.
Crittografia funzionale o basata su attributi
Nel corso degli ultimi dieci anni, è emerso un nuovo paradigma collegato alla crittografia a chiave pubblica che ha come obiettivi (i) la crittografia basata su attributi (attribute-based encryption, ABE), che permette il controllo degli accessi a grana fine e (ii) una sua generalizzazione, la crittografia funzionale, che permette la computazione selettiva sui dati cifrati. Più precisamente:
– nella crittografia basata su attributi, i dati criptati sono associati ad attributi ed a chiavi di decifratura segrete, insieme a regole che stabiliscono quali dati cifrati possono essere decriptati da quali chiavi. Ad esempio, un fornitore di contenuti digitali può stabilire che nei giorni feriali una data chiave di decifratura permette l’accesso ai contenuti standard e premium e l’accesso a solo quelli standard nei giorni festivi.
– nella crittografia funzionale, un utente in possesso di una chiave segreta può apprendere una funzione specifica dei dati cifrati, e solo quella funzione. Ad esempio, la decriptazione di una colonna di valori numerici con una chiave corrispondente alla media aritmetica rivela il valore di tale statistica e niente altro.
Una caratteristica peculiare sia della crittografia basata su attributi sia di quella funzionale consiste nel possono esserci diverse chiavi segrete, ognuna con differenti capacità di decriptazione. Il paradigma della crittografia funzionale (insieme al caso più specifico della crittografia basata su attributi) può essere inteso come una generalizzazione di casi più specifici di estensioni della crittografia a chiave pubblica apparse nel corso degli anni, quali la crittografia broadcast, la crittografia basata su identità, o la crittografia che permette l’esecuzione di interrogazioni direttamente sui dati cifrati (searchable encryption, SE). In retrospettiva, la maggior parte delle innovazioni nel campo della crittografia a chiave pubblica negli ultimi anni, possono essere considerate come casi speciali della crittografia basata su attributi, o crittografia funzionale.
Gli obiettivi che lo studio della crittografia sia basata su attributi sia funzionale sono quindi (i) la definizione di schemi di cifratura che possono esprimere un ampio insieme di politiche di accesso e funzioni, e (ii) la realizzazione di implementazioni (il più possibile) efficienti di tali schemi, basandosi su problemi computazionali che sono (quasi) universalmente ritenuti molto difficili da risolvere in modo efficiente. I più semplici esempi di schemi di cifratura basati su attributi sono i cosiddetti schemi basati sull’identità (identity-based encryption, IBE), dove sia il messaggio criptato sia la chiave segreta di decifratura sono associati a identità e la decifratura è possibile solo quando le due identità coincidono.
Nell’ultimo decennio, partendo dai primi schemi IBE, stati definiti molti schemi che hanno via via ampliato l’insieme delle politiche di accesso esprimibili e, contemporaneamente, sono state investigate molte tecniche che permettono la computazione di funzioni sempre più generali su dati cifrati.
Ovviamente, oltre alla definizione di schemi crittografici funzionali sempre più espressivi, è necessario fornire corrispondenti implementazioni che siano un compromesso ragionevole tra espressività, efficienza e sicurezza. Tali aspetti dipendono in modo cruciale dai problemi computazionalmente difficili da risolvere scelti come punto di partenza delle implementazioni.
Attualmente, tali problemi possono essere sommariamente classificati in due ampie categorie: (i) i problemi basati su nozioni di teoria dei numeri (come nel caso della tradizionale crittografia a chiave pubblica) quali i pairing bilineari tra curve ellittiche, ad esempio le varianti del problema di Diffie-Hellman e (ii) i problemi basati su nozioni geometriche quali i reticoli di punti, che si basano per lo più sulla difficoltà dell’assunzione learning with errors (LWE).
Gli ambiti
È importante sottolineare che si è lontani dall’avere una comprensione soddisfacente di cosa è effettivamente calcolabile utilizzando le tecniche attuali di crittografia funzionale. Anche nel caso più limitato della crittografia basata su attributi, gli schemi (relativamente) più efficienti si limitano al calcolo del prodotto cartesiano (inner product) tra due vettori di attributi. Questo non vuol dire che i progressi dal lato implementativo siano assenti. Tutt’altro: alcuni schemi IBE sono stati standardizzati nella RFC 5091; diverse librerie software forniscono supporto ai meccanismi necessari per implementare schemi crittografici funzionali, tra le più note: Miracl, Charm e PBC ; moltissimi progetti utilizzano vari schemi ABE/funzionali a supporto dell’accesso e computazione sicuri in ambiti che vanno dalle applicazioni web alla gestione di dati sotto la tutela di normative relative alla privacy, ad esempio i record medici; servizi commerciali che offrono efficienti implementazioni di searchable encryption (nella variante basata su chiave segreta di alcuni schemi funzionali).
Come sottolineato in precedenza, la ricerca negli ambiti sopra descritti prosegue sia cercando di definire nuovi schemi che ampliano il potere espressivo delle politiche di accesso e le computazioni sui dati criptati sia cercando di realizzare implementazioni efficienti di tali schemi.
In conclusione, sottolineiamo come lo studio della crittografia funzionale ha significativamente contribuito, attraverso l’ideazione di nuovi e potenti strumenti tecnici, a molte altri campi della crittografia, quali la computazione verificabile (verifiable computation) e la crittografia omomorfa (fully homomorphic encryption (FHE)): nel caso di una computazione verificabile, un client con scarse capacità di calcolo delega una computazione complessa a un server non fidato, con l’assicurazione che il server non potrà essere in grado di fare accettare al client un risultato scorretto.
Crittografia omomorfa
È stato recentemente provato che alcuni schemi ABE molto espressivi possono essere efficientemente trasformati in schemi di computazione verificabile. La criptazione omomorfa permette di eseguire una computazione sui messaggi criptati e quindi di generare un risultato criptato che, quando decriptato, è uguale al risultato della computazione eseguita sui messaggi non criptati. Il primo schema di cifratura fully homomorphic è stato definito da Craig Gentry nel 2009, risolvendo un trentennale problema aperto. Comunque, tale schema e le sue successive ottimizzazioni sono ancora lontane dall’essere utilizzate in ambiti pratici. Pur facendo notare che sia la crittografia funzionale sia la crittografia omomorfa forniscono supporto a computazioni direttamente sui dati cifrati, non è noto allo stato attuale come definire uno schema funzionale partendo da uno omomorfo, e viceversa. Tuttavia, recenti sviluppi nella crittografia funzionale basata sull’assunzione LWE lasciano intravedere come alcune tecniche sviluppate in tale ambito possono essere utilizzate per realizzare versioni più efficienti di schemi omomorfi.
Alcuni degli argomenti presentati in questa breve e, necessariamente, incompleta introduzione alla crittografia funzionale saranno discussi ed approfonditi nel tutorial ‘post-quantum cryptography’, che si terrà l’8 febbraio 2018, nell’ambito della seconda edizione di della conferenza italiana di cybersecurity ITASEC, presso il Politecnico di Milano.