Overview of Key Management for Always Encrypted (Panoramica della gestione delle chiavi per Always Encrypted)Overview of Key Management for Always Encrypted

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2016)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Per proteggere i dati,Always Encrypted usa due tipi di chiavi crittografiche: una per crittografare i dati e un'altra per crittografare la chiave che crittografa i dati.Always Encrypted uses two types of cryptographic keys to protect your data - one key to encrypt your data, and another key to encrypt the key that encrypts your data. La chiave di crittografia della colonna crittografa i dati, la chiave master della colonna crittografa la chiave di crittografia della colonna.The column encryption key encrypts your data, the column master key encrypts the column encryption key. Questo articolo offre una panoramica dettagliata della gestione di queste chiavi di crittografia.This article provides a detailed overview for managing these encryption keys.

Quando si parla di chiavi e di gestione delle chiavi Always Encrypted, è importante comprendere la differenza tra le chiavi crittografiche vere e proprie e gli oggetti metadati che descrivono le chiavi.When discussing Always Encrypted keys and key management it is important to understand the distinction between the actual cryptographic keys, and the metadata objects that describe the keys. I termini chiave di crittografia della colonna e chiave master della colonna vengono usati per fare riferimento alle chiavi crittografiche vere e proprie, mentre i termini metadati della chiave di crittografia della colonna e metadati della chiave master della colonna vengono usati per fare riferimento alle descrizioni delle chiavi Always Encrypted nel database.We use the terms column encryption key and column master key to refer to the actual cryptographic keys, and we use column encryption key metadata and column master key metadata to refer to the Always Encrypted key descriptions in the database.

  • Lechiavi di crittografia della colonna sono chiavi di crittografia contenuto usate per crittografare i dati.Column encryption keys are content-encryption keys used to encrypt data. Come suggerito dal nome, le chiavi di crittografia della colonna sono usate per crittografare i dati nelle colonne del database.As the name implies, you use column encryption keys to encrypt data in database columns. Per crittografare una o più colonne è possibile usare la stessa chiave di crittografia della colonna oppure più chiavi, a seconda dei requisiti dell'applicazione.You can encrypt 1 or more columns with the same column encryption key, or you can use multiple column encryption keys depending on your application requirements. Le chiavi di crittografia della colonna sono a loro volta crittografate. Nel database sono archiviati solo i valori crittografati delle chiavi di crittografia della colonna, all'interno dei metadati delle chiavi di crittografia della colonna stesse.The column encryption keys are themselves encrypted, and only the encrypted values of the column encryption keys are stored in the database (as part of the column encryption key metadata). I metadati delle chiavi di crittografia della colonna sono archiviati nelle viste del catalogo sys.column_encryption_keys (Transact-SQL) e sys.column_encryption_key_values (Transact-SQL) .The column encryption key metadata is stored in the sys.column_encryption_keys (Transact-SQL) and sys.column_encryption_key_values (Transact-SQL) catalog views. Le chiavi di crittografia della colonna usate con l'algoritmo AES-256 sono lunghe 256 bit.Column encryption keys used with the AES-256 algorithm are 256-bit long.

  • Lechiavi master della colonna proteggono le chiavi usate per crittografare le chiavi di crittografia della colonna.Column master keys are key-protecting keys used to encrypt column encryption keys. Le chiavi master della colonna devono essere archiviate in un archivio chiavi attendibile, ad esempio l'archivio certificati Windows, l'insieme di credenziali delle chiavi di Azure o un modulo di sicurezza hardware.Column master keys must be stored in a trusted key store, such as Windows Certificate Store, Azure Key Vault, or a hardware security module. Il database contiene solo i metadati relativi alle chiavi master della colonna (il tipo di archivio chiavi e la posizione).The database only contains metadata about column master keys (the type of key store and location). I metadati delle chiavi master della colonna sono archiviati nella vista del catalogo sys.column_master_keys (Transact-SQL) .The column master key metadata is stored in the sys.column_master_keys (Transact-SQL) catalog view.

È importante notare che i metadati delle chiavi nel sistema del database non contengono chiavi master della colonna o chiavi di crittografia della colonna sotto forma di testo non crittografato.It is important to note that the key metadata in the database system does not contain plaintext column master keys or plaintext column encryption keys. Il database contiene solo informazioni sul tipo e sulla posizione delle chiavi master della colonna e i valori crittografati delle chiavi di crittografia della colonna.The database only contains information about the type and location of column master keys, and encrypted values of column encryption keys. Ciò significa che le chiavi in testo non crittografato non sono mai esposte al sistema di database. Questo garantisce che i dati protetti con Always Encrypted sono al sicuro anche se il sistema di database viene compromesso.This means that plaintext keys are never exposed to the database system ensuring that data protected using Always Encrypted is safe, even if the database system gets compromised. Per assicurarsi che il sistema del database non possa accedere alle chiavi in testo non crittografato, eseguire gli strumenti di gestione delle chiavi in un computer diverso da quello che ospita il database. Per i dettagli, vedere la sezione Considerazioni sulla sicurezza per la gestione delle chiavi più avanti.To ensure the database system cannot gain access to the plaintext keys, be sure to run your key management tools on a different machine than the one hosting your database - review the Security Considerations for Key Management section below for details.

Poiché il database contiene solo dati crittografati (all'interno di colonne protette con Always Encrypted) e non può accedere alle chiavi in testo non crittografato, non può decrittografare i dati.Because the database only contains encrypted data (in Always Encrypted protected columns), and cannot access the plaintext keys, it cannot decrypt the data. Ciò significa che una query sulle colonne Always Encrypted restituirà semplicemente valori crittografati. Le applicazioni client che devono crittografare o decrittografare i dati protetti, quindi, devono essere in grado di accedere alla chiave master della colonna e alle chiavi di crittografia della colonna corrispondenti.This means that querying Always Encrypted columns will simply return encrypted values, so client applications that need to encrypt or decrypt protected data must be able to access the column master key, and related column encryption keys. Per i dettagli, vedere Always Encrypted (client development)(Always Encrypted (sviluppo client)).For details, see Always Encrypted (client development).

Attività di gestione delle chiaviKey Management Tasks

Il processo di gestione delle chiavi può essere suddiviso nelle attività di alto livello seguenti:The process of managing keys can be divided into the following high-level tasks:

  • Provisioning della chiave : creazione delle chiavi fisiche in un archivio chiavi attendibile, ad esempio nell'archivio certificati Windows, nell'insieme di credenziali delle chiavi di Azure o in un modulo di sicurezza hardware, crittografia delle chiavi di crittografia della colonna con le chiavi master della colonna e creazione dei metadati per entrambi i tipi di chiavi nel database.Key provisioning - Creating the physical keys in a trusted key store (for example, in the Windows Certificate Store, Azure Key Vault, or a hardware security module), encrypting column encryption keys with column master keys, and creating metadata for both types of keys in the database.

  • Rotazione delle chiavi : sostituzione periodica di una chiave esistente con una nuova.Key rotation - Periodically replacing an existing key with a new key. Potrebbe essere necessario ruotare una chiave se questa è stata compromessa oppure per conformità ai criteri e alle normative dell'organizzazione che impongono la rotazione delle chiavi crittografiche.You may need to rotate a key if the key has been compromised, or in order to comply with your organization’s policies or compliance regulations that mandate cryptographic keys must be rotated.

Ruoli di gestione delle chiavi Key Management Roles

Per la gestione delle chiavi Always Encrypted esistono due ruoli utente distinti: gli amministratori della sicurezza e gli amministratori del database:There are two distinct roles of users who manage Always Encrypted keys; Security Administrators and Database Administrators (DBAs):

  • Amministratore della sicurezza : genera le chiavi di crittografia della colonna e le chiavi master della colonna, oltre agli archivi delle chiavi contenenti le chiavi master della colonna.Security Administrator - generates column encryption keys and column master keys and manages key stores containing the column master keys. Per eseguire queste attività, un amministratore della sicurezza deve essere in grado di accedere alle chiavi e all'archivio delle chiavi, ma non ha bisogno di accedere al database.To perform these tasks, a Security Administrator needs to be able to access the keys and the key store, but does not need access to the database.
  • Amministratore del database : gestisce i metadati relativi alle chiavi nel database.DBA – manages metadata about the keys in the database. Per eseguire attività di gestione delle chiavi, un amministratore del database deve essere in grado di gestire i metadati delle chiavi nel database, ma non ha bisogno di accedere alle chiavi o all'archivio delle chiavi che contiene le chiavi master della colonna.To perform key management tasks, a DBA needs to be able to manage key metadata in the database, but does not need access to the keys or the key store holding the column master keys.

Considerando i ruoli sopra descritti, le attività di gestione delle chiavi per Always Encrypted possono essere eseguite in due modi diversi: con la separazione dei ruolie senza la separazione dei ruoli.Considering the above roles, there are two different ways to perform key management tasks for Always Encrypted; with role separation, and without role separation. A seconda delle esigenze dell'organizzazione è possibile selezionare il processo di gestione delle chiavi che meglio si adatta alle proprie esigenze.Depending on the needs of your organization you can select the key management process that best suits your requirements.

Gestione delle chiavi con la separazione dei ruoliManaging Keys with Role Separation

Se le chiavi Always Encrypted vengono gestite con la separazione dei ruoli, il ruolo di amministratore della sicurezza e quello di amministratore del database all'interno dell'organizzazione vengono assunti da persone diverse.When Always Encrypted keys are managed with role separation, different people in an organization assume the Security Administrator and DBA roles. Un processo di gestione delle chiavi con separazione dei ruoli garantisce che gli amministratori del database non abbiano accesso alle chiavi o agli archivi che le contengono e che gli amministratori della sicurezza non abbiano accesso al database, che contiene dati sensibili.A key management process with role separation ensures DBAs have no access to the keys or key stores holding the actual keys, and Security Administrators have no access to the database containing sensitive data. La gestione delle chiavi con la separazione dei ruoli è consigliata se l'obiettivo è di assicurarsi che gli amministratori del database all'interno dell'organizzazione non possano accedere ai dati sensibili.Managing keys with role separation is recommended if your goal is to ensure DBAs in your organization cannot access sensitive data.

Nota: gli amministratori della sicurezza generano e usano le chiavi di testo non crittografato. Non devono quindi mai eseguire le loro attività da un computer che ospiti un sistema di database o a cui possa accedere un amministratore del database o qualsiasi altro utente che possa rappresentare un potenziale antagonista.Note: Security Administrators generate and work with the plaintext keys, so they should never perform their tasks on the same computers hosting a database system, or computers that can be accessed by DBAs or anyone else who might be potential adversaries.

Gestione delle chiavi senza separazione dei ruoliManaging Keys without Role Separation

Se le chiavi Always Encrypted vengono gestite senza separazione dei ruoli, un unico utente può assumere entrambi i ruoli di amministratore della sicurezza e di amministratore del database. Questo implica che la persona deve essere in grado di raggiungere e gestire sia le chiavi e gli archivi delle chiavi che i metadati delle chiavi stesse.When Always Encrypted keys are managed without role separation, a single person can assume both Security Administrator and DBA roles, which implies that person needs to be able to access and manage both the keys/key stores and the key metadata. La gestione delle chiavi senza separazione dei ruoli è consigliata per le organizzazioni che usano il modello DevOps oppure se il database è ospitato nel cloud e l'obiettivo principale consiste nel limitare l'accesso ai dati sensibili agli amministratori del cloud escludendo gli amministratori di database locali.Managing keys without role separation can be recommended for organizations using the DevOps model, or if the database is hosted in the cloud and the primary goal is to restrict cloud administrators (but not on-premises DBAs), from accessing sensitive data.

Strumenti per la gestione delle chiavi Always EncryptedTools for Managing Always Encrypted Keys

Le chiavi Always Encrypted possono essere gestite tramite SQL Server Management Studio (SSMS) e PowerShell:Always Encrypted keys can be managed using SQL Server Management Studio (SSMS) and PowerShell:

Considerazioni sulla sicurezza per la gestione delle chiavi Security Considerations for Key Management

L'obiettivo principale di Always Encrypted è di garantire la sicurezza dei dati sensibili archiviati in un database anche se il sistema di database o il suo ambiente host viene compromesso.The primary objective of Always Encrypted is to ensure sensitive data stored in a database is safe, even if the database system or its hosting environment gets compromised. Ecco alcuni esempi di attacchi alla sicurezza in cui Always Encrypted consente di evitare perdite di dati sensibili:Examples of security attacks where Always Encrypted can help prevent sensitive data leaks include:

  • Un utente del database con privilegi elevati malintenzionato, ad esempio un amministratore di database, esegue query su colonne di dati sensibili.A malicious high-privilege database user, such as a DBA, querying sensitive data columns.
  • Un amministratore non autorizzato di un computer che ospita un'istanza di SQL Server analizza la memoria di un processo SQL Server o file di dump di processi SQL Server.A rogue administrator of a computer hosting a SQL Server instance, scanning memory of a SQL Server process, or SQL Server process dump files.
  • Un operatore di centro dati malintenzionato esegue una query su un database di clienti, esamina i file di dump di SQL Server o esamina la memoria di un computer che ospita dati sui clienti nel cloud.A malicious data center operator querying a customer database, examining SQL Server dump files, or examining the memory of a computer hosting customer data in the cloud.
  • Malware in esecuzione in un computer che ospita il database.Malware running on a computer hosting the database.

Per garantire che Always Encrypted sia efficace nella prevenzione di questi tipi di attacchi, il processo di gestione delle chiavi deve verificare le chiavi master della colonna e le chiavi di crittografia della colonna e deve controllare che le credenziali dell'archivio contenente le chiavi master della colonna non vengano mai rivelate a un potenziale utente malintenzionato.To ensure Always Encrypted is effective in preventing these types of attacks, your key management process must ensure the column master keys and column encryption keys, as well as credentials to a key store containing the column master keys, are never revealed to a potential attacker. Ecco alcune indicazioni da seguire:Here are a few guidelines, you should follow:

  • Non generare mai le chiavi master della colonna o le chiavi di crittografia della colonna nel computer che ospita il database.Never generate column master keys or column encryption keys on a computer hosting your database. Generare le chiavi in un computer separato dedicato alla gestione delle chiavi o nel computer che ospita le applicazioni che dovrebbero comunque avere accesso alle chiavi.Instead generate the keys on a separate computer, which is either dedicated for key management, or is a machine hosting applications that will need access to the keys anyway. Ciò significa che non si devono mai eseguire strumenti usati per generare le chiavi nel computer che ospita il database perché se riuscisse ad accedere a un computer usato per il provisioning o la gestione delle chiavi Always Encrypted, un utente malintenzionato potrebbe ottenere le chiavi, anche se queste compaiono nella memoria dello strumento solo per un breve periodo di tempo.This means that you should never run tools used to generate the keys on the computer hosting your database because if an attacker accesses a computer used to provision or maintain your Always Encrypted keys, the attacker can potentially get your keys, even if the keys only appear in the tool’s memory for a short time.
  • Per assicurarsi che il processo di gestione delle chiavi non riveli inavvertitamente le chiavi master della colonna o le chiavi di crittografia della colonna, è fondamentale identificare potenziali antagonisti e possibili minacce alla sicurezza prima di definire e implementare un processo di gestione delle chiavi.To ensure your key management process does not inadvertently reveal column master keys or column encryption keys, it is critical to identify potential adversaries and security threats before defining and implementing a key management process. Se ad esempio l'obiettivo è di verificare che gli amministratori del database non abbiano accesso ai dati sensibili, un amministratore del database non può essere incaricato della generazione delle chiavi.For example, if your goal is to ensure DBAs have no access to sensitive data, then a DBA cannot be responsible for generating the keys. Un amministratore del database, tuttavia, può gestire i metadati delle chiavi nel database, poiché i metadati non contengono le chiavi sotto forma di testo non crittografato.A DBA, however, can manage key metadata in the database, as the metadata does not contain the plaintext keys.

Passaggi successiviNext Steps

Risorse aggiuntiveAdditional Resources