Procédure : créer des clés symétriques identiques sur deux serveurs

Pour pouvoir déchiffrer du texte chiffré, vous devez posséder la clé qui a été utilisée pour le chiffrer. Quand le chiffrement et le déchiffrement interviennent dans une seule base de données, la clé est stockée dans la base de données et demeure disponible, en fonction des autorisations, pour le chiffrement et le déchiffrement. Cependant, lorsque le chiffrement et le déchiffrement se produisent dans des bases de données distinctes ou sur des serveurs séparés, la clé stockée dans une base de données ne peut pas être utilisée dans l'autre base de données. Cette rubrique explique comment fournir une clé symétrique partagée à des bases de données installées sur deux serveurs distincts.

Vue d'ensemble

La création de clés symétriques identiques n'est pas une tâche difficile. Les clés symétriques créées avec les mêmes options KEY_SOURCE, ALGORITHM et IDENTITY_VALUE sont identiques. Avant de créer une clé symétrique, vous devez vérifier que les mécanismes de gestion de clés SQL Server ont été initialisés. S'ils n'existent pas encore, vous devez créer une clé principale de base de données pour activer la gestion automatique des clés et un certificat avec lequel chiffrer la clé symétrique. Le cas échéant, vous pouvez protéger la clé symétrique par un mot de passe. Pour plus d'informations, consultez CREATE SYMMETRIC KEY (Transact-SQL).

Exemple

Cet exemple crée des clés symétriques identiques sur deux serveurs. L'exemple utilise l'algorithme de chiffrement AES_256. Les algorithmes de chiffrement AES ne sont pas pris en charge sur Windows XP ou Windows Server 2000 ; vous pouvez spécifier un autre algorithme, tel que TRIPLE_DES.

  1. Créez les clés en exécutant les instructions CREATE MASTER KEY, CREATE CERTIFICATE et CREATE SYMMETRIC KEY suivantes sur les deux serveurs.

    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. Testez les clés en exécutant d'abord les instructions OPEN SYMMETRIC KEY et SELECT sur l'un des serveurs.

    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. Sur le second serveur, collez le résultat de l'instruction SELECT précédente dans le code suivant comme valeur de @blob et exécutez le code suivant pour vérifier que la clé dupliquée peut déchiffrer le texte chiffré.

    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. Fermez les clés symétriques sur les deux serveurs.

    CLOSE SYMMETRIC KEY [key_DataShare];
    GO