VC/VP
•
VC(Verifiable Credential) : 검증 가능한 자격증명
•
VP(Verifiable Presentation) : 검증 가능한 제공 ID 데이터 집합
•
VC/VP 특징
◦
사용자(Holder)는 발행인(Issuer)으로부터 VC를 발급 받을 수 있다.
◦
사용자(Holder)는 검증인(Verifier)에게 VC를 원본 그대로 제출하지 않는다.
◦
사용자(Holder)가 가진 VC의 ID 속성 중 필요한 속성만을 추출하여 하나의 VP로 생성한 뒤 자신의 서명을 추가하여 제출한다.
◦
사용자(Holder)로부터 VP를 수신한 검증기관은 VP에 포함된 ID속성과 사용자 정보를 확인한 후 각각의 ID 속성을 발행한 발행기관과 VP를 제출한 사용자에 대한 검증 작업을 수행한다.
VC 데이터 모델
VC : 발행인으로부터 발급받는 자신의 ID 속성을 증명할 수 있는 신원 증명
VC 데이터 모델 구성요소
•
Credential metadata의 정의 요소
◦
VC 발행인
◦
VC 명시 객체(Credential subject)
◦
VC만료 기간
◦
VC 폐기 방법 등
•
Claim(s)
Subject - Property - Value
◦
Subject에 대한 ID 속성
◦
해당 Subject의 Property 정보
◦
Property 값에 대한 value 정보
•
Proof(s)
◦
VC에 대한 진위 여부 검증에 필요한 값 포함
▪
ex) RSA, ECDSA, 생체 인증 등 검증을 위한 다양한 암호 기법
▪
VC의 Proof를 검증하여 해당 VC의 명시된 발행인으로부터 발행된 것인지 검증
VC 구성요소
@context
•
DID document의 @context 항목과 유사
•
통신 상호간의 정확한 통신을 위해 데이터가 어떤 값을 가지는지 정의를 내리는 역할 수행
•
context
{
"@context": [
"https://www.w3.org", // 공식 콘텍스트 명시 위치
"https://www.example.edu/context" // 개발자 자체 제작 콘텍스트 위치
],
...
Solidity
복사
◦
공식
▪
VC 데이터의 원활한 교환을 위해서 반드시 필요
▪
@context 항목은 ordered set 자료구조를 가지기 때문에 공식 콘텍스트는 @context 항목의 첫 번째 줄에 위치해야만 함.
▪
{
"@context": {
"©version": 1.1,
"©protected": true,
"id": "@id",
"type": "@type",
"VerifiableCredential": {
"@id": "https://www.w3.org/2018/credentials#VerifiableCredential",
"@context": {
"(aversion": 1.1,
"@protected": true,
"id": "@id",
"type": "@typ ",
"cud": "https://www.w3.org/2018/credentials#",
"sec": "https://w3id.org/security#",
"xsd": "http://www.w3.org/20Ol/XMLSchema#",
"credentialSchema": {
"@id": "cred:cred ntialSchema",
"@type": "@id",
"@context": {
"@version": 1.1,
"©protected": true,
"id": "(aid",
"type": "@type",
"cred": "https://www.w3.org/2018/credentials#",
"JsonSchemaValidator2018": "cred:3sonSchemaValidator2018"
}
},
"credentialstatus": {"@id": "cred:credentialStatus", "@type": "@id"),
"credentialSubject": {"@id": "cr d:credentialsubject", "@type": "@id"},
"evidence": {"@id": "cred:evidence", "@type": "@id"),
"expirationDate": {"@id": "cred:expirationDate", "@type": "xsd:dateTime"),
"holder": {"@id": "cred:holder", "@type": "@id"),
"issued": {"@id": "cred:issued", "@type": "xsd:dateTime"),
"issuer": {"@id": "cred:issuer", "@type": "@id"},
"issuanceDate": {"©id": "cred:issuanceDate", "@type": "xsd:dateTime"),
"proof": {"@id": "sec:proof", "@type": "@id", "@container": "@graph"},
"refreshService": {
"@id": "cred:refreshService1",
"@type": "@id",
"©context": {
"@version": 1.1,
"©protected": true,
"id": "@id",
"type": "@type",
"cred": "https://www.w3.org/2018/credentials#",
"ManualRefreshService2018": "cred:ManualRefreshService2018"
}
},
"termsOfUse": {...},
"validFrom": {...},
"validUntil": {...}
}
},
"VerifiablePresentation": {...},
...
Solidity
복사
◦
자체 제작
▪
개발하는 서비스에 추가적인 콘텍스트가 필요할 시 필요한 콘텍스트를 자체적으로 제작하면
▪
VC를 교환할 때 @context 참고하여 키 값들이 어떻게 정의됐는지 확인하고 올바른 값을 주고받을 수 있음
id
•
식별자 역할
•
다양한 종류의 URI 사용 가능
•
DID를 VC식별자로서 무조건적으로 사용해야하는 것은 아님.
{
"©context":[
"https://www.w3.org/2018/credentials/vl",
"https://www.example.edu/context"
],
"id": "http://example,edu/credential/yoon",
"type": ["VerifiableCredential", "KoreanUniversityCredential"],
...
"credentialSubject": {
"id": "did:sov:1234",
"degree": {
"name": "Hankuk university",
"major": "computer",
"gpa": "3.5"
}
...
Python
복사
type
•
어떤 데이터가 사용될 것인지 명시하는 항목
•
VerifiableCredential : VC는 공식 콘텍스트 내 정의된 VC 데이터 기본 구조에 따라 VC를 생성할 것이라는 의미
•
KoreanUniversityCredential : 자체 제작한 콘텍스트 내 정의된 데이터 구조에 따라 졸업 증명에 필요한 데이터를 생성할 것이라는 의미
•
만약 type에 정의된 값이 공식 콘텍스트에도 존재하고 자체 제작한 콘텍스트에도 존재한다면 공식 콘텍스트를 우선적으로 반영
따라서 @context는 ordered set 구조를 가지며, 공식 콘텍스트가 항상 맨 첫 줄에 위치해야 하는 이유가 됨.
"type": ["VerifiableCredential", "KoreanUniversityCredential"],
"proof": {
"type": "RsaSignature2018",
"created": "2020-01-01",
"creator": "Hankuk university",
"verificationMethod": "https://example.edu/issuers/keys/1",
"jws": "eyJhbGciOifweaobowbagkjgvbboewafda..."
}
}
Solidity
복사
issuer
•
VC를 발행한 사람 혹은 기관
•
발행인의 정보 입력 가능
•
DID가 아닌 다른 URI를 식별자로 사용할 수도 있음
issuanceDate & expirationDate
•
VC 유효 시작시간
•
VC 만료시간
issuanceDate → validFrom
expirationDate → validUntil
으로 변경됨.
credentialStatus
•
해당 VC가 폐기됐는지, 혹은 유효한지 등을 검증하기 위한 항목
•
정보
◦
id : VC의 상태를 확인할 수 있는 URL이 명시
◦
type : 어떤 방식으로 VC 상태를 검증할 수 있는지 명시
•
개발자가 credentialStatus 항목을 사용하기 위해선 CRL과 같은 기존 프로토콜을 사용하거나 새로운 프로토콜을 직접 개발한 후 credentialStatus에 적용하여 사용 가능
credentialSubject
•
VC가 가리키는 객체의 실직적인 ID 속성이 포함되어 있음.
•
복수 개의 Subject를 삽입할 수 있음
•
이름, 나이, 취미 등과 같은 단순한 ID 속성뿐만 아니라, 다른 사람과의 관계를 포함하는 등 다양한 방식으로 자신을 표현할 수 있는 속성을 넣어 ID 생성이 가능
proof
•
VC의 무결성을 검증해주는 항목
•
VC 발급 시 필수 포함 항목
•
type : 어떤 암호 기법을 사용하여 서명을 생성하였는지 확인 가능
•
created, creator : 해당 proof 생성 일자와 생성자 표시
•
verificationMethod : 발행인의 공개키 등 디지털 서명을 검증할 수 있는 값이 위치하는 URL 표시
•
jws : 해당 VC의 디지털 서명값을 표시
"proof": {
"type":"RsaSignature2018",
"created": "2020-01-01T20:00:00Z",
"creator": "Hankuk university",
"verificationMethod": "https://example.edu/issuers/keys/1",
"jws": "eyJhbGciOlfwaobowbagkjgvbboewafda..."
}
Python
복사