Usando Hyper Protect Crypto Services PKCS #11 para Oracle Transparent Database Encryption
Transparent Data Encryption (TDE) é uma tecnologia bem estabelecida para criptografar dados sensíveis em bancos de dados. O TDE é suportado por vários sistemas populares de banco de dados, tanto na nuvem quanto no local, como o banco de dados Oracle®. Com o TDE, um sistema de banco de dados criptografa dados em mídia de armazenamento de banco de dados, como espaços e arquivos de tabela e em mídia de backup. O sistema de banco de dados criptografa e decriptografa dados automaticamente e transparentemente quando ele é usado por usuários e aplicativos autorizados. Os usuários do banco de dados não precisam estar cientes do TDE e os aplicativos de banco de dados não precisam ser adaptados especificamente para o TDE.
Geralmente, o TDE usa uma hierarquia de chaves de duas camadas, que é composta por uma chave mestra de criptografia do TDE e uma chave de criptografia de dados do TDE. A chave de criptografia de dados do TDE é usada para criptografar e decriptografar dados, enquanto a chave mestra de criptografia do TDE é usada para criptografar e decriptografar a chave de criptografia de dados do TDE.
Por isso, uma questão importante ao planejar o TED é: Onde você mantém a chave mestra de criptografia do TDE e como você a protege?
Objetivos
Este tutorial mostra como é possível manter o controle completo e exclusivo de suas chaves mestras de criptografia do TDE ao armazená-las nos IBM Cloud® Hyper Protect Crypto Services. Para esse propósito, é necessário usar o recurso de integração do PKCS n.º 11 do Hyper Protect Crypto Services.
Com este tutorial, você implementará a configuração que está representada na ilustração a seguir.
Nesta configuração, o Oracle Database chamará operações para gerenciar as chaves mestras de criptografia do TDE na biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services. A biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services interage com a sua instância dos Hyper Protect Crypto Services, que fornece o melhor da tecnologia de classe para armazenamento e gerenciamento de suas chaves mestra de criptografia do TDE.
Antes de Iniciar
Para concluir este tutorial, é necessário atender aos pré-requisitos a seguir:
Fluxo de tarefas
Para concluir esta solução, vamos prosseguir pelas etapas a seguir:
- Inicialize sua instância Hyper Protect Crypto Services.
- Configure a biblioteca Hyper Protect Crypto Services do PKCS n° 11 em seu ambiente Oracle Database.
- Configure o TDE do Oracle Database e criptografe seus dados.
Vamos começar com o processo de inicialização da instância dos Hyper Protect Crypto Services.
Inicialize a sua instância do Hyper Protect Crypto Services
-
Para este tutorial, é necessário inicializar uma instância do Hyper Protect Crypto Services primeiro.
Anote o ID de sua instância do Hyper Protect Crypto Services e o endereço de terminal EP11. Essas informações serão necessárias para as etapas subsequentes.
-
Gere uma chave de API para acessar a sua instância do Hyper Protect Crypto Services. Execute o comando a seguir para criar uma chave de API para a sua conta da IBM Cloud:
ibmcloud iam api-key-create apikeyhpcs -d "API key for Hyper Protect Crypto Services PKCS11"
-
Salve o valor da chave de API para etapas subsequentes.
Configurar a biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services em seu ambiente Oracle Database
1. Configurar o Oracle Database
É necessária uma instalação do Oracle Database Enterprise Edition com o Oracle Advanced Security. Este tutorial usa um contêiner de instância única do Oracle Database 19.3 Enterprise Edition Docker. Para obter mais informações sobre contêineres do Oracle Database e instruções sobre como construir um respectivo contêiner, consulte Oracle Database no Docker.
-
Inicie o contêiner do Oracle Database:
docker run --name oradb -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=password oracle/database:19.3.0-ee
Aguarde até que a criação da instância e do banco de dados seja concluída.
-
Execute o comando a seguir por meio de uma linha de comandos em seu sistema host:
docker exec -it --user root --workdir / oradb bash
Este shell pode ser usado para executar os comandos, como
root
, para as etapas subsequentes.
2. Configurar a biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services
Agora crie um arquivo de configuração para o recurso PKCS n.º 11 dos Hyper Protect Crypto Services. O arquivo de configuração é denominado grep11client.yaml
.
Adapte o modelo de arquivo a seguir e nomeie o arquivo grep11client.yaml
:
- Substitua
<instance_ID>
pelo ID de sua instância do Hyper Protect Crypto Services. - Substitua
<EP11_endpoint_URL>
e<EP11_endpoint_port_number>
pelos respectivos parâmetros do endereço de terminal EP11 de sua instância do Hyper Protect Crypto Services. - Substitua
<your_api_key>
pelo valor da chave de API que você criou.
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. Instale a biblioteca do PKCS n.º 11 do Hyper Protect Crypto Services
-
Copie o arquivo de configuração criado
grep11client.yaml
e a biblioteca PKCS #11pkcs11-grep11-<platform>.so.<version>
para a pasta inicial em seu contêiner Oracle Database. -
Execute os comandos a seguir como
root
para instalar a biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services em sua configuração do 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
O diretório /opt/oracle/extapi/64/hsm
e os subdiretórios podem conter apenas um arquivo de biblioteca. Remova todos os outros arquivos de biblioteca que existem naquele diretório e nos subdiretórios.
4. Verificar a configuração da biblioteca
-
Instale o utilitário de linha de comandos OpenSC (pkcs11-tool) com o comando a seguir:
sudo yum install opensc
-
Execute o comando a seguir como
root
para verificar a configuração da biblioteca:pkcs11-tool --module=/opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so -I
Este comando imprime informações sobre o fabricante e a biblioteca, por exemplo:
Cryptoki version 2.40 Manufacturer IBM ... Library GREP11 PKCS11 client ...
5. Inicialize a biblioteca PKCS #11 do Hyper Protect Crypto Services
-
Execute o comando a seguir por meio de uma linha de comandos em seu sistema host:
docker exec -it oradb bash
Este shell pode ser usado para executar os comandos como usuário
oracle
para as etapas subsequentes. -
Para inicializar um token, execute os comandos a seguir e substitua
<your_api_key>
pela chave de API que você criou.pkcs11-tool --module /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so --init-token --label dbtoken --so-pin=<your_api_key>
Esse comando imprime a mensagem de status a seguir, por exemplo:
Using slot 0 with a present token (0x0) Token successfully initialized
Configure o TDE do Oracle Database e criptografe seus dados
Agora, vamos assumir a função do administrador do banco de dados.
-
Atualize o arquivo 'sqlnet.ora' no diretório '$ORACLE_HOME/network/admin', incluindo a linha:
encryption_wallet_location=(source=(method=hsm))
Para isso, é possível, por exemplo, executar o comando a seguir:
echo "encryption_wallet_location=(source=(method=hsm))" >> $ORACLE_HOME/network/admin/sqlnet.ora
Certifique-se de que o arquivo 'sqlnet.ora' não contenha outra configuração para
encryption_wallet_location
. -
Abra o keystore com o comando a seguir. Substitua
<your_api_key>
pela chave de API que você criou: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;
-
Crie as chaves mestras com o comando a seguir. Substitua
<your_api_key>
pela chave de API que você criou:SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<your_api_key>" WITH BACKUP CONTAINER=ALL;
-
Crie um espaço de tabela criptografado com o comando a seguir:
SQL> CREATE TABLESPACE encrypted_ts DATAFILE 'tbs1_data.dbf' SIZE 128K AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
-
Para verificar a configuração, é possível criar uma tabela no espaço de tabela criptografado e inserir alguns dados de teste:
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;
-
Também é possível criar uma tabela com uma coluna criptografada e inserir alguns dados de teste:
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óximas etapas
Seus dados sensíveis agora estão armazenados com segurança em espaços de tabelas criptografados e colunas criptografadas. Além disso, a chave mestra de criptografia do TDE é mantida nos Hyper Protect Crypto Services de uma maneira altamente segura e à prova de violação.
Neste tutorial, você aprendeu a configurar o Oracle Database TDE com Hyper Protect Crypto Services.
- Saiba mais sobre PKCS n.º 11.
- Saiba mais sobre a API PKCS n.º 11.
- Comece a usar a API PKCS n.º 11.