--- title: "Get Public Key" slug: "security-kms2-token-public-key" updated: 2026-10-08T07:21:06Z published: 2026-10-08T07:21:06Z canonical: "api.ncloud-docs.com/security-kms2-token-public-key" --- > ## Documentation Index > Fetch the complete documentation index at: https://api.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Get Public Key Classic/VPC環境で利用できます。 公開鍵を照会します。RSAと ECDSAキータイプでのみリクエストできます。 ## リクエスト リクエスト形式を説明します。リクエスト形式は次の通りです。 | メソッド | URI | | --- | --- | | POST | /kms/v1/keys/{keyTag}/get-pub-key | ### リクエストヘッダ Key Management Service APIで共通して使用されるヘッダの詳細は、[Key Management Serviceのリクエストヘッダ](/docs/ja/security-kms#%EC%9A%94%EC%B2%AD%ED%97%A4%EB%8D%942%ED%86%A0%ED%81%B0%EC%9D%B8%EC%A6%9D)でトークン認証方式をご参照ください。 ### リクエストパスパラメータ リクエストパスパラメータの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `keyTag` | String | Required | キータグ - キー名から派生したキーの固有 ID - [Get Key List](/docs/ja/security-kms2-key-list)を参照 - REST APIで暗号化または復号をリクエストする際に使用 - キータグは機密情報として扱われない | ### リクエストボディ リクエストボディの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `keyVersion` | Integer | Optional | 照会するキーバージョン - 未入力の場合はキーの最新バージョンを表示 - 無効化されたキーバージョンは照会不可 | ### リクエスト例 リクエストのサンプルコードは次の通りです。 ``` curl --location --request POST 'https://ocapi.ncloud.com/kms/v1/keys/a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6/get-pub-key' \ --header 'x-ncp-ocapi-token: {Access Token}' \ --data '{ "keyVersion": 2 }' ``` ## レスポンス レスポンス形式を説明します。 ### レスポンスボディ レスポンスボディの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `code` | String | - | 成功したかどうか | | `data` | Object | - | レスポンス結果 | | `data.publicKey` | String | - | 公開鍵 | ### レスポンスステータスコード Key Management Service APIで共通して使用されるレスポンスステータスコードの詳細は、[Key Management Serviceのレスポンスステータスコード](/docs/ja/security-kms#%EC%9D%91%EB%8B%B5%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C2)をご参照ください。 ### レスポンス例 レスポンスのサンプルコードは次の通りです。 ``` { "code": "SUCCESS", "data": { "publicKey": "{PUBLIC_KEY_PEM}" } } ``` ## 公開鍵で署名検証 照会した公開鍵を利用して[Sign](/docs/ja/security-kms2-token-sign)で作成した署名値を直接検証する方法を説明します。 `data.publicKey`は X.509 SubjectPublicKeyInfo構造の PEM文字列(`-----BEGIN PUBLIC KEY-----`)です。 検証時には、次の3つの項目をリクエストしたキータイプに応じて指定します。 | 項目 | `RSA2048` | `ECDSA` | | --- | --- | --- | | 署名アルゴリズム | RSASSA-PSS | SHA256withECDSA | | 署名パラメータ | SHA-256、MGF1(SHA-256)、salt長222バイト、trailer field 1 | 別途パラメータなし | | 署名値エンコード | 256バイト固定 | ASN.1 DER | Salt長222バイトは RSA-PSSの最大 salt長であり、`ceil((2048 - 1) / 8) - 32 - 2 = 222`により算出されます。OpenSSL、Go、Node.jsは検証時に salt長を署名値から自動的に推論しますが、Java(JCA)は自動推論をサポートしていないため、必ず明示する必要があります。 ### 検証例 Javaで署名値を検証するサンプルコードは次の通りです。 ``` // 1. 公開鍵(PEM)のパース String base64Key = publicKey .replace("-----BEGIN PUBLIC KEY-----", "") .replace("-----END PUBLIC KEY-----", "") .replaceAll("\\s", ""); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64Key)); // 2. 署名値から"ncpkms:v{キーバージョン}:"の接頭辞を削除し、Base64デコード byte[] signatureBytes = Base64.getDecoder() .decode(signature.substring(signature.lastIndexOf(':') + 1)); // 3. 署名対象データ — Signリクエストの dataを Base64デコードした元のバイト byte[] data = Base64.getDecoder().decode(base64Data); ``` - RSA2048キー ``` PublicKey key = KeyFactory.getInstance("RSA").generatePublic(keySpec); Signature verifier = Signature.getInstance("RSASSA-PSS"); verifier.setParameter(new PSSParameterSpec( "SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 222, // RSA-PSSの最大 salt長 (RSA2048 + SHA-256) 1 )); verifier.initVerify(key); verifier.update(data); boolean valid = verifier.verify(signatureBytes); ``` - ECDSAキー ``` PublicKey key = KeyFactory.getInstance("EC").generatePublic(keySpec); Signature verifier = Signature.getInstance("SHA256withECDSA"); verifier.initVerify(key); verifier.update(data); boolean valid = verifier.verify(signatureBytes); ``` 参考 署名パラメータを直接一致させる必要がないように、[Verify](/docs/ja/security-kms2-token-verify)をご利用ください。 ## 公開鍵で暗号化 照会した公開鍵でデータを直接暗号化する方法について説明します。NAVERクラウドプラットフォーム KMSの`RSA2048`キータイプでのみ対応しています。`ECDSA`キータイプは署名・検証(SIGN_VERIFY)専用で提供されており、暗号化機能はサポートしていません。 暗号化を行う際には、次の条件を指定します。 | 項目 | 値 | | --- | --- | | アルゴリズム | RSAES-OAEP | | OAEPハッシュ | SHA-256 | | MGF | MGF1 with SHA-256 | | Label | なし | | 平文の最大サイズ | 190 bytes | ### 暗号化例 Javaで公開鍵を利用してデータを暗号化する例は次の通りです。 ``` // 1. 公開鍵(PEM)のパース String base64Key = publicKey .replace("-----BEGIN PUBLIC KEY-----", "") .replace("-----END PUBLIC KEY-----", "") .replaceAll("\\s", ""); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64Key)); PublicKey key = KeyFactory.getInstance("RSA").generatePublic(keySpec); // 2. 暗号化 — 平文は最大190bytes OAEPParameterSpec spec = new OAEPParameterSpec( "SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT); Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding"); cipher.init(Cipher.ENCRYPT_MODE, key, spec); byte[] ciphertextBytes = cipher.doFinal(plaintext); // 3. Decrypt APIで復号するには、「ncpkms:v{キー バージョン}:」という接頭辞をつけて渡す String ciphertext = "ncpkms:v" + keyVersion + ":" + Base64.getEncoder().encodeToString(ciphertextBytes); ``` 参考 KMS APIで暗号化する場合は、この手順を省略して[Encrypt](/docs/ja/security-kms2-token-encrypt)を利用します。公開鍵で直接暗号化したデータであっても、上記と同様の条件で暗号化されていれば、[Decrypt](/docs/ja/security-kms2-token-decrypt#%EA%B3%B5%EA%B0%9C%ED%82%A4%EC%95%94%ED%98%B8%ED%99%94%EB%B3%B5%ED%98%B8%ED%99%94)で復号できます。