Utilización de Hyper Protect Crypto Services PKCS #11 para Oracle Transparent Database Encryption
Transparent Data Encryption (TDE) es una tecnología bien establecida para cifrar los datos confidenciales en los bases de datos. TDE es compatible con varios sistemas de bases de datos populares, tanto en la nube como en el entorno local, por ejemplo, la base de datos Oracle®. Con TDE, un sistema de base de datos cifra los datos en soportes de almacenamiento de base de datos, tales como espacios de tabla y archivos, y en soportes de copia de seguridad. El sistema de base de datos cifra y descifra de manera automática y transparente los datos cuando lo utilizan los usuarios y las aplicaciones autorizadas. No es necesario que los usuarios de las bases de datos conozcan TDE y no es necesario que las aplicaciones de las bases de datos se adapten específicamente para TDE.
Normalmente, TDE utiliza una jerarquía de claves de dos niveles, que consta de una clave de cifrado maestra de TDE y una clave de cifrado de datos de TDE. La clave de cifrado de datos de TDE se utiliza para cifrar y descifrar datos, mientras que la clave de cifrado maestra de TDE se utiliza para cifrar y descifrar la clave de cifrado de datos de TDE.
Por lo tanto, una pregunta importante cuando planifica el uso de TDE es: ¿Dónde guarda la clave de cifrado maestra de TDE y cómo la protege?
Objetivos
Esta guía de aprendizaje muestra cómo puede mantener un control completo y exclusivo de las claves de cifrado maestro de TDE almacenándolas en IBM Cloud® Hyper Protect Crypto Services. Para ello, debe utilizar la característica de integración de PKCS #11 de Hyper Protect Crypto Services.
Con esta guía de aprendizaje, va a implementar la configuración que se muestra en la siguiente ilustración.
En esta configuración, la Oracle Database llamará a operaciones para gestionar las claves de cifrado maestro de TDE en la biblioteca de PKCS #11 de Hyper Protect Crypto Services. La biblioteca de PKCS #11 de Hyper Protect Crypto Services interactúa con su instancia de Hyper Protect Crypto Services, que proporciona la mejor tecnología de clase para almacenar y gestionar las claves de cifrado maestro de TDE.
Antes de empezar
Para completar esta guía de aprendizaje, debe cumplir los requisitos previos siguientes:
Flujo de tareas
Para completar esta solución, haremos un recorrido por los pasos siguientes:
- Inicialice su instancia de Hyper Protect Crypto Services.
- Configure la biblioteca PKCS #11 de Hyper Protect Crypto Services en el entorno de base de datos de Oracle.
- Configure TDE de base de datos de Oracle y cifre sus datos.
Comencemos con el proceso de inicialización de instancia de Hyper Protect Crypto Services.
Inicializar la instancia de Hyper Protect Crypto Services
-
Para esta guía de aprendizaje, necesita inicializar una instancia de Hyper Protect Crypto Services primero.
Anote el ID de la instancia de la instancia de Hyper Protect Crypto Services y la dirección de punto final de EP11. Necesita esta información para los pasos siguientes.
-
Generar una clave de API para acceder a la instancia de Hyper Protect Crypto Services. Ejecute el siguiente mandato para crear una API para la cuenta de IBM Cloud:
ibmcloud iam api-key-create apikeyhpcs -d "API key for Hyper Protect Crypto Services PKCS11" -
Guardar el valor de la clave de API para los pasos siguientes.
Configurar la biblioteca de PKCS #11 de Hyper Protect Crypto Services en el entorno de Oracle Database
1. Configurar Oracle Database
Necesita una instalación de Oracle Database Enterprise Edition con Oracle Advanced Security. Esta guía de aprendizaje utiliza un solo contenedor Docker de instancia de Oracle Database 19.3 Enterprise Edition. Para obtener más información sobre los contenedores de Oracle Database e instrucciones sobre cómo crear un contenedor respectivo, consulte Oracle Database en Docker.
-
Inicie el contenedor de Oracle Database:
docker run --name oradb -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=password oracle/database:19.3.0-eeEspere hasta que se haya completado la creación de la base de datos y la instancia.
-
Ejecute el mandato siguiente desde una línea de mandatos del sistema host:
docker exec -it --user root --workdir / oradb bashEste shell se puede utilizar para ejecutar los mandatos como
rootpara los pasos siguientes.
2. Configurar la biblioteca de PKCS #11 de Hyper Protect Crypto Services
Ahora cree un archivo de configuración para la característica de PKCS #11 de Hyper Protect Crypto Services. El archivo de configuración se denomina grep11client.yaml.
Adapte la siguiente plantilla de archivo y asigne un nombre al archivo grep11client.yaml:
- Sustituya
<instance_ID>por el ID de la instancia de Hyper Protect Crypto Services. - Sustituya
<EP11_endpoint_URL>y<EP11_endpoint_port_number>por los parámetros respectivos de la dirección de punto final de EP11 de la instancia de Hyper Protect Crypto Services. - Sustituya
<your_api_key>por el valor de la clave de API que ha creado.
iamcredentialtemplate: &defaultiamcredential
enabled: true
endpoint: "https://iam.cloud.ibm.com"
# Keep the 'apikey' empty. It will be overridden by the Anonymous user API key configured later.
apikey:
# The Universally Unique IDentifier (UUID) of your Hyper Protect Crypto Services instance.
instance: "<instance_ID>"
tokens:
0:
grep11connection:
# The EP11 endpoint address starting from 'ep11'.
# For example: "<instance_ID>.ep11.us-south.hs-crypto.appdomain.cloud"
address: "<EP11_endpoint_URL>"
# The EP11 endpoint port number
port: "<EP11_endpoint_port_number>"
tls:
# Grep11 requires TLS connection.
enabled: true
# Grep11 requires server only authentication, so 'mutual' needs to be set as 'false'.
mutual: false
# 'cacert' is a full-path certificate file.
# In Linux with the 'ca-ca-certificates' package installed, this is normally not needed.
cacert:
# Grep11 requires the server-only authentication, so 'certfile' and 'keyfile' need to be empty.
certfile:
keyfile:
storage:
filestore:
enabled: false
storagepath:
# 'remotestore' needs to be enabled if you want to generate keys with the attribute CKA_TOKEN.
remotestore:
enabled: true
users:
0: # The index of the Security Officer (SO) user MUST be 0.
# The name for the Security Officer (SO) user. For example: "Administrator".
# NEVER put the API key under the SO user for security reasons.
name: "Administrator"
iamauth:
<<: *defaultiamcredential
1: # The index of the normal user MUST be 1.
# The name for the normal user. For example: "Normal user".
# NEVER put the API key under the normal user for security reasons.
name: "Normal user"
# The Space ID is a 128-bit UUID and can be chosen freely.
# The UUID can be generated by third-party tools, such as 'https://www.uuidgenerator.net/'.
# For example: "f00db2f1-4421-4032-a505-465bedfa845b".
# 'tokenspaceID' under the normal user is to identify the private keystore.
tokenspaceID: "f00db2f1-4421-4032-a505-465bedfa845b"
iamauth:
<<: *defaultiamcredential
2: # The index of the anonymous user MUST be 2.
# The name for the anonymous user. For example: "Anonymous".
name: "Anonymous"
# The Space ID is a 128-bit UUID and can be chosen freely.
# The UUID can be generated by third-party tools, such as 'https://www.uuidgenerator.net/'.
# For example: "ca22be26-b798-4fdf-8c83-3e3a492dc215".
# 'tokenspaceID' under the anonymous user is to identify the public keystore.
tokenspaceID: "ca22be26-b798-4fdf-8c83-3e3a492dc215"
iamauth:
<<: *defaultiamcredential
# This API key for the Anonymous user must be provided.
# It will overide the 'apikey' in the previous defaultcredentials.iamauth.apikey field
apikey: "<your_api_key>"
logging:
# Set the logging level.
# The supported levels, in an increasing order of verboseness, are:
# 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'.
# The Default value is 'debug'.
loglevel: debug
# The full path of your logging file.
# For example: /tmp/grep11client.log
logpath: /tmp/grep11client.log
3. Instalar la biblioteca de PKCS #11 de Hyper Protect Crypto Services
-
Copie el archivo de configuración creado
grep11client.yamly la biblioteca PKCS #11pkcs11-grep11-<platform>.so.<version>en la carpeta de inicio del contenedor Oracle Database. -
Ejecute los siguientes mandatos como usuario
rootpara instalar la biblioteca de PKCS #11 de Hyper Protect Crypto Services en la configuración de Oracle Database.mkdir /etc/ep11client chmod a+rx /etc/ep11client/ cp grep11client.yaml /etc/ep11client/grep11client.yaml chmod a+r /etc/ep11client/grep11client.yaml mkdir -p /opt/oracle/extapi/64/hsm/ibm cp pkcs11-grep11.so.1.1.3 /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so chown -R oracle:oinstall /opt/oracle/extapi touch /tmp/grep11client.log chmod a+rw /tmp/grep11client.log chown oracle:oinstall /tmp/grep11client.log
El directorio /opt/oracle/extapi/64/hsm y los subdirectorios solo pueden contener un archivo de biblioteca. Elimine cualquier otro archivo de biblioteca que exista en dicho directorio y los subdirectorios.
4. Comprobar la configuración de la biblioteca
-
Instale el programa de utilidad de línea de mandatos OpenSC (pkcs11-tool) con el mandato siguiente:
sudo yum install opensc -
Ejecute el mandato siguiente como usuario
rootpara comprobar la configuración de la biblioteca:pkcs11-tool --module=/opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so -IEste mandato imprime información sobre el fabricante y la biblioteca, por ejemplo:
Cryptoki version 2.40 Manufacturer IBM ... Library GREP11 PKCS11 client ...
5. Inicializar la biblioteca Hyper Protect Crypto Services PKCS #11
-
Ejecute el mandato siguiente desde una línea de mandatos del sistema host:
docker exec -it oradb bashEste shell se puede utilizar para ejecutar los mandatos como usuario
oraclepara los pasos siguientes. -
Para inicializar una señal, ejecute los mandatos siguientes y sustituya
<your_api_key>por la clave de API que ha creado.pkcs11-tool --module /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so --init-token --label dbtoken --so-pin=<your_api_key>Este mandato imprime el siguiente mensaje de estado, por ejemplo:
Using slot 0 with a present token (0x0) Token successfully initialized
Configure el TDE de Oracle Database y cifre los datos
Ahora vamos a asumir el rol del administrador de la base de datos.
-
Actualice el archivo 'sqlnet.ora' en el directorio '$ORACLE_HOME/network/admin' añadiendo la línea:
encryption_wallet_location=(source=(method=hsm))Para ello, puede ejecutar por ejemplo el mandato siguiente:
echo "encryption_wallet_location=(source=(method=hsm))" >> $ORACLE_HOME/network/admin/sqlnet.oraAsegúrese de que el archivo 'sqlnet.ora' no contiene otro valor para
encryption_wallet_location. -
Abra el almacén de claves con el siguiente mandato. Sustituya
<your_api_key>por la clave de API que ha creado:export ORACLE_SID=<your SID, e.g. ORCLCDB> sqlplus / as sysdba SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<your_api_key>" CONTAINER=ALL; -
Cree las claves maestras con el siguiente mandato. Sustituya
<your_api_key>por la clave de API que ha creado:SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<your_api_key>" WITH BACKUP CONTAINER=ALL; -
crear un espacio de tabla cifrado con el mandato siguiente:
SQL> CREATE TABLESPACE encrypted_ts DATAFILE 'tbs1_data.dbf' SIZE 128K AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT); -
Para verificar la configuración, puede crear una tabla en el espacio de tabla cifrado e insertar algunos datos de prueba:
SQL> CREATE TABLE tde_ts_test (id NUMBER(10), data VARCHAR2(50)) TABLESPACE encrypted_ts; SQL> INSERT INTO tde_ts_test VALUES (1, 'This is a secret!'); SQL> COMMIT; SQL> SELECT * FROM TDE_TS_TEST; -
También puede crear una tabla con una columna cifrada e insertar algunos datos de prueba:
SQL> CREATE USER C##test IDENTIFIED BY test; SQL> GRANT UNLIMITED TABLESPACE TO C##test; SQL> CREATE TABLE C##test.tde_test (id NUMBER(10), data VARCHAR2(50) ENCRYPT); SQL> INSERT INTO C##test.tde_test VALUES (1, 'This is also a secret!'); SQL> COMMIT; SQL> SELECT * FROM C##test.tde_test; # Verify encrypted tablespace and encrypted column SQL> SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES; SQL> SELECT * FROM dba_encrypted_columns ;
Próximos pasos
Sus datos confidenciales ahora se almacenan de forma segura en tablas cifradas y columnas cifradas. Y la clave de cifrado maestra de TDE se mantiene en Hyper Protect Crypto Services de una manera altamente segura y a prueba de manipulaciones.
En esta guía de aprendizaje, ha aprendido a configurar Oracle Database TDE con Hyper Protect Crypto Services.
- Obtenga más información sobre PKCS #11.
- Obtenga más información sobre la API de PKCS #11.
- Empiece a utilizar la API de PKCS #11.