Utilizzo di Hyper Protect Crypto Services PKCS #11 per la crittografia nativa di IBM Db2

La crittografia nativa IBM Db2® protegge i file del database delle chiavi e le immagini di backup del database dall'accesso inappropriato mentre sono memorizzati su un supporto di memoria esterno. Il sistema di database codifica e decodifica automaticamente i dati quando vengono utilizzati da utenti e applicazioni autorizzati. In genere, gli utenti del database non devono essere a conoscenza della crittografia nativa e le applicazioni client del database non devono essere adattate specificamente.

La codifica nativa Db2 usa una gerarchia di chiavi a due livelli: i dati vengono codificati con una chiave di codifica dati (DEK). La DEK è codificata con una chiave principale e viene memorizzata in formato codificato con il database o l'immagine di backup. Un DEK univoco viene generato da Db2 per ogni database codificato e per ogni backup codificato.

Una chiave principale viene utilizzata per codificare una DEK. Ogni database codificato è associato a una chiave principale alla volta.

Una domanda importante quando pianifichi la crittografia nativa Db2 è dove conservi la chiave master e come la proteggi.

Obiettivi

Questa esercitazione mostra come puoi mantenere il controllo completo ed esclusivo delle tue chiavi master memorizzandole in IBM Cloud® Hyper Protect Crypto Services. A questo scopo, devi utilizzare la funzione di integrazione PKCS #11 di Hyper Protect Crypto Services.

Con questa esercitazione, verrà implementata la configurazione illustrata nella seguente illustrazione.

IBM Db2 codifica predefinita con l'API PKCS #11 standard
Figura 1. IBM Db2 codifica predefinita con l'API PKCS #11 standard

In questa configurazione, Db2 deve richiamare le operazioni per gestire le chiavi master nella libreria Hyper Protect Crypto Services PKCS #11 . La libreria Hyper Protect Crypto Services PKCS #11 interagisce con la tua istanza Hyper Protect Crypto Services, che fornisce la migliore tecnologia di classe per archiviare e gestire le tue chiavi master.

Prima di iniziare

Per completare questa esercitazione, devi soddisfare i seguenti prerequisiti:

Flusso di fasi

Per completare questa soluzione, procedere come segue:

  1. Inizializza la tua istanza Hyper Protect Crypto Services
  2. Configura la libreria Hyper Protect Crypto Services PKCS #11
  3. Impostare Db2 e configurare la codifica nativa Db2

Inizializza la tua istanza Hyper Protect Crypto Services

  1. Per questa esercitazione, devi inizializzare prima un'istanza Hyper Protect Crypto Services.

    Prendi nota della tua istanza Hyper Protect Crypto Services e dell'indirizzo endpoint EP11. Queste informazioni sono necessarie per le fasi successive.

  2. Crea un ruolo IAM personalizzato Discover HPCS. Questo ruolo fornisce un'autorizzazione molto limitata per il rilevamento della tua istanza Hyper Protect Crypto Services, richiesta dalla libreria PKCS #11 . Questo ruolo non dispone delle autorizzazioni per utilizzare, creare o gestire le chiavi o i keystore EP11.

    1. Dall'IU, vai a Gestisci > Access (IAM) e seleziona Roles e fai clic su Create.
    2. Immettere il nome Discover HPCS per il ruolo.
    3. Immettere un ID per il ruolo. Questo ID viene utilizzato nel CRN, che è utilizzato quando assegni l'accesso utilizzando l'API. L'ID ruolo deve iniziare con una lettera maiuscola e utilizzare solo caratteri alfanumerici, ad esempio DiscoverHPCS.
    4. Facoltativo: immettere una descrizione sintetica e utile che aiuti gli utenti che stanno assegnando l'accesso a conoscere il livello di accesso fornito dall'assegnazione ruolo a un utente. Questa descrizione viene visualizzata anche nell'IU quando un utente assegna l'accesso al servizio.
    5. Dall'elenco di servizi, seleziona Hyper Protect Crypto Services
    6. Selezionare Aggiungi per l'azione hs-crypto.discovery.listservers e fare clic su Crea.
  3. Segui le istruzioni in Impostazione dei tipi di utente API PKCS #11 per configurare gli ID servizio e le chiavi API per l'utente normale e l'utente anonimo.

    Non impostare il tipo di utente SO indicato nelle istruzioni. Inoltre, a differenza delle istruzioni, non assegnare all'ID servizio utente anonimo il ruolo personalizzato Key operator, ma assegnare invece il ruolo personalizzato Discover HPCS.

    Con questa configurazione, l'utente anonimo ha solo autorizzazioni molto limitate sulla tua istanza Hyper Protect Crypto Services e non può utilizzare, creare o gestire le chiavi o i keystore EP11.

  4. Salvare il valore delle chiavi API per l'utente normale e l'utente anonimo per le fasi successive.

  5. Seguire le istruzioni per creare un keystore EP11 privato e prendere nota dell'ID keystore per i passi successivi.

