Classic/VPC 환경에서 이용 가능합니다.
최대 8 KB 크기의 데이터 서명값을 생성합니다. RSA2048 또는 ECDSA 키 타입으로만 요청할 수 있습니다.
요청
요청 형식을 설명합니다. 요청 형식은 다음과 같습니다.
| 메서드 | URI |
|---|---|
| POST | /kms/v1/keys/{keyTag}/sign |
요청 헤더
Key Management Service API에서 공통으로 사용하는 헤더에 대한 정보는 Key Management Service 요청 헤더에서 계정 인증 방식을 참조해 주십시오.
요청 경로 파라미터
요청 경로 파라미터에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
keyTag |
String | Required | 키 태그
|
요청 바디
요청 바디에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
data |
String | Required | 서명값을 생성할 Base64로 인코딩된 문자열 데이터
|
요청 예시
요청 예시는 다음과 같습니다.
curl --location --request POST 'https://ocapi.ncloud.com/kms/v1/keys/a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6/sign' \
--header 'x-ncp-apigw-timestamp: {Timestamp}' \
--header 'x-ncp-iam-access-key: {Access Key}' \
--header 'x-ncp-apigw-signature-v2: {API Gateway Signature}' \
--data '{
"data": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=="
}'
응답
응답 형식을 설명합니다.
응답 바디
응답 바디에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
code |
String | - | 성공 여부 |
data |
Object | - | 응답 결과 |
data.signature |
String | - | 생성된 서명값 |
응답 상태 코드
Key Management Service API에서 공통으로 사용하는 응답 상태 코드에 대한 정보는 Key Management Service 응답 상태 코드를 참조해 주십시오.
응답 예시
응답 예시는 다음과 같습니다.
{
"code": "SUCCESS",
"data": {
"signature": "{SIGNATURE}"
}
}
서명 파라미터
키 타입별 서명 알고리즘 파라미터는 다음과 같습니다.
| 키 타입 | 서명 알고리즘 | 해시 | MGF | Salt 길이 | Trailer field | 서명값 인코딩 |
|---|---|---|---|---|---|---|
RSA2048 |
RSASSA-PSS | SHA-256 | MGF1(SHA-256) | 222바이트 | 1 | 256바이트 고정 |
ECDSA |
SHA256withECDSA | SHA-256 | - | - | - | ASN.1 DER |
- Salt 길이 222바이트는 RSA-PSS의 최대 salt 길이이며,
ceil((2048 - 1) / 8) - 32 - 2 = 222로 산출됩니다. - 서명 대상은 요청 바디의
data를 Base64 디코딩한 원본 바이트입니다.
서명값 형식
data.signature는 다음 형식의 문자열입니다.
ncpkms:v{키 버전}:{Base64로 인코딩된 서명값}
Verify를 요청할 때는 위 형식을 그대로 전달해야 합니다. 반면 공개 키를 조회해 직접 검증하는 경우에는 ncpkms:v{키 버전}: 접두사를 제거한 후 Base64 디코딩해야 합니다.
공개 키로 직접 검증할 때는 위 서명 파라미터를 동일하게 지정해야 합니다. OpenSSL, Go, Node.js는 검증 시 salt 길이를 서명값에서 자동으로 추론하지만, Java(JCA)는 자동 추론을 지원하지 않으므로 PSSParameterSpec에 salt 길이를 반드시 명시해야 합니다. 서명 파라미터를 직접 맞출 필요가 없도록 하려면 Verify를 이용해 주십시오.