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: 서명 파일의 경로입니다.