Panoramica della gestione delle chiavi per Always Encrypted

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Always Encrypted usa due tipi di chiavi crittografiche per proteggere i dati: una chiave per crittografare i dati e un'altra per crittografare la chiave che crittografa i dati. La chiave di crittografia della colonna crittografa i dati, mentre la chiave master crittografa la chiave di crittografia della colonna. Questo articolo offre una panoramica dettagliata della gestione di queste chiavi di crittografia.

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. 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.

  • Lechiavi di crittografia della colonna sono chiavi di crittografia contenuto usate per crittografare i dati. Come suggerito dal nome, le chiavi di crittografia della colonna sono usate per crittografare i dati nelle colonne del database. Per crittografare una o più colonne è possibile usare la stessa chiave di crittografia della colonna oppure più chiavi, a seconda dei requisiti dell'applicazione. 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. 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) . Le chiavi di crittografia della colonna usate con l'algoritmo AES-256 sono lunghe 256 bit.

  • Le chiavi master delle colonne sono chiavi che proteggono le chiavi usate per crittografare le chiavi di crittografia delle colonne. 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. Il database contiene solo i metadati relativi alle chiavi master della colonna (il tipo di archivio chiavi e la posizione). I metadati delle chiavi master della colonna sono archiviati nella vista del catalogo sys.column_master_keys (Transact-SQL) .

I metadati delle chiavi nel sistema di database non contengono chiavi master di colonna in chiaro né chiavi di crittografia di colonna in chiaro. 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. 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. Per assicurarsi che il sistema di database non possa accedere alle chiavi di testo non crittografato, assicurarsi di eseguire gli strumenti di gestione delle chiavi in un computer diverso da quello che ospita il database. Per informazioni dettagliate, vedere la sezione Considerazioni sulla sicurezza per la gestione delle chiavi di seguito.

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. 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. Per informazioni dettagliate, vedere Sviluppare applicazioni usando Always Encrypted.

Attività di gestione delle chiavi

Il processo di gestione delle chiavi può essere suddiviso nelle attività di alto livello seguenti:

  • Provisioning delle chiavi: creazione delle chiavi fisiche in un archivio chiavi attendibile (ad esempio, nell'archivio certificati Windows, Azure Key Vault o in un modulo di sicurezza hardware), crittografia delle chiavi di crittografia delle colonne con chiavi master della colonna e creazione di metadati per entrambi i tipi di chiavi nel database.

  • Rotazione delle chiavi: sostituzione periodica di una chiave esistente con una nuova chiave. Potrebbe essere necessario ruotare una chiave se la chiave è stata compromessa o per rispettare i criteri o le normative di conformità dell'organizzazione che impongono la rotazione delle chiavi crittografiche.

Ruoli di gestione chiave

Esistono due ruoli distinti degli utenti che gestiscono le chiavi Always Encrypted; amministratori della sicurezza e amministratori di database :Security Administrators and database administrators (DBAs):

  • Amministratore della sicurezza: genera chiavi di crittografia della colonna e chiavi master della colonna e gestisce gli archivi delle chiavi contenenti le chiavi master della colonna. Per eseguire queste attività, un amministratore della sicurezza deve essere in grado di accedere alle chiavi e all'archivio chiavi, ma non deve accedere al database.
  • DBA: gestisce i metadati relativi alle chiavi nel 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.

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. A seconda delle esigenze dell'organizzazione è possibile selezionare il processo di gestione delle chiavi che meglio si adatta alle proprie esigenze.

Gestione delle chiavi con separazione dei ruoli

Quando le chiavi Always Encrypted vengono gestite con separazione dei ruoli, persone diverse in un'organizzazione presuppongono i ruoli di amministratore della sicurezza e amministratore di database. Un processo di gestione delle chiavi con separazione dei ruoli garantisce che gli amministratori di database non abbiano accesso alle chiavi o agli archivi chiavi che contengono le chiavi effettive e che gli amministratori della sicurezza non abbiano accesso al database contenente dati sensibili. 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.

Note

Gli amministratori della sicurezza generano e usano le chiavi di testo non crittografato, pertanto non devono eseguire le attività sugli stessi computer che ospitano un sistema di database o computer a cui possono accedere gli amministratori di database o chiunque altro potrebbe essere un potenziale avversario.

Gestione delle chiavi senza separazione dei ruoli

Quando le chiavi Always Encrypted vengono gestite senza separazione dei ruoli, una singola persona può assumere ruoli di amministratore della sicurezza e amministratore di database, il che significa che la persona deve essere in grado di accedere e gestire sia le chiavi che gli archivi delle chiavi e i metadati della chiave. La gestione delle chiavi senza separazione dei ruoli è consigliata per le organizzazioni che usano il modello DevOps o se il database è ospitato nel cloud e l'obiettivo principale è limitare gli amministratori cloud (ma non gli amministratori di database locali), dall'accesso ai dati sensibili.

Strumenti per la gestione delle chiavi Always Encrypted

Le chiavi Always Encrypted possono essere gestite tramite SQL Server Management Studio (SSMS) e PowerShell:

Considerazioni sulla sicurezza per la gestione delle chiavi

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. Ecco alcuni esempi di attacchi alla sicurezza in cui Always Encrypted consente di evitare perdite di dati sensibili:

  • Un utente del database con privilegi elevati malintenzionato, ad esempio un amministratore di database, esegue query su colonne di dati sensibili.
  • 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.
  • 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.
  • Malware in esecuzione in un computer che ospita il 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. Ecco alcune indicazioni da seguire:

  • Non generare mai le chiavi master della colonna o le chiavi di crittografia della colonna nel computer che ospita il 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. 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.
  • 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. 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. 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.