IBM Cloud Docs
Usando Hyper Protect Crypto Services PKCS #11 para Oracle Transparent Database Encryption

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.

Criptografia de banco de dados transparente usando a API PKCS #11 padrão
Figura 1. Transparent Database Encryption usando a API PKCS #11 padrão

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:

  1. Inicialize sua instância Hyper Protect Crypto Services.
  2. Configure a biblioteca Hyper Protect Crypto Services do PKCS n° 11 em seu ambiente Oracle Database.
  3. 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

  1. 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.

  2. 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"
    
  3. 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.

  1. 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.

  2. 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

  1. Faça download da biblioteca PKCS #11 mais recente.

  2. Copie o arquivo de configuração criado grep11client.yaml e a biblioteca PKCS #11 pkcs11-grep11-<platform>.so.<version> para a pasta inicial em seu contêiner Oracle Database.

  3. 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

  1. Instale o utilitário de linha de comandos OpenSC (pkcs11-tool) com o comando a seguir:

    sudo yum install opensc
    
  2. 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

  1. 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.

  2. 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.

  1. 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.

  2. 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;
    
  3. 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;
    
  4. 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);
    
  5. 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;
    
  6. 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.