SQL SERVER Transparent Data Encryption (TDE) 

Datamaze
15.03.24 02:50 PM Comment(s)
Quando si pensa all’encryption dei propri dati, si dovrebbero considerare tre possibili scenari: 
  • Encryption dei dati ’at rest’, ovvero crittografarli mentre sono archiviati su qualunque archivio file si utilizzi. 
  • Encrypting dei dati ‘in transito’ che significa criptare il dato mentre si muove attraverso un canale di comunicazione pubblico o privato. 
  • Encrypting dei dati in uso, ossia quando è utilizzato nella RAM o CPU (cache e registry). 

Introduzione alla TDE

  1. La Transparent Data Encryption (TDE) esegue la crittografia dei file di dati di SQL Server, così come dei database SQL di Azure e di Azure Synapse Analytics. Questa crittografia è una crittografia dei dati at rest. 


    Per proteggere un database utente, è possibile adottare diverse precauzioni, quali: 

    • Progettazione di un sistema protetto.
    • Crittografia degli asset riservati.
    • Creazione di un firewall per i server di database.

    Tuttavia, un utente malintenzionato che si appropria dei supporti fisici come drivers o tape su cui risiedono i backup può ripristinare o collegare il database ed esplorare i dati. Una soluzione a questa possibile problematica consiste nel crittografare i dati sensibili del database e usare un certificato per proteggere le chiavi di crittografia dei dati. Questa soluzione impedisce l'uso dei dati senza le chiavi.  


    La TDE esegue la crittografia e la decrittografia delle operazioni di I/O di file di dati e log in tempo reale. Per la crittografia viene usata una chiave di crittografia del database (DEK).  


    TDE consente, come abbiamo visto, di proteggere i dati at rest, ovvero i file di dati e di log e assicura la conformità a numerose leggi, normative e linee guida stabilite in vari settori. Gli sviluppatori di software possono crittografare i dati usando gli algoritmi di crittografia AES e 3DES senza modificare le applicazioni esistenti, da qui deriva il termine Transparent. 

    Da notare che:

    1. La TDE non è disponibile per i database di sistema master, model ed msdb mentre il tempdb viene automaticamente criptato quando la TDE viene applicata a un database utente ma non può essere criptato direttamente. 
    2. La TDE non effettua l’encryption dei dati sul canale di comunicazione. 

Come lavora la TDE

 Transparent data encryption (TDE) è una funzionalità di encryption introdotta con Microsoft SQL Server 2008, progettata per dare protezione all’intero database senza avere impatti sulle applicazioni esistenti.   

 L’encryption di un file di database è eseguito a livello di pagina. Le pagine sono criptate prima che siano scritte su disco e decriptate quando sono lette in memoria. La TDE quindi non aumenta la dimensione del database criptato.  

Dopo aver protetto un database, è possibile ripristinarlo usando il certificato corretto. 

Dopo l'abilitazione di TDE, è necessario eseguire immediatamente un backup del certificato e della private key associata. Se il certificato risulta non più disponibile o se il database viene ripristinato o collegato in un altro server, saranno necessari i backup del certificato e della chiave privata. In caso contrario, non sarà possibile aprire il database. 

 E’ inoltre necessario conservare il certificato di crittografia anche se si disabilita la TDE nel database. Anche se il database non è crittografato, è possibile che parti del log delle transazioni rimangano protette. Il certificato potrebbe anche essere necessario per alcune operazioni fino a quando non si esegue un backup completo del database.  

È comunque possibile usare un certificato oltre la data di scadenza per crittografare e decrittografare dati con TDE. 

Gerarchia delle chiavi nella TDE 

La API di Windows Data Protection (DPAPI) si trova nella radice dell'albero di crittografia, protegge la gerarchia di chiavi a livello di computer e viene usata per proteggere la service master key (SMK) per l'istanza. La SMK protegge la master key del database (DMK), archiviata a livello di database utente e protegge i certificati e le chiavi asimmetriche. Queste chiavi, a loro volta, proteggono le chiavi simmetriche, che proteggono i dati. La TDE usa una gerarchia simile fino al certificato. Quando si usa la TDE, il DMK e il certificato devono essere archiviati nel master database. Una nuova chiave, usata solo per TDE e denominata chiave di crittografia del database (DEK), viene creata e archiviata nel database utente. 

La figura seguente illustra l'architettura delle chiavi nella TDE: 
TDE encription SQL Server

Abilitare Transparent Data Encryption 

Per attivare la TDE, partendo da una istanza nella quale nessun database è già criptato, occorre eseguire le seguenti operazioni: 
  • Creare una master key.
  • Creare o ottenere un certificato protetto dalla master key.
  • Creare una encryption key per il database e proteggerla mediante il certificato.
  • Impostare il database per l'uso della crittografia. 

L'esempio seguente illustra come crittografare il database AdventureWorks2022 usando un certificato denominato MyServerCert installato nel server. 
USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
GO

CREATE CERTIFICATE MyServerCert
	WITH SUBJECT = 'My DEK Certificate';
GO

USE AdventureWorks2022;
GO

CREATE DATABASE ENCRYPTION KEY
	WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO

ALTER DATABASE AdventureWorks2022

SET ENCRYPTION ON;
GO


Impatto sulle Performance

L’impatto sulle performance della TDE è stimato intorno al 3-5% e può essere ulteriormente ridotto se la maggior parte dei dati a cui si effettua l'accesso è mantenuto in memoria. L’impatto sarà principalmente sulla CPU, sull’I/O sarà più basso. 


Database Backups

Quando è attiva la TDE, tutti i backup saranno criptati pertanto occorre prestare particolare attenzione per assicurarsi che il certificato utilizzato per proteggere la DEK sia stato oggetto di backup e manutenuto esattamente come il backup del database. Se il certificate andasse perso il dato non sarebbe più leggibile. Si fa notare che sarebbe ovviamente opportuno, per questioni di sicurezza, salvare backup dei database e backup dei certificati separatamente, non nello stesso sito. 

Come eseguire il backup del certificato: 
BACKUP CERTIFICATE MyServerCert TO FILE = 'C:\temp\TDE_Cert'
WITH PRIVATE KEY (
		FILE = 'C:\temp\TDE_CertKey.pvk'
		,ENCRYPTION BY PASSWORD = 'InsertStrongPasswordHere'
		)
Come effettuare il restore del certificato: 

Per poter ripristinare il certificato, nello scenario di restore del database su un server secondario, sarà prima necessario creare una master key e poi effettuare la restore dal backup creato al passo precedente coi comandi:
USE MASTER
GO

CREATE CERTIFICATE TDECert
FROM FILE = 'C:\Temp\TDE_Cert'
WITH PRIVATE KEY (
		FILE = 'C:\TDECert_Key.pvk'
		,DECRYPTION BY PASSWORD = 'InsertStrongPasswordHere'
		);

A questo punto il database potrà essere ripristinato sul nuovo server senza alcun problema. 


di Anna Bruno, pubblicato il 15 marzo 2024