Questo articolo è tratto dal capitolo 9 ("Multithreading ed esecuzione parallela") dei libri Visual Basic 2012 - Guida completa per lo sviluppatore e C# 5 - Guida completa per lo sviluppatore, di Daniele Bochicchio, Cristian Civera, Marco De Sanctis, Riccardo Golia, Alessio Leoncini, Marco Leoncini, Stefano Mostarda.

Acquista subito la tua copia ad un prezzo vantaggioso!

[...]

Nei paragrafi precedenti abbiamo illustrato come sia possibile organizzare le classi e, complessivamente, le nostre applicazioni, in modo da ridurre i rischi di sicurezza legati alla violazione degli altri dati presenti sulla macchina. Oltre a quanto analizzato, è usuale avere dei dati che, anche in caso di accesso da parte di altri utenti, non siano direttamente leggibili dagli esseri umani, in quanto cifrati.

All'interno del .NET Framework sono disponibili molte classi per gestire dati riservati e rendere il loro immagazzinamento in memoria o il loro scambio più sicuro. Il concetto di crittografia si basa sul principio di modificare la rappresentazione dei dati in modo tale che non siano leggibili direttamente, che solo l'applicazione possa conoscerne il valore reale e che non sia possibile risalire al valore originale, se non in presenza di precise condizioni.

Come vedremo nei paragrafi successivi, molte delle operazioni di crittografia si basano sul principio di modificare i dati in funzione di un preciso valore, detto comunemente chiave, valore che, a sua volta, può avere un livello di sicurezza dettato dalla riproducibilità dello stesso e dalla difficoltà con la quale può essere conosciuto da altri utenti oltre al cifratore.

Windows Data Protection

Una delle soluzioni più immediate che abbiamo a disposizione nel Framework è rappresentata dalla classe ProtectedData del namespace System.Security.Cryptography, presente nell'assembly System.Security.dll. Tale classe implementa la cifratura, basandosi sul servizio di data protection (DPAPI) esposto dal sistema operativo stesso. Con i due metodi statici Protect e Unprotect possiamo cifrare e decifrare i nostri dati rappresentati sotto forma di array di byte e abbiamo la possibilità di definire un livello di decifrabilità nel contesto di sistema o al solo utente autenticato, grazie al parametro DataProtectionScope.

Nell'esempio 1 possiamo vedere come cifrare una semplice stringa; con DataProtectionScope.CurrentUser l'algoritmo usa come chiave la password dell'utente.

Esempio 1 - VB
Dim data As String = "testo da cifrare"
Dim dataByte As Byte() = System.Text.Encoding.UTF8.GetBytes(data)
Dim entropy As Byte() = System.Text.Encoding.UTF8.GetBytes("chiave ulteriore sicurezza")
Dim dataCripted As Byte() = ProtectedData.Protect(dataByte, entropy, DataProtectionScope.CurrentUser)
Esempio 1 - C#
string data = "testo da cifrare";
byte[] dataByte = Encoding.UTF8.GetBytes(this.data);
byte[] entropy = Encoding.UTF8.GetBytes("chiave ulteriore sicurezza");
byte[] dataCripted = ProtectedData.Protect(dataByte, entropy, DataProtectionScope.CurrentUser);

Come possiamo vedere nel codice, è possibile aggiungere un'ulteriore chiave da affiancare a quella derivata dal DataProtectionScope. Il livello di sicurezza di questa modalità si basa essenzialmente sulla complessità della password scelta dall'utente. L'utilità maggiore di questa classe risponde essenzialmente alle esigenze di una applicazione che memorizzi, anche su file system, delle informazioni alle quali solo l'utente può accedere in chiaro.

5 pagine in totale: 1 2 3 4 5
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

Principi di crittografia con il .NET Framework 1010 3
| Condividi su: Twitter, Facebook, LinkedIn, Google+

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti