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 Request parameters Responses 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 Request parameters Responses 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 Responses 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 Query parameters Responses data.kms
배열에 담기는 각 원소 정보: KMS 지갑 키 정보와 계정 지갑 주소 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 Request parameters Responses 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"
}
}