์ด ํ์ด์ง์์๋ ์ฌ์ฉ ์ค์ ๋ ๋น๋์นญ ํค ๋ฒ์ ์ ๊ณต๊ฐ ํค ๋ถ๋ถ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
ํฌ์คํธ ํํ ์ปดํจํ (PQC) ์๊ณ ๋ฆฌ์ฆ(๋ฏธ๋ฆฌ๋ณด๊ธฐ)์ ๊ฒฝ์ฐ ๊ณต๊ฐ ํค๋ NIST PQC ํ์ค FIPS-203, FIPS-204, FIPS-205์ ์๋ณ๋ ํ์์ ๋๋ค. ๊ธฐํ ๋ชจ๋ (PQC๊ฐ ์๋) ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ ๊ณต๊ฐ ํค๋ PEM (Privacy-enhanced Electronic Mail) ํ์์ ๋๋ค. ์์ธํ ๋ด์ฉ์ RFC 7468์์ ์ผ๋ฐ ๊ณ ๋ ค์ฌํญ ๋ฐ ๋์ ๊ณต๊ฐ ํค ์ ๋ณด์ ํ ์คํธ ์ธ์ฝ๋ฉ ์น์ ์ ์ฐธ๊ณ ํ์ธ์.
ํ์ํ ์ญํ
๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ํ์ํ ๊ถํ์ ์ป์ผ๋ ค๋ฉด ๊ด๋ฆฌ์์๊ฒ ํค ๋๋ ์์ ๋ฆฌ์์ค์ ๋ํ Cloud KMS CryptoKey ๊ณต๊ฐ ํค ๋ทฐ์ด (roles/cloudkms.publicKeyViewer
) IAM ์ญํ ์ ๋ถ์ฌํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ธ์.
์ญํ ๋ถ์ฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ก์ ํธ, ํด๋, ์กฐ์ง์ ๋ํ ์ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด ์ฌ์ ์ ์๋ ์ญํ ์๋ ๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ํ์ํ ๊ถํ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํ์ํ ์ ํํ ๊ถํ์ ๋ณด๋ ค๋ฉด ํ์ ๊ถํ ์น์ ์ ํผ์น์ธ์.
ํ์ ๊ถํ
๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ค์ ๊ถํ์ด ํ์ํฉ๋๋ค.
-
cloudkms.cryptoKeyVersions.viewPublicKey
-
cloudkms.locations.get
-
cloudkms.locations.list
-
resourcemanager.projects.get
์ปค์คํ ์ญํ ์ด๋ ๋ค๋ฅธ ์ฌ์ ์ ์๋ ์ญํ ์ ์ฌ์ฉํ์ฌ ์ด ๊ถํ์ ๋ถ์ฌ๋ฐ์ ์๋ ์์ต๋๋ค.
๊ณต๊ฐ ํค ๊ฐ์ ธ์ค๊ธฐ
๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ฌ ํ์์ ์ง์ ํ ์ ์์ต๋๋ค.
ํ์์ด ์ง์ ๋๋ฉด ํค๊ฐ ์๋ต์ public_key
ํ๋์ ์ง์ ๋ ํ์์ผ๋ก ๋ฐํ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ต์ pem
ํ๋์ ๋ฐํ๋ฉ๋๋ค.
์ฌ์ฉ ์ค์ ๋ ๋น๋์นญ ํค ๋ฒ์ ์ ๊ณต๊ฐ ํค๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ ํค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ ๋น๋์นญ ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ฌ ํค์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ ํค ๋ฒ์ ์ ํด๋นํ๋ ํ์์
๋๋ณด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.๊ณต๊ฐ ํค ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค๊ฐ ํ๋กฌํํธ์ ํ์๋ฉ๋๋ค. ๊ณต๊ฐ ํค๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ ์ ์์ต๋๋ค. ๊ณต๊ฐ ํค๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด ๋ค์ด๋ก๋๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค ๊ฐ์ ธ์ค๊ธฐ ์ต์ ์ด ํ์๋์ง ์์ผ๋ฉด ๋ค์์ ํ์ธํฉ๋๋ค.
- ํค๊ฐ ๋น๋์นญ ํค์ ๋๋ค.
- ํค ๋ฒ์ ์ด ์ฌ์ฉ ์ค์ ๋์์ต๋๋ค.
cloudkms.cryptoKeyVersions.viewPublicKey
๊ถํ์ด ์์ต๋๋ค.
Google Cloud ์ฝ์์์ ๋ค์ด๋ก๋ํ ๊ณต๊ฐ ํค์ ํ์ผ ์ด๋ฆ์ ๋ค์ ํ์์ ๋๋ค.
KEY_RING-KEY_NAME-KEY_VERSION.pub
ํ์ผ ์ด๋ฆ์ ๊ฐ ๋ถ๋ถ์ด ํ์ดํ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค(์: ringname-keyname-version.pub
).
gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys versions get-public-key KEY_VERSION \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --public-key-format PUBLIC_KEY_FORMAT \ --output-file OUTPUT_FILE_PATH
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_VERSION
: ํค ๋ฒ์ ๋ฒํธ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.PUBLIC_KEY_FORMAT
: ๊ณต๊ฐ ํค๋ฅผ ๋ด๋ณด๋ผ ํ์์ ๋๋ค. PQC ์๊ณ ๋ฆฌ์ฆ(๋ฏธ๋ฆฌ๋ณด๊ธฐ)์ ๊ฒฝ์ฐnist-pqc
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํค์ ๊ฒฝ์ฐpem
์ ์ฌ์ฉํ๊ฑฐ๋ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.OUTPUT_FILE_PATH
: ๊ณต๊ฐ ํค ํ์ผ์ ์ ์ฅํ ๊ฒฝ๋ก์ ๋๋ค(์:public-key.pub
).
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด --help
ํ๋๊ทธ์ ํจ๊ป ๋ช
๋ น์ด๋ฅผ ์คํํ์ธ์.
C#
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS C# SDK๋ฅผ ์ค์นํฉ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Node.js
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Node.js SDK๋ฅผ ์ค์นํฉ๋๋ค.
PHP
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Google Cloud์์ PHP ์ฌ์ฉ์ ๊ดํด ์์๋ณด๊ณ Cloud KMS PHP SDK๋ฅผ ์ค์นํ์ธ์.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
Ruby
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Ruby ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Ruby SDK๋ฅผ ์ค์นํฉ๋๋ค.
API
์ด ์์์์๋ curl์ HTTP ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ API ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค. ์ก์ธ์ค ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud KMS API ์ก์ธ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
CryptoKeyVersions.getPublicKey ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํฉ๋๋ค.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION/publicKey?public_key_format=PUBLIC_KEY_FORMAT" \ --request "GET" \ --header "authorization: Bearer TOKEN"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: ํค๋ง์ด ํฌํจ๋ ํ๋ก์ ํธ์ ID์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_VERSION
: ํค ๋ฒ์ ๋ฒํธ์ ๋๋ค.PUBLIC_KEY_FORMAT
: ๊ณต๊ฐ ํค๋ฅผ ๋ด๋ณด๋ผ ํ์์ ๋๋ค. PQC ์๊ณ ๋ฆฌ์ฆ(๋ฏธ๋ฆฌ๋ณด๊ธฐ)์ ๊ฒฝ์ฐNIST_PQC
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํค์ ๊ฒฝ์ฐPEM
์ ์ฌ์ฉํ๊ฑฐ๋ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
PQC๊ฐ ์๋ ํค์ ๊ณต๊ฐ ํค ํ์์ ์๋ตํ๋ฉด ์ถ๋ ฅ์ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
{ "pem": "-----BEGIN PUBLIC KEY-----\nQ29uZ3JhdHVsYXRpb25zLCB5b3UndmUgZGlzY292ZX JlZCB0aGF0IHRoaXMgaXNuJ3QgYWN0dWFsbHkgYSBwdWJsaWMga2V5ISBIYXZlIGEgbmlj ZSBkYXkgOik=\n-----END PUBLIC KEY-----\n", "algorithm": "ALGORITHM", "pemCrc32c": "2561089887", "name": "projects/PROJECT_ID/locations/LOCATION/keyRings/ KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/ KEY_VERSION", "protectionLevel": "PROTECTION_LEVEL" }
๊ณต๊ฐ ํค ํ์์ด NIST_PQC
์ธ PQC ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ ์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํฉ๋๋ค.
{ "publicKeyFormat": "NIST_PQC", "publicKey": { "crc32cChecksum": "1985843562", "data": "kdcOIrFCC5kN8S4i0+R+AoSc9gYIJ9jEQ6zG235ZmCQ=" } "algorithm": "ALGORITHM", "name": "projects/PROJECT_ID/locations/LOCATION/keyRings/ KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/ KEY_VERSION", "protectionLevel": "PROTECTION_LEVEL" }