Configura la libreria Hyper Protect Crypto Services PKCS #11

1. Eseguire il contenitore Db2 Community Edition

  1. Utilizzare il comando riportato di seguito per eseguire il contenitore Db2 Community Edition:

    docker run -itd --name mydb --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=password -e DBNAME=testdb ibmcom/db2
    
  2. Immettere il seguente comando da una riga comandi sul sistema host:

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

Questa shell deve essere utilizzata per eseguire i comandi come root per i passi successivi.

2. Crea il file di configurazione Hyper Protect Crypto Services PKCS #11

Ora, crea un file di configurazione per la funzione Hyper Protect Crypto Services PKCS #11 . Il file di configurazione è denominato grep11client.yaml.

Adattare il seguente modello di file e denominare grep11client.yaml:

  • Sostituisci <instance_ID> con l'ID della tua istanza Hyper Protect Crypto Services
  • Sostituisci <EP11_endpoint_URL> e <EP11_endpoint_port_number> con i rispettivi parametri dell'indirizzo endpoint EP11 della tua istanza Hyper Protect Crypto Services.
  • Sostituisci <private_keystore_id> con l'ID del keystore privato creato in precedenza
  • Sostituisci <anonymous_user_api_key> con la rispettiva chiave API dell'utente anonimo
iamcredentialtemplate: &defaultiamcredential
          enabled: true
          endpoint: "https://iam.cloud.ibm.com"
          # 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>"
      port: "<EP11_endpoint_port_number>" # The EP11 endpoint port number
      tls:
        enabled: true # EP11 requires TLS connection.
        mutual: false
    storage:
      remotestore:
        enabled: true
    users:
       # The Security Officer (SO) user
      0: # The index of the Security Officer (SO) user MUST be 0.
        # The name for the Security Officer (SO) user. For example: "Administrator":
        name: "Administrator"
        iamauth: *defaultiamcredential
      # The normal user
      1: # The index of the normal user MUST be 1.
        # The name for the normal user. For example: "Normal user":
        name: "Normal user"
        # The 128-bit UUID of the private keystore which you created previously
        tokenspaceID: "<private_keystore_id>"
        iamauth: *defaultiamcredential
      # The anonymous user
      2: # The index of the anonymous user MUST be 2.
        # The name for the anonymous user. For example: "Anonymous":
        name: "Anonymous"
        # The public keystore will not be used with this setup.
        # Specify an arbitrary 128-bit UUID below, e.g.:
        tokenspaceID: "12345678-1234-1234-1234-1234567890AB"
        iamauth:
          <<: *defaultiamcredential
          # Provide the API key for the Anonymous user.
          apikey: "<anonymous_user_api_key>"
logging:
  # Set the logging level.
  # The supported levels, in an increasing order of verboseness: 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'. The Default value is 'warning'.
  loglevel: "info"
  logpath: "/tmp/grep11client.log" # The full path of your logging file.

