PARTE 5 – CAPITOLO 17 – CRITTOGRAFIA
La crittografia è la scienza che studia la modifica di un messaggio e la generazione di Hash per aumentare la riservatezza. L’hashing, inteso come stringa MD5 o SHA1, è utile quando si vuole memorizzare una “impronta” del dato (tipicamente una password) al posto del dato stesso. Questi algoritmi rendono (virtualmente) impossibile risalire al dato originale partendo dall’hash (gli unici metodi di cracking sono il brute force, ovvero il confronto dell’hash con quelli creati sistematicamente dall’attacker e la generazione dello stesso hash partendo da input diversi). Gli algoritmi di hashing quindi non sono adatti per trattare informazioni che si vuole criptare (ad esempio il numero di carta di credito) e poi decriptare. Gli strumenti per criptare/decriptare si trovano nel namespace System.Security.Cryptography (algoritmi, helper, certificati X509, XML signatures ed encryption, CMS/PKCS#7). Le classi relative alla crittografia si dividono in tre livelli: al primo livello ci sono le classi astratte SymmetricAlgorithm, AsymmetricAlgorythm e HashAlgorithm, al secondo livello ci sono le classi astratte dei vari algoritmi (DES, MD5, SHA1 ecc..), mentre al terzo livello ci sono le ServiceProvider, una per ogni classe astratta di livello 2 (MD5CryptoServiceProvider, SHA1Managed ecc..). Gli algoritmi simmetrici usano la stessa chiave per criptare e decriptare il messaggio. Sono molto veloci sia a criptare che a decriptare. I più utilizzati sono DES, TripleDES, RC2 e Rijndael. La forza della cifratura dipende dalla lunghezza della chiave. I problemi principali derivati dall’uso di algoritmi a chiave simmetrica sono lo scambio della chiave (fase critica), gli attacchi brute-force e il management delle chiavi. Gli algoritmi asimmetrici usano chiavi diverse per criptare e decriptare. La chiave usata per criptare è la Public Key (va consegnata a chiunque intende inviarci materiale criptato), mentre la chiave privata è l’unica che può essere usata per la decriptazione. Gli algoritmi più utilizzati sono RSA e DSA. Il maggior difetto degli algoritmi a chiave asimmetrica è la lunghezza computazionale. Spesso per ovviare a questo problema si usa un algoritmo asimmetrico per scambiarsi la chiave pubblica, per poi utilizzare un algoritmo simmetrico (esempio di funzionamento di SSL). ASP.NET non dispone di un modulo automatico per cifrare la querystring, nel caso in cui ciò fosse necessario bisogna farlo manualmente (anche la parte di decriptazione va gestita manualmente).
Una risposta a “HowTo – Guida ASP.NET (Parte 17)”
[…] puntata della mini-guida ad ASP.NET. La trovate qui. Buona […]