증명 확인

이 주제에서는 하드웨어 보안 모듈(HSM)에 항상 저장되는 Cloud HSM 키에 대한 증명을 확인하는 방법을 보여줍니다.

개요

암호화에서 증명은 머신이 판독할 수 있는 프로그래매틱 방식으로 증명 가능한 표현으로, 소프트웨어가 자체적으로 만들어냅니다. 증명은 신뢰할 수 있는 컴퓨팅의 중요한 구성요소이며 규정 준수를 위해 필요할 수 있습니다.

증명을 보고 확인하려면 서명에 사용된 인증서 번들과 함께 HSM에서 암호화 서명된 증명서를 요청합니다. 증명서는 HSM 하드웨어에서 생성되며 Google 및 HSM 제조업체가 소유한 인증서로 서명됩니다.

증명서와 인증서를 다운로드한 후 번들의 인증서 유효성을 확인한 다음 인증서를 확인합니다.

증명서 형식은 HSM 제조업체에서 정의됩니다. Cloud Console, Cloud KMS API 또는 gcloud 도구를 사용하여 증명을 확인할 수는 없습니다. 인증은 Google과 분리되어 있습니다.

증명 스크립트는 Google에서 개발된 오픈소스 Python 스크립트입니다. 스크립트의 소스 코드를 보고 증명 형식과 확인 작동 방법 또는 맞춤설정된 솔루션의 모델을 자세히 알아볼 수 있습니다.

이 주제의 예시는 Cloud Shell을 비롯한 Linux 환경용으로 디자인되었습니다. macOS 또는 Windows 클라이언트에서도 예시를 따라하려면 수정이 필요할 수 있습니다.

시작하기 전에

아티팩트 다운로드

키를 증명하기 전에 인증서와 증명서를 다운로드합니다.

인증서 다운로드

증명 서명은 Google 및 HSM 제조업체의 루트 인증서로 연결되는 인증서 번들을 사용하여 확인할 수 있으며 Google 및 HSM 제조업체의 인증 기관(CA)에서 서명합니다.

  1. Google 루트 인증서를 생성하는 인증서 번들을 다운로드합니다.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-google.pem
    
  2. HSM 제조업체의 루트 인증서로 연결되는 인증서 번들을 다운로드합니다.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-cavium.pem
    
  3. Google의 루트 인증서를 다운로드합니다.

    curl -O https://www.gstatic.com/cloudhsm/roots/global_1498867200.pem
    
  4. HSM 제조업체의 루트 인증서와 공개 키를 다운로드하고 추출합니다.

    curl -O https://www.marvell.com/content/dam/marvell/en/public-collateral/security-solutions/liquid_security_certificate.zip
    
    unzip liquid_security_certificate.zip
    

    인증서는 liquid_security_certificate.crt로 추출되고 공개 키는 liquid_security_certificate.txt로 추출됩니다.

증명서 다운로드

Google Cloud Console 또는 명령줄을 사용하여 암호화 키 버전의 증명을 다운로드할 수 있습니다. 증명서는 키를 포함하는 HSM 기기에서 직접 다운로드됩니다.

