Utilizzare una chiave Cloud HSM con lo strumento pkcs11-tool

Questa guida fornisce comandi pkcs11-tool di esempio per utilizzare una chiave Cloud HSM su Debian 11 (Bullseye) utilizzando la libreria PKCS #11. I comandi inclusi in queste istruzioni potrebbero richiedere modifiche in base al sistema operativo o alla distribuzione Linux.

Prima di iniziare

Prima di continuare, completa i passaggi descritti in Utilizzo di una chiave Cloud HSM con OpenSSL.

Utilizzare crittografia e decriptazione simmetriche

Le sezioni seguenti mostrano come criptare e decriptare utilizzando una chiave di crittografia simmetrica, OpenSSL e lo strumento pkcs11.

Prerequisiti

  1. Crea una chiave di crittografia simmetrica non elaborata Cloud HSM. Per creare una chiave Cloud HSM, imposta il livello di protezione su HSM durante la creazione di una nuova chiave.

  2. Prendi nota dell'algoritmo di crittografia simmetrica non elaborato che scegli per la chiave. Ogni algoritmo ha i propri requisiti per il padding, i vettori di inizializzazione e altri dati autenticati.

  3. Crea un file di input contenente i dati da criptare.

Cripta

Per criptare un file di testo, esegui il seguente comando:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --encrypt \
    --mechanism MECHANISM \
    --slot 0 \
    --label HSM_KEY_NAME \
    --iv INITIALIZATION_VECTOR \
    --input-file INPUT_TEXT_FILE_PATH \
    --output-file ENCRYPTED_TEXT_FILE_PATH

Sostituisci quanto segue:

  • PATH_TO_LIBKMSP11_SO: il percorso del modulo PKCS#11, ad esempio /usr/local/lib/libkmsp11.so.
  • MECHANISM: il meccanismo da utilizzare, in base all'algoritmo della chiave, ad esempio AES-CBC-PAD.
  • HSM_KEY_NAME: il nome della chiave Cloud HSM da utilizzare per la crittografia.
  • INITIALIZATION_VECTOR: il valore del vettore di inizializzazione da utilizzare nell'ambito della crittografia.
  • INPUT_TEXT_FILE_PATH: il percorso del file di input da criptare.
  • ENCRYPTED_TEXT_FILE_PATH: il percorso in cui vuoi salvare il file di testo criptato.

Decripta

Per decriptare un file di testo, esegui il seguente comando:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --decrypt \
    --mechanism MECHANISM \
    --slot 0 \
    --label HSM_KEY_NAME \
    --iv INITIALIZATION_VECTOR \
    --input-file ENCRYPTED_TEXT_FILE_PATH \
    --output-file DECRYPTED_TEXT_FILE_PATH

Sostituisci quanto segue:

  • PATH_TO_LIBKMSP11_SO: il percorso del modulo PKCS#11, ad esempio /usr/local/lib/libkmsp11.so.
  • MECHANISM: il meccanismo da utilizzare, in base all'algoritmo della chiave, ad esempio ECDSA.
  • HSM_KEY_NAME: il nome della chiave Cloud HSM impiegata per criptare il file che vuoi decriptare.
  • INITIALIZATION_VECTOR: il valore del vettore di inizializzazione da utilizzare nell'ambito della crittografia.
  • ENCRYPTED_TEXT_FILE_PATH: il percorso del file da decriptare.
  • DECRYPTED_TEXT_FILE_PATH: il percorso in cui vuoi salvare il file di testo decriptato.

Utilizzare la crittografia e la decrittografia asimmetriche

Le sezioni seguenti mostrano come eseguire la crittografia e la decrittografia utilizzando una chiave di crittografia asimmetrica, OpenSSL e lo strumento pkcs11.

Prerequisiti

  1. Crea una chiave di decriptazione asimmetrica Cloud HSM e scarica la relativa chiave pubblica.

  2. Crea un file di input con del testo.

    echo Hello World! >> input.txt
    

Cripta

Per criptare un file di testo, esegui il seguente comando:

openssl pkeyutl -in INPUT_TEXT_FILE_PATH -encrypt -pubin \
    -inkey PUBLIC_KEY \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha256 \
    -pkeyopt rsa_mgf1_md:sha256 > ENCRYPTED_TEXT_FILE_PATH

Sostituisci quanto segue:

  • INPUT_TEXT_FILE_PATH: il percorso del file di input da criptare.
  • PUBLIC_KEY: il percorso della chiave pubblica.
  • ENCRYPTED_TEXT_FILE_PATH: il percorso in cui vuoi salvare il file di testo criptato.

Decripta

Per decriptare un file di testo, esegui il seguente comando:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO \
    --decrypt --mechanism RSA-PKCS-OAEP --slot 0 --hash-algorithm=sha256 \
    --mgf MGF1-SHA256 --label HSM_KEY_NAME --type privkey \
    -i ENCRYPTED_TEXT_FILE_PATH \
    -o OUTPUT_TEXT_FILE_PATH

Sostituisci quanto segue:

  • PATH_TO_LIBKMSP11_SO: il percorso del modulo PKCS#11 (path/to/libkmsp11.so).
  • HSM_KEY_NAME: il nome della chiave Cloud HSM corrispondente alla chiave pubblica utilizzata per criptare il file di testo.
  • ENCRYPTED_TEXT_FILE_PATH: il percorso del file da decriptare.
  • OUTPUT_TEXT_FILE_PATH: il percorso in cui vuoi salvare l'output decriptato.

Firma e verifica

Le sezioni seguenti mostrano come firmare e verificare utilizzando una chiave di firma asimmetrica e lo strumento pkcs11.

Prerequisiti

  1. Crea una chiave di firma asimmetrica Cloud HSM.

  2. Crea un file con i dati di input sottomessi ad hashing che vuoi firmare.

Firma

Per firmare un file di testo, esegui il seguente comando:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --sign \
   --mechanism MECHANISM \
   --slot 0 \
   --label HSM_KEY_NAME \
   -i INPUT_TEXT_FILE_PATH \
   -o OUTPUT_SIGNATURE_FILE_PATH

Sostituisci quanto segue:

  • PATH_TO_LIBKMSP11_SO: il percorso del modulo PKCS#11, ad esempio path/to/libkmsp11.so.
  • HSM_KEY_NAME: il nome della chiave Cloud HSM che vuoi utilizzare per la firma.
  • MECHANISM: il meccanismo da utilizzare, in base all'algoritmo della chiave. Ad esempio, ECDSA.
  • INPUT_TEXT_FILE_PATH: il percorso del file di input che vuoi firmare.
  • OUTPUT_SIGNATURE_FILE_PATH: il percorso in cui vuoi memorizzare il file della firma.

Verifica

Per verificare un file di firma, esegui il seguente comando:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --verify \
   --mechanism MECHANISM \
   --slot 0 \
   --label HSM_KEY_NAME \
   -i INPUT_TEXT_FILE_PATH \
   --signature-file SIGNATURE_FILE_PATH

Sostituisci quanto segue:

  • PATH_TO_LIBKMSP11_SO: il percorso del modulo PKCS#11, ad esempio path/to/libkmsp11.so.
  • HSM_KEY_NAME: il nome della chiave Cloud HSM impiegata per generare la firma da verificare.
  • MECHANISM: il meccanismo da utilizzare, in base all'algoritmo della chiave. Ad esempio, ECDSA.
  • INPUT_TEXT_FILE_PATH: il percorso del file firmato in precedenza.
  • SIGNATURE_FILE_PATH: il percorso del file della firma.