신뢰성명 및 증명저장
Version 1.0.0
English / 한국어
1. 신뢰성명
검증 가능한 성명은 실체를 증명하는 일부 속성에 사용됩니다.
신뢰성명 증명저장계약은 신뢰성명의 저장 서비스를 제공하며 이는 신뢰성명Id증명, 발급인ONT신분, ONT 신원 등 정보 소유자 및 철회여부 등과 같은 가용성정보를 기록하는 정보를 포함합니다.
신뢰성명 규정에 관한 설명은 다음 내용을 참고하세요 : 신뢰성명 규정
1.1 데이터구조와 규정
상세한 표준은 다음 내용을 참고하세요. https://github.com/kunxian-xia/ontology-DID/blob/master/docs/en/claim_spec.md
Java-sdk는 JSON Web Token의 서식을 채택하여 claim을 표시함으로써 성명발행자와 신청자 간의 전달이 원활할 수 있도록 합니다. jwt서식은 header,payload,signature을 포함합니다.
- Claim은 다음과 같은 데이터구조를 갖고 있습니다.
class Claim{
header : Header
payload : Payload
signature : byte[]
}
class Header {
public String Alg = "ONT-ES256";
public String Typ = "JWT-X";
public String Kid;
}
필드설명
alg
사용되는 서명프레임
typ
아래 두 값 중 하나가 될 수 있습니다.
JWT: 블록체인 증명이 claim에 포함되지 않는 것을 의미합니다.
JWT-X: 블록체인 증명이 claim의 일부임을 의미합니다.
kid
서명에 사용되는 퍼블릭 키
class Payload {
public String Ver;
public String Iss;
public String Sub;
public long Iat;
public long Exp;
public String Jti;
@JSONField(name = "@context")
public String Context;
public Map<String, Object> ClmMap = new HashMap<String, Object>();
public Map<String, Object> ClmRevMap = new HashMap<String, Object>();
}
ver
Claim 버전넘버
iss
발행자의 ontid
sub
신청자의 ontid
iat
구축시간
exp
기한 초가 시간
jti
claim의 유일한 표시
@context
지정성명내용이 문서 URI를 정의하며 모든 필드의 의미와 값의 유형을 정의합니다.
clm
claim내용을 포함하는 대상
clm-rev
각 claim의 철회시스템을 정의
1.2 신뢰성명 생성
유저의 입력내용에 따라 성명대상을 조직하고, 해당 성명대상은 서명된 데이터를 포함합니다. claim구축:
-
- 체인상에서 Issuer의 DDO존재여부를 조회합니다.
-
- 서명인의 퍼블릭 키는 반드시 DDO의 Owners에 있어야 합니다.
- 3.claimld는 claim중 Signature、Id、Proof를 삭제하는 데이터를 byte배열로 전환하고 1차 sha256 후 hexstring로 전환합니다.
-
- 서명을 요하는 json데이터를 Map로 전환 후 key를 배열합니다.
-
- Signature에서의 Value값: claim에서 Signature、Proof삭제 후 byte배열로 전환 후 2번의 sha256후 얻은 byte배열입니다.
Map<String, Object> map = new HashMap<String, Object>();
map.put("Issuer", dids.get(0).ontid);
map.put("Subject", dids.get(1).ontid);
Map clmRevMap = new HashMap();
clmRevMap.put("typ","AttestContract");
clmRevMap.put("addr",dids.get(1).ontid.replace(Common.didont,""));
String claim = ontSdk.nativevm().ontId().createOntIdClaim(dids.get(0).ontid,password,salt, "claim:context", map, map,clmRevMap,System.currentTimeMillis()/1000 +100000);
createOntIdClaim
String createOntIdClaim(String signerOntid, String password,byte[] salt, String context, Map<String, Object> claimMap, Map metaData,Map clmRevMap,long expire)
기능설명: 신뢰성명 구축
피라미터 | 필드 | 유형 | 서술 | 설명 |
---|---|---|---|---|
파라미터 력 | signerOntid | String | 서명인ontid | 필수 |
password | String | 서명인 암호 | 필수 | |
salt | byte[] | 암호해독에 필요한 파라미터 | 필수 | |
context | String | 지정 성명 내용이 정의한 문서 URI, 모든 필드의 의미와 값의 유형을 정의 | 필수 | |
claimMap | Map | 성명 내용 | 필수 | |
metaData | Map | 성명 발행자와 신청자의 ontid | 필수 | |
clmRevMap | Map | claim의 철회 매커니즘 | 필수 | |
expire | long | 성명기한 초과 시간 | 필수 | |
피라미터 송출 | claim | String | 신뢰성명 |
1.3 신뢰성명 검증
claim검증절차
-
- 체인상에 Metadata중Issuer의 DDO존재여부 확인
-
- Owner가 Sgnature중의 Publickeyld에 존재하는지 확인
-
- 서명을 요구하는 json데이터를 Map으로 전환 후 key 배열
-
- Signature를 삭제 후 서명검증 진행 (PublicKeyId의 id값에 따라 퍼블릭 키를 조회하며, 서명은 Signature중의 Value로 base64를 해독)
boolean b = ontSdk.nativevm().ontId().verifyOntIdClaim(claim);
verifyOntIdClaim
boolean verifyOntIdClaim(String claim)
기능설명: 신뢰성명 검증
파라미터 | 필드 | 유형 | 서술 | 설명 |
---|---|---|---|---|
파라미터 입력 | claim | String | 신뢰성명 | 필수 |
파라미터 송출 | true 혹은 false | boolean |
2. 신뢰성명 증명저장계약의 사용절차
해당 계약은 저장, 취소, 상태조회 등의 기능을 제공합니다.
2.1. 초기화 SDK
증명저장계약 사용 전 먼저 초기화 후 계약주소를 설치해야 합니다.
String ip = "http://127.0.0.1";
String restUrl = ip + ":" + "20334";
String rpcUrl = ip + ":" + "20336";
String wsUrl = ip + ":" + "20335";
OntSdk wm = OntSdk.getInstance();
wm.setRpc(rpcUrl);
wm.setRestful(restUrl);
wm.setDefaultConnect(wm.getRestful());
wm.openWalletFile("RecordTxDemo.json");
wm.setCodeAddress("803ca638069742da4b6871fe3d7f78718eeee78a");
Note: codeAddress증명저장계약 주소。
2.2 신뢰성명을 체인에 저장합니다.
sendCommit
String sendCommit(String issuerOntid, String password,byte[] salt, String subjectOntid, String claimId, Account payerAcct, long gaslimit, long gasprice)
기능설명: 데이터를 체인에 저장하고 증명저장을 성명합니다. 이때 해당 성명증명은 저장된 적이 없는 것으로 간주하고, Commit함수를 committer로 호출해야 성공적으로 증명을 저장할 수 있습니다. 그렇지 않으면 저장되지 않습니다. 저장성공 후 해당 성명의 상태는 committed로 표시됩니다.
파라미터 설명:
파라미터 | 필드 | 유형 | 서술 | 설명 |
---|---|---|---|---|
파라미터 입력 | issuerOntid | String | 신뢰성명 발급인의 디지털신분 ontid | 필수 |
파라미터 입력 | password | String | 디지털신분 암호 | 필수 |
파라미터 입력 | subjectOntid | String | 신뢰성명 신청인ontid | 필수 |
파라미터 입력 | claimId | String | 신뢰성명claim중 유일한 표시인 claim안의 Jit필드 | 필수 |
파라미터 입력 | payerAcct | String | 트랜젝션비용 지불자 계정 | 필수 |
파라미터 입력 | gaslimit | String | gaslimit | 필수 |
파라미터 입력 | gasprice | String | gasprice | 필수 |
파라미터 송출 | 트랜젝션hash | boolean |
코드 예시
String[] claims = claim.split("\\.");
JSONObject payload = JSONObject.parseObject(new String(Base64.getDecoder().decode(claims[1].getBytes())));
String commitHash = ontSdk.neovm().claimRecord().sendCommit(dids.get(0).ontid,password,dids.get(1).ontid,payload.getString("jti"),account1,ontSdk.DEFAULT_GAS_LIMIT,0)
2.3. 신뢰성명 검색 상태
sendGetStatus
String sendGetStatus(String claimId)
기능설명:신뢰성명 검색 상태
파라미터 설명:
claimId
: 신뢰성명claim중 유일한 표시인 claim안의 Jit필드
리턴 값: 두 부분: 첫 번째 부분, claim상태: “Not attested”, “Attested”, “Attest has been revoked”;두 번째 부분은 저장인의 ontid
示例代码
String getstatusRes2 = ontSdk.neovm().claimRecord().sendGetStatus(payload.getString("jti"));
2.4. 신뢰성명 취소
sendRevoke
String sendRevoke(String issuerOntid,String password,byte[] salt,String claimId,Account payerAcct,long gaslimit,long gas)
기능 설명: 신뢰성명 취소
파라미터 | 필드 | 유형 | 서술 | 설명 |
---|---|---|---|---|
파라미터 입력 | issuerOntid | String | 신뢰성명 발급인의 디지털신분 ontid | 필수 |
파라미터 입력 | password | String | 디지털신분 암호 | 필수 |
파라미터 입력 | salt | String | issuer의salt | 필수 |
파라미터 입력 | claimId | String | 신뢰성명claim중 유일한 표시인 claim안의 Jit필드 | 필수 |
파라미터 입력 | payerAcct | String | 트랜젝션비용 지불자 계정 | 필수 |
파라미터 입력 | gaslimit | String | gaslimit | 필수 |
파라미터 입력 | gasprice | String | gasprice | 필수 |
파라미출 | 트랜젝션hash | boolean |
표본코드
String revokeHash = ontSdk.neovm().claimRecord().sendRevoke(dids.get(0).ontid,password,salt,payload.getString("jti"),account1,ontSdk.DEFAULT_GAS_LIMIT,0);