Console

  1. Cloud Console에서 암호화 키 페이지로 이동합니다.

    암호화 키 페이지로 이동

  2. 증명하려는 키가 포함된 키링을 선택한 다음 키를 선택합니다.

  3. 증명할 키 버전에 대해 더보기 를 클릭하고 증명 가져오기를 선택합니다.

  4. 증명 가져오기 대화상자에서 다운로드를 클릭합니다. 증명 파일이 로컬 시스템에 다운로드됩니다.

    증명 파일의 이름 형식은 [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat입니다. 파일 이름의 각 부분은 하이픈으로 구분됩니다. 따라서 자리표시자 텍스트는 대괄호([])로 둘러싸여 있습니다.

gcloud

  1. Console 창 위에서 Cloud Shell 활성화를 클릭합니다.

    Cloud Shell 활성화Console 하단의 새 프레임 내에 Cloud Shell 세션이 열리면서 명령줄 프롬프트가 표시됩니다. 셸 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

    Cloud Shell 세션

  2. Cloud Shell 명령줄 프롬프트에서 gcloud kms keys versions describe 명령어를 사용하여 증명하려는 키의 증명 형식을 검색합니다.

    gcloud kms keys versions describe key-version \
      --key key-name \
      --location location \
      --keyring keyring-name
    

    이 명령어의 출력에 표시되는 키 버전의 증명 형식이 다음 단계에서 필요합니다.

  3. Cloud Shell 명령줄 프롬프트에서 gcloud kms keys versions describe 명령어를 사용하여 증명하려는 키의 증명을 검색합니다. 이 때 attestation-format을 이전 단계에서 검색한 증명 형식으로 바꿉니다. --attestation-file 플래그는 검색된 증명의 경로와 파일 이름 대상을 지정합니다. 파일 이름의 각 부분은 하이픈으로 구분됩니다. 따라서 자리표시자 텍스트는 대괄호([])로 둘러싸여 있습니다.

    gcloud kms keys versions describe key-version \
     --key key-name \
     --location location \
     --keyring keyring-name \
     --attestation-file \
     [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat
    

증명의 서명 확인

증명의 암호화 서명을 확인하려면 오픈소스 스크립트를 사용할 수 있습니다.

또한 비대칭 키 쌍에 대해 공개 키를 확인할 수 있습니다.

증명 값 파싱

HSM 제조업체 문서에는 증명 값을 파싱하고 비대칭 키 쌍에 대해 공개 키를 확인하기 위해 해당 스크립트를 사용하는 내용에 대한 전체 지침이 포함되어 있습니다. 증명은 파싱하기 전에 다음 명령어로 압축 해제해야 합니다.

  • 압축된 증명을 압축 해제합니다.

    gzip -d < compressed_attestation.dat > attestation.dat
    

다음 링크는 HSM 제조업체의 특정 안내로 직접 이동합니다.

증명 값 파싱에 대한 안내에는 Cloud HSM의 HSM 키와 관계없는 증명의 일반 필드 참조가 포함됩니다.

다음 섹션에서는 Cloud HSM에만 해당하는 키 정보를 확인하는 방법을 설명합니다.

키의 버전 ID 확인

키 버전 리소스 ID의 SHA-256 해시가 증명에 있는지 여부를 확인할 수 있습니다. 키의 리소스 이름은 증명 파일에서 0x0102 필드 또는 키 ID 필드의 일부입니다. 키 ID는 16진수 형식의 연결된 SHA-256 해시 다이제스트 두 개로 구성됩니다. 두 번째 다이제스트는 키의 리소스 이름과 일치해야 합니다.

  1. 키 버전의 키 버전 리소스 ID를 가져옵니다. Cloud Console을 사용하여 키 버전 리소스 ID를 가져오거나 다음 명령어를 실행할 수 있습니다.

    gcloud kms keys versions list \
       --location location \
       --keyring key-ring-name \
       --key key-name
    
  2. 명령줄에서 방금 검색한 키 버전 리소스 ID에 resource_name을 할당합니다.

    RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
    
  3. 파싱 스크립트는 모든 증명 필드를 16진수 형식으로 덤프하므로 키 ID는 16진수 형식으로 두 번 지정되었을 수 있습니다. (keyID 생성 중에 한 번, 증명을 파싱할 때 한 번). 리소스 이름이 키 ID와 일치하는지 확인하려면 리소스 이름을 SHA-256 16진수 다이제스트로 변환하고 증명 파일의 키 ID 16진수 변환 하나를 되돌려서 이 둘을 비교합니다.

    RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
    
  4. 파싱 스크립트는 모든 증명 필드를 16진수 형식으로 덤프하므로 키 ID는 내부적으로 16진수 형식으로 2회 인코딩됩니다. KEYID_HEX 환경 변수를 한 레이어가 16진수로 인코딩된 키 ID의 값으로 설정합니다.

    KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
    
  5. RESOURCE_NAME_HEXKEYID_HEX 값을 문자열로 비교합니다.

    test  ${RESOURCE_NAME_HEX} == ${KEYID_HEX:(-64)} || echo "Values don't match"
    

    값이 일치하면 출력이 반환되지 않고 명령어가 코드 0로 종료됩니다.

키의 다른 속성 확인

PKCS #11 표준의 필드에 해당하는 다양한 키 속성을 볼 수 있습니다. 키의 다른 속성을 확인하려면 다음 예시를 참조하세요.

  • 키가 추출 가능한지 여부는 파싱된 출력의 0x0102 필드에 저장됩니다. 키를 추출할 수 있는지 확인하려면 다음과 같이 0x0162 필드를 검사합니다. \x01 값은 true이고 \x00 값은 false입니다.

    Cloud HSM 키는 추출할 수 없습니다.

    grep '0x0162:' /path/to/parsed/attestation.dat
    
  • 키가 HSM에 수신된 방법(직접 생성한 키인지 또는 가져오기한 키인지)이 0x0163 필드에 저장됩니다. 키가 HSM에서 로컬로 생성된 경우 필드가 \x01로 설정됩니다. 가져온 키의 필드는 \x00으로 설정됩니다.

    키가 HSM에 수신된 방식에서 몇 가지 정보를 유추 할 수 있습니다. 키가 Cloud HSM에서 생성된 경우, 이 키는 HSM 외부에서 암호화되지 않은 상태로 저장됩니다. 키를 가져온 경우 가져오기 메커니즘은 가져오기 프로세스 도중과 이후에 Cloud HSM 내에서 키가 보호되도록 보장합니다.

    grep '0x0163:' /path/to/parsed/attestation.dat
    
  • 키 유형0x0100 필드에 저장됩니다. 키 유형은 프리픽스가 CKK_*인 PCK#11 표준에 기록됩니다. 예를 들어 AES 키의 유형은 \x1f입니다.

    grep '0x0100:' /path/to/parsed/attestation.dat
    

추가 정보

증명을 확인하면 키 버전이 HSM 내에서 생성되었는지 확인할 수 있습니다. 확인은 의도적으로 Google로부터 독립적으로 실행되므로 Cloud Console, Cloud KMS API 또는 gcloud 도구를 사용하여 증명을 확인할 수 없습니다.