증명 확인

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

개요

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

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

증명서와 인증서 체인을 다운로드한 후 인증서 체인을 사용하여 해당 속성을 확인하거나 증명의 유효성을 확인할 수 있습니다.

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

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

시작하기 전에

증명 확인

증명 확인 프로세스는 Google Cloud 콘솔을 통해 자동으로 수행되거나, 증명 번들 및 증명 확인 스크립트를 다운로드하고 로컬 또는 Cloud Shell에서 실행하여 수동으로 수행할 수 있습니다.

Google Cloud 콘솔을 통한 증명 확인

Google Cloud 콘솔을 통해 증명을 확인할 수 있습니다. 그러면 Cloud Shell이 열리고 전체 증명 확인 프로세스를 수행하는 데 필요한 코드 스니펫이 미리 채워집니다.

  1. Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.

    키 관리 페이지로 이동

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

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

  4. 증명 확인 대화상자에서 Cloud Shell 열기를 클릭합니다. 그러면 Cloud Shell이 열리고 전체 확인 프로세스를 진행하는 데 필요한 코드 스니펫이 미리 채워집니다.

  5. Cloud Shell에서 미리 채워진 코드 스니펫을 검사합니다. 이 스니펫은 증명 확인 스크립트와 해당 종속 항목을 다운로드하고 gcloud 명령어를 실행하여 증명 및 인증서 체인을 다운로드한 다음 스크립트를 실행하여 증명을 확인합니다.

  6. 코드 스니펫을 실행하여 증명을 확인합니다.

수동으로 증명 확인

증명을 수동으로 확인하기 전에 증명, 인증서 체인, 증명 확인 스크립트를 다운로드해야 합니다.

  1. 증명 및 인증서 체인을 다운로드합니다.

    콘솔

    1. Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.

      키 관리 페이지로 이동

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

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

    4. 증명 확인 대화상자에서 증명 번들 다운로드를 클릭합니다. 이렇게 하면 증명 및 인증서 체인이 포함된 ZIP 파일이 다운로드됩니다.

    5. 증명 번들에서 증명 및 인증서 체인을 추출합니다.

    gcloud

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

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

      Cloud Shell 세션

    2. Cloud Shell 명령줄 프롬프트에서 gcloud kms keys versions describe 명령어를 사용하여 증명하려는 키의 증명을 검색합니다. --attestation-file 플래그는 검색된 증명의 경로와 파일 이름 대상을 지정합니다.

      gcloud kms keys versions describe key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --attestation-file [attestation-file] \
      
    3. Cloud Shell 명령줄 프롬프트에서 gcloud kms keys versions get-certificate-chain 명령어를 사용하여 증명하려는 키의 인증서 체인을 검색합니다. --output-file 플래그는 검색된 인증서의 경로와 파일 이름 대상을 지정합니다.

      gcloud kms keys versions get-certificate-chain key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --output-file [certificates-file] \
      
  2. 증명 확인을 위한 스크립트와 기본 요건을 다운로드하고 스크립트 문서를 따라 인증서 파일의 인증서를 사용하여 증명 파일의 증명을 확인합니다.

증명 값 파싱

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를 가져옵니다. Google Cloud 콘솔을 사용하여 키 버전 리소스 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 내에서 생성되었는지 확인할 수 있습니다.