Cloud KMS (비대칭)로 데이터 서명 및 확인

1. 개요

Cloud KMS는 온프레미스와 동일한 방식으로 클라우드 서비스의 암호화 키를 관리할 수 있는 클라우드 호스팅 키 관리 서비스입니다. 하드웨어 지원 키의 경우 Cloud HSM을 비롯한 다양한 키 유형 및 소스를 사용하여 암호화, 복호화, 서명, 확인을 지원합니다. 이 튜토리얼에서는 비대칭 Cloud KMS 키를 사용하여 데이터에 서명하고 데이터를 확인하는 방법을 설명합니다.

학습할 내용

  • Cloud KMS API를 사용 설정하는 방법
  • 키링을 만드는 방법
  • 비대칭 서명/확인을 위한 암호화 키를 만드는 방법

2. 설정 및 요구사항

자습형 환경 설정

  1. Cloud Console에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. (Gmail 또는 G Suite 계정이 없으면 만들어야 합니다.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 새 사용자에게는 $300USD 상당의 무료 체험판 프로그램 참여 자격이 부여됩니다.

Cloud Shell 시작

이 Codelab에서는 Google Cloud에서 실행되는 무료 가상화 환경인 Cloud Shell을 사용합니다. GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 별도로 안내되지 않는 한 이 셸에서 모든 명령어를 실행합니다.

3. Cloud KMS 서비스 사용 설정

Cloud KMS를 사용하려면 먼저 프로젝트에서 서비스를 사용 설정해야 합니다. 이 작업은 프로젝트별로 한 번만 수행하면 됩니다. Cloud KMS 서비스를 사용 설정하려면 다음 명령어를 실행합니다.

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

사용 설정하는 데 최대 1분이 걸릴 수 있습니다. 명령어가 완료되면 성공을 보고합니다.

4. KMS 키 만들기

Cloud KMS 키링을 만듭니다. Cloud KMS에서 키링은 암호화 키의 논리적 모음입니다. 키링에는 위치와 같은 키에 관한 메타데이터가 포함됩니다. global 리전에서 my-keyring라는 키링을 만듭니다.

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

이제 방금 만든 키링 내에 용도가 asymmetric-signingmy-asymmetric-signing-key라는 이름의 CryptoKey를 만듭니다.

$ gcloud kms keys create "my-asymmetric-signing-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-signing" \
    --default-algorithm "rsa-sign-pkcs1-4096-sha512"

5. 서명 데이터

암호화와 달리 비대칭 Cloud KMS 키를 사용하여 암호화된 데이터를 복호화하려면 Cloud KMS 서비스에 온라인으로 액세스해야 합니다. gcloud 명령줄 도구를 사용하여 파일의 암호문을 복호화합니다.

서명할 데이터가 포함된 파일을 만들고 gcloud 명령줄 도구를 사용하여 Cloud KMS 키로 데이터에 서명합니다.

$ echo "my-contents" > ./data.txt
$ gcloud kms asymmetric-sign \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --version "1" \
    --digest-algorithm "sha512" \
    --input-file ./data.txt \
    --signature-file ./data.txt.sig

서명은 디스크의 data.txt.sig에 저장됩니다. data.txt.sig 파일을 열면 인쇄할 수 없는 이상한 문자가 있음을 알 수 있습니다. 이는 결과 데이터가 바이너리 형식이기 때문입니다.

서명을 데이터베이스에 저장하거나 HTTP 요청의 일부로 전송하는 경우 데이터를 인코딩해야 할 수 있습니다. 일반적인 인코딩 메커니즘은 base64입니다.

6. 데이터 확인

비대칭 키를 사용하면 Cloud KMS에서 직접 확인을 실행하지 않습니다. 대신 공개 키에 대한 액세스를 제공하며 공개 키 암호화를 통해 해당 공개 키를 사용하여 데이터를 확인합니다. 비대칭 키를 사용하면 확인을 완전히 오프라인으로 진행할 수 있으며 Cloud KMS 또는 기타 Google Cloud API에 액세스할 필요가 없습니다. 확인은 openssl와 같은 암호화 도구를 사용하거나 공개 키 암호화를 지원하는 프로그래밍 언어 또는 라이브러리를 사용하여 실행됩니다.

Cloud KMS에서 공개 키를 다운로드합니다.

$ gcloud kms keys versions get-public-key "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --output-file ./key.pub

openssl 명령줄 도구를 사용하여 공개 키에 대해 서명을 확인합니다.

$ openssl dgst -sha256 \
    -verify ./key.pub \
    -signature ./data.txt.sig ./data.txt

콘솔에 디지털 서명이 유효함을 나타내는 성공 메시지가 출력됩니다.

Verified OK

7. 축하합니다.

Cloud KMS API를 사용 설정하고 비대칭 서명 키를 만들고 데이터에 서명하고 확인했습니다. Cloud KMS는 강력한 제품이며 서명/인증은 그 기능의 일부에 불과합니다.

정리

탐색이 완료되면 프로젝트를 삭제하는 것이 좋습니다.

  • Cloud Platform Console로 이동합니다.
  • 종료하려는 프로젝트를 선택한 다음 상단의 '삭제'를 클릭합니다. 그러면 프로젝트 삭제 일정이 예약됩니다.

자세히 알아보기

라이선스

이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.