Universit`a degli Studi di Catania Nuove Tecniche Crittografiche per
Transcript
Universit`a degli Studi di Catania Nuove Tecniche Crittografiche per
Università degli Studi di Catania FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI Corso di Laurea in Informatica Nelly Fazio Nuove Tecniche Crittografiche per le Trasmissioni su Larga Scala Tesi di Laurea Relatore: Chiar.mo Prof. Domenico Cantone Correlatore: Chiar.mo Prof. Moni Naor Anno Accademico 2000–2001 Ad Antonio Ringraziamenti Desidero ringraziare il Professore Domenico Cantone, del Dipartimento di Matematica ed Informatica, presso l’Università degli Studi di Catania, che, sempre disponibile, mi ha offerto la sua costante e chiara guida durante la stesura del presente lavoro di Tesi, e per avermi dato l’opportunità di svolgere parte della mia ricerca presso la Stanford University, California, USA. Ringrazio, inoltre, il Professore Moni Naor, del Department of Computer Science and Applied Math, presso il Weizmann Institute, Israele, non solo per avermi subito accolta e fatta sentire a mio agio, ma anche per tutti i preziosi chiarimenti che ha saputo fornirmi. Un grazie anche ai miei genitori, che mi hanno sempre sostenuta e incoraggiata in ogni mia scelta. Infine, un grazie particolare è rivolto ad Antonio, che mi è stato vicino in ogni momento. Indice Elenco delle Figure Prefazione 1 Broadcast Encryption vii ix 1 1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Notazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Gli approcci iniziali . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 I primi risultati . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 Un framework generale per schemi di Broadcast Encryption 18 2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2 Subset-Cover Revocation framework . . . . . . . . . . . . . . . 21 2.3 La sicurezza del framework . . . . . . . . . . . . . . . . . . . . 28 3 Due schemi nell’ambito del Subset-Cover framework 43 3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2 Complete Subtree Method . . . . . . . . . . . . . . . . . . . . 46 3.3 Subtree Difference Method . . . . . . . . . . . . . . . . . . . . 56 4 Estensione a Chiave Pubblica 66 4.1 Motivazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2 Similitudini e Differenze . . . . . . . . . . . . . . . . . . . . . 68 4.3 Un Approccio Diretto . . . . . . . . . . . . . . . . . . . . . . . 70 4.3.1 Public Complete Subtree Method . . . . . . . . . . . . 70 4.3.2 Public Subtree Difference Method . . . . . . . . . . . . 71 4.4 Il problema del Public Key File . . . . . . . . . . . . . . . . . 75 4.5 Conclusione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 A Identity-Based Encryption 81 A.1 Il problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 A.2 Lo schema IBE . . . . . . . . . . . . . . . . . . . . . . . . . . 84 A.3 Applicazioni dello schema IBE . . . . . . . . . . . . . . . . . . 86 A.3.1 Revoca di chiavi pubbliche . . . . . . . . . . . . . . . . 86 A.3.2 Delega di compiti . . . . . . . . . . . . . . . . . . . . . 88 Bibliografia 89 Elenco delle figure 1.1 Insieme delle chiavi consegnate all’utente a . . . . . . . . . . . 8 2.1 La sfida di B per la funzione Fk . . . . . . . . . . . . . . . . . 30 2.2 La sfida di B per la funzione EL . . . . . . . . . . . . . . . . . 32 2.3 La sfida di B per una singola chiave Li . . . . . . . . . . . . . 34 2.4 La sfida di B per la lista di chiavi {Li1 , . . . , Lit } . . . . . . . . 36 2.5 L’attacco di B al Broadcast Center . . . . . . . . . . . . . . . 41 3.1 Costruzione della famiglia S con N = 4: S = {S1 , . . . , S7 } . . 46 3.2 Contenuto dell’informazione Iu : Iu = {L1 , L2 , L5 , L11 } . . . . 47 3.3 Costruzione dell’albero di Steiner ST (V ′ ), con V ′ = {v1 , v2 , v3 } 49 3.4 Costruzione della partizione di T con R = {v1 , v2 , v3 } . . . . . 50 3.5 Configurazione per l’ipotesi d’assurdo (Prop. 3.1) . . . . . . . 51 3.6 Rappresentazione dell’insieme differenza S2 9 . . . . . . . . . . 56 3.7 Calcolo della long-lived key L1 5 relativa all’insieme differenza S1 5 58 3.8 Calcolo di LabelrA ,vj a partire da Iu . . . . . . . . . . . . . 61 3.9 Labels relative, derivate da Labelui , da includere in Iu . . . . 62 4.1 Esempio di mappatura della funzione ID: S5 ←→ 10 . . . . . . 77 Prefazione La capillare diffusione della tecnologia delle telecomunicazioni nella nostra società ha portato ad una profonda rivalutazione dell’importanza della informazione, che della comunicazione costituisce l’oggetto. È un dato di fatto oramai accettato da tutti che l’informazione ha un suo proprio valore, e può pertanto essere oggetto di compravendita. Tuttavia, l’informazione, per la sua stessa natura, non è una merce qualunque, perché essa può venire rubata senza che chi la possiede possa accorgersene. Risulta pertanto necessario avere a disposizione delle tecniche che consentano di trattare l’informazione, codificandola in modo che essa risulti incomprensibile a chi non abbia il diritto di riceverla: l’elaborazione e la realizzazione di tali tecniche costituiscono l’oggetto della Crittografia. A seconda dei vari scenari in cui si necessita di codificare l’informazione, è possibile definire differenti tecniche crittografiche adatte al particolare contesto; qualora l’informazione da proteggere debba essere trasmessa su larga scala (come nel caso delle Pay-per-View TV ), la tecnica di codifica prende il nome di Broadcast Encryption. Il problema della Broadcast Encryption ha di recente assunto crescente importanza non solo in ambito accademico, per il complesso di quesiti nuovi ed interessanti che tale problema pone, ma anche (e soprattutto) in ambito commerciale ed industriale, per le possibilità di impiegarne le soluzioni nel campo delle telecomunicazioni e della protezione del copyright. Scopo di questa Tesi è l’analisi di schemi finalizzati alla protezione dell’informazione in applicazioni che devono garantire la trasmissione di dati solo ad utenti autorizzati. L’attenzione sarà principalmente volta ad esaminare uno schema generale per la definizione e l’analisi di algoritmi che consentano di effettuare trasmissioni su larga scala in presenza di utenti revocati, recentemente proposto da Naor, Naor e Lotspiech in [NNL01]. Lo studio condotto ha portato all’elaborazione di una estensione di tale schema al contesto della Crittografia a Chiave Pubblica, utilizzando in maniera originale le interessanti caratteristiche del nuovo sistema per la criptazione dell’informazione presentato in [BF01]. Capitolo 1 Broadcast Encryption In questo Capitolo si definisce preliminarmente cosa si intende per Broadcast Encryption. Dopo una breve descrizione delle notazioni che si useranno, vengono introdotte le principali caratteristiche che un buono schema di Broadcast Encryption deve avere. Si passa, infine, ad una breve descrizione dei principali schemi inizialmente proposti, prestando particolare attenzione allo schema ideato da Berkovits. 1. Broadcast Encryption 1.1 Introduzione Con il termine Broadcast Encryption (Codifica Segreta di Trasmissioni su Larga Scala) si intende lo studio dell’applicazione dei metodi della Crittografia al problema della comunicazione ad un vasto insieme di utenti (Broadcast) di una determinata informazione. Un tipico scenario di Broadcast è la trasmissione di uno spettacolo televisivo: l’ente preposto alla diffusione (il Broadcast Center ) vuole fare pervenire il programma a tutta la comunità dei telespettatori. A tal fine, non è necessario che il Broadcast Center emetta un segnale diverso per ogni utente: è sufficiente un’unica trasmissione, poiché ogni soggetto sarà poi in grado di captare il segnale e ricevere correttamente l’informazione trasmessa. Si supponga adesso che il Broadcast Center desideri che solo un sottoinsieme dei suoi utenti sia in grado di interpretare correttamente il segnale emesso, mentre tutti gli altri soggetti della comunità, sebbene ricevano il segnale, non riescano ad estrapolarne il contenuto. Nelle più comuni applicazioni pratiche (come ad esempio i canali televisivi Pay-per-View ) l’insieme privilegiato non è statico, ovvero fissato una volta per tutte, ma dinamico, potendo variare sia per dimensione che per composizione, con utenti che possono esserne rimossi ed altri aggiunti. 2 1. Broadcast Encryption 3 In tali applicazioni, per garantire la segretezza (confidentiality) dell’informazione trasmessa, è possibile utilizzare tecniche crittografiche. L’analisi dell’applicazione degli strumenti della Crittografia, nell’ambito di un simile scenario, costituisce il soggetto della Broadcast Encryption [FN93]. 1.2 Notazione Prima di parlare dei possibili approcci alla Broadcast Encryption, si introducono alcune notazioni e termini che si useranno in seguito per rendere più semplice l’esposizione. Sia N l’insieme di tutti i possibili utenti in grado di captare il segnale trasmesso dal Broadcast Center. Sia N la cardinalità di tale insieme, detto . anche insieme universo, ovvero N = |N |. Ogni messaggio M trasmesso dal Broadcast Center è inteso solo per un sottoinsieme T degli utenti in N , detti utenti autorizzati. I restanti utenti, detti utenti revocati, formano un insieme che verrà indicato con R, la cui . cardinalità sarà denotata con r: r = |R|. Ovviamente, T ∩R=∅ T ∪R=N 1. Broadcast Encryption Uno schema di Broadcast Encryption consiste di tre parti: 1. una fase di inizializzazione, nella quale ad ogni utente u in N viene assegnata l’informazione segreta Iu che gli permetterà di decifrare il segnale; 2. un algoritmo di codifica C, che, preso in input l’insieme degli utenti autorizzati T e il messaggio M, restituisce come output M′ = CT (M), cioè il segnale che deve essere trasmesso agli utenti in T ; 3. un algoritmo di decodifica D, che, presa in input l’informazione segreta Iu , consenta ai soli utenti u ∈ T di decifrare il segnale, cioè: M se u ∈ T , ′ D(Iu , M ) = ↑ 1 se u 6∈ T . Per chiave crittografica si intende il parametro in base al quale una funzione di codifica effettua la criptazione di un testo in chiaro nel corrispondente testo cifrato. In quanto segue, si farà spesso riferimento alle seguenti catagorie di chiavi di criptazione: 1 Il simbolo ↑ viene usato per indicare che l’algoritmo D restituisce come output una stringa senza senso o niente. 4 1. Broadcast Encryption Chiave di Sessione Si tratta di un particolare tipo di chiave crittografica, generalmente costituita da una sequenza di bits non troppo lunga, ad esempio 56 o 64 bits. Risulta pertanto opportuno utilizzare tale chiave solo per un intervallo di tempo limitato, per evitare che essa possa essere determinata per mezzo di una ricerca esaustiva. D’altra parte, le funzioni di codifica che utilizzano chiavi brevi risultano più efficienti, e per tale ragione si preferisce utilizzare chiavi di sessione per cifrare messaggi molto lunghi. Long-Lived Key Contrariamente alle chiavi di sessione, le long-lived keys vengono utilizzate per intervalli di tempo molto lunghi. Esse devono pertanto essere custodite accuratamente, in quanto la loro esposizione comprometterebbe la sicurezza di tutte le criptazioni effettuate. Per resistere ad attacchi per “forza bruta”, le long-lived keys constano di almeno 256 bits, e vengono solitamente utilizzate solo per codificare poca informazione in maniera molto sicura. Cosı̀ facendo, si evita che un malintenzionato possa accumulare molti testi criptati con la stessa chiave, il che potrebbe consentirgli di risalire alla long-lived key adoperata. 5 1. Broadcast Encryption 1.3 Gli approcci iniziali Gli schemi di Broadcast Encryption inizialmente proposti sono troppo diretti e semplicistici per risultare efficienti ed utilizzabili nella pratica. Un primo schema prevede una fase di inizializzazione, nella quale viene assegnata una distinta chiave segreta a ciascun utente dell’universo N . Per trasmettere un messaggio M, il Broadcast Center concatena tante copie di M quanti sono gli utenti in T , codificando ciascuna copia con una diversa chiave segreta. Il problema di tale soluzione è che la lunghezza del messaggio, che deve essere trasmesso dal Broadcast Center, è proporzionale non solo alla dimensione del messaggio stesso, ma anche alla cardinalità di T ; piuttosto che una tecnica di broadcasting, tale schema può essere visto come un modo per unificare più comunicazioni parallele tra il Broadcast Center e ciascuno degli utenti autorizzati. Un piccolo miglioramento a tale algoritmo può essere apportato sfruttando il concetto di chiave di sessione. Ogni qual volta il Broadcast Center deve emettere un segnale codificato, genera una chiave di sessione k (che utilizzerà solo per questa trasmissione), la trasmette agli utenti autorizzati sfruttando 6 1. Broadcast Encryption lo schema precedente e infine invia il segnale codificato con k. Cosı̀ facendo, viene ridotta la lunghezza complessiva della comunicazione, poiché in tal caso, ad essere duplicato non è M ma k, che in genere ha dimensione minore. Nonostante questa piccola ottimizzazione, lo schema resta comunque inefficiente. Ciò perché esso viola il concetto che sta alla base della Broadcast Encryption; in un vero Schema di Broadcast, il segnale trasmesso contiene la stessa informazione per tutto l’insieme di utenti. A partire da esso, gli utenti autorizzati riusciranno a dedurne il messaggio, mentre tutti gli altri utenti ne ricaveranno al più un nonsenso. Un secondo schema consiste nell’associare una chiave segreta ad ogni possibile sottoinsieme di N , recapitando ad ogni singolo utente tutte le chiavi corrispondenti agli insiemi a cui appartiene. In tal modo, qualunque sia l’insieme degli utenti autorizzati alla ricezione della trasmissione, il Broadcast Center è in grado di codificare il segnale con una chiave nota solo ai destinatari. In tal caso, però, ogni singolo utente ha bisogno di una enorme quantità di memoria per memorizzare tutte le chiavi. Nel caso particolare che l’universo sia N = {a, b, c, d}, ogni utente appartiene ad 8 insiemi, come schematizzato nella tabella 1.1. 7 1. Broadcast Encryption Utente a Utente b Utente c a b c ab ab ac ac bc bc ad bd cd abc abc abc abd abd acd acd bcd bcd abcd abcd abcd 8 Utente d d ad bd cd abd acd bcd abcd Tabella 1.1: Insiemi a cui appartengono i vari utenti Di conseguenza, ogni utente dovrà memorizzare parecchie chiavi; in Figura 1.1 è raffigurato l’insieme delle chiavi da consegnare all’utente a. Figura 1.1: Insieme delle chiavi consegnate all’utente a Dall’analisi delle suddette soluzioni, si evincono i due principali parametri in base ai quali viene valutata l’efficienza di uno schema di Broadcast Encryption: • la lunghezza del segnale che deve essere trasmesso; • la quantità di memoria necessaria ad ogni singolo utente per memorizzare l’informazione segreta tramite la quale sarà in grado di decodificare i segnali che è autorizzato a ricevere. 1. Broadcast Encryption 9 Tali proprietà sono chiaramente intrinsecamente in conflitto ed è pertanto necessario costruire delle soluzioni che creino un compromesso tra il numero di trasmissioni necessarie al Broadcast Center per inviare le informazioni segrete ai soli utenti autorizzati, e il numero di chiavi che ogni utente deve possedere per potere decifrare il segnale trasmesso. Un’analisi dettagliata della correlazione fra i due parametri è presente in [LS98], dove gli autori, basandosi su considerazioni di natura combinatoria, provano che ad un dato upper-bound sul numero di chiavi che ogni utente deve possedere, corrisponde un lower-bound sul numero di trasmissioni che il Broadcast Center deve effettuare per trasmettere l’informazione segreta. Si consideri adesso un terzo schema, nel quale il Broadcast Center genera preliminarmente una chiave per ogni utente in N . A ciascun utente verranno recapitate tutte le chiavi appena create, eccetto la sua. Quindi lo spazio di memoria di cui ogni utente ha bisogno è pari a quello necessario per memorizzare N − 1 chiavi. In fase di codifica, il Broadcast Center utilizzerà la chiave k ottenuta dallo xor di tutte le chiavi relative agli utenti revocati: k= M u∈R ku 1. Broadcast Encryption Tale schema di codifica assicura che solo gli utenti autorizzati riusciranno a decifrare il messaggio trasmesso. Infatti, dal momento che ogni utente u possiede tutte le chiavi tranne ku , e che per ricostruire k sono necessarie tutte e sole le chiavi degli utenti revocati, risulta che: • se u è un utente autorizzato (u ∈ T ), la chiave ku che non possiede non è necessaria per costruire k e quindi potrà decriptare il segnale; • se invece u è uno degli utenti revocati (u ∈ R), k resta per lui del tutto indeterminata, in quanto la chiave ku che non gli è stata fornita è proprio una fra quelle utilizzate dal Broadcast Center per generare tale chiave di sessione. Notiamo che con questa tecnica la dimensione del segnale da trasmettere è proporzionale solo alla lunghezza di k e della codifica di M effettuata per mezzo di tale chiave k. Inoltre lo spazio di memoria si è notevolmente ridotto; tuttavia tale schema può essere facilmente violato. Definizione 1.1. Uno schema di Broadcast Encryption si dice violato se un utente che non appartiene all’insieme degli utenti autorizzati riesce a decifrare il segnale trasmesso dal Broadcast Center. 10 1. Broadcast Encryption 11 Consideriamo il seguente scenario: due utenti revocati r1 e r2 decidono di cooperare nel tentativo di rompere lo schema. Come appena osservato, nessuno dei due, singolarmente, è in grado di decodificare il messaggio trasmesso. Tuttavia, mettendo insieme le chiavi a loro disposizione, riusciranno a coprire l’intero insieme di chiavi K, e potranno quindi calcolare k. In simboli: . K = {ku | u ∈ N } . Kr1 = K \ {kr1 }, . Kr2 = K \ {kr2 } Kr1 ∪ Kr2 = K Alla luce di questo attacco si evince la necessità di definire la sicurezza del sistema in funzione di un nuovo parametro, che rappresenta il numero di utenti che devono coalizzarsi per riuscire a violare il sistema stesso. Definizione 1.2. Uno schema di Broadcast Encryption si dice resilient rispetto ad un insieme S se, comunque si scelga l’insieme T disgiunto da S di utenti autorizzati, non esiste un avversario2 che, pur conoscendo tutte le informazioni segrete degli utenti in S, riesca a decifrare il segnale trasmesso dal Broadcast Center agli utenti in T . Definizione 1.3. Uno schema di Broadcast Encryption si dice t-resilient se è resilient rispetto ad un qualunque sottoinsieme S di N di cardinalità t. 2 Con il termine avversario si intende un qualunque algoritmo probabilistico polinomiale sulla lunghezza del messaggio criptato. 1. Broadcast Encryption 1.4 12 I primi risultati Il primo vero schema di Broadcast Encryption, proposto nel 1991 in [Ber91], riprende un’idea presentata da Shamir in [Sha79], riadattandola al contesto delle trasmissioni su larga scala. Lo schema di Shamir, meglio conosciuto come (s, n)-threshold scheme (schema a soglia “s su n”), consente di frammentare una informazione segreta fra n partecipanti; più precisamente, mostra come suddividere una certa informazione I in n parti I1 , . . . , In dette shares, in modo tale che: • la conoscenza di s o più shares, consenta di ricostruire facilmente l’informazione I; • la conoscenza di s − 1 o meno shares lasci completamente indeterminata3 l’informazione I. La semplice ed elegante soluzione di Shamir si basa sull’interpolazione polinomiale: dati s punti (x1 , y1 ), . . . , (xs , ys ), con distinte xi , esiste uno e un solo polinomio P (x) di grado s − 1 tale che risulti: P (xi ) = yi 3 ∀i = 1, . . . , s Una informazione si dice completamente indeterminata se tutti i suoi possibili valori sono ugualmente probabili. 1. Broadcast Encryption 13 Per semplicità si supponga che l’informazione I, che deve essere divisa fra gli n partecipanti, sia un numero. Si scelga inoltre un primo p, più grande sia di I che di n, che verrà usato come modulo nelle successive operazioni aritmetiche. Lo schema consta di tre passi: . 1. si ponga a0 = I, si scelgano dei coefficienti ai distribuiti uniformemente in [0, p − 1] con as−1 6= 0, e si definisca il polinomio di grado s − 1: P (x) = a0 + a1 x + · · · + as−1 xs−1 mod p 2. si calcolino n valori del polinomio P : I1 = P (1), . . . , In = P (n) 3. si distribuiscano le shares cosı̀ ottenute agli n partecipanti. Utilizzando tecniche di interpolazione è possibile, conoscendo s shares, trovare i coefficienti di P (x) e quindi calcolare P (0), ovvero l’informazione segreta I. Avere a disposizione, invece, soltanto s−1 shares non consente di ricostruire il polinomio P (x), per cui il valore di I resta del tutto ignoto. Tale schema (s, n)-threshold possiede alcune interessanti proprietà: • la dimensione di ogni singola share non supera la dimensione dell’informazione originaria I; 1. Broadcast Encryption • se la soglia s rimane fissa, è possibile aumentare il numero dei partecipanti senza dovere sostituire le shares già distribuite, semplicemente calcolando il polinomio P (x) su altri xi ; • per ottenere una maggiore sicurezza del sistema è possibile cambiare periodicamente tutte le Ii , senza che questo comporti una modifica dell’informazione originaria I: basta infatti definire un nuovo polinomio P (x) e ricalcolare i nuovi valori delle shares. La difficoltà principale per adattare lo schema (s, n)-threshold alla Broadcast Encryption sta nel fatto che l’informazione segreta deve essere assegnata ad ogni partecipante nella fase di inizializzazione, a prescindere da quali saranno i messaggi da trasmettere. Per risolvere tale problema, Berkovits pensò di assegnare delle pseudo-shares Ii a tutti gli utenti u ∈ N prima di costruire lo schema vero e proprio, che invece verrà creato modellandolo sul segreto e sull’insieme di utenti autorizzati relativi alle diverse trasmissioni. Nella fase di inizializzazione, il Broadcast Center genera m ≫ n pseudoshares, e ne assegna una diversa ad ogni utente u ∈ N , quale informazione Iu . Delle rimanenti pseudo-shares, j verranno utilizzate dal Broadcast Center per garantire un maggiore grado di sicurezza al sistema: se, infatti, dovrà essere rispedito lo stesso messaggio al medesimo insieme di utenti, la casualità 14 1. Broadcast Encryption introdotta da questi ulteriori j pseudo-shares rende possibile la costruzione di un nuovo schema e quindi la trasmissione di un segnale totalmente differente. . Per spedire il messaggio I all’insieme T di utenti autorizzati (sia s = |T |), il Broadcast Center deve: 1. scegliere j ≥ 0; 2. creare uno schema (s + j + 1, 2s + j + 1)-threshold tale che (a) l’informazione segreta sia I; (b) le pseudo-shares Ii di tutti gli utenti u ∈ T siano valide; (c) le pseudo-shares Ii di tutti gli utenti u ∈ R siano escluse; (d) siano considerate valide anche j shares, scelte in modo casuale, ma diverse da quelle già assegnate agli utenti u ∈ N . 3. mandare in broadcast s + j shares, scelte in modo casuale, ma tutte diverse da quelle usate nei passi precedenti. Ogni utente u aggiunge alla sua pseudo-share contenuta in Iu , le s + j shares ricevute dalla trasmissione. Se u è uno degli utenti autorizzati, avrà esattamente le s + j + 1 shares necessarie per il calcolo dell’informazione segreta I, altrimenti non riuscirà a decifrare messaggio. 15 1. Broadcast Encryption In [Ber91], Berkovits mostra come applicare tale tecnica allo schema di interpolazione di Shamir. In tal caso, le pseudo-shares assegnate ad ogni utente in fase di inizializzazione sono punti (xi , yi ), con distinte xi . Per trasmettere un segnale, il Broadcast Center deve: 1. scegliere j punti (xi , yi ), con xi distinte da quelle dei punti già memorizzati nelle Iu relative agli utenti u ∈ N ; 2. determinare un polinomio P (x) di grado s + j che: (a) passi per (0, I), (b) passi per gli s punti (xi , yi ) relativi agli utenti autorizzati e per i j punti dummy appartenenti al Broadcast Center, (c) non passi per i punti (xi , yi ) relativi agli utenti revocati; 3. scegliere e trasmettere ulteriori s + j punti appartenenti a P (x). Ma come essere sicuri che il Broadcast Center riuscirà sempre a trovare un polinomio P (x) che soddisfi tutte le suddette caratteristiche? Una possibile soluzione è quella di scegliere tutti i punti con yi = b, per un determinato b. Sotto queste ipotesi, infatti, il Teorema di Rolle garantisce l’esistenza di uno e uno solo polinomio P (x) di grado s + j che passi per i 16 1. Broadcast Encryption punti desiderati, e che soddisfi anche la condizione in 2c. In tale caso, le pseudo-shares si riducono soltanto al valore delle xi , poiché il valore di b può essere incluso in ogni trasmissione dal Broadcast Center, il quale può decidere di cambiarlo periodicamente, aumentando cosı̀ la sicurezza del sistema. 17 Capitolo 2 Un framework generale per schemi di Broadcast Encryption Sono molteplici i vantaggi che derivano dall’utilizzo di un modello unificante, soprattutto in termini dell’analisi di sicurezza. Per tale motivo, in questo Capitolo si esamina un framework generale, descrivendone in dettaglio le caratteristiche e le proprietà. Inizialmente, si espone lo scheletro di base della generica soluzione inquadrabile all’interno del framework. Successivamente, si definisce la nozione di sicurezza per uno schema di Broadcast Encryption e si evidenzia infine come tale proprietà derivi direttamente dalla sicurezza delle sue singole componenti. 2. Un framework generale per schemi di Broadcast Encryption 2.1 Introduzione In letteratura sono note più di una soluzione al problema della Broadcast Encryption, ciascuna delle quali presenta dei vantaggi e degli svantaggi [LS98, GSY99, BF99, GSW00]. Di conseguenza, per decidere quale schema si adatti meglio alla particolare applicazione che si vuole realizzare, è necessario valutarne i pro e i contro nel contesto dello scenario in esame. Tuttavia, ciò risulta difficile quando le varie alternative sono costruite in maniera del tutto differente e la loro sicurezza riguarda aspetti diversi del problema. Per queste ragioni, lo schema generale recentemente proposto in [NNL01] risulta particolarmente interessante: esso permette di inquadrare svariati schemi di broadcasting in un framework unificante, consentendo cosı̀ non solo di confrontare fra loro le varie soluzioni, ma anche di trattarne la sicurezza in maniera più uniforme, nonché di apportare ad esse dei miglioramenti con minore difficoltà. Il framework in questione consente di analizzare schemi di broadcasting nei quali i singoli utenti siano assimilabili a degli stateless receivers (“destinatari senza memoria”). Con tale terminologia ci si riferisce a scenari in cui la decriptazione del segreto non dipende dai messaggi ricevuti in precedenza, ma 19 2. Un framework generale per schemi di Broadcast Encryption soltanto dal segnale inviato dal Broadcast Center nella corrente trasmissione, e dalla informazione Iu posseduta dal singolo destinatario. Il concetto di stateless receivers è particolarmente utile nelle situazioni in cui il destinatario del segnale trasmesso sia un dispositivo non costantemente on-line. Applicazioni tipiche sono quelle relative alla protezione del copyright, come ad esempio la registrazione e la distribuzione di CD musicali. In tale scenario il Broadcast Center (che nel caso particolare è la Casa Discografica), memorizza, in modo criptato secondo uno schema di broadcasting, l’informazione (ovvero i vari brani musicali) nei CD, che verranno acquistati dal pubblico interessato. Ogni utente dovrà quindi possedere un lettore CD abilitato alla riproduzione di questi brani, che gli consentirà quindi di decifrare i dati contenuti nel CD, e di interpretarne correttamente il contenuto. 20 2. Un framework generale per schemi di Broadcast Encryption 2.2 Subset-Cover Revocation framework Lo schema proposto in [NNL01] è noto con il nome di Subset-Cover Revocation framework, cioè “Schema di Revocazione via Copertura per Sottoinsiemi”. Tale denominazione deriva dalla tecnica che lo caratterizza, ovvero l’esclusione degli utenti non autorizzati per mezzo di una specifica copertura dell’insieme N che comprenda soltanto gli utenti appartenenti a T . Si consideri una famiglia S, sottoinsieme dell’insieme delle parti di N , ovvero sia S una collezione di sottoinsiemi di N : S ⊆ P(N ), S = {S1 , . . . , Sw | Sj ⊆ N , j = 1, . . . , w} . Tale famiglia S, diversa a seconda del particolare schema che si vuole definire nell’ambito del framework, può anche essere molto numerosa, ma la sua dimensione, anche se considerevole, non è da considerarsi di per sè un aspetto negativo della soluzione in questione, in quanto spesso è possibile definire la famiglia S in maniera implicita, senza mantenerla direttamente in memoria. Si noti piuttosto che maggiore è la cardinalità di tale famiglia, più semplice ed efficace risulta l’individuazione della partizione per ricoprire T . D’altro canto, però, ogni qualvolta si definisce un nuovo schema, bisogna specificare un metodo semplice e diretto che consenta di individuare in modo univoco gli insiemi Sj ∈ S. 21 2. Un framework generale per schemi di Broadcast Encryption Per tali ragioni, la scelta della famiglia S e di una tecnica succinta per denotarne gli elementi è uno dei fattori qualificanti nella costruzione di un nuovo schema di broadcasting che risulti efficiente. Ad ogni sottoinsieme Sj è associata una long-lived key Lj , dalla segretezza della quale dipende la sicurezza dell’intero sistema. Tali chiavi sono utilizzate per criptare le varie chiavi di sessione, inviate agli utenti autorizzati nelle diverse trasmissioni. Ciò può essere formalizzato definendo una funzione di criptazione, parametrizzata dalle chiavi Lj : ELj : {0, 1}ℓ −→ {0, 1}ℓ che prende in input una chiave di sessione di lunghezza ℓ, e restituisce una sua criptazione di pari lunghezza. La funzione EL sarà generalmente implementata come un Cifrario a blocchi, poiché essa è utilizzata per criptare chiavi di sessione la cui lunghezza in bits, pari a ℓ, viene fissata una volta per tutte. Noto l’insieme R degli utenti revocati, bisogna individuare una copertura di T , che faccia però uso soltanto degli insiemi Sj ∈ S. In altri termini è necessario determinare una partizione dell’insieme T in sottoinsiemi disgiunti Si1 , . . . , Sim , appartenenti a S, tali che: T = m [ j=1 Sij , Sij1 ∩ Sij2 = ∅ , j1 6= j2 . 22 2. Un framework generale per schemi di Broadcast Encryption Una volta effettuata la copertura dell’insieme degli utenti autorizzati, si seleziona in maniera casuale una chiave di sessione k e si effettuano m codifiche di essa, utilizzando la funzione di criptazione EL parametrizzata con le long-lived keys Li1 , . . . , Lim relative ai sottoinsiemi Sij della partizione sopra individuata: Cj = ELij (k) , j = 1, . . . , m . La chiave k viene quindi utilizzata solo per codificare il messaggio oggetto del broadcasting, e distrutta subito dopo. La criptazione avviene utilizzando un Cifrario a sequenza: Fk : {0, 1}∗ −→ {0, 1}∗ che preso in input un messaggio M, genera un messaggio cifrato M′ di dimensioni pari a quelle del messaggio in chiaro. La sicurezza di tale cifrario può essere più debole rispetto a quella di EL , in quanto esso viene utilizzato con chiavi di sessione, la cui esposizione non compromette l’intero sistema, ma soltanto il messaggio in oggetto. Ciò permette di utilizzare chiavi di sessione k di dimensioni molto più ridotte rispetto a quelle delle Lj , con conseguente riduzione della lunghezza dell’intera trasmissione. 23 2. Un framework generale per schemi di Broadcast Encryption Come già definito nel Capitolo 1, ogni schema di Broadcast Encryption è costituito da tre parti; si consideri adesso come questa suddivisione si riflette nell’ambito del framework in questione. 1. Nella fase di inizializzazione bisogna innanzitutto definire la famiglia S, una tecnica per denotarne gli elementi Sj e un metodo per associare ad ognuno di essi una long-lived key Lj . Si deve inoltre assegnare un’opportuna informazione segreta Iu ad ogni utente u ∈ N , che gli consenta di ricavare le long-lived keys relative a tutti gli insieme Sj ai quali egli appartiene: ∀ u ∈ N, ∀ 1 ≤ i ≤ w (u ∈ Sj ) ⇒ (Iu (Sj ) = Lj ) . 2. L’algoritmo di codifica è quello utilizzato dal Broadcast Center per trasmettere il segnale all’insieme degli utenti autorizzati. Il Broadcast Center deve: • scegliere la chiave di sessione k; • individuare l’insieme T e determinarne una partizione utilizzando solo gli insiemi Si1 , . . . , Sim appartenenti ad S; • effettuare una criptazione della chiave k con ciascuna delle longlived keys associate agli insiemi che costituiscono la partizione individuata al punto precedente; 24 2. Un framework generale per schemi di Broadcast Encryption • mandare in broadcast il segnale: h [i1 , . . . , im , ELi1 (k), . . . , ELim (k)], {z } | header Fk (M ) i . | {z } body L’header comprende gli indici degli insiemi della partizione di T e le m codifiche della chiave k con le diverse Lj . Il body, invece, è costituito semplicemente dalla criptazione del messaggio vero e proprio per mezzo della chiave di sessione k. 3. L’algoritmo di decodifica è invece quello usato da ogni utente per tentare di decifrare il segnale che ha captato, cioè: h [i1 , . . . , im , C1 , . . . , Cm ], M ′ i . Ogni utente u ∈ N deve: • esaminare gli indici ij presenti nello header al fine di determinare quell’ij̄ tale che risulti u ∈ Sij̄ . Dal momento che gli Sij costituiscono una partizione di T , questa operazione avrà successo solo se u ∈ T (nel qual caso l’indice ij̄ adatto è unico); se invece u ∈ R nessun indice presenterà le caratteristiche richieste e l’algoritmo di decodifica fallirà. • utilizzando l’informazione segreta Iu , determinare la chiave Lij̄ associata ad Sij̄ ; 25 2. Un framework generale per schemi di Broadcast Encryption • calcolare k = EL−1i (Cj̄ ) ; j̄ • calcolare M = Fk−1 (M ′ ) . Le varie soluzioni al problema della Broadcast Encryption, modellate all’interno del framework in esame, differiscono fra loro per il modo in cui affrontano e realizzano i seguenti punti: • scelta della famiglia S = {S1 , . . . , Sw }; • metodo per denotarne gli elementi; • associazione di una long-lived key Lj ad ogni Sj , j = 1, . . . , w; • tecnica per determinare la partizione dell’insieme T ; • tecnica che consenta ad ogni utente u ∈ N di risalire, a partire dalla propria informazione segreta Iu , alla chiave Lj associata a qualunque insieme Sj a cui esso appartiene; • implementazione delle funzioni EL ed Fk . È chiaro che tutti gli schemi proposti nell’ambito di questo framework presenteranno sempre caratteristiche molto simili: come riuscire quindi a dare un giudizio qualificativo per ognuno di essi? 26 2. Un framework generale per schemi di Broadcast Encryption Nel valutare le varie soluzioni, verranno utilizzati come fattori discriminanti i seguenti parametri: 1. Lunghezza del segnale trasmesso dal Broadcast Center: essa è dovuta non solo alla lunghezza del messaggio M, ma anche (e soprattutto) alla dimensione dell’header, che dipende perlopiù dal cifrario EL e dalla lunghezza della chiave di sessione che con esso viene cifrata. Si noti che tale parametro è fortemente legato alla scelta di S, in quanto, maggiore sarà la sua dimensione, più efficiente (ovvero di minore cardinalità) sarà la partizione individuata. 2. Memoria necessaria alla memorizzazione di Iu : come è facilmente intuibile, bisogna minimizzare tale parametro, poichè spesso tale informazione dovrà essere contenuta in un dispositivo con risorse limitate, come ad esempio un decoder o una smartcard. 3. Tempo di decodifica del segnale: per le stesse ragioni sopra esposte, è preferibile disporre di un algoritmo di decodifica che renda l’operazione di decriptazione del segnale veloce ed efficiente, al fine di non appesantire eccessivamente il sistema di calcolo disponibile al singolo utente. 27 2. Un framework generale per schemi di Broadcast Encryption Si osservi che la memoria richiesta dal Broadcast Center e il tempo necessario per la codifica del segnale da trasmettere non sono dei fattori determinanti per valutare l’efficienza dello schema, poichè tipicamente il Broadcast Center dispone di notevoli risorse e comunque tali operazioni possono essere effettuate in una fase di preprocessing. 2.3 La sicurezza del framework Uno degli aspetti più positivi dell’utilizzo di un framework generale è la possibilità di analizzare in modo semplice e uniforme la sicurezza di ogni soluzione che rientri in questo schema. Elaborata una definizione precisa di cosa si intenda per “schema di Broadcast Encryption sicuro”, è possibile stabilire quali caratteristiche debbano essere esibite dalle varie componenti di una particolare soluzione, affinché lo schema soddisfi la data nozione di sicurezza. Per potere definire i parametri di sicurezza, occorre introdurre un modello per la Spia, che verrà sempre intesa come un Riconoscitore o Distinguisher. Si considerino due “mondi”, in ognuno dei quali vi è un diverso oracolo O, che risponde correttamente ad ogni domanda, senza però mai rivelare l’algoritmo che lo caratterizza. Si supponga quindi di mettere la Spia in uno dei due mondi 28 2. Un framework generale per schemi di Broadcast Encryption e di chiederle di capire in quale dei due si trova. Per vincere tale sfida, la Spia è autorizzata a porre ad O un qualunque numero di domande, purché fornisca una risposta in un tempo ragionevolmente breve.1 La seguente proprietà risulta essere un fattore discriminante per la sicurezza dello schema, poiché si proverà che, se lo schema soddisfa tale proprietà, allora la trasmissione del segnale avverrà in modo sicuro. Definizione 2.1 (Indistinguibilità delle chiavi). Uno schema gode della proprietà di indistinguibilità delle chiavi se, per qualunque insieme Si ∈ S, la conoscenza delle informazioni segrete Iu di tutti gli utenti u non appartenenti ad Si , non consente di distinguere la chiave Li associata ad Si da una stringa completamente random di pari lunghezza. Si esaminino adesso le due funzioni di codifica utilizzate nel framework per cifrare i segnali da trasmettere. I requisiti di sicurezza che esse dovranno soddisfare saranno fra loro differenti poiché, come già precedentemente notato, Fk e EL utilizzano per la codifica chiavi con caratteristiche molto diverse. In entrambi i casi, però, la sicurezza è definita in termini della probabilità che la Spia riesca a distinguere fra i due mondi relativi ad una opportuna sfida. 1 La quantificazione del tempo concesso alla Spia per distinguere fra i due “mondi” può essere formalizzata in termini della nozione di tempo polinomiale rispetto ad un opportuno parametro, diverso da scenario a scenario. 29 2. Un framework generale per schemi di Broadcast Encryption Per definire la sicurezza di Fk , si consideri un avversario polinomiale B all’interno del seguente scenario: • si fissi una data chiave random k di lunghezza ℓ, ignota alla Spia; • B sceglie, a sua discrezione, un messaggio M; • B ottiene un testo cifrato C e viene posto di fronte alla seguente sfida: riuscire a distinguere se C è la codifica del messaggio M da lui scelto o quella di un messaggio completamente casuale RM , della stessa lunghezza di M (Fig. 2.1). Mondo 1 Mondo 2 C = Fk (M) C = Fk (RM ) con k ∈ {0, 1}ℓ e |RM | = |M| Figura 2.1: La sfida di B per la funzione Fk Sia P r(M) la probabilità che B risponda Fk (M), supposto che effettivamente B si trovi nel Mondo 1 , (ovvero sia P r(M) la probabilità di scelta corretta): P r(M) = P r[B scelga Fk (M) | Fk (M)] . 30 2. Un framework generale per schemi di Broadcast Encryption Sia P r(RM ) la probabilità che B risponda Fk (M), supposto invece che B si trovi nel Mondo 2, (ovvero sia P r(RM ) la probabilità di scelta scorretta): P r(RM ) = P r[B scelga Fk (M) | Fk (RM )] . L’abilità di B di distinguere fra i due mondi può essere formulata in termini delle suddette probabilità, considerando la quantità |P r(M) − P r(RM )|. Definizione 2.2. Si definisce vantaggio dell’avversario B rispetto alla funzione Fk , la differenza: AdvB (Fk ) = |P r(M) − P r(RM )| . Definizione 2.3 (Sicurezza della funzione Fk ). Si dice che la funzione Fk è ε1 -sicura nei confronti di un avversario che agisce come sopra, se il vantaggio di B è trascurabile2 ed è limitato da ε1 : AdvB (Fk ) ≤ ε1 . Per definire la sicurezza della funzione EL , si consideri un avversario polinomiale B all’interno del seguente scenario: • si fissi una data chiave random L, ignota alla Spia; • B sceglie un numero polinomiale di testi in chiaro (cioè chiavi di sessione), e per ognuno di essi ottiene la codifica con EL ; 2 Per trascurabile si intende che il vantaggio, in funzione di ℓ, va a zero più velocemente di qualunque frazione polinomiale in ℓ: 1/p(ℓ) 31 2. Un framework generale per schemi di Broadcast Encryption • B sceglie un numero polinomiale di testi codificati, e per ognuno di essi ottiene la decodifica con EL−1 ; • si fissi una data chiave di sessione k random, di lunghezza ℓ, e la si comunichi alla Spia; • B ottiene un testo cifrato C e viene posto di fronte alla seguente sfida: riuscire a distinguere se C è la codifica di k o la codifica di una chiave di sessione completamente casuale Rk , di lunghezza ℓ (Fig. 2.2). Mondo 1 Mondo 2 C = EL (k) C = EL (Rk ) con L ∈ {0, 1}∗ e |Rk | = ℓ Figura 2.2: La sfida di B per la funzione EL Sia P r(k) la probabilità che B risponda EL (k), supposto che effettivamente si trovi nel Mondo 1 : P r(k) = P r[B scelga EL (k) | EL (k)] . Sia P r(Rk ) la probabilità che B risponda EL (k), supposto che invece si trovi nel Mondo 2 : P r(Rk ) = P r[B scelga EL (k) | EL (Rk )] . 32 2. Un framework generale per schemi di Broadcast Encryption Definizione 2.4. Si definisce vantaggio dell’avversario B rispetto alla funzione EL , la differenza: AdvB (EL ) = |P r(k) − P r(Rk )| . Definizione 2.5 (Sicurezza della funzione EL ). Si dice che la funzione EL è ε2 -sicura nei confronti di un avversario che agisce come sopra, se il vantaggio di B è trascurabile ed è limitato da ε2 : AdvB (EL ) ≤ ε2 . Si passa adesso a definire la sicurezza di un schema Subset-Cover A, con S = {S1 , . . . , Sw }, in termini di un avversario polinomiale B all’interno del seguente scenario: • B sceglie un indice i, 1 ≤ i ≤ w; • B ottiene le informazioni segrete Iu di tutti gli utenti u non appartenenti ad Si ; • B ottiene una stringa di bits X e viene posto di fronte alla seguente sfida: riuscire a distinguere se X è la long-lived key Li associata a Si o una chiave completamente casuale RLi , della stessa lunghezza di Li (Fig. 2.3). 33 2. Un framework generale per schemi di Broadcast Encryption Mondo 1 Mondo 2 X = Li X = RLi con |RLi | = |Li | Figura 2.3: La sfida di B per una singola chiave Li Sia P r(Li ) la probabilità che B risponda Li , supposto che effettivamente si trovi nel Mondo 1 : P r(Li ) = P r[B scelga Li | Li ] . Sia P r(RLi ) la probabilità che B risponda Li , supposto che invece si trovi nel Mondo 2 : P r(RLi ) = P r[B scelga Li | RLi ] . Definizione 2.6. Si definisce vantaggio dell’avversario B rispetto ad una singola chiave Li , la differenza: AdvB (Li ) = |P r(Li ) − P r(RLi )| . Definizione 2.7 (Indistinguibilità delle chiavi nel modello della Spia). Si dice che uno schema Subset-Cover A soddisfa la proprietà dell’indistinguibilità delle chiavi se il vantaggio di B è trascurabile ed è limitato da ε3 : AdvB (Li ) ≤ ε3 . 34 2. Un framework generale per schemi di Broadcast Encryption Si tratta di una riformulazione della proprietà di indistinguibilità delle chiavi (Definizione 2.1), rielaborata in termini del modello della Spia. Uno schema Subset-Cover A che soddisfa la proprità dell’indistinguibilità delle chiavi nella formulazione della Definizione 2.7, soddisfa anche una forma estesa di indistinguibilità, esprimibile in termini del seguente avversario polinomiale B: • B sceglie i, 1 ≤ i ≤ w; • B riceve le informazioni segrete Iu , ∀u ∈ N \ Si ; • si denotino con {Si1 , . . . , Sit } i sottoinsiemi di Si appartenenti anch’essi alla famiglia S, cioè {Si1 , . . . , Sit } = P(Si ) ∩ S; • siano Li1 , . . . , Lit le long-lived keys relative a {Si1 , . . . , Sit }; • B ottiene una lista X1 , . . . , Xt di stringhe di bits e viene posto di fronte la seguente sfida: riuscire a distinguere se la lista X1 , . . . , Xt corrisponde alla sequenza di chiavi Li1 , . . . , Lit o alla sequenza RLi1 , . . . , RLit di numeri random di pari lunghezza (Fig. 2.4). Sia P r(Li1 , . . . , Lit ) la probabilità che B risponda Li1 , . . . , Lit , supposto che effettivamente si trovi nel Mondo 1 : P r(Li1 , . . . , Lit ) = P r[B scelga Li1 , . . . , Lit | Li1 , . . . , Lit ] 35 2. Un framework generale per schemi di Broadcast Encryption Mondo 1 Mondo 2 X1 , . . . , Xt = Li1 , . . . , Lit X1 , . . . , Xt = RLi1 , . . . , RLit con |RLj | = |Lj |, j = 1, . . . , t Figura 2.4: La sfida di B per la lista di chiavi {Li1 , . . . , Lit } Sia P r(RLi1 , . . . , RLit ) la probabilità che B risponda Li1 , . . . , Lit , supposto che invece si trovi nel Mondo 2 : P r(RLi1 , . . . , RLit ) = P r[B scelga Li1 , . . . , Lit | RLi1 , . . . , RLit ] . Definizione 2.8. Si definisce vantaggio dell’avversario B rispetto ad una lista di chiavi Li1 , . . . , Lit , la differenza: AdvB (Li1 , . . . , Lit ) = |P r(Li1 , . . . , Lit ) − P r(RLi1 , . . . , RLit )| . Lemma 2.1. Sia A uno schema Subset-Cover che soddisfa la proprietà dell’indistinguibilità delle chiavi. Allora per qualunque avversario polinomiale B che agisce come sopra, risulta AdvB (Li1 , . . . , Lit ) ≤ t · ε3 . Dimostrazione. Si rinominino, per semplicità, Si1 , . . . , Sit con S1 , . . . , St riordinandoli rispetto alla loro dimensione: | S1 | ≥ | S2 | ≥ . . . ≥ | St | 36 2. Un framework generale per schemi di Broadcast Encryption 37 Si consideri la seguente particolare lista, detta lista di tipo j: L1 , . . . , Lj , RLj+1 , . . . , RLt costituita dalle chiavi L1 , . . . , Lj , seguite da t − j chiavi generate in modo casuale. Sia pj la probabilità che B riconosca una lista di tipo j: pj = P r[B risponda ‘1’ | L1 , . . . , Lj , RLj+1 , . . . , RLt ] . Conseguentemente: p0 = P r[B risponda ‘1’ | RL1 , . . . , RLt ] , pt = P r[B risponda ‘1’ | L1 , . . . , Lt ] . È possibile riformulare la tesi, in termini di tale probabilità, come segue: | p t − p0 | ≤ t · ε3 . Si supponga, per assurdo, che la tesi non sia vera, esista cioè un avversario polinomiale B che distingua i due mondi, ovvero: | p t − p0 | ≥ t · ε3 . Deve pertanto esistere un indice j, tale che risulti | pj − pj−1 | > ε3 (∗) 2. Un framework generale per schemi di Broadcast Encryption ovvero B riesce a distinguere fra una lista di tipo j e una di tipo j − 1 con vantaggio ε3 . Si vuole costruire un avversario B′ che, sfruttando le capacità di calcolo di B, riesca a distinguere fra Lj e RLj con probabilità maggiore di ε3 , contraddicendo cosı̀ l’ipotesi che A soddisfa la proprietà di indistinguibilità delle chiavi, arrivando quindi all’assurdo. L’avversario B′ ricalca le azioni di B, operando come segue: • in corrispondenza della scelta di Si effettuata da B, B′ seleziona Sj ⊆ Si , tale che risulti |pj −pj−1 | > ε3 . Si noti che se Sj ⊆ Si allora N \Sj ⊇ N \Si e quindi, dal momento che B′ dispone delle informazioni segrete Iu di tutti gli u ∈ N \ Sj , può fornire a B le Iu relative a tutti gli utenti u ∈ N \ Si ; • per riuscire a distinguere fra Lj e RLj , B′ chiede a B di distinguere fra i due mondi, uno consistente in una lista di tipo j: L1 , . . . , Lj−1 , Lj , RLj+1 , . . . , RLt , e l’altro consistente in una lista di tipo j − 1: L1 , . . . , Lj−1 , RLj , RLj+1 , . . . , RLt . 38 2. Un framework generale per schemi di Broadcast Encryption Nota. Tali liste possono sicuramente essere costruite da B′ , poiché egli è in grado di ricavare le chiavi L1 , . . . , Lj−1 e di scegliere in modo casuale RLj+1 , . . . , RLt . Infatti, poiché | S1 | ≥ | Sj | è ovvio che S1 6⊂ Sj . Pertanto S1 \ Sj 6= ∅, ovvero S1 ∩ (N \ Sj ) 6= ∅. È quindi lecito dire che esiste un utente u1 ∈ (S1 ∩ (N \ Sj )). Dal fatto che u1 ∈ (N \ Sj ), segue che B′ conosce Iu1 , dalla quale riuscirà a ricavare la long-lived key L1 associata a S1 a cui u1 appartiene. In definitiva B ′ conosce L1 ; analogamente, B′ conosce L2 , . . . , Lj−1 . Si osservi che le due liste create da B′ differiscono proprio nella posizione j, dove si trovano rispettivamente Lj e RLj : quindi la risposta di B consentirà a B′ di distinguere fra i due mondi. Pertanto il vantaggio che B′ ha nel distinguere fra Lj e RLj è lo stesso di quello che B ha nel distinguere fra una lista di tipo j e una di tipo j − 1 che, per la (*), risulta essere maggiore di ε3 . Si ottiene quindi che la probabilità di risposta corretta di B′ è maggiore di ε3 , pervenendo cosı̀ ad un assurdo. Nel definire la nozione di sicurezza per una applicazione crittografica, è bene essere molto “generosi” nelle assunzioni circa il potere di calcolo e di manipolazione dell’avversario, di modo da trovarsi al riparo dagli attacchi crittoanalitici condotti da un avversario reale. 39 2. Un framework generale per schemi di Broadcast Encryption Si assume, pertanto, che la Spia sia in grado di: 1. ottenere delle informazioni segrete Iu corrompendo degli utenti u ∈ N ; 2. richiedere al Broadcast Center di trasmettere un messaggio a sua scelta; 3. inviare dei messaggi falsi, opportunamente costruiti, a degli utenti autorizzati e vedere il risultato del loro tentativo di decodifica. Per modellare una tale Spia nell’ambito del framework in questione, si considera un avversario polinomiale B che: 1. sceglie un sottoinsieme R0 di N e un messaggio opportunamente costruito M0 , e chiede al Broadcast Center di effettuarne la trasmissione all’insieme di utenti N \R0 per esaminarne la codifica. Successivamente, crea un segnale fasullo e ne analizza la decodifica da parte di un qualunque utente u ∈ N \ R0 . A questo punto, seleziona un utente u1 e decide di corromperlo, venendo cosı̀ a conoscenza della relativa informazione segreta Iu1 . Considera adesso R1 = {u1 }, e un sottoinsieme di N , ′ R1 ⊃ R1 e ricomincia di nuovo, corrompendo di volta in volta un utente diverso, fino a costruire l’insieme R. 40 2. Un framework generale per schemi di Broadcast Encryption 2. sceglie un messaggio M e chiede al Broadcast Center la codifica M′ di esso. Stavolta, però, il Broadcast Center può decidere di criptare M o un messaggio casuale RM , di pari lunghezza. Quindi B viene posto di fronte alla seguente sfida: riuscire a capire se il segnale M′ corrisponde alla codifica di M o RM (Fig. 2.5). Figura 2.5: L’attacco di B al Broadcast Center 41 2. Un framework generale per schemi di Broadcast Encryption Definizione 2.9 (Sicurezza di uno schema Subset-Cover). Uno schema Subset-Cover è detto sicuro se, qualunque avversario polinomiale B che agisce come sopra, ha probabilità di successo trascurabile. Il seguente importante Teorema prova come la sicurezza dell’intero schema dipenda dai requisiti di sicurezza (definiti in precedenza) relativi alle varie componenti che lo costituiscono. Teorema 2.2 (Il Teorema di Sicurezza). Sia A uno schema Subset-Cover che gode della proprietà di indistinguibilità delle chiavi, con funzioni di codifica Fk e EL rispettivamente soddisfacenti le Definizioni 2.3 e 2.5. Allora A è sicuro nel senso della Definizione 2.9 con parametro di sicurezza δ < ε1 + 2 m w(ε2 + 4 w ε3 ) dove w è la cardinalità della famiglia S e m è la massima dimensione della copertura di T . Dimostrazione. Per la dimostrazione si rimanda a [NNL01]. 42 Capitolo 3 Due schemi nell’ambito del Subset-Cover framework Per apprezzare l’utilità del Subset-Cover framework, in questo Capitolo si introducono due particolari soluzioni realizzate seguendone i criteri caratteristici. La prima soluzione, il Complete Subtree Method, si basa su di una tecnica information theoretic per l’assegnazione delle chiavi: ne deriva uno schema semplice, ma poco efficiente in termini di memoria richiesta ad ogni utente. Il Subset Difference Method, invece, permette di partizionare l’insieme degli utenti autorizzati in maniera più efficiente, consentendo cosı̀ al Broadcast Center di trasmettere dei segnali più compatti. Per contro, i riceventi saranno gravati da un maggiore carico computazionale in fase di decodifica. 3. Due schemi nell’ambito del Subset-Cover framework 3.1 Introduzione Per chiarire ulteriormente il funzionamento del framework generale presentato nel Capitolo precedente, si passa adesso ad esaminare due particolari soluzioni per il problema della Broadcast Encryption realizzate all’interno dello schema Subset-Cover. In entrambi i casi di studio, l’universo1 degli utenti N viene rappresentato come l’insieme delle foglie di un albero binario completo di altezza h = lg2 N (per semplicità si considereranno solo valori di N pari a potenze di 2). Tale rappresentazione risulta vantaggiosa perchè la struttura gerarchica, tipica degli alberi binari, consente di denotare in maniera semplice ed efficace dei sottoinsiemi particolari di utenti. La differenza principale fra le due soluzioni consiste invece nella diversa tecnica adoperata per l’associazione delle long-lived keys agli insiemi Sj delle rispettive famiglie S. Nella prima soluzione, infatti, ad ogni insieme Sj viene assegnata una longlived key Lj , scelta in maniera del tutto casuale da uno spazio di chiavi L 1 Nella pratica l’insieme N non coincide con l’insieme effettivo di utenti, ma si preferisce sceglierlo di cardinalità maggiore, per consentire l’inserimento di nuovi utenti, senza dover ricostruire l’intero schema. 44 3. Due schemi nell’ambito del Subset-Cover framework opportunamente grande. Di conseguenza, per considerazioni di Teoria dell’Informazione, per descrivere la chiave Lj associata al generico insieme Sj , è necessario utilizzare lg |L| bits; in altri termini, l’unica descrizione della chiave consiste nella chiave stessa, e non è pertanto possibile distinguere fra una long-lived key e una stringa di bits completamente random. Per tale ragione, la tecnica per l’assegnazione delle long-lived keys nel contesto della prima soluzione viene detta information theoretic. Nella seconda soluzione, invece, l’associazione delle long-lived keys avviene in maniera più sofisticata. Il metodo utilizzato si ispira infatti a nozioni di Teoria della Complessità, in quanto fa uso di un particolare tipo di funzione appartenente alla classe dei Generatori di numeri pseudo-random. Grazie a questo artificio, le long-lived keys associate ai vari insiemi della famiglia S risultano comunque indistinguibili da quantità del tutto casuali, sebbene ogni singola Lj sia descrivibile con molto meno che lg |L| bits. In considerazione dei criteri adoperati, tale tecnica viene definita computational. Dal confronto delle due metodologie, è possibile notare che il caso information theoretic è sempre meno efficiente del caso computational in termini dell’utilizzo dello spazio di memorizzazione richiesto al singolo utente, a fronte però di un maggiore lavoro necessario in fase di decodifica per ricavare le varie Lj dall’informazione segreta Iu . 45 3. Due schemi nell’ambito del Subset-Cover framework Un’ osservazione finale, valida per entrambe le soluzioni, riguarda la loro sicurezza rispetto a coalizioni di utenti revocati; in entrambi i casi lo schema proposto risulta essere r-resilient (con r = |R|), nel senso della Definizione 1.3 introdotta in precedenza. 3.2 Complete Subtree Method Come già il nome stesso evidenzia, tale metodo basa la costruzione della famiglia S sull’individuazione di sottoalberi completi di un albero binario completo A con N foglie e radice rA . Nella fase di inizializzazione si individuano tutti i possibili sottoalberi completi di A, e si sceglie come famiglia S l’insieme di tali sottoalberi. Più precisamente, il generico Sj è l’isieme delle foglie di un sottoalbero binario completo di A e risulta identificabile per mezzo della sua sola radice vj (Fig. 3.1). Figura 3.1: Costruzione della famiglia S con N = 4: S = {S1 , . . . , S7 } 46 3. Due schemi nell’ambito del Subset-Cover framework Poiché ogni nodo dell’albero A, sia esso un nodo interno od una foglia, può essere visto come la radice di un unico sottoalbero, si ricava che la cardinalità w dell’insieme S è pari al numero di nodi presenti nell’albero, ovvero 2 N − 1. Ad ogni nodo vj viene assegnato un numero random che costituirà la longlived key Lj associata all’insieme Sj di cui esso è la radice. L’informazione segreta Iu di ogni utente-foglia u, conterrà le (lg N + 1) long-lived keys Lj relative a tutti i nodi vj nel cammino da u alla radice rA . In tale modo, il generico utente u sarà in grado di ricavare la long-lived key associata ad ogni insieme Sj ∈ S al quale esso appartiene, poiché i sottoalberi binari completi che contengono la foglia u sono tutti e soli quelli aventi radice in uno dei nodi sul cammino da u a rA (Fig. 3.2). Figura 3.2: Contenuto dell’informazione Iu : Iu = {L1 , L2 , L5 , L11 } 47 3. Due schemi nell’ambito del Subset-Cover framework Nota. Conseguenza diretta della tecnica information theoretic per l’assegnazione delle chiavi è che il Complete Subtree Method soddisfa la Proprietà 2.1 dell’indistinguibilità delle chiavi in quanto, essendo ogni singola chiave selezionata in maniera casuale ed indipendente da ogni altra, non è in alcun modo possibile ricavarla. Nella fase di codifica, il Broadcast Center, che conosce tutte le long-lived keys Lj , individua la partizione di T e, generata una chiave di sessione k, trasmette il segnale: h [i1 , . . . , im , ELi1 (k), . . . , ELim (k)], Fk (M ) i dove i1 , . . . , im , non sono altro che gli indici delle radici relative ai sottoalberi della partizione. Nella fase di decodifica, ogni utente u ∈ T , ricevuto il segnale: h [i1 , . . . , im , C1 , . . . , Cm ], M ′ i individua l’unico indice ij corrispondente all’insieme Sij della partizione a cui esso appartiene, e dalla propria informazione segreta Iu ricava Lij . A questo punto sarà in grado di computare k = EL−1i (Cj ) e quindi di ottenere j M = Fk−1 (M ′ ) . 48 3. Due schemi nell’ambito del Subset-Cover framework Per descrivere la tecnica utilizzata dal Broadcast Center per l’individuazione della partizione di T , si consideri la seguente definizione: Definizione 3.1 (Albero di Steiner). Dato un albero binario completo A e un insieme V ′ costituito da alcune sue foglie, si definisce albero di Steiner ST (V ′ ) il più piccolo sottoalbero di A, contenente la radice rA e tutte le foglie di V ′ (Fig. 3.3). Figura 3.3: Costruzione dell’albero di Steiner ST (V ′ ), con V ′ = {v1 , v2 , v3 } Nota. Per ogni fissato insieme V ′ , l’albero di Steiner ad esso associato è unico. Dato un insieme R = {u1 , . . . , ur } di utenti revocati, si consideri l’albero di Steiner ST (R). Siano {vi1 , . . . , vim } tutti i nodi dell’albero A adiacenti ad un nodo di grado 1 nell’albero di Steiner,2 ma non appartenenti ad esso. La partizione di T sarà costituita dai sottoalberi {Si1 , . . . , Sim }, aventi come radici {vi1 , . . . , vim } (Fig. 3.4). 2 Nell’albero di Steiner un nodo si dirà di grado 1 se uno solo dei suoi due figli appartiene all’albero stesso. 49 3. Due schemi nell’ambito del Subset-Cover framework Figura 3.4: Costruzione della partizione di T con R = {v1 , v2 , v3 } Proposizione 3.1. Ogni utente u ∈ / R appartiene ad uno e un solo insieme della partizione {Si1 , . . . , Sim }. Dimostrazione. Per dimostrare che ogni utente u ∈ / R risulta “coperto dalla partizione”, ovvero ∃j ∈ {1, . . . , m} | u ∈ Sij , si consideri il fratello vu di u: 1. se vu ∈ ST (R), ovvero vu è un utente revocato, allora il loro padre pu appartiene all’albero di Steiner e risulta avere grado 1. Di conseguenza, per costruzione, il sottoalbero contenente il solo nodo u appartiene alla partizione di T e quindi u risulta coperto. 2. se invece vu ∈ / ST (R), allora anche pu ∈ / ST (R) e si ripete il ragionamento fatto per u sul nodo pu ; prima o poi si troverà un antenato di u che risulta figlio di un nodo dell’albero di Steiner di grado 1 (provando cosı̀ che u è coperto), oppure si arriverà alla radice. In tal caso l’albero di Steiner è vuoto, cioè non ci sono utenti revocati: la partizione è 50 3. Due schemi nell’ambito del Subset-Cover framework banalmente costituita dal solo A e quindi ogni nodo, e in particolare u, viene coperto. D’altra parte, si supponga, per assurdo, che u appartenga a due sottoalberi Si e Sj . L’unica configurazione possibile è che Si ed Sj siano innestati l’uno dentro l’altro: senza perdita di generalità, si supponga Sj ⊂ Si (Fig. 3.5). Figura 3.5: Configurazione per l’ipotesi d’assurdo (Prop. 3.1) Dal momento che Sj appartiene alla partizione, il padre del nodo vj deve essere un nodo nell’albero di Steiner avente grado 1. Ma allora Si non può appartenere alla partizione, poiché fra i suoi nodi ve n’è uno appartenente all’albero di Steiner. Si perviene cosı̀ all’assurdo. Proposizione 3.2. Ogni utente u ∈ R non appartiene a nessun insieme della partizione {Si1 , . . . , Sim }. Dimostrazione. Si supponga, per assurdo, che u appartenga ad un sottoalbero Sj presente nella partizione. Dal fatto che Sj appartiene alla partizione, segue che la sua radice vj non può stare in ST (R). D’altra parte, dal fatto che 51 3. Due schemi nell’ambito del Subset-Cover framework l’utente revocato appartiene ad Sj , segue che vj ha un discendente revocato e pertanto vj ∈ ST (R). Si ha pertanto l’assurdo. Proposizione 3.3. La dimensione della partizione di T è al più r lg(N /r), con r = |R|. Dimostrazione. Si noti preliminarmente che nella partizione {Si1 , . . . , Sim } vengono inseriti tutti i sottoalberi completi che “pendono” dall’albero di Steiner ST (R), ovvero la cui radice non sta in ST (R) ma è figlia di un nodo nell’albero di Steiner di grado 1: la dimensione di tale partizione è pertanto uguale al numero di nodi di grado 1 nell’albero di Steiner. Procediamo per induzione sull’altezza h dell’albero A. Caso Base (h = 0). Si distinguono le seguenti due possibilità: 1. se u ∈ R, esso è il solo nodo nell’albero di Steiner ed ha quindi grado 0; pertanto non ci sono nodi in ST (R) aventi grado 1. D’altro canto r lg(N /r) = 1 lg(1/1) = 0. 2. se u ∈ / R, l’albero di Steiner è vuoto, per cui ovviamente non ci sono nodi in ST (R) di grado 1. D’altro canto r lg(N /r) = +∞. Passo Induttivo. Se, per un albero binario completo A di altezza i con N = 2i nodi, la partizione ha dimensione al più r lg(2i /r) = r(i − lg r), allora per un 52 3. Due schemi nell’ambito del Subset-Cover framework albero di altezza i + 1 la dimensione della partizione sarà al più r(i + 1 − lg r). Dimostrazione. Un albero di altezza i + 1 si ottiene considerando due alberi di altezza i come figli di un stesso nodo. Per i due sottoalberi di altezza i vale l’ipotesi induttiva e quindi le dimensioni delle relative partizioni sono al più r1 (i − lg r1 ) e r2 (i − lg r2 ), essendo r1 e r2 il numero di utenti revocati nei due sottoalberi. Si distinguono i seguenti due casi: 1. se tutti gli utenti revocati si trovano in uno solo dei due sottoalberi (cioè r = r1 ), il numero di nodi di grado 1 nell’albero di Steiner, che coincide anche con la dimensione della partizione, sarà al più: r1 (i − lg r1 ) + 1 ≤ r1 (i − lg r1 ) + r1 ≤ r1 (i + 1 − lg r1 ) = r(i + 1 − lg r) ; 2. se gli utenti revocati si trovano in entrambi i sottoalberi di altezza i, la radice avrà grado 2, e il numero di nodi di grado 1 nell’albero di Steiner sarà al più: r1 (i − lg r1 ) + r2 (i − lg r2 ) . 53 3. Due schemi nell’ambito del Subset-Cover framework Sia r = r1 + r2 : la tesi induttiva può essere riscritta come segue: r1 (i − lg r1 ) + r2 (i − lg r2 ) ≤ r(i + 1 − lg r) m (r1 + r2 )(i + 1 − lg(r1 + r2 )) − r1 (i − lg r1 ) − r2 (i − lg r2 ) ≥ 0 m ir1 + ir2 − (r1 + r2 )(lg(r1 + r2 ) − 1) − ir1 + r1 lg r1 − ir2 + r2 lg r2 ≥ 0 m r1 lg r1 + r2 lg r2 − (r1 + r2 )(lg(r1 + r2 ) − 1) ≥ 0 . Sia f (r1 , r2 ) = r1 lg r1 + r2 lg r2 − (r1 + r2 )(lg(r1 + r2 ) − 1). Per provare la tesi, basta verificare che f (r1 , r2 ) ≥ 0, ∀r1 , r2 . A tal fine si considerino le sue due derivate parziali rispetto r1 e r2 : ∂ 2r1 f (r1 , r2 ) = log ∂r1 r1 + r 2 ∂ 2r2 f (r1 , r2 ) = log ∂r2 r1 + r 2 Le due derivate parziali si annullano entrambe quando r1 = r2 . Quando r1 = r2 , f (r1 , r2 ) = 0, che è proprio il valore minimo della funzione. Si può pertanto affermare che ∀r1 , r2 , f (r1 , r2 ) ≥ 0, da cui la tesi. 54 3. Due schemi nell’ambito del Subset-Cover framework Teorema 3.4 (Sicurezza del Complete Subtree Method). Il Complete Subtree Method risulta essere sicuro nel senso della Definizione 2.9. Dimostrazione. Come già osservato, il Complete Subtree Method soddisfa la proprietà di indistinguibilità della chiavi. Si supponga di utilizzare come funzioni di codifica Fk e EL rispettivamente un cifrario a sequenza e uno a blocchi che godono delle proprietà definite in 2.3 e 2.5. Allora, dal Teorema 2.2, segue subito la tesi. 55 3. Due schemi nell’ambito del Subset-Cover framework 3.3 Subtree Difference Method In questo metodo l’individuazione della famiglia S avviene in maniera più sofisticata e il numero di sottoinsiemi a cui un utente apparterrà sarà notevolmente maggiore. Anche in questo caso gli N utenti sono visti come foglie di un albero binario completo A di radice rA . Per descrivere gli insiemi della famiglia S, si consideri la seguente definizione Definizione 3.2 (Insieme differenza). Dato un albero binario completo Si di radice vi e un albero binario completo Sj di radice vj , completamente contenuto in Si , l’insieme differenza Sij è costituito da tutte le foglie di Si eccetto quelle di Sj (Fig. 3.6). Figura 3.6: Rappresentazione dell’insieme differenza S2 9 Il nodo vi è detto radice principale di Sij , mentre il nodo vj è detto radice secondaria di Sij . Nota. Un utente u appartiene all’insieme differenza Sij se e solo se u è un discendente di vi ma non di vj . 56 3. Due schemi nell’ambito del Subset-Cover framework Nella fase di inizializzazione, ad ogni nodo interno vi dell’albero binario completo A viene assegnato un numero random detto Labeli . Mentre nel Complete Subtree Method il numero random associato ad ogni nodo costituisce la long-lived key dell’insieme di cui esso è radice, in questo caso la Labeli fungerà da “protochiave”, nel senso che la long-lived key Lij relativa agli insieme differenza Sij di radice principale vi verrà calcolata a partire da tale numero random. Per il computo di tutte le long-lived keys Lij si utilizza il seguente generatore di numeri pseudo-random:3 G : {0, 1}n −→ {0, 1}3n che presa in input una stringa di bits lunga n, ne restituisce una lunga il triplo, suddivisibile nelle seguenti tre parti: • GL rappresenta gli n bits più a sinistra; • GM rappresenta gli n bits centrali; • GR rappresenta gli n bits più a destra. 3 Per generatore di numeri pseudo-random si intende una funzione che, presa in input una breve stringa di bits realmente random detta seme, restituisce una sequenza di bits molto lunga che risulta indistinguibile da una stringa di bits realmente random di pari lunghezza agli occhi di un avversario polinomiale. 57 3. Due schemi nell’ambito del Subset-Cover framework Per calcolare la long-lived key Lij relativa all’insieme Sij , si consideri il cammino che porta dalla radice principale vi alla radice secondaria vj . Il calcolo consta di successive applicazioni del generatore G, che viene inizialmente applicato alla Labeli di vi . Ad ogni passo si utilizza, come nuovo seme per un’ulteriore applicazione del generatore G, la parte sinistra GL o la parte destra GR dell’output a seconda che sia necessario scendere su di un figlio sinistro o destro. Quando infine si arriva sulla radice secondaria vj , si pone Lij uguale alla parte centrale GM dell’output del generatore applicato al seme ottenuto al passo precedente. In definitiva, è possibile ricavare la chiave Lij a partire da Labeli , con al più lg N applicazioni del generatore G. Per chiarire meglio tale procedimento, in Figura 3.7 è schematizzato il modo in cui viene calcolata la long-lived key L1 5 dell’insieme differenza S1 5 . Figura 3.7: Calcolo della long-lived key L1 5 relativa all’insieme differenza S1 5 58 3. Due schemi nell’ambito del Subset-Cover framework Tale procedimento può essere formalizzato introducendo il concetto di label relativa Labeli,j di un nodo vj rispetto ad un suo antenato vi : Labeli,i = Labeli GL (Labeli,j ′ ) Labeli,j = GR (Labeli,j ′ ) se j è figlio sinistro di j ′ se j è figlio destro di j ′ La long-lived key Lij può essere espressa in termini di label relativa come: Lij = GM (Labeli,j ) . Si esamini adesso il contenuto dell’informazione segreta Iu che deve essere assegnata ad ogni utente u. Si potrebbe pensare, mimando quanto fatto per il Complete Subtree Method, di inserire in Iu le Labeli di tutti gli antenati di u; tuttavia tale scelta non risulterebbe adeguata, poiché permetterebbe ad u di ricavare la long-lived key associata anche ad insiemi Sij ai quali non appartiene. Siano u ≡ u0 , u1 , . . . , uh ≡ rA tutti gli antenati di u disposti lungo il cammino da u alla radice rA , e si denoti con si il fratello di ui per i = 0, . . . , h − 1, dove h è l’altezza dell’albero. 59 3. Due schemi nell’ambito del Subset-Cover framework Si analizzi, in particolare, la quantità di informazione che l’utente u potrebbe ricavare se disponesse della label della radice LabelrA . Per costruzione, dalla label LabelrA è possibile ricavare la long-lived key associata a tutti gli insiemi differenza aventi come radice principale rA . Di questi insiemi, quelli la cui radice secondaria è uno degli antenati ui di u, non contengono u e pertanto, al fine di garantire che lo schema soddisfi la proprietà dell’indistinguibilità delle chiavi data nella Definizione 2.1, la loro chiave non deve essere nota ad u. Di conseguenza ad u, anzicché la label LabelrA , vengono fornite le labels relative dei nodi si rispetto alla radice rA , per i = 0, . . . , h − 1: LabelrA ,s1 , i = 0, . . . , h − 1 . Per vedere che ciò consente ad u di ricavare tutte e sole le chiavi LrA vj degli insiemi differenza SrA vj a cui appartiene, si consideri il primo nodo ui+1 per cui il cammino da rA a vj differisce dal cammino che scende da rA su u (Fig. 3.8). Allora vj è discendente di si e pertanto è possibile calcolare LabelrA ,vj a partire da LabelrA ,si , che è nota ad u in quanto si è fratello del suo antenato ui . Quindi u può calcolare LrA vj , poiché risulta: LrA vj = GM (LabelrA ,vj ) 60 3. Due schemi nell’ambito del Subset-Cover framework Figura 3.8: Calcolo di LabelrA ,vj a partire da Iu Se invece u ∈ / SrA vj , allora vj è un antenato di u, cioè vj = ui per qualche i: non è quindi possibile ripetere il procedimento precedente, poiché non si ha alcuna biforcazione. Per riuscire a calcolare LrA ui , u dovrebbe risalire a LabelrA ui ; supponendo che ui sia figlio destro di ui+1 , risulta che: LabelrA ui = GR (LabelrA ui+1 ) . D’altra parte in Iu è presente LabelrA si , ovvero u conosce LabelrA si = GL (LabelrA ui+1 ) . In definitiva, la chiave cercata è: LrA ui = GM (GR (GL−1 (LabelrA si ))) e quindi, per poter calcolare LabelrA ,vj , u dovrebbe essere in grado di invertire la funzione G, il che si assume computazionalmente infattibile, essendo G un generatore pseudo-random. 61 3. Due schemi nell’ambito del Subset-Cover framework Un discorso del tutto analogo può essere utilizzato per provare che anzicché dare ad u la Labelui del suo antenato ui , è necessario fornirgli le labels relative Labelui ,sj di tutti i nodi sj che “pendono” dal cammino da ui ad u (Fig. 3.9). Figura 3.9: Labels relative, derivate da Labelui , da includere in Iu Dall’analisi del metodo appena discusso per la costruzione di Iu risulta che, per un antenato che si trova ad una distanza k, u riceve k labels relative. Sommando per ogni antenato, e considerando una chiave speciale per il caso R = 0, si ottiene che il numero di informazioni che u deve memorizzare è: 1+ lg N X k=1 =1+ (lg N + 1) lg N 1 1 = lg2 N + lg N + 1 . 2 2 2 Si passa adesso ad esaminare come, dato l’insieme R di utenti revocati, il Broadcast Center riesce a determinare la partizione di T . Anche nel Subset Difference Method la costruzione della partizione avviene a partire dall’albero di Steiner ST (R). L’algoritmo fa uso di un albero T , 62 3. Due schemi nell’ambito del Subset-Cover framework inizialmente uguale a ST (R), che ad ogni passo viene “potato”, e termina quando T contiene soltanto la radice rA . Ad ogni potatura viene aggiunto alla partizione un nuovo insieme differenza. Nelle varie iterazioni, l’algoritmo determina due foglie vi e vj di T tali che il loro primo antenato comune v non abbia altri discendenti, oltre a loro due, che risultino foglie di T . Si denoti con vl il figlio di v disposto sul cammino che porta da v a vi e con vk l’altro figlio di v, il quale sta sul cammino che scende da v a vj . A questo punto si pota T all’altezza di v, che pertanto diventa una foglia. Se vl è un antenato proprio di vi , si aggiunge l’insieme differenza Sli alla partizione; analogamente, se vk è un antenato proprio di vj , si aggiunge Skj . Se una delle condizioni precedenti non si verifica, il corrispondente insieme differenza non verrà inserito nella famiglia in costruzione. Il metodo appena descritto consente di determinare delle partizioni particolarmente compatte, come risulta dal seguente Lemma. Lemma 3.5. Dato un insieme R di utenti revocati, la suddetta procedura partiziona T in al più 2r − 1 insiemi differenza. 63 3. Due schemi nell’ambito del Subset-Cover framework Dimostrazione. Si osservi preliminarmente che, all’ultima iterazione, l’algoritmo potrebbe presentare un caso limite, qualora T risultasse costituito da un unico “tronco”, con una sola foglia u. In tal caso, il numero di foglie dell’albero T rimane uno anche in seguito alla potatura, mentre viene aggiunto al più un insieme differenza alla partizione. Si considerino adesso tutte le altre iterazioni, in cui l’albero T ha almeno due foglie: in ciascuna di esse l’algoritmo elimina due foglie e ne aggiunge una, causando una diminuzione del numero di foglie nell’albero T di una unità. Pertanto si passerà da un albero T avente r foglie ad un albero T avente due foglie in r − 2 passi, ciascuno dei quali aggiunge al più due insiemi differenza alla partizione. In definitiva, quando T contiene due foglie, la partizione consta di al più 2(r − 2) = 2r − 4 insiemi differenza. La successiva potatura può o ridurre l’albero T alla sola radice rA , introducendo al più due insiemi differenza prima del termine della procedura, oppure portare alla configurazione a “tronco” descritta in precedenza, che causa l’aggiunta di un ulteriore insieme differenza, che si somma agli al più due insiemi dovuti alla potatura in questione. In definitiva, la cardinalità della partizione è al più: 2r − 4 + 2 + 1 = 2r − 1 . 64 3. Due schemi nell’ambito del Subset-Cover framework Teorema 3.6 (Sicurezza del Subset Difference Method). Il Subset Difference Method risulta essere sicuro nel senso della Definizione 2.9. Dimostrazione. In virtù del Teorema 2.2, affinché il Subset Difference Method risulti essere uno schema sicuro è sufficiente provare che la tecnica per la distribuzione delle chiavi soddisfa la proprietà di indistinguibilità delle chiavi data nella Definizione 2.1. Come già osservato nella descrizione del contenuto di Iu , le informazioni possedute dagli utenti che non appartengono a Sij risultano insufficienti per poter riuscire a calcolare la chiave Lij , che pertanto rimane indistinguibile da una chiave random. Pertanto lo schema soddisfa la Definizione 2.1 e ne segue quindi la tesi. 65 Capitolo 4 Estensione a Chiave Pubblica In questo Capitolo, traendo spunto da alcune indicazioni fornite in [NNL01], si presenta una possibile estensione del Subset-Cover framework al mondo della Crittografia a Chiave Pubblica: in particolare, dopo avere esaminato i risultati ottenuti nel tentativo mancato di trasporre in maniera diretta le tecniche adoperate nel modello a chiave segreta, si presenta una variante effettivamente implementabile del Complete Subtree Method, ottenuta applicando al contesto in esame le idee alla base dello schema IBE. Tale estensione costituisce il contributo originale del presente lavoro di Tesi. 4. Estensione a Chiave Pubblica 4.1 Motivazioni Cosı̀ come è stato presentato nei Capitoli precedenti, il Subset-Cover framework fa uso di tecniche di Crittografia Simmetrica. Tuttavia, in alcune situazioni è preferibile lavorare con la Crittografia a Chiave Pubblica. Si supponga che l’entità preposta alla trasmissione dei segnali non sia una entità fidata, per cui gli utenti riceventi non siano disposti a condividere con essa una chiave segreta. Come esempio pratico di tale circostanza, si consideri uno scenario in cui diverse agenzie condividono le stesse infrastrutture e il medesimo schema di Broadcast, che utilizzano alternativamente per effettuare le rispettive trasmissioni. In tal caso, per evitare che una agenzia possa comprendere gratuitamente i segnali trasmessi dalle altre compagnie, è necessario adoperare, all’interno del framework, uno schema asimmmetrico, di modo che ciascuna di esse possa codificare il proprio segnale, ma non riesca a decifrare quello delle altre. 67 4. Estensione a Chiave Pubblica 4.2 Similitudini e Differenze Nello scenario a chiave pubblica, il Broadcast Center, che in precedenza svolgeva entrambi i compiti di inizializzare il sistema e di effettuare le trasmissioni, adesso viene scisso in due entità separate: il Center, una autorità fidata, il cui ruolo è quello di creare l’intero sistema; e uno (o più) Broadcast Third Party, ciascuno dei quali mantiene un diverso insieme di utenti revocati e trasmette i propri segnali. Nel seguito si considererà sempre il caso di un unico Broadcast Third Party, ma l’intera costruzione è immediatamente estendibile al caso più generale. Delle tre parti che caratterizzano il Subset-Cover framework (inizializzazione, codifica e decodifica), quella in cui il cambiamento dovuto al passaggio alla Crittografia a Chiave Pubblica è più radicale è quella di inizializzazione, che verrà pertanto discussa più in dettaglio in seguito. Per quanto riguarda la fase di codifica, la differenza sostanziale è che il Broadcast Third Party deve avere accesso ad un Public Key File (PKF), costituito dalle chiavi pubbliche di tutti i sottoinsiemi validi nello schema. Come ciò venga reso possibile, dipende in gran parte dal modo in cui la fase di inizializzazione viene realizzata nel nuovo contesto. 68 4. Estensione a Chiave Pubblica 69 Per effettuare una trasmissione, il Broadcast Third Party individua la partizione dell’insieme T secondo gli stessi criteri discussi nei Capitoli precedenti. Quindi, dopo avere ricavato dal PKF le chiavi pubbliche degli insiemi che costituiscono la partizione appena individuata, codifica il segnale utilizzando come funzione di codifica E un crittosistema a chiave pubblica, come ad esempio RSA o ElGamal. Denotando con ELPub la nuova funzione di codifica, il segnale trasmesso i sarà del tipo: (k)], Fk (M ) i . h [i1 , . . . , im , ELPub (k), . . . , ELPub i i m 1 Nella fase di decodifica, ogni utente u ∈ T , individuato il sottoinsieme Sij al quale appartiene, determina, a partire dalla relativa informazione segreta Iu , la chiave privata LPri ij e ricava M calcolando: k = EL−1Pri (Cj ) ij ed M = Fk−1 (M′ ) . Anche in questo caso, il modo in cui u riesce a ricavare LPri ij da Iu dipende, in maniera sostanziale, da come è stata realizzata la fase di inizializzazione. 4. Estensione a Chiave Pubblica 4.3 Un Approccio Diretto La soluzione più diretta per effettuare la transizione da Crittografia Simmetrica a Crittografia Asimmetrica, è quella di non cambiare la fase di inizializzazione, cercando di “fare quadrare i conti” nelle fasi di codifica e di decodifica. 4.3.1 Public Complete Subtree Method Nello scenario a Crittografia Simmetrica la fase di inizializzazione del Complete Subtree Method consiste nell’associare ad ogni nodo vj dell’albero binario completo, un numero random Lj che costituisce la long-lived key del sottoinsieme Sj . Al fine di adattare tale tecnica allo scenario a chiave pubblica, il Center genera una coppia (chiave pubblica, chiave privata) in corrispondenza di ogni nodo vj dell’albero, associando la chiave privata ottenuta al relativo sottoinsieme Sj . La chiave pubblica verrà invece inserita nel PKF, che sarà liberamente consultabile dal Broadcast Third Party. Tale tecnica risolve completamente il problema della decodifica: in particolare, il generico utente u non si accorgerà neanche del cambiamento, poiché 70 4. Estensione a Chiave Pubblica il modo di ricavare le chiavi dall’informazione Iu rimane identico a quello utilizzato in precedenza. L’aspetto negativo di tale tecnica riguarda la fase di codifica, che diventa del tutto impraticabile. Il Broadcast Third Party deve infatti memorizzare il Public Key File, la cui dimensione è pari alla cardinalità della famiglia S, ovvero 2N − 1. In una implementazione reale di un sistema per la Broadcast Encryption, la dimensione dell’insieme universo N sarà almeno dell’ordine di 224 ≃ 16 · 106 utenti; considerando chiavi pubbliche a 2048 bits, si ottiene che lo spazio di memoria richiesto per mantenere il PKF è pari a: 211 · 2−3 · 224 = 232 ≃ 4 Terabytes . Si tratta di un’enorme quantità di memoria che rende del tutto impensabile una simile applicazione. 4.3.2 Public Subtree Difference Method Per adattare il Subtree Difference Method all’utilizzo della Crittografia a Chiave Pubblica, è necessaria una tecnica un po’ più elaborata. In tale caso, infatti, l’informazione associata ai vari nodi dell’albero non è di per sé una chiave, ma 71 4. Estensione a Chiave Pubblica una Label, a partire dalla quale vengono generate, mediante successive applicazioni del generatore G, le chiavi di tutti gli insiemi differenza aventi il nodo in esame come radice principale. Non condurrebbe, pertanto, a nulla il tentativo di sostituire le Labels casuali con delle chiavi private, perchè l’utilizzo di G ne distruggerebbe immediatamente le caratteristiche, generando delle quantità del tutto prive di struttura semantica. Per risolvere tale problema è possibile procedere in due diversi modi, ciascuno dei quali porta ad una differente soluzione. Creazione di coppie di chiavi mediante un generatore Si ricordi che un Generatore di Chiavi è un algoritmo randomizzato che costruisce coppie (chiave pubblica, chiave privata) casuali. È ovviamente possibile modificare un tale generatore, facendo sı̀ che esso prenda in input una sequenza di bits, da utilizzare come quantità random, ogni qualvolta si trovi di fronte ad una scelta non deterministica. In tale maniera è possibile “guidare” la generazione della chiave, che avrà sempre lo stesso valore quando si fornisce il medesimo seme iniziale. 72 4. Estensione a Chiave Pubblica Utilizzando la tecnica computational introdotta in precedenza, è possibile associare un numero pseudo-casuale ad ogni sottoinsieme. Una possibilità potrebbe essere quella di utilizzare tale quantità pseudo-random, che prima costituiva la chiave del sottoinsieme, come seme del generatore, cosı̀ da consentire al generico utente u di ricavare, dalla coppia ottenuta, la chiave privata associata all’insieme. Per avere un’idea della quantità di lavoro che tale soluzione implica, si considerino i calcoli che il Center deve eseguire per inizializzare il sistema. Dopo avere associato ad ogni nodo una Label casuale, per ciascuno degli insiemi differenza della famiglia (che sono circa N lg N ), il Center deve: • calcolare la Lij associata all’insieme Sij utilizzando la tecnica esposta nel Capitolo precedente; • eseguire il generatore di coppie dando come input la qualntità Lij ; • inserire la chiave pubblica, ricevuta come output dal generatore di chiavi nel PKF, denotandola come chiave pubblica LPub dell’insieme Sij . ij 73 4. Estensione a Chiave Pubblica Sono tre gli aspetti negativi relativi alla soluzione appena esaminata: 1. i calcoli necessari al Center per completare la fase di inizializzazione, richiedono un tempo eccessivamente lungo; 2. gli utenti sono oberati da un peso computazionale considerevole; 3. come nel caso del Public Complete Subtree Method, il PKF ha dimensioni enormi. Creazione della chiave pubblica a partire dalla chiave privata L’approccio precedente può essere utilizzato qualunque sia il crittosistema a chiave pubblica che viene adoperato per realizzare la funzione di codifica. Scegliendo un crittosistema in cui è possibile decidere la chiave privata a prescindere dalla chiave pubblica, che viene successivamente calcolata a partire da essa,1 si riesce a diminuire la quantità di calcoli per la decodifica e snellire leggermente la fase di inizializzazione. Nella fase di inizializzazione, come chiave privata LPri ij del generico insieme Sij , viene scelta la quantità Lij relativa al sottoinsieme in questione. In altri 1 Schemi crittografici con tali proprietà possono essere costruiti a partire della funzione Diffie-Hellman: si veda ad esempio il protocollo di Conference Key Sharing di Okamoto [Oka93] 74 4. Estensione a Chiave Pubblica termini, la quantità che prima costituiva la chiave segreta dell’insieme, adesso svolge il ruolo di chiave privata dell’insieme stesso. Ció consente di lasciare inalterata la fase di decodifica. Il processo di creazione di un tale sistema comporta un minore lavoro a carico del Center relativamente ad ogni singolo sottoinsieme, in quanto gli è sufficiente calcolare la quantità Lij con la solita tecnica del generatore G. È a partire da tale quantità, ovvero dalla chiave privata dell’insieme, che il Center ricava la corrispondente chiave pubblica che inserisce nel PKF. Tuttavia, il numero di nodi sul quale ripetere tale procedimento rimane N lg N e il PKF continua ad avere dimensioni eccessive. 4.4 Il problema del Public Key File Nelle sezioni precedenti si sono esaminati alcuni tentativi per conciliare le esigenze della fase di inizializzazione con la necessità di realizzare chiavi diverse per le fasi di codifica e di decodifica. Una nota comune a tutte le soluzioni presentate è il problema della dimensione del Public Key File (PKF): si tratta del database che dovrebbe consentire di ricavare le chiavi pubbliche relative a tutti i sottoinsiemi della famiglia S, utilizzata nell’ambito del framework. 75 4. Estensione a Chiave Pubblica Le tecniche esaminate fin ora memorizzano esplicitamente tutte le chiavi all’interno del PKF: per ridurre la quantità di spazio richiesta per mantenere tale file, è necessario trovare un artificio che consenta di estrarre le chiavi da una rappresentazione implicita del database che abbia dimensioni minori. Trattando il Public Subtree Difference Method, si è visto come la possibilità di fissare la chiave privata prima della chiave pubblica, consenta di semplificare alcune parti del sistema. Durante la ricerca di una tecnica che risolvesse il problema del PKF, si è pensato di riformulare tale idea invertendo i ruoli: determinare inizialmente una chiave pubblica opportuna e ricavare da essa la chiave privata associata. Per la realizzazione di un tale schema è possibile fare riferimento al concetto di Identity-Based Encryption Scheme (IBE) (Schema di Criptazione Basato sugli Identificativi). Si tratta di uno schema in cui la chiave pubblica può essere una stringa arbitraria, che, per tale motivo, viene detta identificativo: per maggiori dettagli, si rimanda all’Appendice A. Combinando l’utilizzo di un tale crittosistema con il Public Complete Subtree Method, si ottiene uno schema innovativo a cui ci si riferirà come IBEComplete Subtree Method, che consente di ridurre drasticamente la dimensione del PKF. 76 4. Estensione a Chiave Pubblica Nella fase di inizializzazione, il Center fissa e rende nota una semplice funzione di mappatura che, ad ogni sottoinsieme della famiglia S, associa un identificativo, ovvero una stringa di bits: ID : S −→ {0, 1}∗ . Una possibile funzione di mappatura potrebbe consistere nell’etichettare ogni arco presente nell’albero con 0 o 1, a seconda che sia un ramo che scende rispettivamente verso il figlio destro o verso il figlio sinistro. Cosı̀ procedendo, ad un generico sottoalbero Sj di radice vj , resta associato l’identificativo ID(Sj ), che si ottiene leggendo di seguito i bits disposti lungo il cammino che porta dalla radice al nodo vj ; tale identificativo ID(Sj ) fungerà da chiave pubblica dell’insieme in questione (Fig. 4.1). Figura 4.1: Esempio di mappatura della funzione ID: S5 ←→ 10 Il Center passa quindi a creare un’istanza dello schema IBE, all’interno del quale svolgerà il ruolo di PKG (Private Key Generator). Dopo avere eseguito 77 4. Estensione a Chiave Pubblica l’algoritmo Setup e aver pubblicato params come PKF, il Center passa ad estrarre la chiave privata relativa ad ogni sottoinsieme. Considerando uno dopo l’altro i 2N − 1 nodi dell’albero binario completo A, il Center esegue l’algoritmo: Extract(params, ID(Sj ), master-key) ottenendo cosı̀ la chiave privata LPri necessaria per decriptare i messaggi cifrati j utilizzando come chiave pubblica l’identificativo ID(Sj ). A questo punto, il Center può costruire l’informazione Iu da consegnare al generico utente u del sistema, semplicemente includendo le chiavi private LPri j relative a tutti i sottoalberi a cui esso appartiene. Resta ancora da chiarire come avvengono le fasi di codifica e di decodifica. Per trasmettere un segnale criptato, il Broadcast Third Party individua la partizione {Si1 , . . . , Sim } degli utenti autorizzati e calcola l’identificativo ID(Sij ) associato all’insieme Sij per ∀j = 1, . . . , m. Dopo aver scelto la chiave di sessione k con la quale criptare il messaggio M, il Broadcast Third Party calcola la cifratura di k con tutte le m chiavi = ID(Sij ). Infine effettua la trasmissione del segnale: pubbliche LPub ij h [i1 , . . . , im , C1 , . . . , Cm ], Fk (M) i 78 4. Estensione a Chiave Pubblica 79 dove si è posto Cj = Encrypt(params, ID(Sij ), k), j = 1, . . . , m . Nota. Il Broadcast Third Party accede al PKF soltanto per conoscere i parametri di sistema che caratterizzano la particolare istanza dello schema IBE creata dal Center nella fase di inizializzazione: tale informazione ha una dimensione fissa, per cui le risorse impiegate per memorizzare il Public Key File risultano essere indipendenti dalla dimensione dell’insieme universo N . Nella fase di decodifica l’utente u ∈ T procede esattamente come nel caso del Complete Subtree Method a chiave privata, ovvero individua nell’header del segnale l’indice ij corrispondente all’unico insieme Sij a cui appartiene, e dalla propria informazione segreta Iu ricava LPri ij . A questo punto sarà in grado di calcolare: k = Decrypt(params, ID(Sij ), Cj , LPri ij ) e infine M = Fk−1 (M′ ) . 4. Estensione a Chiave Pubblica 4.5 Conclusione L’integrazione dello schema IBE all’interno del Complete Subtree Method ha portato alla realizzazione dell’IBE-Complete Subtree Method, presentato per la prima volta in questa Tesi. La possibilità di utilizzare, come chiavi pubbliche, delle quantità con un’opportuna struttura semantica, ha consentito di ridurre quasi a zero la dimensione del PKF, che richiede spazio O(1), superando cosı̀ uno degli ostacoli principali per la realizzazione pratica di uno schema di Broadcast Encryption a chiave pubblica, basato sul Subset-Cover framework. Sarebbe interessante vedere se le medesime considerazioni possano essere estese anche al Subset Difference Method, nel tentativo di ottenere, nell’ambito della variante a chiave pubblica del framework, uno schema in grado di combinare una rappresentazione compatta del Public Key File ad un utilizzo efficace delle risorse di memorizzazione dei singoli utenti. 80 Appendice A Identity-Based Encryption In questa Appendice si discute brevemente dell’ Identity-Based Encryption Scheme IBE: si tratta di un nuovo schema di criptazione che permette di semplificare notevolmente l’infrastruttura burocratica (Certification Authority, Certification Management, etc.) necessaria per il funzionamento su larga scala di applicazioni basate sulla Crittografia Asimmetrica. A. Identity-Based Encryption A.1 Il problema Nel 1984, Shamir in [Sha84] pose il problema della realizzazione di uno schema di criptazione asimmetrico nel quale, piuttosto che generare la coppia (chiave pubblica, chiave privata) come un tutto unico, fosse possibile scegliere una stringa arbitraria come chiave pubblica ed estrarre opportunamente, a partire da essa, la corrispondente chiave privata. Chiaramente, ricavare la chiave privata relativa ad una determinata chiave pubblica non deve essere un’operazione alla portata di tutti, in quanto altrimenti non sarebbe più garantita alcun tipo di segretezza. Piuttosto, si presuppone la presenza di una entità fidata detta Private Key Generator (PKG), che risulta essere l’unica in grado di calcolare la chiave privata associata ad ogni chiave pubblica. Il vantaggio di un tale schema è che esso consentirebbe di utilizzare chiavi pubbliche “personalizzate”, anzicché stringhe di bits random. Ad esempio, sarebbe possibile adoperare come chiave pubblica il proprio indirizzo e-mail. In tal modo, se un utente A volesse comunicare in maniera sicura con un utente B, non avrebbe bisogno di procurarsi preliminarmente il certificato di B contenente la sua chiave pubblica, ma potrebbe semplicemente criptare il 82 A. Identity-Based Encryption messaggio con il relativo indirizzo di posta elettronica. D’altra parte, un utente che non avesse mai ricevuto e-mails codificate, potrebbe non avere ancora ottenuto dal PKG la propria chiave privata; tuttavia, ciò non gli impedirebbe di ricevere messaggi criptati poiché può decidere in qualunque momento di richiedere la propria chiave privata al PKG. Tale scenario mostra come uno schema IBE non elimini del tutto la necessità di un’opportuna infrastruttura (nota come PKI, Public Key Infrastructure), per un utilizzo proprio del sistema. Tuttavia, esso consente di evitare il circolo vizioso (tipico dei sistemi asimmetrici come il PGP), per cui un utente non richiede il certificato per la propria chiave pubblica poiché pensa di non ricevere messaggi codificati e, d’altra parte, nessuno gli invia e-mails criptate in quanto non dispone dell’opportuno certificato. 83 A. Identity-Based Encryption A.2 Lo schema IBE In quanto segue si farà riferimento alla notazione utilizzata in [BF01], dove viene introdotta la prima implementazione pienamente funzionale dello schema IBE, Identity-Based Encryption. Per inizializzare un’istanza di tale schema, è necessario individuare un’entità centrale detta PKG, il cui ruolo è quello di generare le chiavi private in grado di decriptare i messaggi cifrati con la corrispondente chiave pubblica, detta anche “identificativo”. Il PKG deve essere un’autorità fidata, nel senso che deve essere garantito che essa fornisca la chiave privata solo al legittimo proprietario, dopo averlo opportunamente identificato per altra via. Per creare lo schema, il PKG esegue l’algoritmo Setup, dandogli in input un parametro di sicurezza 1k : il sistema che viene generato sarà in grado di resistere ai possibili attacchi da parte di un avversario per un tempo tanto più lungo quanto maggiore è il valore di k. L’output di Setup è costituito da due parti: una lista di parametri di sistema “params”, contenente le specifiche necessarie per effettuare criptazioni nel particolare sistema IBE appena creato, e una “master-key”, ovvero un’informazione segreta che consente di estrarre da ogni identificativo la corrispondente 84 A. Identity-Based Encryption chiave privata. Mentre params viene resa pubblica, la “master-key” deve restare segreta, poiché, se venisse compromessa, l’intero sistema diverrebbe del tutto insicuro. Entrambe le quantità vengono utilizzate dall’algoritmo Extract che, preso in input un identificativo arbitrario ID ∈ {0, 1}∗ , restituisce la chiave segreta d necessaria per la decriptazione: Extract(params, ID, master-key) = d . L’algoritmo Encrypt viene utilizzato per eseguire la criptazione di un messaggio in chiaro M, per mezzo dell’identificativo ID, nell’ambito dell’istanza dello schema IBE descritto da params: Encrypt(params, ID, M) = C . Per decriptare il messaggio è necessario conoscere la chiave d: essa viene utilizzata dall’algoritmo Decrypt unitamente alla descrizione del sistema, il messaggio C e l’identificativo con il quale il messaggio è stato cifrato: Decrypt(params, ID, C, d) = M . 85 A. Identity-Based Encryption Naturalmente, questi algoritmi devono lavorare in maniera consistente, nel senso che se d è una chiave privata generata con l’algoritmo Extract a partire dall’identificativo ID, per qualunque messaggio M, deve risultare: Decrypt(params, ID, C, d) = M , dove C = Encrypt(params, ID, M) . A.3 Applicazioni dello schema IBE La possibilità di utilizzare chiavi pubbliche arbitrarie consente di realizzare molteplici applicazioni. Nel seguito se ne presentano due fra le più interessanti. A.3.1 Revoca di chiavi pubbliche Tipicamente, la validità di una chiave pubblica viene garantita dal relativo certificato: si tratta di un messaggio firmato da parte di un’ entità fidata detta Certification Authority, che contiene, oltre alla chiave pubblica, altre informazioni necessarie per la gestione del sistema. 86 A. Identity-Based Encryption Ma cosa accade se una chiave privata viene compromessa? È chiaro che il certificato della relativa chiave pubblica deve essere annullato. Per tale motivo una delle informazioni contenute nel certificato è la sua “data di scadenza”. Tale meccanismo può essere facilmente realizzato anche nel contesto dello schema IBE, utilizzando chiavi pubbliche del tipo indirizzo e-mail || data di scadenza . Supponendo che la validità di una chiave sia di un anno, il PKG consegnerà, ai vari utenti che ne faranno richiesta, la chiave privata corrispondente a indirizzo e-mail || anno in corso . Si noti che ciò rende possibile spedire messaggi anche nel “futuro”, semplicemente utilizzando, per la codifica, una chiave pubblica contenente una data di scadenza futura. Solo quando giungerà all’anno specificato nella criptazione del messaggio, il legittimo destinatario riceverà dal PKG la chiave necessaria per la sua decriptazione. 87 A. Identity-Based Encryption A.3.2 Delega di compiti Un’altra interessante applicazione è la possibilità di delegare la capacità di decriptazione. Si consideri un manager che ha diversi assistenti, ciascuno responsabile di un settore differente (Relazioni Pubbliche, Vendite, Personale, etc.). Si supponga che il manager voglia consentire ai vari assistenti di leggere soltanto i messaggi inerenti il loro reparto. Tale scenario può essere realizzato creando un sistema IBE nel quale il manager funge da PKG, e ad ogni assistente verrà consegnata la chiave segreta relativa all’identificativo del reparto a cui appartiene. Chi volesse scrivere al reparto assunzioni dell’azienda, deve pertanto utilizzare nella codifica i parametri relativi al sistema IBE dell’azienda (che possono essere resi noti, ad esempio, sotto forma di chiave pubblica), e specificare, come identificativo per la criptazione, “Personale”. Cosı̀ facendo, il manager sarà in grado di leggere qualunque messaggio, e i diversi reparti potranno ricevere la propria corrispondenza senza avere bisogno del continuo intervento del loro capo. 88 Bibliografia [Ber91] S. Berkovits, How to Broadcast a Secret, Advances in Cryptology - EuroCrypt ’91 (Berlin), Springer-Verlag, 1991, Lecture Notes in Computer Science Volume 547, pp. 535–541. [BF99] D. Boneh and M. Franklin, An Efficient Public Key Traitor Tracing Scheme, Advances in Cryptology - Crypto ’99 (Berlin), SpringerVerlag, 1999, Lecture Notes in Computer Science Volume 1666, pp. 338–353. [BF01] D. Boneh and M. Frankling, Identity-Based Encryption from the Weil Pairing, Verrà presentato in Crypto, 2001. [FN93] A. Fiat and M. Naor, Broadcast Encryption, Advances in Cryptology - Crypto ’93 (Berlin), Springer-Verlag, 1993, Lecture Notes in Computer Science Volume 773, pp. 480–491. [GSW00] A Garay, J. Staddon, and A. Wool, Long-Lived Broadcast Encryption, Advances in Cryptology - Crypto 2000 (Berlin), SpringerVerlag, 2000, Lecture Notes in Computer Science Volume 1880, pp. 333–352. [GSY99] E. Gafni, J. Staddon, and Y. L. Yin, Efficient Methods for Integrating Traceability and Broadcast Encryption, Advances in Cryptology - Crypto ’99 (Berlin), Springer-Verlag, 1999, Lecture Notes in Computer Science Volume 1666, pp. 372–387. [LS98] M. Luby and J. Staddon, Combinatorial Bounds for Broadcast Encryption, Theory and Application of Cryptographic Techniques, 1998, pp. 512–526. [NNL01] D. Naor, M. Naor, and J. Lotspiech, Revocation and Tracing Schemes for Stateless Receivers, Verrà presentato in Crypto, 2001. [Oka93] T. Okamoto, Provably Secure and Pactical Identification Schemes and Corresponding Signature Schemes, Advances in Cryptology - Crypto ’92 (Berlin), Springer-Verlag, 1993, Lecture Notes in Computer Science Volume 740, pp. 31–53. [Sha79] A. Shamir, How To Share a Secret, Communications of the ACM (1979), no. 22, 612–613. [Sha84] A. Shamir, Identity-Based Cryptosystems and Signature Schemes, Advances in Cryptology: Proceedings of Crypto ’84 (Berlin), Springer-Verlag, 1984, Lecture Notes in Computer Science Volume 196, pp. 47–53.