MySQL ha a disposizione una serie di funzioni che si occupano di compressione, crittografia e codifica delle informazioni. Il loro ruolo è determinante soprattutto sotto l'aspetto della sicurezza dei dati e della conservazione di password, qualora il DBMS costituisca la base di un sistema di autenticazione.
In questa lezione verranno presentate le funzioni appartenenti a questa categoria, suddivise per tipologie, mettendo in evidenza le indicazioni d'uso. Le funzioni, come si vedrà, possono essere sperimentate all'interno del client mysql, utilizzando solo il costrutto SELECT
.
Funzioni hash
Molto comune è l'utilizzo di funzioni hash, che attuano una forma di crittografia “a senso unico”. In pratica esse consentono di ricavare un stringa di lunghezza fissa ed apparentemente incomprensibile (detta codice hash), a partire da una stringa qualsiasi, facendo però in modo che l'operazione inversa sia impossibile. In altre parole, non dovrebbe essere possibile utilizzare il codice hash per risalire alla stringa originale. Le funzioni hash possono tornare utili per memorizzare password di utenti nel database, in maniera che non siano leggibili in modo diretto nel remoto caso in cui qualche malintenzionato ottenga l'accesso al DB.
L'operazione viene svolta tramite appositi algoritmi, e le funzioni che li applicano sono le seguenti:
-
MD5
> SELECT MD5('cane'); 0165801c0cce07c7a8751949845c93d2
-
SHA1
> SELECT SHA1('cane'); 95df5d1bd9fbc6c52626039f90ab8d1b57406680
È possibile usare anche la funzioneSHA()
-
SHA2
> SELECT SHA2('cane',256); df39220189ca8225b3ef4bb8f3654b2217c11b056cb764a806586f3b95530052
Funzioni per la compressione
Esistono alcune funzioni utili per comprimere e decomprimere informazioni, il cui utilizzo è subordinato all'installazione del modulo zlib.
Si tratta di:
-
COMPRESS
-
UNCOMPRESS
COMPRESS
-
UNCOMPRESSED_LENGTH
Qualora fosse necessario immagazzinare nel database il risultato di una compressione, non si dovrebbero usare campi CHAR
o VARCHAR
, bensì BLOB
o VARBINARY
, più adatti per stringhe binarie.
Funzioni per la crittografia
Per la crittografia viene utilizzato l'algoritmo AES (Advanced Encryption Standard), molto conosciuto nel mondo informatico. Le funzioni a disposizione sono AES_ENCRYPT
per crittografare e AES_DECRYPT
per decrittare.
La crittografia che viene applicata è simmetrica: si utilizza una chiave (generalmente una stringa) per codificare i dati, e la stessa password dovrà essere fornita per leggerli in chiaro.
Ad esempio, la seguente invocazione:
> SELECT AES_ENCRYPT('questo è il mio segreto','melarossa');
cifrerà la frase “questo è il mio segreto” utilizzando la stringsmelarossa come password. La stessa chiave segreta deve essere fornita al momento di invocare AES_DECRYPT
.
Verificare la forza di una password
Proprio per il ruolo che MySQL svolge nella conservazione delle credenziali di utenti, nella versione 5.6.6 del DBMS è stata introdotta una nuova funzione, chiamata VALIDATE_PASSWORD_STRENGTH
, che riceve in input una password, scritta in chiaro, e restituisce un intero compreso tra 0 e 100 che ne indica la forza: 0 è il livello di debolezza assoluta, 100 il massimo della forza.
Il funzionamento di VALIDATE_PASSWORD_STRENGTH
si basa su criteri che valutano le vulnerabilità della parola chiave scelta come quantità e tipo di caratteri utilizzati. Il livello di sufficienza per la forza di una password dovrebbe superare il valore 50 e possibilmente il 75.
Funzioni deprecate
Nell'ambito delle funzioni di codifica ne esistono diverse, tra l'altro molto usate in passato, che attualmente sono deprecate e pertanto dovrebbero essere evitate perchè rivelatesi insicure, e quindi probabilmente non più supportate in futuro.
Eccone un elenco:
-
DES_ENCRYPT
DES_DECRYPT
AES_ENCRYPT
AES_DECRYPT
-
ENCRYPT
crypt()
AES_ENCRYPT
-
PASSWORD
OLD_PASSWORD
MD5
SHA1
SHA2
-
ENCODE
DECODE
AES_ENCRYPT
AES_DECRYPT