• Non ci sono risultati.

Operazioni e Complessità

4.3 Una classica Access Control List

4.3.3 Operazioni e Complessità

Sebbene il principio appena analizzato in 4.3.2 risulti una valida soluzione dal punto di vista funzionale, un’attenta analisi sulla complessità delle generiche ope- razioni che caratterizzano la struttura dati crittografica fa emergere una serie di limitazioni e perplessità sui vari e reali scenari di utilizzo. Questo è particolar- mente evidente all’aumentare del numero di clienti e di risorse di cui la struttura si deve fare carico.

Lettura e modifica di una risorsa

La lettura e la modifica di una risorsa non sono operazioni onerose o critiche, que- sto si può intuire dalla figura 4.11. A partire da un cliente (dalla sua coppia di chiavi) sono sufficienti infatti un’operazione crittografica asimmetrica per il recu- pero della chiave simmetrica di una generica risorsa e un’operazione crittografica simmetrica per il recupero del contenuto della risorsa.

Complessità: trascurabile.

Creazione di un utente e di una risorsa

Anche queste operazioni non sono assolutamente critiche. L’unica aggiunta a quanto detto per la lettura/modifica riguarda la parte di generazione delle chiavi. Occorre infatti generare la coppia di chiavi asimmetriche nel caso si stia conside- rando la creazione di un nuovo utente, mentre occorre creare una nuova chiave simmetrica nel caso si stia considerando la creazione di una risorsa. Ambedue queste operazioni dipendono ovviamente dagli schemi di cifratura che si intende usare per la costruzione del framework, ma in generale non sono assolutamente onerose per un generico device.

Complessità: trascurabile.

Revoca di una risorsa

Revocare una risorsa significa impedire ad un particolare cliente di continuare ad operare su tale risorsa. Il cliente in questione quindi non deve essere più in grado di ottenere il contenuto della risorsa. Questo significa che il precedente link simmetrico verso la risorsa deve essere in qualche modo sostituito. L’operazione non è difficile, basta creare una nuova chiave simmetrica per la risorsa e aggiornare il link simmetrico cifrando la risorsa con la nuova chiave.

Tuttavia questo non basta, perché la nuova chiave di cifratura simmetrica della risorsa deve essere rivelata ai clienti (utenti) ancora abilitati all’uso della risorsa stessa. Qui viene in aiuto la proprietà fondamentale delle chiavi di cifratura asimmetriche vista nella sezione 4.2.2 e in figura 4.8: ovvero la possibilità di aggiornare un link asimmetrico semplicemente conoscendo la chiave pubblica che caratterizza il link. Questo significa che utilizzando la chiave pubblica di ogni cliente ancora abilitato è possibile aggiornare il link asimmetrico alla nuova chiave simmetrica di risorsa senza alcun problema. Questo concetto è schematizzato nella figura 4.12 dove viene revocato al primo cliente (con chiavi CKP1) l’accesso alla file di testo (txt) con chiave simmetrica RK3, ovvero:

• viene generata una nuova chiave di cifratura simmetrica RK3N per il file di testo (txt)

• viene aggiornato il link simmetrico, cifrando il file txt con tale chiave RK3N • viene rivelata la nuova chiave RK3N ai clienti ancora abilitati aggiornando

i link asimmetrici mediante le chiavi pubbliche di CKP2 e CKP2.

Figura 4.12: ACL Framework: revoca di una risorsa

Analizzando la complessità dell’intera operazione si possono considerare tra- scurabili le operazioni di creazione di una nuova chiave simmetrica per la risorsa e la costruzione del relativo link simmetrico. Tuttavia i passi di cifratura asim- metrica necessari per la rivelazione della nuova chiave ai clienti ancora abilitati diventano cruciali. Questi passi dipendono ovviamente dal numero di clienti ancora abilitati (n_client), l’ordine di complessità è quindi lineare.

Complessità: O(n_client) operazioni asimmetriche.

Eliminazione di un cliente

Cancellare un cliente comporta l’implementazione di politiche affinché tale cliente non sia più in grado di operare sulla struttura dati crittografica in alcun modo. Per prima cosa occorre impedire che a tale cliente vengano di fatto rivelate ulte- riori risorse. Questa è un’operazione molto semplice e trascurabile, basta infatti invalidare la coppia di chiavi asimmetriche relative al cliente. Tuttavia questo non

basta. Se non si eseguono altre operazioni, il cliente in questione qualora riesca a mettere le mani sulla struttura dati crittografica (in generale più aggiornata) riuscirebbe ad ottenere il contenuto delle risorse a cui era abilitato prima della sua eliminazione. Questo perché i link crittografici simmetrici ed asimmetrici non sono stati di fatto aggiornati e le chiavi di cifratura in gioco sono le stesse.

Affinché al cliente in questione venga di fatto negato ogni possibile accesso e uso alla struttura dati crittografica è necessario aggiornare tutti i link simmetrici delle risorse a cui risultava abilitato prima dell’eliminazione. Una nuova chiave simmetrica deve essere quindi creata per ogni risorsa in questione (con relativo link simmetrico), e di conseguenza questo comporta anche la necessità di rivelare le nuove chiavi simmetriche ai clienti che sono ancora abilitati all’uso di tali risorse. Questo processo è quindi uno dei più critici perché comporta un numero di operazioni crittografiche asimmetriche dipendenti dal numero di risorse che il cliente in questione possiede e anche dal numero di altri clienti che hanno accesso ad ogni risorsa in questione. In generale, considerando la media delle risorse di ogni cliente come n_resource e la media degli utenti di ogni risorsa come n_client è evidente che la complessità computazionale è data da un numero di operazioni asimmetriche dell’ordine del prodotto tra n_resource ed n_client, e da un numero di operazioni simmetriche (su risorse) dell’ordine di n_resource.

Complessità

O(n_client ⇤ n_resource) operazioni asimmetriche O(n_resource) operazioni simmetriche su risorse

Lettura contemporanea di più risorse

Con quanto detto nelle operazioni precedenti è chiaro che la lettura contempo- ranea di più risorse (per un singolo cliente) comporti un numero di operazioni di complessità lineare nel numero di risorse in questione O(n_resource). Sono necessarie infatti un’operazione asimmetrica e un’operazione simmetrica per ogni risorsa, la prima per ottenere la chiave simmetrica (a partire dalla chiave privata del cliente) e la seconda per ottenere il reale contenuto di una risorsa. Bisogna prestare molta attenzione a quest’operazione, perché di fatto è una delle più co- muni in scenari di utilizzo reali. A titolo di esempio, basti pensare ad un servizio SaaS che consenta di gestire album di fotografie o immagini in modo sicuro utiliz-

zando il semplice approccio ACL appena presentato; già la semplice operazione di visualizzazione delle anteprime potrebbe mettere in seria difficoltà il device dell’utente se il numero di fotografie in gioco fosse elevato.

Complessità

O(n_resource) operazioni asimmetriche

O(n_resource) operazioni simmetriche su risorse

Altre operazioni

Quelle analizzate sono solo alcune delle operazioni principali necessarie ad operare sulla struttura dati crittografica. In generale tuttavia, sono sufficienti a far capire quali sono le tipologie di operazioni critiche. In generale le operazioni più onerose sono quelle che coinvolgono la manipolazione dei link asimmetrici, la cui criticità dipende sia dal numero di risorse che dal numero di clienti coinvolti.