Déployer et gérer le chiffrement transparent des données (TDE) Oracle sur solution Bare Metal

Cette page explique comment déployer Oracle Advanced Security Transparent Data Encryption (TDE) et comment gérer le portefeuille et les clés Oracle sur solution Bare Metal.

Présentation

Oracle Advanced Security TDE chiffre de manière transparente les données au repos dans les bases de données Oracle et empêche tout accès non autorisé aux fichiers de base de données. TDE peut chiffrer les sauvegardes de base de données complètes (RMAN) et les exports Data Pump, mais aussi des espaces de table et des colonnes spécifiques.

Fonctionnement du chiffrement transparent des données (TDE)

TDE crée et gère plusieurs clés qui sont utilisées pour le chiffrement. Il est important de protéger ces clés car si un pirate informatique parvient à obtenir des données chiffrées et les clés correspondantes, il pourra facilement déchiffrer les données.

TDE possède une architecture de clé à deux niveaux, avec des clés de chiffrement de données encapsulées par une unique clé principale de base de données. La clé principale est séparée des données chiffrées, stockée en dehors de la base de données qui peut être un portefeuille de keystore logiciel ou un keystore de module de sécurité matériel (HSM) Oracle, et directement gérée par l'administrateur de sécurité de la base de données dans un keystore.

Deux options de keystore sont disponibles avec TDE afin de prendre en charge divers environnements client. Par défaut, TDE stocke sa clé principale dans un portefeuille Oracle, c'est-à-dire un fichier de stockage de clé basé sur la norme PKCS#12. Les portefeuilles sont une solution simple pour travailler avec un petit nombre de bases de données chiffrées.

Activez le module TDE pour la base de données Oracle 11g sur serveur Bare Metal :

Vous pouvez effectuer des opérations de chiffrement au niveau de la colonne ou de l'espace de table. Vous pouvez également appliquer le TDE sur des sauvegardes RMAN.

Activer la condition préalable au chiffrement transparent des données (TDE)

Vous devez préparer votre base de données en définissant un keystore (Oracle Wallet pour 11g) et en créant une clé principale initiale.

