pkcs11-tool で Cloud HSM 鍵を使用する

このガイドでは、PKCS #11 ライブラリを使用して Debian 11(Bullseye)で Cloud HSM 鍵を使用するサンプル pkcs11-tool コマンドについて説明します。以下の手順に含まれるコマンドには、OS または Linux ディストリビューションに応じて変更が必要になる場合があります。

始める前に

続行する前に、OpenSSL で Cloud HSM 鍵を使用するの手順を完了してください。

対称暗号化と復号を使用する

以降のセクションでは、対称暗号鍵、OpenSSL、pkcs11-tool を使用して暗号化と復号を行う方法を説明します。

前提条件

  1. Cloud HSM の未加工の対称暗号鍵を作成します。Cloud HSM 鍵を作成するには、新しい鍵を作成するときに [保護レベル] を [HSM] に設定します。

  2. 鍵に選択した未加工の対称暗号化アルゴリズムをメモします。各アルゴリズムには、パディング、初期化ベクトル、追加認証データに関する独自の要件があります。

  3. 暗号化するデータを含む入力ファイルを作成します。

暗号化

テキスト ファイルを暗号化するには、次のコマンドを実行します。

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

次のように置き換えます。

  • PATH_TO_LIBKMSP11_SO: PKCS#11 モジュールへのパス(例: /usr/local/lib/libkmsp11.so)。
  • MECHANISM: 鍵アルゴリズムに基づいて使用するメカニズム(例: AES-CBC-PAD)。
  • HSM_KEY_NAME: 暗号化に使用する Cloud HSM 鍵の名前。
  • INITIALIZATION_VECTOR: 暗号化の一部として使用される初期化ベクトルの値。
  • INPUT_TEXT_FILE_PATH: 暗号化する入力ファイルのパス。
  • ENCRYPTED_TEXT_FILE_PATH: 暗号化されたテキスト ファイルを保存するパス。

復号

テキスト ファイルを復号するには、次のコマンドを実行します。

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

次のように置き換えます。

  • PATH_TO_LIBKMSP11_SO: PKCS#11 モジュールへのパス(例: /usr/local/lib/libkmsp11.so)。
  • MECHANISM: 鍵アルゴリズムに基づいて使用するメカニズム(例: ECDSA)。
  • HSM_KEY_NAME: 復号するファイルの暗号化に使用された Cloud HSM 鍵の名前。
  • INITIALIZATION_VECTOR: 暗号化の一部として使用される初期化ベクトルの値。
  • ENCRYPTED_TEXT_FILE_PATH: 復号するファイルのパス。
  • DECRYPTED_TEXT_FILE_PATH: 復号されたテキスト ファイルを保存するパス。

非対称暗号化と復号を使用する

以降のセクションでは、非対称暗号鍵、OpenSSL、pkcs11-tool を使用して暗号化と復号を行う方法について説明します。

前提条件

  1. Cloud HSM の非対称復号鍵を作成し、公開鍵をダウンロードします。

  2. テキストを含む入力ファイルを作成します。

    echo Hello World! >> input.txt
    

暗号化

テキスト ファイルを暗号化するには、次のコマンドを実行します。

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

以下を置き換えます。

  • INPUT_TEXT_FILE_PATH: 暗号化する入力ファイルのパス。
  • PUBLIC_KEY: 公開鍵のパス。
  • ENCRYPTED_TEXT_FILE_PATH: 暗号化されたテキスト ファイルを保存するパス。

復号

テキスト ファイルを復号するには、次のコマンドを実行します。

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

以下を置き換えます。

  • PATH_TO_LIBKMSP11_SO: PKCS#11 モジュールへのパス(path/to/libkmsp11.so)。
  • HSM_KEY_NAME: テキスト ファイルの暗号化に使用する公開鍵に対応する Cloud HSM 鍵の名前。
  • ENCRYPTED_TEXT_FILE_PATH: 復号するファイルのパス。
  • OUTPUT_TEXT_FILE_PATH: 復号された出力を保存するパス。

署名および検証

以降のセクションでは、非対称署名鍵と pkcs11-tool を使用して署名と検証を行う方法について説明します。

前提条件

  1. Cloud HSM の非対称署名鍵を作成します。

  2. 署名するハッシュした入力データを含むファイルを作成します。

署名

テキスト ファイルを署名するには、次のコマンドを実行します。

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

以下を置き換えます。

  • PATH_TO_LIBKMSP11_SO: PKCS#11 モジュールへのパス(例: path/to/libkmsp11.so)。
  • HSM_KEY_NAME: 署名に使用する Cloud HSM 鍵の名前。
  • MECHANISM: 鍵アルゴリズムに基づいて使用するメカニズム。例: ECDSA
  • INPUT_TEXT_FILE_PATH: 復号する入力ファイルのパス。
  • OUTPUT_SIGNATURE_FILE_PATH: 署名ファイルを保存するパス。

確認

署名ファイルを検証するには、次のコマンドを実行します。

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

以下を置き換えます。

  • PATH_TO_LIBKMSP11_SO: PKCS#11 モジュールへのパス(例: path/to/libkmsp11.so)。
  • HSM_KEY_NAME: 検証する署名の生成に使用された Cloud HSM 鍵の名前。
  • MECHANISM: 鍵アルゴリズムに基づいて使用するメカニズム。例: ECDSA
  • INPUT_TEXT_FILE_PATH: 以前に署名されたファイルのパス。
  • SIGNATURE_FILE_PATH: 署名ファイルのパス。