Hyper Protect Crypto Services PKCS #11 für Oracle Transparent Database Encryption verwenden

Transparent Data Encryption (TDE) ist eine etablierte Technologie zur Verschlüsselung sensibler Daten in Datenbanken. TDE wird von verschiedenen gängigen Datenbanksystemen unterstützt, sowohl in der Cloud als auch lokal, wie z. B. Oracle®-Datenbank. Mit TDE verschlüsselt ein Datenbanksystem Daten auf Datenbankspeichermedien (wie z. B. Tabellenbereichen und Dateien) und auf Sicherungsdatenträgern. Das Datenbanksystem ver- und entschlüsselt Daten automatisch und transparent, wenn sie von berechtigten Benutzern und Anwendungen verwendet werden. Datenbankbenutzer brauchen TDE nicht zu beachten und Datenbankanwendungen müssen nicht speziell für TDE angepasst werden.

In der Regel verwendet TDE eine Schlüsselhierarchie mit zwei Ebenen, die sich aus einem TDE-Masterverschlüsselungsschlüssel und einem TDE-Datenverschlüsselungsschlüssel zusammensetzt. Der TDE-Datenverschlüsselungsschlüssel dient zur Ver- und Entschlüsselung von Daten, während der TDE-Masterverschlüsselungsschlüssel zur Ver- und Entschlüsselung des TDE-Datenverschlüsselungsschlüssels dient.

Daraus ergibt sich eine wichtige Frage, wenn Sie den Einsatz von TDE planen: Wo bewahren Sie den TDE-Masterverschlüsselungsschlüssel auf und wie schützen Sie ihn?

Ziele

Dieses Lernprogramm demonstriert, wie Sie vollständige und exklusive Kontrolle über Ihre TDE-Masterverschlüsselungsschlüssel behalten können, indem Sie sie in IBM Cloud® Hyper Protect Crypto Services speichern. Zu diesem Zweck müssen Sie die PKCS #11-Integrationsfunktion von Hyper Protect Crypto Services verwenden.

Mit diesem Lernprogramm werden Sie die Konfiguration einrichten, die in der folgenden Abbildung dargestellt wird.

Transparente Datenbankverschlüsselung unter Verwendung der Standard-PKCS #11 -API
Abbildung 1 Transparente Datenbankverschlüsselung mithilfe der Standard-PKCS #11-API

Diese Konfiguration sieht vor, dass die Oracle-Datenbank Operationen aufruft, um die TDE-Masterverschlüsselungsschlüssel in der PKCS #11-Bibliothek von Hyper Protect Crypto Services zu verwalten. Die PKCS #11-Bibliothek von Hyper Protect Crypto Services interagiert mit Ihrer Hyper Protect Crypto Services-Instanz, durch die eine führende Technologie zur Speicherung und Verwaltung von TDE-Masterverschlüsselungsschlüssel zur Verfügung gestellt wird.

Vorbereitende Schritte

Zum Durcharbeiten dieses Lernprogramms müssen Sie die folgenden Voraussetzungen erfüllen:

Ablauf

Führen Sie die folgenden Schritte aus, um diese Lösung zu implementieren:

  1. Initialisieren Sie Ihre Hyper Protect Crypto Services-Instanz.
  2. Hyper Protect Crypto Services-PKCS #11-Bibliothek in der Oracle-Datenbankumgebung einrichten
  3. Oracle Database TDE einrichten und Daten verschlüsseln.

Beginnen Sie mit dem Initialisierungsprozess für die Hyper Protect Crypto Services-Instanz.

Hyper Protect Crypto Services-Instanz initialisieren

  1. Für dieses Lernprogramm müssen Sie zunächst eine Hyper Protect Crypto Services-Instanz initialisieren.

    Notieren Sie die ID Ihrer Hyper Protect Crypto Services-Instanz und die EP11-Endpunktadresse. Sie benötigen diese Informationen für die nachfolgenden Schritte.

  2. Generieren Sie einen API-Schlüssel für den Zugriff auf Ihre Hyper Protect Crypto Services-Instanz. Führen Sie den folgenden Befehl aus, um einen API-Schlüssel für Ihr IBM Cloud-Konto zu erstellen:

    ibmcloud iam api-key-create apikeyhpcs -d "API key for Hyper Protect Crypto Services PKCS11"
    
  3. Speichern Sie den Wert des API-Schlüssels für nachfolgende Schritte.

Hyper Protect Crypto Services-PKCS #11-Bibliothek in der Oracle Database-Umgebung einrichten

1. Oracle Database einrichten

Sie benötigen eine Oracle Database Enterprise Edition-Installation mit Oracle Advanced Security. In diesem Lernprogramm wird ein Oracle Database 19.3 Enterprise Edition Docker-Container mit einer Instanz verwendet. Weitere Informationen zu Oracle Database-Containern und Anweisungen zum Erstellen eines entsprechenden Containers finden Sie unter Oracle Database in Docker.

  1. Starten Sie den Oracle Database-Container:

    docker run --name oradb -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=password oracle/database:19.3.0-ee
    

    Warten Sie ab, bis die Instanz- und Datenbankerstellung abgeschlossen ist.

  2. Führen Sie den folgenden Befehl über eine Befehlszeile auf Ihrem Hostsystem aus:

    docker exec -it --user root --workdir / oradb bash
    

    Diese Shell kann für die Ausführung der Befehle als root für die nachfolgenden Schritte verwendet werden.

