Implementa y administra la encriptación transparente de datos (TDE) de Oracle en la solución Bare Metal

En esta página, se describe cómo implementar la encriptación transparente de datos (TDE) de Oracle Advanced Security y cómo administrar las claves y la solución Oracle Wallet en una solución Bare Metal.

Descripción general

La TDE de Oracle Advanced Security encripta con transparencia los datos en reposo en las bases de datos de Oracle y evita el acceso no autorizado a los archivos de la base de datos. La TDE puede encriptar copias de seguridad de bases de datos completas (RMAN) y exportaciones de volcados de datos, así como espacios de tablas y columnas específicos.

Cómo funciona la encriptación transparente de datos

La TDE crea y administra varias claves que se usan para la encriptación. Estas claves deben estar protegidas porque si un atacante obtiene datos encriptados y claves coincidentes puede desencriptar con facilidad y ver datos claros.

La TDE tiene una arquitectura de claves de dos niveles, con claves de encriptación de datos unidas por una sola clave maestra de base de datos. La clave maestra está separada de los datos encriptados, almacenada fuera de la base de datos, que puede ser una cartera de almacén de claves de software de Oracle o un almacén de claves del módulo de seguridad de hardware (HSM), y la administra directamente el administrador de seguridad de la base de datos en un almacén de claves.

Hay dos opciones de almacén de claves disponibles para que la TDE admita diversos entornos de clientes. De forma predeterminada, la TDE almacena su clave maestra en una Oracle Wallet, un archivo de almacenamiento de claves basado en estándares PKCS#12. Las carteras proporcionan una solución fácil para una pequeña cantidad de bases de datos encriptadas.

Habilita la TDE para la base de datos 11g de Oracle en el servidor de la solución Bare Metal:

Puedes realizar operaciones de encriptación a nivel de columna y de espacio de tabla. También puedes aplicar la TDE a las copias de seguridad de RMAN.

Habilitar requisitos previos de TDE

Para preparar tu base de datos, configura un almacén de claves (Oracle Wallet para 11g) y crea una clave maestra inicial.

Configura Oracle Wallet en el servidor de solución Bare Metal

  • Conéctate a uno de los servidores de la solución Bare Metal desde una máquina jump host o bastion en el proyecto.

        $ ssh customeradmin@192.168.1.10
        $ su - oracle
    
  • Configura la variable de entorno.

    [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
    
  • Conéctate como sysdba.

    [oracle@svr002 ~]$ sqlplus / as sysdba
    
  • Asegúrate de que todas las variables de entorno siguientes estén configuradas correctamente.

    $ echo $ORACLE_HOME
    $ echo $ORACLE_BASE
    $ echo $DB_UNIQUE_NAME
    
  • Crea un directorio nuevo para los archivos de Wallet.

    $ mkdir -p $ORACLE_BASE/admin/DB11G/wallet
    
  • Usa la utilidad orapki para crear la wallet y habilitar el acceso automático, de modo que no necesitamos habilitar la wallet en los reinicios.

    $ orapki wallet create -wallet $ORACLE_BASE/admin/DB11G/wallet -auto_login -pwd Oracle2020
    
  • Oracle usa las rutas predeterminadas para la wallet.

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

    Si no usas la ruta de acceso predeterminada, debes configurar tu ruta alternativa en el archivo sqlnet.ora. Debes configurar cualquiera de estos parámetros: ENCRYPTION_WALLET_LOCATION o WALLET_LOCATION.

    Sigue estos pasos para encontrar la ruta de la wallet:

    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
    
  • Para configurar la ruta de acceso de la wallet en el archivo sqlnet.ora, haz lo siguiente:

    $ 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))
    
  • Agrega un nombre de usuario y una contraseña a la wallet. Para agregar un nombre de usuario y una contraseña a una wallet existente, usa el comando mkstore con la opción -createCredential de la siguiente manera:

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

    Puedes acceder con testuser@SID sin ingresar la contraseña.

  • Crea una clave maestra inicial.

    SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY Oracle2020;
    

    Verifica que el estado de la wallet sea 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
    
  • Para abrir y cerrar la cartera, sigue estos pasos:

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

Habilita la TDE a nivel del espacio de tabla

Puedes realizar operaciones de encriptación con la instrucción CREATE TABLESPACE SQL.

Encripta nuevos espacios de tabla

Cuando creas un espacio de tabla nuevo, puedes establecer su configuración de encriptación durante el proceso de creación.

  1. Asegúrate de que el parámetro de inicialización COMPATIBLE para la encriptación del espacio de tabla sea 11.2.0.0 o superior

    SQL> SHOW PARAMETER COMPATIBLE
    
         NAME        TYPE     VALUE
         ----        ----     ------
         compatible  string   11.2.0.4.0
    
  2. Asegúrate de haber configurado la clave maestra de encriptación de la TDE. Puedes verificarla en Crea una clave maestra inicial en la sección Requisitos previos.

  3. Crea el espacio de tabla encriptado

    Para verificar la ruta del archivo de datos, usa lo siguiente:

    SQL> select * from dba_data_files ;
    

    Ejecuta la instrucción CREATE TABLESPACE con sus cláusulas de encriptación

      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 especifica el algoritmo de encriptación y la longitud de clave para la encriptación. La cláusula ENCRYPT encripta el espacio de tabla.

    Si se omite la cláusula USING, el algoritmo de encriptación se configurará de forma predeterminada como “AES128”. Además, se debe especificar la cláusula de almacenamiento predeterminada de ENCRYPT. Además, puedes establecer el parámetro dinámico TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM a fin de definir el algoritmo de encriptación predeterminado para futuras operaciones de creación de espacios de tabla mediante la declaración ALTER SYSTEM:

      sql> ALTER SYSTEM SET TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM = value;
    

    El valor puede ser uno de los siguientes algoritmos de encriptación: AES128, AES192, AES256, 3DES168, ARIA128, ARIA192, ARIA256, SEED128 y GOST256. El valor predeterminado es AES128.

    De manera alternativa, puedes establecer TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM como un parámetro de inicialización en el archivo init.ora.

    Para comprobar si la encriptación del espacio de tabla está configurada o no, puedes verificar la columna ENCRYPTED de las vistas DBA_TABLESPACES y USER_TABLESPACES, que indica si el espacio de tabla está encriptado o no.

    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. Encriptación de prueba

    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
    

    Vacía la caché del búfer para asegurarte de que los datos se escriban en el archivo de datos.

      SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;
    

    Lee los datos dentro del archivo de datos con el comando de strings.

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

    Los datos se muestran en formato binario.

Habilita la TDE a nivel de la columna de la tabla

La encriptación de columnas TDE se puede usar para encriptar datos específicos de columnas en tablas de bases de datos que son confidenciales, como números de tarjetas de crédito, números de seguridad social (NSS) y números de cuentas personales (PAN).

  1. Crea una tabla con una columna encriptada

    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 es una forma de reforzar la seguridad de los datos encriptados. Es una string aleatoria que se agrega a los datos antes de que se encripten, lo que hace que la repetición de texto sin encriptar aparezca diferente cuando se encripte. SALT quita un método que los atacantes usan para robar datos, que corresponde a los patrones coincidentes de texto encriptado. Puedes usar el parámetro SALT o NO SALT especificado con la cláusula ENCRYPT.

    Puedes usar el comando ALTER TABLE para encriptar las columnas de una tabla existente si agregas una columna encriptada o si encriptas una columna existente.

    Para agregar una columna encriptada a una tabla existente en la base de datos:

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

    Para encriptar una columna existente en una tabla de la base de datos:

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

    Para agregar SALT a una columna encriptada en una tabla de la base de datos:

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

    Para desencriptar una columna existente en una tabla de la base de datos:

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

    Para quitar SALT de una columna encriptada en una tabla de la base de datos:

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

    Para cambiar la clave encriptada de la tabla que contiene una o más columnas encriptadas:

    SQL> ALTER TABLE employee rekey;
    Table altered.
    

    Para cambiar el algoritmo de encriptación de la tabla que contiene una o más columnas encriptadas:

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

Encripta espacios de tabla futuros

Puedes configurar la base de datos de Oracle para encriptar de forma automática los espacios de tabla futuros que crearás mediante el parámetro de inicialización de la base de datos ENCRYPT_NEW_TABLESPACES.

Usa el siguiente comando de ALTER SYSTEM:

SQL> ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES=value;

El valor puede ser:

  • ALWAYS encripta de forma automática el espacio de tabla mediante el algoritmo AES128, o el algoritmo especificado por el parámetro dinámico TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM, si omites la cláusula ENCRYPTION de CREATE TABLESPACE para situaciones locales y en la nube. Sin embargo, si proporcionas la cláusula ENCRYPTION, el algoritmo que especificas tiene prioridad sobre AES128.

  • DDL encripta el espacio de tabla con la configuración especificada de la cláusula ENCRYPTION de CREATE TABLESPACE, para los entornos de nube y locales.

  • CLOUD_ONLY (no aplicable en nuestro caso de uso) se aplica solo a un entorno de Oracle Cloud. CLOUD_ONLY es el valor predeterminado.

¿Encriptación de espacio de tabla de TDE o encriptación de columna de TDE?

