KMS API 클라우드 KMS(Key Management System)는 클라우드가 사용자를 대신해 암호화된 키들을 관리해주는 서비스입니다(Google Cloud Platform (GCP) KMS , Amazon Web Services (AWS) KMS ).
블록체인 Open API - KMS API는, 이렇게 클라우드 KMS에 보관된 키를 블록체인 계정 지갑 키(Private Key, 지갑 개인키)로 사용할 수 있게 해주는 API입니다. KMS API를 사용하면 사용자가 블록체인 계정 지갑 키를 직접 관리하지 않아도 KMS에 보관된 키로 트랜잭션을 생성하고, 트랜잭션에 서명하고, 이를 블록체인에 전송할 수 있습니다. KMS API가 지원하는 클라우드 KMS 플랫폼은 GCP 와 AWS 입니다.
예시로, 다음과 같이 KMS API를 사용할 수 있습니다.
클라우드 KMS에 이미 키가 있는 경우
클라우드 크리덴셜 준비 Hive 콘솔 > 블록체인 > KMS 인증 정보 > 인증 정보 추가하기 에서 클라우드 서비스 계정 정보(Credentials
)를 등록하고 x-credential-id
를 획득 클라우드 KMS 키 정보 준비 지갑 주소 등록 API 호출 지갑 주소 획득 KMS 지갑 정보 조회 KMS 지갑으로 트랜잭션을 생성: 토큰 전송 , 스마트 컨트랙트 배포 등 새로운 트랜잭션을 생성하는 API를 호출 생성한 트랜잭션에 KMS 서명 API 로 서명 서명한 트랜잭션을 블록체인 네트워크에 전송 클라우드 KMS를 사용하지 않거나, KMS에 키가 없는 경우
클라우드 KMS 서비스 계정 준비 지갑 키 생성: 지갑 키 생성 API로 생성 클라우드 크리덴셜 준비 블록체인 API 인증 키 준비 Hive 콘솔 > 블록체인 > KMS 인증 정보 > 인증 정보 추가하기 에서 클라우드 서비스 계정 정보(Credentials
)를 등록하고 x-credential-id
를 획득 x-credential-id
와 API 인증 키를 사용해 KMS 지갑 키 생성 지갑 키와 지갑 주소 획득 KMS 지갑 정보 조회 KMS 지갑으로 트랜잭션을 생성: 토큰 전송 , 스마트 컨트랙트 배포 등 새로운 트랜잭션을 생성하는 API를 호출 생성한 트랜잭션에 KMS 서명 API 로 서명 서명한 트랜잭션을 블록체인 네트워크에 전송
Note KMS 서명 API 로 서명할 수 있는 트랜잭션은 KMS 지갑 키로 생성한 트랜잭션뿐입니다.
사전 준비 클라우드 KMS Credentials
를 Hive 콘솔 > 블록체인 > KMS 인증 정보 > 인증 정보 추가하기 에 등록합니다.
블록체인 계정 지갑 주소와 KMS 지갑 키 생성 클라우드 서비스 계정으로 KMS에 지갑 키를 생성하고, 이 지갑 키를 기반으로 블록체인 계정 지갑 주소를 생성합니다. 지갑 키는 KMS에 저장되고 확인할 수 없습니다. 키 생성 시 지연이 발생하면 지갑 주소가 응답값에 포함되지 않을 수 있습니다. 지갑 주소는 KMS 지갑 정보 조회 API 에서 키 아이디(keyId
)를 사용해 조회할 수 있습니다.
Request URL 필드명 설명 타입 필수 여부 x-network 블록체인 네트워크 string Y x-credential-id Hive 콘솔에 Credentials
등록 시 얻는 고유한 값 string Y Authorization API를 호출하기 위한 인증 토큰 string Y
Request parameters 필드명 설명 타입 필수 여부 keyName 생성할 키 이름으로 원하는 내용을 입력합니다. string Y keyOptions KMS 지갑 키 옵션 정보 json Y keyOptions.location 키를 저장할 위치입니다. 각 클라우드에서 사용하는 KMS 위치 정보입니다. string GCP: Y (location, 예시: asia-northeast3) AWS: Y (region, 예시: ap-northeast-2d) keyOptions.project GCP 프로젝트 ID string keyOptions.keyRing GCP 키링 정보 string
Responses 필드명 설명 타입 code API 호출 결과 코드, 0:성공 number message 결과 메시지 string data API 응답 데이터 json data.keyId 생성한 키의 고유ID string data.keyName 생성한 키의 별칭 string data.address KMS 키로 생성한 블록체인 계정 지갑 주소 string data.purpose 키 사용 용도 string data.algorithm 키 생성 알고리즘 종류 string data.cloudType 클라우드 플랫폼 종류 string data.network 키를 사용할 블록체인 네트워크 string data.options 키 옵션 정보 json data.options.project GCP 프로젝트 ID string data.options.location 키가 저장되는 위치 string data.options.keyRing GCP 키링 정보 string data.options.keyVersion GCP 키 버전 정보 string data.regId 키 등록자 ID string data.modId 키 수정자 ID string data.createdAt 키 등록일 string data.updatedAt 키 수정일 string
Request sample curl -X 'POST'
'https://sandbox-bc-api.qpyou.cn/core/v1/kms'
-H 'accept: application/json'
-H 'x-credential-id: eb6cc005-b8d0-bc96-8b60-a531c2f15fd2'
-H 'x-network: polygon'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXlObyI6MSwiaWQiOiJwbGF0Zm9ybSIsImNvbXBhbnkiO...
-H 'Content-Type: application/json'
-d '{
"keyName": "test-key",
"keyOptions": {
"project": "test-project",
"location": "asia-northeast3",
"keyRing": "test-keyring"
},
"requesterId": "system"
}'
Response sample {
"code" : 0 ,
"message" : "success" ,
"data" : {
"keyId" : "test1-game-provider" ,
"keyName" : "projects/tribal-octane-403302/locations/asia-northeast3/keyRings/test-keyring-001/cryptoKeys/test1-game-provider/cryptoKeyVersions/1" ,
"address" : "0xc5AC98006fe612395b132742Fbe80a6Dc184670a" ,
"purpose" : "ASYMMETRIC_SIGN" ,
"algorithm" : "EC_SIGN_SECP256K1_SHA256" ,
"cloudType" : "gcp" ,
"network" : "polygon" ,
"options" : {
"project" : "project" ,
"location" : "asia-northeast3" ,
"keyRing" : "keyring" ,
"keyVersion" : "1"
},
"regId" : "test" ,
"modId" : null ,
"createdAt" : "2024-02-22T08:28:04.000Z" ,
"updatedAt" : null
}
}
블록체인 계정 지갑 주소 등록 KMS 지갑 키를 기반으로 블록체인 계정 지갑 주소를 생성하고 이를 Hive 서버에 등록합니다. GCP 사용 시 키 버전(keyVersion
)을 명시해야 합니다.
Request URL 필드명 설명 타입 필수 여부 x-network 블록체인 네트워크 string Y x-credential-id Hive 콘솔에 Credentials
등록 시 얻는 고유한 값 string Y Authorization API를 호출하기 위한 인증 토큰 string Y
Request parameters 필드명 설명 타입 필수 여부 keys KMS 지갑 키 정보 array(json) Y keys.keyId 생성한 키 고유 ID string Y keys.keyVersion GCP 사용 시 키 버전 정보 string keyOptions 키 옵션 정보 json Y keyOptions.location 키를 저장할 위치입니다. 각 클라우드에서 사용하는 KMS 위치 정보입니다. string GCP: Y (location, 예시: asia-northeast3) AWS: Y (region, 예시: ap-northeast-2d) keyOptions.project GCP 프로젝트 ID string keyOptions.keyRing GCP 키링 정보 string requesterId 요청자 ID입니다. API 호출 주체를 구분하기 위한 임의의 값입니다. KMS 지갑 생성 시 Hive 콘솔에서 로그인한 계정 ID가 입력됩니다. string N
Responses 필드명 설명 타입 code API 호출 결과 코드, 0:성공 number message 결과 메시지 string data API 응답 데이터 json data.keyId 생성한 키의 고유ID string data.keyName 생성한 키의 별칭 string data.address KMS 키로 생성한 블록체인 계정 지갑 주소 string data.purpose 키 사용 용도 string data.algorithm 키 생성 알고리즘 종류 string data.cloudType 클라우드 플랫폼 종류 string data.network 키를 사용할 블록체인 네트워크 string data.options 키 옵션 정보 json data.options.project GCP 프로젝트 ID string data.options.location 키가 저장되는 위치 string data.options.keyRing GCP 키링 정보 string data.options.keyVersion GCP 키 버전 정보 string data.regId 키 등록자 ID입니다. requesterId
와 동일합니다. string data.modId 키 수정자 ID string data.createdAt 키 등록일 string data.updatedAt 키 수정일 string
Request sample curl -X 'POST'
'https://sandbox-bc-api.qpyou.cn/core/v1/kms/import'
-H 'accept: application/json'
-H 'x-credential-id: 9b3c0c1d-868c-71ea-a1a9-e615148b7f14'
-H 'x-network: polygon'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXlObyI6MSwiaWQiOiJwbGF0Zm9ybSIsImNvbXBhbnkiOm51bGwsInJvb...'
-H 'Content-Type: application/json'
-d '{
"keys": [
{
"keyId": "test1-game-provider",
"keyVersion": "1"
}
],
"keyOptions": {
"project": "kms-test",
"location": "asia-northeast3",
"keyRing": "key-ring"
},
"requesterId": "system"
}'
Response sample {
"code" : 0 ,
"message" : "success" ,
"data" : {
"keyId" : "kms-key-002" ,
"keyName" : "projects/quixotic-carver-412405/locations/asia-northeast3/keyRings/keyring/cryptoKeys/kms-key-002/cryptoKeyVersions/1" ,
"address" : "0x1e0481127b0ed12b6b6911bec32d414d76042860" ,
"purpose" : "ASYMMETRIC_SIGN" ,
"algorithm" : "EC_SIGN_SECP256K1_SHA256" ,
"cloudType" : "gcp" ,
"network" : "polygon" ,
"options" : {
"project" : "quixotic-carver-412405" ,
"location" : "asia-northeast3" ,
"keyRing" : "keyring" ,
"keyVersion" : "1"
},
"regId" : "system" ,
"modId" : null ,
"createdAt" : "2024-02-22T08:28:04.000Z" ,
"updatedAt" : null
}
}
KMS 지갑 키 정보와 계정 지갑 주소 조회 KMS 지갑 키 고유 ID(keyId
) 또는 키 이름(keyName
)으로 KMS 지갑 키 정보와 계정 지갑 주소를 조회합니다. 키 생성 시 지갑 주소를 확인하지 못했다면 사용할 수 있습니다.
Request URL Path parameters 필드명 설명 타입 필수 여부 key 키 고유 ID 또는 키 이름 string Y
필드명 설명 타입 필수 여부 x-credential-id Hive 콘솔에 Credentials
등록 시 얻는 고유한 값 string Y Authorization API를 호출하기 위한 인증 토큰 string Y
Responses 필드명 설명 타입 code API 호출 결과 코드 , 0:성공 number message 결과 메시지 string data API 응답 데이터 json data.keyId 생성한 키의 고유ID string data.keyName 생성한 키의 별칭 string data.purpose 키 사용 용도 string data.algorithm 키 생성 알고리즘 종류 string data.cloudType 클라우드 플랫폼 종류 string data.network 키를 사용할 블록체인 네트워크 string data.options 키 옵션 정보 json data.options.project GCP 프로젝트 ID string data.options.location 키가 저장되는 위치 string data.options.keyRing GCP 키링 정보 string data.options.keyVersion GCP 키 버전 정보 string data.regId 키 등록자 ID string data.modId 키 수정자 ID string data.createdAt 키 등록일 string data.updatedAt 키 수정일 string
Request sample curl -X 'GET'
'https://sandbox-bc-api.qpyou.cn/core/v1/kms/kms-key-002'
-H 'accept: application/json'
-H 'x-credential-id: 9b3c0c1d-868c-71ea-a1a9-e615148b7f14'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXlObyI6MSwiaWQiOiJwbGF0Zm9ybSIsImNvbXBhbnkiOm51bGwsInJvbGUiOiJhZG1pb...'
Response sample {
"code" : 0 ,
"message" : "success" ,
"data" : {
"keyId" : "test1-game-provider" ,
"keyName" : "projects/tribal-octane-403302/locations/asia-northeast3/keyRings/test-keyring-001/cryptoKeys/test1-game-provider/cryptoKeyVersions/1" ,
"address" : "0xc5AC98006fe612395b132742Fbe80a6Dc184670a" ,
"purpose" : "ASYMMETRIC_SIGN" ,
"algorithm" : "EC_SIGN_SECP256K1_SHA256" ,
"cloudType" : "gcp" ,
"network" : "polygon" ,
"options" : {
"project" : "project" ,
"location" : "asia-northeast3" ,
"keyRing" : "keyring" ,
"keyVersion" : "1"
},
"regId" : "test" ,
"modId" : null ,
"createdAt" : "2024-02-22T08:28:04.000Z" ,
"updatedAt" : null
}
}
KMS 지갑 키 정보와 계정 지갑 주소 목록 조회 KMS 지갑 키 정보와 계정 지갑 주소 목록을 조회합니다.
Request URL 필드명 설명 타입 필수 여부 x-network 블록체인 네트워크 string Y x-credential-id Hive 콘솔에 Credentials
등록 시 얻는 고유한 값 string Y Authorization API를 호출하기 위한 인증 토큰 string Y
Query parameters 필드명 설명 타입 필수 여부 page 현재 페이지 번호 number N limit 한 페이지에 노출할 KMS 지갑 키 정보와 계정 지갑 주소의 개수 number N
Responses 필드명 설명 타입 code API 호출 결과 코드, 0:성공 number message 결과 메시지 string data API 응답 데이터 json data.kms KMS 지갑 키 정보와 지갑 주소 목록 array(json) data.meta 페이지네이션 정보 json data.meta.totalItems 조회 결과 총 개수(KMS 지갑 키와 지갑 주소 정보 개수) number data.meta.itemsPerPage 한 페이지에 노출되는 KMS 지갑 키와 지갑 주소 정보 개수 number data.meta.totalPages 총 페이지 수 number data.meta.currentPage 현재 페이지 번호 number
data.kms
배열에 담기는 각 원소 정보: KMS 지갑 키 정보와 계정 지갑 주소 필드명 설명 타입 keyId 생성한 키의 고유ID string keyName 생성한 키의 별칭 string address KMS 키로 생성한 블록체인 계정 지갑 주소 string purpose 키 사용 용도 string algorithm 키 생성 알고리즘 종류 string cloudType 클라우드 플랫폼 종류 string network 키를 사용할 블록체인 네트워크 string options 키 옵션 정보 json options.project GCP 프로젝트 ID string options.location 키가 저장되는 위치 string options.keyRing GCP 키링 정보 string options.keyVersion GCP 키 버전 정보 string regId 키 등록자 ID string modId 키 수정자 ID string createdAt 키 등록일 string updatedAt 키 수정일 string
Request sample curl -X 'GET'
'https://sandbox-bc-api.qpyou.cn/core/v1/kms?page=1&limit=10'
-H 'accept: application/json'
-H 'x-credential-id: 41e26545-547e-7632-be1f-289f75c092d2'
-H 'x-network: polygon'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXlObyI6MSwiaWQiOiJwbGF0Zm9ybSIsImNvbXBhbnkiOm51bGwsInJv...'
Response sample {
"code" : 0 ,
"message" : "success" ,
"data" : {
"kms" : [
{
"keyId" : "test-polygon-001" ,
"keyName" : "projects/tribal-octane-403302/locations/asia-northeast3/keyRings/test-keyring-001/cryptoKeys/test-polygon-001/cryptoKeyVersions/1" ,
"address" : "0x599220fb6cd54553b9c2dfda3b0f711d7ebc21fb" ,
"purpose" : "ASYMMETRIC_SIGN" ,
"algorithm" : "EC_SIGN_SECP256K1_SHA256" ,
"cloudType" : "gcp" ,
"network" : "polygon" ,
"options" : {
"project" : "tribal-octane-403302" ,
"location" : "asia-northeast3" ,
"keyRing" : "test-keyring-001" ,
"keyVersion" : "1"
},
"regId" : "system" ,
"modId" : null ,
"createdAt" : "2024-02-22T08:27:58.000Z" ,
"updatedAt" : null
},{
"keyId" : "kms-key-002" ,
"keyName" : "projects/quixotic-carver-412405/locations/asia-northeast3/keyRings/keyring/cryptoKeys/kms-key-002/cryptoKeyVersions/1" ,
"address" : "0x1e0481127b0ed12b6b6911bec32d414d76042860" ,
"purpose" : "ASYMMETRIC_SIGN" ,
"algorithm" : "EC_SIGN_SECP256K1_SHA256" ,
"cloudType" : "gcp" ,
"network" : "polygon" ,
"options" : {
"project" : "quixotic-carver-412405" ,
"location" : "asia-northeast3" ,
"keyRing" : "keyring" ,
"keyVersion" : "1"
},
"regId" : "system" ,
"modId" : null ,
"createdAt" : "2024-02-22T08:28:04.000Z" ,
"updatedAt" : null
}
] ,
"meta" : {
"totalItems" : 2 ,
"itemCount" : 2 ,
"itemsPerPage" : 10 ,
"totalPages" : 1 ,
"currentPage" : 1
}
}
}
KMS 서명 KMS 지갑 키로 트랜잭션에 서명합니다. KMS 지갑 계정으로 생성한 트랜잭션만 KMS 지갑 키로 서명할 수 있습니다.
Request URL 필드명 설명 타입 필수 여부 x-credential-id Hive 콘솔에 Credentials
등록 시 얻는 고유한 값 string Y Authorization API를 호출하기 위한 인증 토큰 string Y
Request parameters 필드명 설명 타입 필수 여부 from 서명을 진행할 KMS 지갑 주소입니다. 트랜잭션을 생성하는 API(예시 ) Request Body의 from
과 동일해야 합니다. string Y unsignedTx 서명되지 않은 트랜잭션 데이터입니다. 트랜잭션을 생성하면 응답값으로 받는 data.rawTx
입니다. 아래 종류를 지원합니다. 1. 트랜잭션 데이터 2. 다중 서명 트랜잭션 데이터(x-network
가 polygon
일 때) string Y
Responses 필드명 설명 타입 code API 호출 결과 코드, 0:성공 number message 결과 메시지 string data API 응답 데이터 json data.signedTx 서명된 트랜잭션 정보 string
Request sample curl -X 'POST'
'http://sandbox-bc-api.qpyou.cn/core/v1/kms/sign'
-H 'accept: application/json'
-H 'x-credential-id: eb6cc005-b8d0-bc96-8b60-a531c2f15fd2'
-H 'Content-Type: application/json'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20yd...'
-d '{
"from": "0xc5AC98006fe612395b132742Fbe80a6Dc184670a",
"unsignedTx": "0x5a0ca3a7eebbafa946da6ed0160930fc4f334887dbf11a9b38937ab8831fd125..."
}'
Response sample {
"code" : 0 ,
"message" : "success" ,
"data" : {
"signedData" : "string"
}
}