Configurer le portefeuille Oracle sur serveur Bare Metal

  • Connectez-vous à l'un des serveurs Bare Metal à partir d'une machine jump host ou bastion de votre projet.

        $ ssh customeradmin@192.168.1.10
        $ su - oracle
    
  • Définissez la variable d'environnement.

    [oracle@svr002 ~]$ . oraenv
     ORACLE_SID = [tdedb] ? DB11G
     The Oracle base has been changed from   /u01/app/oracle to /apps/oracle/oracle_base
    
    [oracle@svr002 ~]$ export ORACLE_SID=DB11G1
    
  • Connectez-vous en tant que sysdba.

    [oracle@svr002 ~]$ sqlplus / as sysdba
    
  • Vérifiez que toutes les variables d'environnement ci-dessous sont correctement définies.

    $ echo $ORACLE_HOME
    $ echo $ORACLE_BASE
    $ echo $DB_UNIQUE_NAME
    
  • Créez un répertoire pour les fichiers de portefeuille

    $ mkdir -p $ORACLE_BASE/admin/DB11G/wallet
    
  • Utilisez l'utilitaire orapki pour créer le portefeuille et activer la connexion automatique afin de ne pas avoir à activer le portefeuille lors des redémarrages.

    $ orapki wallet create -wallet $ORACLE_BASE/admin/DB11G/wallet -auto_login -pwd Oracle2020
    
  • Oracle utilise les chemins d'accès par défaut pour le portefeuille.

    $ ORACLE_BASE/admin/$DB_UNIQUE_NAME/wallet
    $ ORACLE_HOME/admin/$DB_UNIQUE_NAME/wallet
    

    Si vous n'utilisez pas le chemin par défaut, vous devez définir votre chemin d'accès alternatif dans le fichier sqlnet.ora. Vous devez définir l'un des paramètres suivants : ENCRYPTION_WALLET_LOCATION ou WALLET_LOCATION.

    Pour trouver le chemin d'accès du portefeuille :

    SQL> COL wrl_type FORMAT a12
         COL wrl_parameter FORMAT a35
         COL status FORMAT a15
    
    SQL> select * from v$encryption_wallet;
    
    WRL_TYPE     WRL_PARAMETER           STATUS
    --------     -------------           -------
    file        /apps/oracle/oracle_base OPEN_NO_MASTER_KEY
                /admin/DB11G/wallet
    
  • Pour définir le chemin d'accès au portefeuille dans le fichier sqlnet.ora :

    $ vi sqlnet.ora
    
    ENCRYPTION_WALLET_LOCATION=
     (SOURCE=(METHOD=FILE)(METHOD_DATA=
     (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet))
    
    Or
    
    WALLET_LOCATION =
     (SOURCE=(METHOD=FILE)(METHOD_DATA=
    (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet))
    
  • Ajoutez un nom d'utilisateur et un mot de passe au portefeuille. Pour ajouter un nom d'utilisateur et un mot de passe à un portefeuille existant, utilisez la commande mkstore avec l'option -createCredential comme suit :

    mkstore -wrl <wallet_location> -createCredential <TNS_alias> <username> <password>
    
    $ mkstore -wrl apps/oracle/oracle_base/admin/DB11G/wallet -createCredential DB11G testuser testtest123
    

    Vous pouvez vous connecter avec testuser@SID sans saisir le mot de passe.

  • Créez une clé principale initiale.

    SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY Oracle2020;
    

    Vérifiez que l'état du portefeuille est OPEN.

    SQL> COL wrl_type FORMAT a12
         COL wrl_parameter FORMAT a35
         COL status FORMAT a15
    
     SQL> select * from v$encryption_wallet;
    
          WRL_TYPE  WRL_PARAMETER             STATUS
          --------  -------------             ------
          file      /apps/oracle/oracle_base/ OPEN
              admin/DB11G/wallet
    
  • Pour ouvrir et fermer le portefeuille :

    SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "Password";
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
    

Activer le chiffrement transparent des données (TDE) au niveau de l'espace de table

Vous pouvez effectuer des opérations de chiffrement à l'aide de l'instruction CREATE TABLESPACE SQL.

Chiffrer de nouveaux espaces de table

Lorsque vous créez un espace de table, vous pouvez configurer ses paramètres de chiffrement lors du processus de création.

  1. Assurez-vous que le paramètre d'initialisation COMPATIBLE pour le chiffrement de l'espace de table est à la version 11.2.0.0 ou à une version ultérieure.

    SQL> SHOW PARAMETER COMPATIBLE
    
         NAME        TYPE     VALUE
         ----        ----     ------
         compatible  string   11.2.0.4.0
    
  2. Assurez-vous d'avoir bien configuré la clé principale de chiffrement TDE. Vous pouvez vérifier la configuration sous "Créer une clé principale initiale" dans la section Prérequis .

  3. Créer l'espace de table chiffré avec une instruction "make create"

    Pour vérifier le chemin d'accès au fichier de données, utilisez :

    SQL> select * from dba_data_files ;
    

    Exécutez l'instruction CREATE TABLESPACE en utilisant les clauses de chiffrement.

      SQL> create TABLESPACE encrypted_ts
           DATAFILE '+DATA/db11g/datafile/encrypted_ts01.dbf' SIZE 5 M
           AUTOEXTEND on NEXT 64K
           ENCRYPTION USING 'AES256'
           DEFAULT STORAGE(ENCRYPT);
    

    ENCRYPTION USING 'AES256' ENCRYPT spécifie l'algorithme de chiffrement et la longueur de clé pour le chiffrement. La clause ENCRYPT chiffre l'espace de table.

    Si la clause USING est omise, l'algorithme de chiffrement par défaut est "AES128". De plus, la clause de stockage par défaut d'ENCRYPT doit être spécifiée. Vous pouvez également définir le paramètre dynamique TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM pour définir l'algorithme de chiffrement par défaut pour les futures opérations de création d'espace de table à l'aide de l'instruction ALTER SYSTEM :

      sql> ALTER SYSTEM SET TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM = value;
    

    La valeur peut être l'un des algorithmes de chiffrement suivants : AES128, AES192, AES256, 3DES168, ARIA128, ARIA192, ARIA256, SEED128 et GOST256. La valeur par défaut est AES128.

    Vous pouvez également définir TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM en tant que paramètre d'initialisation dans le fichier init.ora.

    Pour vérifier si le chiffrement des espaces de table est configuré ou non, vous pouvez consulter la colonne ENCRYPTED des vues DBA_TABLESPACES et USER_TABLESPACES, qui indique si l'espace de table est chiffré ou non.

    SQL> SELECT tablespace_name, encrypted FROM dba_tablespaces;
    
          TABLESPACE_NAME                ENC
          -----------------------------------
          SYSTEM                         NO
          SYSAUX                         NO
          UNDOTBS1                       NO
          TEMP                           NO
          USERS                          NO
          UNDOTBS2                       NO
          ENCRYPTED_TS                   YES
    
  4. Tester le chiffrement

    SQL> CREATE TABLE test (id NUMBER(10),data VARCHAR2(50))TABLESPACE encrypted_ts;
    Table created.
    
    SQL> CREATE INDEX test_idx ON test(data) TABLESPACE encrypted_ts;
    Index created.
    
    SQL> INSERT INTO test  (id, data) VALUES (1, 'Test  Encryptio');
    1 row created.
    
    SQL> COMMIT;
    Commit complete
    

    Videz le cache de mémoire tampon pour vous assurer que les données sont bien écrites dans le fichier de données.

      SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;
    

    Lisez les données contenues dans le fichier de données à l'aide de la commande "strings".

      export ORACLE_SID=+ASM
      asmcmd
      ASMCMD> strings +DATA/db11g/datafile/encrypted_ts01.dbf
    

    Les données sont affichées dans un format binaire.

Activer le chiffrement transparent des données au niveau des colonnes de la table

Le chiffrement TDE de colonne permet de chiffrer les données des colonnes spécifiques qui contiennent des données confidentielles dans des tables de base de données. On pense par exemple aux numéros de carte de crédit, de sécurité sociale et de compte personnel (PAN).

  1. Créer une table avec une colonne chiffrée

    SQL> CREATE TABLE employee (
         first_name VARCHAR2(128),
         last_name VARCHAR2(128),
         empID NUMBER ENCRYPT NO SALT,
         salary NUMBER(6) ENCRYPT USING '3DES168'
         );
    Table created.
    

    SALT est un moyen de renforcer la sécurité des données chiffrées. Il s'agit d'une chaîne aléatoire ajoutée aux données avant leur chiffrement et qui permet aux éléments de données identiques d'apparaître comme différents après le chiffrement. SALT permet ainsi de se prémunir d'une méthode utilisée par les pirates informatiques pour voler les données, à savoir l'identification des répétitions dans les éléments de texte chiffrés. Vous pouvez utiliser les paramètres SALT ou NO SALT spécifiés avec la clause ENCRYPT.

    Vous pouvez exécuter la commande ALTER TABLE pour chiffrer les colonnes d'une table existante en ajoutant une colonne chiffrée ou en chiffrant une colonne existante.

    Pour ajouter une colonne chiffrée à une table existante de la base de données, procédez comme suit :

    SQL> ALTER TABLE employee ADD (credit_card_number VARCHAR2(16) ENCRYPT NO SALT);
    Table altered.
    

    Pour chiffrer une colonne existante d'une table de la base de données, procédez comme suit :

    SQL> ALTER TABLE employee MODIFY (last_name encrypt);
    Table altered.
    

    Pour ajouter SALT à une colonne chiffrée d'une table de la base de données, procédez comme suit :

    SQL> ALTER TABLE employee MODIFY (last_name encrypt salt);
    Table altered.
    

    Pour déchiffrer une colonne existante d'une table de la base de données, procédez comme suit :

    SQL> ALTER TABLE employee MODIFY (last_name decrypt);
    Table altered.
    

    Pour supprimer le SALT d'une colonne chiffrée d'une table de la base de données, procédez comme suit :

    SQL> ALTER TABLE employee MODIFY (last_name encrypt no salt);
    Table altered.
    

    Pour modifier la clé chiffrée de la table contenant une ou plusieurs colonnes chiffrées, procédez comme suit :

    SQL> ALTER TABLE employee rekey;
    Table altered.
    

    Pour modifier l'algorithme de chiffrement de la table contenant une ou plusieurs colonnes chiffrées, procédez comme suit :

    SQL> ALTER TABLE employee rekey USING '3DES168';
    Table altered.
    

Chiffrer les espaces de table futurs

Vous pouvez configurer la base de données Oracle pour chiffrer automatiquement les futurs espaces de table que vous allez créer à l'aide du paramètre d'initialisation de base de données ENCRYPT_NEW_TABLESPACES.

Exécutez la commande ALTER SYSTEM suivante :

SQL> ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES=value;

La valeur peut être :

  • ALWAYS chiffre automatiquement l'espace de table à l'aide de l'algorithme AES128, ou à l'aide de l'algorithme spécifié par le paramètre dynamique TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM si vous omettez la clause ENCRYPTION de CREATE TABLESPACE pour les scénarios cloud et sur site. Toutefois, si vous fournissez la clause ENCRYPTION, l'algorithme que vous spécifiez a la priorité sur AES128.

  • DDL chiffre l'espace de table à l'aide du paramètre spécifié de la clause ENCRYPTION de CREATE TABLESPACE, à la fois pour les environnements cloud et sur site.

  • CLOUD_ONLY (non applicable dans notre cas d'utilisation) ne s'applique qu'aux environnements Oracle Cloud. CLOUD_ONLY est la valeur par défaut.

Chiffrement TDE des espaces de table ou chiffrement TDE des colonnes ?

CHOISISSEZ LE CHIFFREMENT TDE DES COLONNES SI CHOISISSEZ LE CHIFFREMENT TDE DES ESPACES DE TABLE SI
L'emplacement des informations sensibles est connu. L'emplacement des informations sensibles est inconnu.
Moins de 5 % de toutes les colonnes de l'application sont candidates au chiffrement. La plupart des données d'application sont considérées comme sensibles, ou vous faites partie d'un secteur auquel s'appliquent plusieurs exigences de sécurité et de confidentialité internationales et nationales.
Le type et la longueur des données sont compatibles avec le chiffrement TDE des colonnes. Les types de données contenant des informations sensibles ne sont pas tous compatibles avec le chiffrement TDE des colonnes.
Les candidats au chiffrement ne sont pas des colonnes de clé étrangère. Les candidats au chiffrement sont des colonnes de clé étrangère.
Les index des candidats au chiffrement sont des index B-tree normaux. Les index des candidats au chiffrement sont des index fonctionnels.
L'application n'effectue pas d'analyse de plages sur les données chiffrées. L'application recherche des plages de données sensibles.
Augmentation de l'espace de stockage utilisé de 1 à 52 octets par valeur chiffrée. Aucune augmentation de l'espace de stockage utilisé n'est acceptable.
L'impact sur les performances dépend du pourcentage de colonnes chiffrées, de la fréquence à laquelle les valeurs chiffrées sont sélectionnées ou mises à jour, de la taille des données chiffrées et d'autres variables. Impact constant sur les performances inférieur à 10 %.
Si vous souhaitez bénéficier de l'accélération matérielle du chiffrement.
Si vous souhaitez bénéficier en même temps des avantages du chiffrement et de la compression.

Chiffrement des sauvegardes RMAN

Les ensembles de sauvegarde sont chiffrés à l'aide d'un algorithme répertorié dans le fichier V$RMAN_ENCRYPTION_ALGORITHMS. RMAN peut chiffrer de manière transparente les données écrites sur les ensembles de sauvegarde puis les déchiffrer lorsqu'elles doivent être utilisées dans le cadre d'une opération RESTORE. RMAN propose trois modes de chiffrement : transparent, protégé par mot de passe et mode double.

  • Le chiffrement en mode transparent (par défaut) s'utilise avec le portefeuille de chiffrement Oracle.

  • Pour utiliser le mode protégé par mot de passe, l'administrateur de bases de données doit fournir un mot de passe à utiliser pour le chiffrement. Vous pouvez définir le mode protégé par mot de passe en utilisant l'instruction SET ENCRYPTION ON IDENTIFIED BY password only.

  • Le chiffrement en mode double vous permet d'utiliser un portefeuille Oracle ou un mot de passe pour le déchiffrement. Vous pouvez définir le mode double en utilisant l'instruction SET ENCRYPTION ON IDENTIFIED BY password.

Configurer le chiffrement des sauvegardes RMAN

  1. Configurez le portefeuille Oracle.

  2. Configurez RMAN pour utiliser le chiffrement.

    Configurez le mode de chiffrement RMAN. Cet exemple utilise le mode double. Pour cela, connectez-vous à la base de données cible RMAN et exécutez la commande SET ENCRYPTION ON IDENTIFIED BY password.

    [oracle@svr002 ~]$ . oraenv
      ORACLE_SID = [tdedb] ? DB11G
      The Oracle base has been changed from /u01/app/oracle to /apps/oracle/oracle_base
    
      export ORACLE_SID=DB11G1
    

    Connectez-vous à RMAN.

      rman target /
      RMAN> SET ENCRYPTION ON IDENTIFIED BY <password>;
      executing command: SET encryption
    

    SET ENCRYPTION remplace les paramètres de chiffrement spécifiés par la commande CONFIGURE ENCRYPTION, qui utilise le chiffrement transparent par défaut.

  3. Configurez l'algorithme de chiffrement des sauvegardes par défaut.

    Pour obtenir la liste des algorithmes de chiffrement RMAN, interrogez la vue v$rman_encryption_algorithms :

     SQL> COL algorithm_name FORMAT a15
          COL algorithm_description FORMAT a15
          COL is_default FORMAT a15
     SQL> select algorithm_id, algorithm_name, algorithm_description, is_default from v$rman_encryption_algorithms;
    
          ALGORITHM_ID ALGORITHM_NAME  ALGORITHM_DESCR  IS_DEFAULT
          -----------  --------------  ---------------  ----------
          1             AES128          AES 128-bit key  YES
          2             AES192          AES 192-bit key  NO
          3             AES256          AES 256-bit key  NO
    

    Pour modifier l'algorithme par défaut, procédez comme suit :

     RMAN> CONFIGURE ENCRYPTION ALGORITHM 'AES256';
           using target database control file instead of recovery catalog
           new RMAN configuration parameters:
              CONFIGURE ENCRYPTION ALGORITHM 'AES256';
           new RMAN configuration parameters are successfully stored
    

    Effectuez une sauvegarde chiffrée en utilisant la commande de sauvegarde RMAN normale. Exemple :

     RMAN> backup tablespace users;
    

    Pour restaurer la sauvegarde à l'aide du mot de passe de chiffrement :

    RMAN> set decryption identified by <password>;
    RMAN> restore tablespace users;
    

Remarques importantes

  • Si les clés de déchiffrement requises sont disponibles, les sauvegardes chiffrées sont déchiffrées automatiquement lors de la restauration et de la récupération. Chaque ensemble de sauvegarde reçoit une clé distincte. La clé est stockée sous forme chiffrée dans l'espace de sauvegarde. La sauvegarde est déchiffrée à l'aide de clés obtenues grâce à un mot de passe fourni par l'utilisateur ou par le keystore logiciel Oracle.

  • Le chiffrement transparent des sauvegardes est compatible à la fois avec le keystore logiciel à connexion automatique et avec le keystore logiciel basé sur un mot de passe. Lorsque vous utilisez le keystore logiciel à connexion automatique, les opérations de sauvegarde chiffrées peuvent être effectuées à tout moment car le keystore à connexion automatique est toujours ouvert. Lorsque vous utilisez le keystore logiciel basé sur un mot de passe, celui-ci doit être ouvert pour pouvoir effectuer le chiffrement de la sauvegarde.

  • Si vous utilisez un keystore à connexion automatique, ne le sauvegardez pas avec vos données de sauvegarde chiffrées car les utilisateurs peuvent lire les sauvegardes chiffrées s'ils ont un accès simultané aux sauvegardes et au keystore à connexion automatique. Vous pouvez cependant effectuer une sauvegarde du keystore Oracle en toute sécurité car cette forme du keystore ne peut pas être utilisée sans le mot de passe du keystore.

  • Si certaines colonnes de la base de données sont chiffrées avec le chiffrement transparent des colonnes (TDE) et que ces mêmes colonnes sont sauvegardées en utilisant le chiffrement des sauvegardes, elles seront chiffrées une seconde fois au moment de la sauvegarde. Lorsque les ensembles de sauvegarde sont déchiffrés lors d'une opération de restauration, les colonnes chiffrées sont renvoyées à leur forme chiffrée d'origine.

  • Si vous perdez votre keystore Oracle, vous ne pourrez pas restaurer les sauvegardes chiffrées de manière transparente. De plus, si vous oubliez ou perdez le mot de passe que vous avez utilisé pour une sauvegarde chiffrée par mot de passe, vous ne pourrez pas restaurer la sauvegarde.