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-signing이라는 용도로 my-asymmetric-signing-key라는 암호화 키를 만듭니다.

$ 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 콘솔로 이동합니다.
  • 종료하려는 프로젝트를 선택한 다음 상단의 '삭제'를 클릭합니다. 그러면 프로젝트 삭제 일정이 예약됩니다.

자세히 알아보기

라이선스

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