Cos’è l’Encryption
La crittografia (Encryption) è il processo di oscuramento dei dati mediante l'uso di una chiave o di una password. Questo processo può rendere i dati inutilizzabili senza la chiave di decrittazione o la password corrispondente. La crittografia non risolve i problemi di controllo degli accessi. Tuttavia, migliora la sicurezza limitando la perdita di dati anche se i controlli di accesso vengono aggirati. Ad esempio, se il computer host del database è configurato in modo errato e un hacker ottiene dati sensibili, le informazioni rubate potrebbero essere inutili se crittografate.
Sebbene la crittografia sia uno strumento prezioso per garantire la sicurezza, non dovrebbe essere presa in considerazione per tutti i dati o le connessioni. Quando decidi se implementare la crittografia, considera il modo in cui gli utenti accedono ai dati. Se gli utenti accedono ai dati su una rete pubblica, potrebbe essere necessaria la crittografia dei dati per aumentare la sicurezza. Tuttavia, se tutti gli accessi implicano una configurazione Intranet sicura, la crittografia potrebbe non essere necessaria. Qualsiasi utilizzo della crittografia dovrebbe includere anche una strategia di manutenzione di password, chiavi e certificati.
Encryption e metodi disponibili
Scopo dell’Encryption
- Su disco, principalmente in file di dati e file di backup.
- In memoria sul server del database.
- In transito attraverso la rete.
- Nelle applicazioni.
- File archiviati all'esterno del database, magari su una condivisione di rete.
Gli strumenti di encryption disponibili su SQL Server
Feature | Cosa protegge |
Transparent Data Encryption (TDE) | Dati salvati su disco. Ciò include file di dati, file di transaction log, file di backup e snapshot del database. |
Backup Encryption | File di backup. |
Always Encrypted | Dati archiviati in colonne. Con Always Encrypted, i dati sono protetti su disco, in memoria e in transito attraverso la rete. |
Transport Layer Security (TLS) | Traffico di rete. TLS protegge i dati in transito attraverso la rete nonché i comandi eseguiti sul server del database. |
Hashing & Salting | Questa non è strettamente crittografia, ma generalmente si può utilizzare per proteggere le password. |
Encryption Functions | Dati archiviati in colonne. Sono le funzioni di crittografia introdotte in SQL 2005 che precedono Always Encrypted. |
Extensible Key Management (EKM) | Fornisce ulteriore protezione e facilità di gestione per le chiavi di crittografia consentendone l'archiviazione presso un provider esterno. |
TDE
TDE protegge i nostri dati archiviati su disco, quelli che spesso chiamiamo dati a riposo. Offre una buona protezione nello scenario in cui un utente malintenzionato accede al file system e potrebbe tentare di recuperare i dati direttamente dai file di database stessi o copiare i file di backup in modo che possano essere ripristinati su un altro SQL Server per accedervi.
Tuttavia, non ci protegge dal fatto che un utente malintenzionato possa avere accesso per interrogare direttamente il database. La parte “transparent” del nome si riferisce al fatto che TDE funziona in modo trasparente in background senza alcun impatto sulle nostre query o altre funzionalità dell'applicazione. TDE protegge tutti i dati in un database, a differenza dei metodi di crittografia delle colonne che solitamente mirano a tipi specifici di informazioni da crittografare.
Backup Encryption
La crittografia di backup crittografa semplicemente i nostri file di backup. Sono inclusi backup completi, backup differenziali e backup del log. Ciò è particolarmente utile laddove potremmo archiviare i backup, possibilmente su nastro, fuori sede e vogliamo assicurarci che siano inaccessibili in caso di furto. Anche TDE crittografa i backup, quindi va considerato l'utilizzo della crittografia di backup solo laddove non possiamo utilizzare TDE per qualche motivo.
Always Encrypted
TLS
TLS viene utilizzato per crittografare il traffico di rete. Ciò significa che i dati e le query inviati tra l'applicazione e il database server sono completamente crittografati. Simile ad SSL, noto per essere utilizzato per crittografare il traffico Internet (SSL nella maggior parte dei casi utilizza effettivamente il protocollo TLS).
Hashing & Salting
Encryption Functions
Un insieme di funzioni di crittografia utilizzabili all’interno di SQL Server per consentire di crittografare i propri dati. Always Encrypted dovrebbe essere il successore di queste funzioni e sarebbe consigliabile utilizzarlo ove possibile. La crittografia tramite queste funzioni è un po' più limitante, meno sicura e un po' più difficile da implementare rispetto a Always Encrypted. Tuttavia potrebbero esserci alcuni scenari in cui si possono sfruttare queste funzioni.
EKM
La maggior parte dei sistemi di crittografia si basano su chiavi: si dovrebbe pensare a come e dove gestirle nel tempo. EKM è una funzionalità che consente di archiviarle all'esterno del server, su un dispositivo informatico fisico chiamato Hardware Security Module (HSM) o, più comunemente al giorno d'oggi, utilizzando un servizio cloud come Azure Key Vault. Non è necessario utilizzare EKM per implementare una strategia di crittografia sicura, ma vale la pena considerarlo per la facilità di gestione che deriva dall'avere tutte le chiavi in un unico posto. È anche più semplice gestire policy come il controllo degli accessi quando si adotta un approccio centralizzato nell'archiviazione delle chiavi.
Approccio consigliato per l’Encryption
- TDE. Per la protezione a riposo di tutti i dati, tuttavia se si utilizza una versione di SQL Server precedente alla 2019 sarà necessario avere l'edizione Enterprise per utilizzare TDE.
- Always Encrypted. Per crittografare tutte (o la maggior parte) le colonne che contengono informazioni personali identificabili o sensibili.
- TLS. Per garantire che le comunicazioni di rete tra l'applicazione e il server siano crittografate.
- Hashing e salting delle password. Per garantire che le password siano sicure e non abbiamo mai bisogno di memorizzare la password effettiva nel database.
- Hashing e salting delle password. Messo in primo piano in quanto non dovrebbero mai essere salvate le password in chiaro nei database.
- TLS. Dovrebbe essere attivato per tutte le connessioni tra gli applicativi e Sql Server. Semplice e rapido da configurare.
- TDE. Anche TDE è molto semplice da configurare e viene fornito gratuitamente con l'edizione standard di SQL Server dalla versione 2019 in avanti. Protegge da un numero limitato di scenari ma è molto veloce da implementare.
- Always Encrypted. La crittografia delle colonne con Always Encrypted è un po' più difficile da comprendere e sono presenti limitazioni sulle modalità con cui è possibile lavorare con i dati crittografati. È tuttavia lo strumento migliore per proteggere i tuoi dati personali e sensibili. Se il progetto di encryption ha risorse limitate, è consigliabile concentrarsi prima sulla crittografia degli elementi più sensibili e di quelli per cui non sarà necessario apportare modifiche al codice per aggirare il fatto che i dati sono crittografati.
Encryption nel cloud
- SQL Server su Azure all’interno di una macchina virtuale
- Azure SQL Database
- Azure SQL Managed Instance
- SQL Server in AWS all’interno di una macchina virtuale (EC2)
- SQL Server su AWS RDS