Per criptare i nostri dati possiamo utilizzare chiavi simmetriche (
SYMMETRIC KEYS). Una chiave di questo tipo assicura una protezione molto più elevata rispetto a quella fornita dalle funzioni di T-SQL (come
EncryptByPassPhrase).
Ecco cosa possiamo utilizzare per rendere più sicuri i nostri dati (tramitre l’algoritmo
TRIPLE DES):
-- Creare una chiave simmetrica
-----------------------------------------------------------------------
CREATE SYMMETRIC KEY TestKey
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY PASSWORD = 'mia_password'
-- mia_password è la password che protegge la chiave simmetrica
-----------------------------------------------------------------------
-- Aprire una chiave simmetrica per decriptare i dati
-----------------------------------------------------------------------
OPEN SYMMETRIC KEY TestKey
DECRYPTION BY PASSWORD = 'mia_password'
-- Chiudere una chiave simmetrica
-----------------------------------------------------------------------
CLOSE SYMMETRIC KEY TestKey
-- metodi di criptazione/decriptazione (negli sql statement)
-----------------------------------------------------------------------
encryptByKey(Key_GUID('TestKey'), 'valore_da_criptare')
decryptByKey('valore_da_decriptare')
N.B. Nei metodi utili alla criptazione/decriptazione, il valore_da_decriptare/criptare può anche essere un’ espressione, come ad esempio il campo di una tabella o una variabile; eccone un esempio:
-- creo una chiave simmetrica
CREATE SYMMETRIC KEY ConnectionKey
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY PASSWORD = 'prova'
-- apro la chiave precedentemente creata
OPEN SYMMETRIC KEY ConnectionKey DECRYPTION BY PASSWORD = 'prova'
SELECT decriptByKey(Password) FROM Utenti
-- oppure supponiamo @password passato come parametro
-- criptiamo il parametro e lo inseriamo in tabella
INSERT INTO Utenti (Utente, Password)
SELECT 1, encryptByKey(@password)
-- chiudo la chiave simmetrica
CLOSE SYMMETRIC KEY ConnectionKey
Ovviamente TRIPLE_DES non è l’unico algoritmo possibile, abbiamo infatti anche
DES | RC2 | RC4 | DESX | AES_128 | AES_192 | AES_256
Tutto questo discorso, che va al di là di quello indicato in questo post, è ampiamente trattato in un articolo di Luca Bianchi di ASPItalia. Il link è il seguente:
http://www.visual-basic.it/articoli/lbSQLprotection.htm