ELEGIR LA ENCRIPTACIÓN DE COLUMNAS TDE SI ELEGIR LA ENCRIPTACIÓN DE ESPACIO DE TABLA DE TDE SI
Se conoce la ubicación de la información sensible Se desconoce la ubicación de la información sensible
Menos del 5% de todas las columnas de la aplicación son candidatas para la encriptación La mayoría de los datos de la aplicación se consideran sensibles o se aplican varios mandatos de seguridad y privacidad nacionales e internacionales a tu industria.
La encriptación de columnas de TDE admite la longitud y el tipo de datos La encriptación de columnas de TDE no admite todos los tipos de datos que contienen información sensible
Los candidatos para la encriptación no son columnas de clave externa Los candidatos para la encriptación son columnas de clave externa
Los índices sobre los candidatos para la encriptación son índices de árbol B normales. Los índices de los candidatos para la encriptación son índices funcionales
La aplicación no realiza análisis de rango en datos encriptados La aplicación busca rangos de datos sensibles
Aumento del almacenamiento de 1 a 52 bytes por valor encriptado No se acepta el aumento de almacenamiento
El impacto en el rendimiento depende del porcentaje de columnas encriptadas, de la frecuencia con la que se seleccionan o actualizan los valores encriptados, del tamaño de los datos encriptados y de otras variables Impacto constante en el rendimiento por debajo del 10%
Si deseas beneficiarte de la aceleración criptográfica de hardware
Si quieres disfrutar de los beneficios de la encriptación y la compresión al mismo tiempo.

Encriptación de copias de seguridad de RMAN

Los conjuntos de copias de seguridad se encriptan mediante un algoritmo enumerado en V$RMAN_ENCRYPTION_ALGORITHMS. RMAN puede encriptar con transparencia los datos escritos en conjuntos de copias de seguridad y desencriptarlos cuando son necesarios en una operación RESTORE. RMAN ofrece tres modos de encriptación: transparent, protegido con contraseña y modo doble.

  • Para usar la encriptación de modo transparente (predeterminado), se debe usar Oracle Encryption Wallet.

  • Para usar el modo de contraseña, el DBA debe proporcionar una contraseña, que se usará en la encriptación. Puedes configurar el modo de contraseña mediante SET ENCRYPTION ON IDENTIFIED BY password only.

  • Con la encriptación de modo doble, puedes usar Oracle Wallet o una contraseña para la desencriptación. Puedes configurar el modo doble mediante SET ENCRYPTION ON IDENTIFIED BY password.

Configura la encriptación de copia de seguridad de RMAN

  1. Configura Oracle Wallet

  2. Configura RMAN para usar la encriptación.

    Configura el modo de encriptación RMAN. En este ejemplo, se usa el modo doble. Para ello, conéctate a la base de datos de destino de RMAN y ejecuta el comando 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
    

    Conéctate a RMAN.

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

    SET ENCRYPTION anula la configuración de encriptación que especifica el comando CONFIGURE ENCRYPTION, que usa la encriptación transparente de forma predeterminada.

  3. Configura el algoritmo de encriptación de copias de seguridad predeterminado.

    Para ver una lista de los algoritmos de encriptación RMAN que se pueden obtener, consulta la vista 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
    

    Para cambiar el algoritmo predeterminado, haz lo siguiente:

     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
    

    Realiza una copia de seguridad encriptada con el comando de copia de seguridad normal de RMAN. Por ejemplo:

     RMAN> backup tablespace users;
    

    Para restablecer la copia de seguridad con la contraseña de encriptación, haz lo siguiente:

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

Notas importantes

  • Si las claves de desencriptación necesarias están disponibles, las copias de seguridad encriptadas se desencriptan de forma automática durante el restablecimiento y la recuperación. Cada conjunto de copias de seguridad obtiene una clave diferente. La clave se almacena en el formato encriptado en el espacio de la copia de seguridad. La copia de seguridad se desencripta con claves que se obtienen con una contraseña proporcionada por el usuario o el almacén de claves de software de Oracle.

  • La encriptación de copia de seguridad transparente admite el almacén de claves de software de acceso automático y basado en contraseñas. Cuando usas el almacén de claves de software de acceso automático, las operaciones de copia de seguridad encriptadas se pueden ejecutar en cualquier momento, ya que el almacén de claves de acceso automático siempre está abierto. Cuando usas el almacén de claves de software basado en contraseñas, este debe abrirse antes de poder encriptar copias de seguridad.

  • Si usas un almacén de claves de acceso automático, no lo incluyas en una copia de seguridad junto con los datos de copia de seguridad encriptada, ya que los usuarios pueden leer las copias de seguridad encriptadas si obtienen las copias de seguridad y el almacén de claves de acceso automático. Es seguro crear una copia de seguridad del almacén de claves de Oracle porque esa forma del almacén de claves no se puede usar sin la contraseña del almacén.

  • Si algunas columnas de la base de datos se encriptan con encriptación transparentes de datos (TDE) de columnas y si se crean copias de seguridad de esas columnas con encriptación de copias de seguridad, esas columnas se encriptan por segunda vez durante la copia de seguridad. Cuando los conjuntos de copias de seguridad se desencriptan durante una operación de restablecimiento, las columnas encriptadas se muestran en su forma encriptada original.

  • Si pierdes el almacén de claves de Oracle, no podrás restablecer ninguna copia de seguridad encriptada de manera transparente. Además, si olvidas o pierdes la contraseña que usaste para encriptar una copia de seguridad encriptada con contraseña, no puedes restablecer la copia de seguridad.