Condividi tramite


Procedura: Creazione di chiavi simmetriche identiche su due server

Al fine di decrittografare l'argomento ciphertext, è necessario disporre della chiave utilizzata per crittografarlo. Quando la crittografia e la decrittografia vengono eseguite in un unico database, la chiave viene archiviata nel database ed è disponibile, a seconda delle autorizzazioni, sia per la crittografia che per la decrittografia. Viceversa, quando la crittografia e la decrittografia vengono eseguite in database separati, la chiave archiviata in un database non è disponibile per l'utilizzo nell'altro database. In questo argomento viene illustrato come specificare una chiave simmetrica condivisa in database che si trovano in due server distinti.

Panoramica

La creazione di chiavi simmetriche identiche è alquanto semplice. Le chiavi simmetriche create con le stesse opzioni KEY_SOURCE, ALGORITHM e IDENTITY_VALUE saranno identiche. Prima di creare una chiave simmetrica, è consigliabile verificare che siano stati inizializzati i meccanismi di gestione delle chiavi di SQL Server. Se non sono ancora presenti, è consigliabile creare una chiave master del database per attivare la gestione automatica delle chiavi e un certificato con cui crittografare la chiave simmetrica. Facoltativamente, è possibile proteggere la chiave simmetrica con una password. Per ulteriori informazioni, vedere CREATE SYMMETRIC KEY (Transact-SQL).

Esempio

In questo esempio vengono create chiavi simmetriche identiche in due server. Nell'esempio viene utilizzato l'algoritmo di crittografia AES_256. Gli algoritmi di crittografia di tipo AES non sono supportati in Windows XP e Windows Server 2000. Con tali sistemi operativi è possibile specificare un algoritmo diverso, ad esempio TRIPLE_DES.

  1. Creare le chiavi eseguendo le seguenti istruzioni CREATE MASTER KEY, CREATE CERTIFICATE e CREATE SYMMETRIC KEY in entrambi i server.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';
    GO
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';
    GO
    CREATE SYMMETRIC KEY [key_DataShare] WITH
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',
        ALGORITHM = AES_256, 
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];
    GO
    
  2. Verificare le chiavi eseguendo prima l'istruzione OPEN SYMMETRIC KEY e quindi l'istruzione SELECT in un server.

    OPEN SYMMETRIC KEY [key_DataShare] 
        DECRYPTION BY CERTIFICATE cert_keyProtection;
    GO
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )
    GO
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3
    
  3. Nell'altro server incollare il risultato dell'istruzione SELECT precedente nel codice indicato di seguito come valore di @blob ed eseguire il codice per verificare che la chiave duplicata sia in grado di decrittografare il testo crittografato.

    OPEN SYMMETRIC KEY [key_DataShare] 
        DECRYPTION BY CERTIFICATE cert_keyProtection;
    GO
    DECLARE @blob varbinary(8000);
    SET @blob = SELECT CONVERT(varchar(8000), decryptbykey(@blob));
    GO
    
  4. Chiudere la chiave simmetrica in entrambi i server.

    CLOSE SYMMETRIC KEY [key_DataShare];
    GO