Nell'era digitale, individui e aziende affrontano rischi crescenti di fuga di dati. Nel contesto della teoria dell'informazione, il flusso di informazioni si riferisce al processo di trasferimento di dati da una variabile x
a un'altra variabile y
. Nessun sistema vuole far trapelare informazioni riservate, il che non solo lede la privacy personale ma può anche causare perdite significative all'azienda.
Esistono molti modi per limitare la divulgazione delle informazioni, ad esempio tramite elenchi di controllo degli accessi, firewall e tecnologie di crittografia. Tuttavia, sebbene questi metodi limitino in una certa misura la diffusione delle informazioni, non possono garantire che le informazioni non vengano divulgate.
Con il progresso della tecnologia, anche i metodi per garantire la sicurezza dei dati sono cambiati notevolmente. Ad esempio, gli elenchi di controllo degli accessi possono impedire l'accesso non autorizzato ai file, ma non possono controllare cosa accade ai dati una volta che sono in uso. Allo stesso modo, sebbene la tecnologia di crittografia possa trasmettere informazioni in forma privata su un canale non sicuro, la riservatezza dei dati sarà minacciata una volta decifrati. Pertanto, diventa particolarmente importante comprendere il controllo del flusso di informazioni.
I flussi di informazioni possono essere suddivisi grossolanamente in due categorie: flussi espliciti e flussi di bypass. Il flusso esplicito si verifica quando un segreto viene esplicitamente divulgato in una variabile osservabile pubblicamente, ad esempio:
var l, h; l := h;
I flussi laterali, invece, sfruttano determinate caratteristiche, come il tempo di esecuzione o il consumo energetico, per far trapelare informazioni. Ad esempio, in una condizione, se h
è vero, verrà eseguito un lavoro che richiede molto tempo, il che consente a un aggressore di dedurre h
in base al tempo impiegato dal programma . Il valore di .
Anche il flusso di informazioni implicito fa parte del flusso di bypass. Mentre il flusso di controllo di un programma si basa su dati privati, le variabili pubbliche possono implicare alcune informazioni segrete.
La non interferenza è una politica che sottolinea che un aggressore non dovrebbe essere in grado di distinguere tra due calcoli in base al loro output se differiscono solo nei loro input segreti. Tuttavia, questa politica è troppo restrittiva per essere applicata nelle procedure reali.
Ad esempio, un programma di controllo delle password potrebbe aver bisogno di rivelare alcune informazioni segrete quando necessario: in particolare, se la password inserita è corretta. Ciò consente a un aggressore di ottenere informazioni utili anche quando il programma rifiuta la password, ad esempio perché la password immessa non era valida.
I meccanismi di controllo del flusso di informazioni sono progettati per far rispettare le policy sul flusso di informazioni. Per raggiungere questo obiettivo sono stati proposti diversi metodi per implementare strategie di flusso di informazioni. I meccanismi di runtime possono etichettare i dati a livello di sistema operativo e di linguaggio di programmazione, mentre l'analisi statica del programma garantisce che il flusso di informazioni nel programma segua le politiche corrispondenti.
Tuttavia, le tecniche di analisi dinamica non sono in grado di osservare tutti i percorsi di esecuzione e pertanto non possono garantire sia robustezza che accuratezza. Per garantire che non interferiscano con l'applicazione delle policy, queste tecniche spesso richiedono di interrompere l'esecuzione che potrebbe potenzialmente causare perdite di informazioni sensibili o di ignorare gli aggiornamenti che potrebbero causare perdite di informazioni.
Un sistema di tipi sicuro aggiunge un elemento importante ai linguaggi di programmazione, consentendo a ogni espressione di riportare un'etichetta di sicurezza oltre ad avere un tipo (ad esempio booleano o intero). Il vantaggio di questa operazione è che, tramite il controllo del tipo, se il programma supera il controllo, è possibile garantire che venga rispettata la politica di flusso, evitando così un flusso di informazioni improprio.
Ad esempio, se una variabile è contrassegnata come di tipo ad alta sicurezza, la variabile non dovrebbe modificare una variabile di tipo a bassa sicurezza, proteggendo così le informazioni riservate dalla fuga di notizie.
Nelle applicazioni pratiche, il rigore della politica di non interferenza la rende poco pratica. Per questo motivo sono stati proposti numerosi schemi per consentire la divulgazione delle informazioni, allo scopo di raggiungere l'obiettivo del rilascio controllato. Questi schemi sono noti anche come declassificazione delle informazioni. Una declassificazione efficace deve garantire che un aggressore attivo non possa manipolare il sistema per ottenere l'accesso a segreti che vanno oltre ciò che un aggressore passivo conosce.
RiepilogoIl controllo del flusso di informazioni sta diventando sempre più importante nella programmazione moderna e nella protezione dei dati. Tuttavia, la sfida da affrontare resta quella di garantire in modo efficace la sicurezza dei dati nelle applicazioni pratiche. Siete preparati ad affrontare queste potenziali minacce?