Criptare i dati con MySQL/MariaDB - Parte 3
Scopriamo le varie modalità di encrypt dei dati disponibili con mariadb
Nelle puntate precedenti abbiamo visto prima come installare mariadb su debian 12, abbiamo imparato che mariadb di default salva i dati in chiaro sul database, e in seguito abbiamo visto come configurare mariadb per criptare i dati “on-rest” sul server, attraverso delle chiavi generate e criptate specificatamente. Oggi scopriremo quali sono le modalità di crittazione dei dati.
Come criptare una tabella a seconda del valore di innodb_encrypt_tables
Ora che abbiamo abilitato l'encrypt dei dati, occorre capire come criptare le tabelle e cosa significa criptare le tabelle. Esistono vari modi per farlo a seconda del valore che decidiamo di impostare innodb_encrypt_tables
Caso innodb_encrypt_tables = ON
Tramite questa configurazione tutte le tabelle innodb vengono criptate. Automaticamente. Che esse siano già presenti in plain text, o che vengano create successivamente senza specificare in modo esplicito di essere criptate, esse verranno criptate. Tenere presente questa cosa in caso si decida di abilitare l'encrypt dei dati su un database già in produzione.
Caso innodb_encrypt_tables = OFF
Tramite questa configurazione, di default le tabelle non vengono criptate. Ossia anche se l'encrypt dei dati è abilitato su mysql/mariadb è comunque necessario richiedere esplicitamente che una determinata tabella venga creata o modificata in modo criptato. Ad esempio come segue:
# creazione di una nuova tabella in modalità crittografata
CREATE TABLE t (i int primary key) ENGINE=InnoDB ENCRYPTED=YES
# modifica di una tabella, in modo da trasformarla da testo semplice a modalità crittografata
ALTER TABLE t ENCRYPTED=Yes;
NOTA Se ricordate all'inizio abbiamo impostato 4 chiavi di crittazione diverse. Se si desidera specifica una particolare chiave di encrypt diversa da quella di default per una data tabella si può procedere come segue:
# creazione di una nuova tabella in modalità crittografata con chiave esplicita
CREATE TABLE t (i int primary key) ENGINE=InnoDB ENCRYPTED=Yes ENCRYPTION_KEY_ID=2;
# modifica di una tabella, in modo da trasformarla da testo semplice a modalità crittografata con chiave esplicita
ALTER TABLE t ENCRYPTED=Yes ENCRYPTION_KEY_ID=2;
Caso innodb_encrypt_tables = Force
Tramite questa modalità è possibile creare tabelle solo criptate. Qualunque tentativo di creare tabelle non criptate fallirà.
Come reperire informazioni sulle tabelle criptate all'interno di una installazione Mysql/MariaDB
Per trovare le tabelle criptate in un dato database, con le relative informazioni in merito a quale chiave di crittazione è stata usata, si può procedere come segue:
SELECT * FROM information_schema.innodb_tablespaces_encryption\G;
Che restituirà un output similare al seguente:
[...]
SPACE: 13
NAME: test_plain/t
ENCRYPTION_SCHEME: 1 <- Encryption scheme usato
KEYSERVER_REQUESTS: 0
MIN_KEY_VERSION: 1
CURRENT_KEY_VERSION: 1
KEY_ROTATION_PAGE_NUMBER: NULL
KEY_ROTATION_MAX_PAGE_NUMBER: NULL
CURRENT_KEY_ID: 2 <- Chiave di encrypt usata
ROTATING_OR_FLUSHING: 0
[...]
Come si presentano su filesystem le tabelle criptate?
Se ricordate all’inizio di questa serie di articoli abbiamo mostrato come si presentano le tabelle in plain-text sul filesystem, ossia così:
root@myt:/var/lib/mysql/test_plain# strings user.ibd
infimum
supremum
mioutente
mioaltroutente
mioterzoutente
Facendo la medesima operazione su una tabella criptata, il comando sopra riportato riporterà delle stringhe non comprensibili o utilizzabili. Quindi l’output sarà qualcosa di similare a:
root@myt:/var/lib/mysql/test_plain# strings user.ibd
_/x*o
8YYD
1-f_]
EMQ<=
>@|
lE~wn
%A(F
3K-@D
F7't"
}mJ<
3uW
LjN6
ksKY
zvm_:>
+MsM?
]tfhHeN
OrlCJ
[...]
In questo modo i dati sul filesystem sono protetti da eventuali utenti malintenzionati che dovessero avere accesso al server, senza le credenziali di autenticazione di mariadb.
La configurazione è così terminata. Nella prossima puntata faremo alcune considerazioni finali su cosa protegga, e su cosa non protegga, questo tipo di sicurezza dei dati, e cosa bisogna considerare qualora si decida di utilizzare questo sistema in produzione in modo sicuro.