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

Usa crittografia e decriptazione simmetriche

Le sezioni seguenti mostrano come criptare e decriptare utilizzando una crittografia simmetrica di crittografia, OpenSSL e pkcs11-tool.

Prerequisiti

  1. Crea una crittografia simmetrica non elaborata di Cloud HSM chiave. 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 spaziatura interna, vettori di inizializzazione e ulteriori dati autenticati.

  3. Crea un file di input contenente i dati che vuoi 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 alla chiave dell'algoritmo, ad esempio AES-CBC-PAD.
  • HSM_KEY_NAME: il nome della chiave Cloud HSM da utilizzare per la crittografia.
  • INITIALIZATION_VECTOR: il valore dell'inizializzazione da utilizzare come parte 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 di PKCS#11 ad esempio /usr/local/lib/libkmsp11.so.
  • MECHANISM: il meccanismo da utilizzare, in base alla chiave dell'algoritmo, ad esempio ECDSA.
  • HSM_KEY_NAME: il nome della chiave Cloud HSM utilizzato per criptare il file che vuoi decriptare.
  • INITIALIZATION_VECTOR: il valore dell'inizializzazione da utilizzare come parte della crittografia.
  • ENCRYPTED_TEXT_FILE_PATH: il percorso del file che ti interessa da decriptare.
  • DECRYPTED_TEXT_FILE_PATH: il percorso in cui vuoi salvare il file di testo decriptato.

Usa la crittografia e la decrittografia asimmetrica

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 decrittografia asimmetrica di Cloud HSM chiave e scarica la relativa chiave pubblica chiave.

  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: 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 che corrisponde alla chiave pubblica utilizzata per criptare il file di testo.
  • ENCRYPTED_TEXT_FILE_PATH: il percorso del file che ti interessa 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 forma asimmetrica chiave di firma e strumento pkcs11.

Prerequisiti

  1. Crea una chiave asimmetrica di Cloud HSM.

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

Firma

Per firmare un file di testo, esegui questo 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 che vuoi salvare il file della firma.

Verifica

Per verificare un file di firma, esegui questo 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 che vuoi verificare.
  • MECHANISM: il meccanismo da utilizzare, in base alla chiave dell'algoritmo. Ad esempio, ECDSA.
  • INPUT_TEXT_FILE_PATH: il percorso del file firmato in precedenza.
  • SIGNATURE_FILE_PATH: il percorso del file della firma.