이 주제에서는 하드웨어 보안 모듈(HSM)에 항상 저장되는 Cloud HSM 키에 대한 증명을 확인하는 방법을 보여줍니다.
개요
암호화에서 증명은 머신이 판독할 수 있는 프로그래매틱 방식으로 증명 가능한 표현으로, 소프트웨어가 자체적으로 만들어냅니다. 증명은 신뢰할 수 있는 컴퓨팅의 중요한 구성요소이며 규정 준수를 위해 필요할 수 있습니다.
증명을 보고 확인하려면 서명에 사용된 인증서 체인과 함께 HSM에서 암호화 서명된 증명서를 요청합니다. 증명서는 HSM 하드웨어에서 생성되며 Google 및 HSM 제조업체가 소유한 인증서로 서명됩니다.
증명서와 인증서 체인을 다운로드한 후 인증서 체인을 사용하여 해당 속성을 확인하거나 증명의 유효성을 확인할 수 있습니다.
증명 스크립트는 Google에서 개발된 오픈소스 Python 스크립트입니다. 스크립트의 소스 코드를 보고 증명 형식과 확인 작동 방법 또는 맞춤설정된 솔루션의 모델을 자세히 알아볼 수 있습니다.
이 주제의 예시는 Cloud Shell을 비롯한 Linux 환경용으로 디자인되었습니다. macOS 또는 Windows 클라이언트에서도 예시를 따라하려면 수정이 필요할 수 있습니다.
시작하기 전에
- 필요한 경우 Cloud HSM에서 지원되는 리전에서 키링에 Cloud HSM 키를 만듭니다.
HSM 제조업체에서 증명 값 파싱을 위한 스크립트를 다운로드하고 설치합니다. 다음 각 스크립트를 다운로드합니다.
verify_pubkey.py
parse_v1.py
parse_v2.py
동일한 위치에 제공된 스크립트 사용에 관한 문서를 검토합니다.
증명 및 해당 기본 요건 확인을 위한 스크립트를 다운로드 및 설치하고, 스크립트에 대한 문서를 검토합니다.
증명 확인
증명 확인 프로세스는 Google Cloud 콘솔을 통해 자동으로 수행되거나, 증명 번들 및 증명 확인 스크립트를 다운로드하고 로컬 또는 Cloud Shell에서 실행하여 수동으로 수행할 수 있습니다.
Google Cloud 콘솔을 통한 증명 확인
Google Cloud 콘솔을 통해 증명을 확인할 수 있습니다. 그러면 Cloud Shell이 열리고 전체 증명 확인 프로세스를 수행하는 데 필요한 코드 스니펫이 미리 채워집니다.
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
증명하려는 키가 포함된 키링을 선택한 다음 키를 선택합니다.
증명할 키 버전에 대해 더보기 more_vert를 클릭하고 증명 확인을 선택합니다.
증명 확인 대화상자에서 Cloud Shell 열기를 클릭합니다. 그러면 Cloud Shell이 열리고 전체 확인 프로세스를 진행하는 데 필요한 코드 스니펫이 미리 채워집니다.
Cloud Shell에서 미리 채워진 코드 스니펫을 검사합니다. 이 스니펫은 증명 확인 스크립트와 해당 종속 항목을 다운로드하고 gcloud 명령어를 실행하여 증명 및 인증서 체인을 다운로드한 다음 스크립트를 실행하여 증명을 확인합니다.
코드 스니펫을 실행하여 증명을 확인합니다.
수동으로 증명 확인
증명을 수동으로 확인하기 전에 증명, 인증서 체인, 증명 확인 스크립트를 다운로드해야 합니다.
증명 및 인증서 체인을 다운로드합니다.
콘솔
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
증명하려는 키가 포함된 키링을 선택한 다음 키를 선택합니다.
증명할 키 버전에 대해 더보기 more_vert를 클릭하고 증명 확인을 선택합니다.
증명 확인 대화상자에서 증명 번들 다운로드를 클릭합니다. 이렇게 하면 증명 및 인증서 체인이 포함된 ZIP 파일이 다운로드됩니다.
증명 번들에서 증명 및 인증서 체인을 추출합니다.
gcloud
콘솔 창 위에서 Cloud Shell 활성화를 클릭합니다.
콘솔 하단의 새 프레임 내에 Cloud Shell 세션이 열리면서 명령줄 프롬프트가 표시됩니다. 셸 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.
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] \
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] \
증명 확인을 위한 스크립트와 기본 요건을 다운로드하고 스크립트 문서를 따라 인증서 파일의 인증서를 사용하여 증명 파일의 증명을 확인합니다.
증명 값 파싱
HSM 제조업체 문서에는 증명 값을 파싱하고 비대칭 키 쌍에 대해 공개 키를 확인하기 위해 해당 스크립트를 사용하는 내용에 대한 전체 지침이 포함되어 있습니다. 증명은 파싱하기 전에 다음 명령어로 압축 해제해야 합니다.
압축된 증명을 압축 해제합니다.
gzip -d < compressed_attestation.dat > attestation.dat
다음 링크는 HSM 제조업체의 특정 안내로 직접 이동합니다.
증명 값 파싱에 대한 안내에는 Cloud HSM의 HSM 키와 관계없는 증명의 일반 필드 참조가 포함됩니다.
다음 섹션에서는 Cloud HSM에만 해당하는 키 정보를 확인하는 방법을 설명합니다.
키의 버전 ID 확인
키 버전 리소스 ID의 SHA-256 해시가 증명에 있는지 여부를 확인할 수 있습니다. 키의 리소스 이름은 증명 파일에서 0x0102
필드 또는 키 ID 필드의 일부입니다. 키 ID는 16진수 형식의 연결된 SHA-256 해시 다이제스트 두 개로 구성됩니다. 두 번째 다이제스트는 키의 리소스 이름과 일치해야 합니다.
키 버전의 키 버전 리소스 ID를 가져옵니다. Google Cloud 콘솔을 사용하여 키 버전 리소스 ID를 가져오거나 다음 명령어를 실행할 수 있습니다.
gcloud kms keys versions list \ --location location \ --keyring key-ring-name \ --key key-name
명령줄에서 방금 검색한 키 버전 리소스 ID에
resource_name
을 할당합니다.RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
파싱 스크립트는 모든 증명 필드를 16진수 형식으로 덤프하므로 키 ID는 16진수 형식으로 두 번 지정되었을 수 있습니다. (keyID 생성 중에 한 번, 증명을 파싱할 때 한 번). 리소스 이름이 키 ID와 일치하는지 확인하려면 리소스 이름을 SHA-256 16진수 다이제스트로 변환하고 증명 파일의 키 ID 16진수 변환 하나를 되돌려서 이 둘을 비교합니다.
RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
파싱 스크립트는 모든 증명 필드를 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)
RESOURCE_NAME_HEX
와KEYID_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 내에서 생성되었는지 확인할 수 있습니다.