2. Hyper Protect Crypto Services-PKCS #11-Bibliothek konfigurieren

Erstellen Sie nun eine Konfigurationsdatei für das PKCS #11-Feature von Hyper Protect Crypto Services. Die Konfigurationsdatei hat den Namen grep11client.yaml.

Passen Sie die folgende Dateivorlage an und geben Sie der Datei den Namen grep11client.yaml:

  • Ersetzen Sie <instance_ID> durch die ID Ihrer Hyper Protect Crypto Services-Instanz.
  • Ersetzen Sie <EP11_endpoint_URL> und <EP11_endpoint_port_number> durch die entsprechenden Parameter der EP11-Endpunktadresse Ihrer Hyper Protect Crypto Services-Instanz.
  • Ersetzen Sie <your_api_key> durch den Wert des erstellten API-Schlüssels.
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. Hyper Protect Crypto Services-PKCS #11-Bibliothek installieren

  1. Laden Sie die neueste PKCS #11 -Bibliothek herunter.

  2. Kopieren Sie die erstellte Konfigurationsdatei grep11client.yaml und die PKCS #11-Bibliothek pkcs11-grep11-<platform>.so.<version> in den Ausgangsordner in Ihrem Oracle Database-Container.

  3. Führen Sie die folgenden Befehle als Rootbenutzer (root) aus, um die PKCS #11-Bibliothek von Hyper Protect Crypto Services in Ihrem Oracle Database-Setup zu installieren.

    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
    

Das Verzeichnis /opt/oracle/extapi/64/hsm und die Unterverzeichnisse können nur eine Bibliotheksdatei enthalten. Entfernen Sie alle anderen Dateien aus diesem Verzeichnis und den Unterverzeichnissen.

4. Bibliothekskonfiguration prüfen

  1. Installieren Sie das OpenSC-Befehlszeilendienstprogramm (pkcs11-tool) mit dem folgenden Befehl:

    sudo yum install opensc
    
  2. Führen Sie den folgenden Befehl als Rootbenutzer (root) aus, um die Bibliothekskonfiguration zu prüfen:

    pkcs11-tool --module=/opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so -I
    

    Dieser Befehl gibt Informationen zum Hersteller und zur Bibliothek aus. Beispiel:

    Cryptoki version 2.40
    Manufacturer     IBM ...
    Library          GREP11 PKCS11 client ...
    

5. Hyper Protect Crypto Services PKCS #11-Bibliothek initialisieren

  1. Führen Sie den folgenden Befehl über eine Befehlszeile auf Ihrem Hostsystem aus:

    docker exec -it oradb bash
    

    Diese Shell kann verwendet werden, um die Befehle als Benutzer oracle für die nachfolgenden Schritte auszuführen.

  2. Führen Sie zum Initialisieren eines Tokens die folgenden Befehle aus und ersetzen Sie <your_api_key> durch den von Ihnen erstellten API-Schlüssel.

    pkcs11-tool  --module /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so --init-token --label dbtoken --so-pin=<your_api_key>
    

    Dieser Befehl gibt eine Statusnachricht wie im folgenden Beispiel aus:

    Using slot 0 with a present token (0x0)
    Token successfully initialized
    

Oracle Database-TDE einrichten und Ihre Daten verschlüsseln

Nehmen wir nun die Rolle des Datenbankadministrators an.

  1. Aktualisieren Sie die Datei „sqlnet.ora“ im Verzeichnis „$ORACLE_HOME/network/admin“, indem Sie folgende Zeile hinzufügen:

    encryption_wallet_location=(source=(method=hsm))
    

    Dazu können Sie beispielsweise den folgenden Befehl ausführen:

    echo "encryption_wallet_location=(source=(method=hsm))" >> $ORACLE_HOME/network/admin/sqlnet.ora
    

    Stellen Sie sicher, dass die Datei „sqlnet.ora“ keine weitere Einstellung für encryption_wallet_location enthält.

  2. Öffnen Sie den Keystore mit dem folgenden Befehl: Ersetzen Sie <your_api_key> durch den von Ihnen erstellten API-Schlüssel:

    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. Erstellen Sie die Masterschlüssel mit dem folgenden Befehl. Ersetzen Sie <your_api_key> durch den von Ihnen erstellten API-Schlüssel:

    SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<your_api_key>" WITH BACKUP CONTAINER=ALL;
    
  4. Erstellen Sie mit dem folgenden Befehl einen verschlüsselten Tabellenbereich:

    SQL> CREATE TABLESPACE encrypted_ts DATAFILE 'tbs1_data.dbf' SIZE 128K AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
    
  5. Um die Konfiguration zu überprüfen, können Sie eine Tabelle im verschlüsselten Tabellenbereich erstellen und einige Testdaten einfügen:

    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. Sie können auch eine Tabelle mit einer verschlüsselten Spalte erstellen und einige Testdaten einfügen:

    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 ;
    

Nächste Schritte

Ihre sensiblen Daten werden jetzt sicher in verschlüsselten Tabellen und verschlüsselten Spalten gespeichert. Und der TDE-Masterverschlüsselungsschlüssel wird in Hyper Protect Crypto Services in hoch sicherer und manipulationsgeschützter Weise aufbewahrt.

In diesem Lernprogramm haben Sie gelernt, wie Oracle Database TDE mit Hyper Protect Crypto Services eingerichtet wird.