3. Installa la libreria Hyper Protect Crypto Services PKCS #11

  1. Scarica la libreria PKCS #11 più aggiornata.

  2. Copiare il file di configurazione precedentemente creato grep11client.yaml e la libreria PKCS #11 pkcs11-grep11-<platform>.so.<version> nel contenitore Db2.

  3. Immetti i seguenti comandi come root per installare la libreria Hyper Protect Crypto Services PKCS #11 nella tua configurazione Db2.

    mkdir /etc/ep11client
    chmod a+rx /etc/ep11client/
    cp grep11client.yaml /etc/ep11client/grep11client.yaml
    chmod a+r /etc/ep11client/grep11client.yaml
    
    mkdir -p /pkcs11
    cp pkcs11-grep11-<platform>.so.<version> /pkcs11/pkcs11-grep11.so
    chmod -R a+rwx /pkcs11
    
    touch /tmp/grep11client.log
    chmod a+rw /tmp/grep11client.log
    

Imposta la codifica nativa Db2

Ora, configura la crittografia nativa Db2. Per farlo, assicurarsi di disporre di tutti i privilegi di amministratore del database.

  1. Creare il file /pkcs11/keystore.conf con il seguente contenuto:

    VERSION=1
    PRODUCT_NAME=Other
    ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP=true
    LIBRARY=/pkcs11/pkcs11-grep11.so
    SLOT_ID=0
    NEW_OBJECT_TYPE=PRIVATE
    KEYSTORE_STASH=/pkcs11/pkcs11_pw.sth
    
  2. Eseguire i seguenti comandi come root per aggiornare la proprietà e le autorizzazioni del file /pkcs11/keystore.conf:

    chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf
    chmod ug+rw /pkcs11/keystore.conf
    
  3. Per creare un file stash delle password, esegui questi comandi e sostituisci < normal_user_api_key> con la chiave API dell'utente normale che hai creato.

    su - db2inst1
    db2credman -stash -password "<normal_user_api_key>" -to /pkcs11/pkcs11_pw.sth
    
  4. Per aggiornare la configurazione di Db2, eseguire il seguente comando come utente db2inst1:

    db2 update dbm cfg using keystore_location /pkcs11/keystore.conf  keystore_type pkcs11
    
  5. Per impostare la variabile d'ambiente DB2_DEK_MAC_TYPE, eseguire i seguenti comandi come utente db2inst1 e riavviare DB2:

    db2 terminate
    db2stop
    export DB2_DEK_MAC_TYPE=HMAC
    db2start
    

    È necessario specificare la variabile di ambiente DB2_DEK_MAC_TYPE=HMAC prima di avviare Db2. Se si utilizza Db2 in Windows, è necessario impostare la variabile di profilo Db2 utilizzando il seguente comando:

    db2set -g DB2_DEK_MAC_TYPE=HMAC
    
  6. Per creare un database codificato, eseguire i seguenti comandi:

    db2 create db cryptdb1 encrypt
    

    Questo comando stampa le seguenti informazioni:

    DB20000I  The CREATE DATABASE command completed successfully.
    
  7. Per verificare il database codificato, eseguire i seguenti comandi:

    db2 connect to cryptdb1
    db2 "create table test (id int not null, data varchar(100))"
    db2 "insert into test values (1, 'This is a secret text')"
    db2 "select * from test"
    

    Questo comando stampa le seguenti informazioni:

    ID          DATA
    ----------- ----------------------------------------------------------------------------------------------------
          1 This is a secret text
    
    1 record(s) selected.
    

Passi successivi

I tuoi dati sensibili sono ora archiviati in modo sicuro nell'archiviazione crittografata. E la chiave master viene mantenuta in Hyper Protect Crypto Services in modo altamente sicuro e a prova di manomissione.

In questa esercitazione, hai imparato come configurare la crittografia nativa Db2 con Hyper Protect Crypto Services.