Search

VC/VP

대분류
블록체인
서적
소분류
자기주권 신원증명 구조분석서
최종 편집 일시
2024/10/27 15:48
생성 일시
2023/05/25 06:04
16 more properties

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
복사