W3C?
W3C 탈중앙화 식별자 표준은 W3C(World Wide Web Consortium)에서 제정된 분산형 식별자 시스템에 대한 표준입니다. 이 표준은 개인이 자신의 신원을 소유하고 관리 할 수 있는 방법을 제공해서 중앙집중식 식별자 시스템에 대한 의존을 줄이고 보안성과 개인 정보 보호를 강화하기 위해 개발 되었습니다. 이것은 SSI(Self-Sovereign) 와 밀접한 관련이 있으며, 개인이 자신의 신원 정보를 안전하게 관리하고 필요한 경우에만 공유할 수 있는 목적을 가지고 있습니다.
W3C Verifiable Credential Data Model
Credential: 신원에 필요한 정보이다. 주민등록증, 운전면허증 등의 신분증은 물리적인 Credential이라고 할 수 있다. |
디지털 환경에서 자신의 신원을 증명하고 Credential의 유효성을 보장하기 위해 W3C Verifiable Credential Data Model(검증 가능한 크리덴셜 데이터 모델) 을 표준으로 사용한다. 이 모델은 Claim. VC,VP등으로 구성된다.
https://sang969.tistory.com/94 참조
검증가능한 크리덴셜이란
신분증과 같이 우리가 일상에서 사용하는 크리덴셜에는 다음과 같다
- 신분증의 주체를 식별할 수 있는 정보- 주민등록번호, 이름,사진 등
- 해당 신분증을 발급한 기관 정보- 정부, 경찰청, 외교부 등
- 크리덴셜의 요도에 대한 정보 - 주민등록증, 운전면허증, 여권 등
- 발급한 기관이 보증하는 주체에 대한 속성정보- 국적, 생일, 면허, 종류 등
- 신분증의 제약조건에 대한 정보 - 유요기관, 발급날짜 등
디지털 세계에서 사용하려는 크리덴셜도 물리적 세계의 신분증과 동일한 정보를 제공할 수 있어야 겠죠?
자기주권 신원 SSI(Self-sovereign Identify) 체계에서는 이를 Verifiable Credential(검증 가능한 크리덴셜)일고 부르고 여기서 핵심은 크리덴셜이 '검증가능한' 것이라는 점입니다.
VC생태계 더 설명하자면
VC Credential Model의 핵심 주체 및 관계는 아래 도식상의 모델로 표현된다.
SSI 체계에서 기본이 되는 모델이며, 간략하게 용어와 역할을 알아보자
Issuer(발급자) | Holder의 신원을 보증하는 주체이다. 일반적으로 Holder에 대한 정보를 가지고 있으며 Holder가 요청하면 VC의 형태로 발급한다. |
Holder(보유자) | 자신의 신원을 주장하기 위해 VC를 보유하고 있는 주체이다. VC를 바탕으로 Verifiable Presentation(검증가능한 프리젠테이션,VP)를 생성할 수 있다. |
Verifier(검증자) | Holder의 신원을 검증하려는 주체이다. 보통 자신의 서비스를 제공하기 위해 Holder에 대한 정보를 요구한다. |
Verifiable Data Registry(검증가능한 데이터 저장소) | VC를 검증하기 위해 필요한 식별자, 키 쌍, 메타데이터 등을 저장하는 저장소이다. 현재 블록체인이 주로 사용되고 있으나 신뢰할 수 있는 방식이면 어떤 종류라도 가능하다. |
기본 컨셉
Holder가 Issuer에게 VC를 요청하면, Isser는 Holder가 본인인지 확인한 후 본인이 맞다면 VC를 전달하게 된다. VC는 입력의 정보가 나열된 데이터 형식으로 그 형태는 아래와 같다.
@Context
{
"@context": [
// 본 데이터가 VC라는 형식에 관한 것임을 설명한다.
"https://www.w3.org/2018/credentials/v1",
// 많은 종류의 VC 중 해당 VC가 어떠한 것에 관한 것인지를 확인할 수 있어야 한다.
"https://www.w3.org/2018/credentials/examples/v1"
],
"id": "http://example.edu/credentials/58473",
"type": ["VerifiableCredential", "AlumniCredential"],
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"alumniOf": {
"id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
"name": [
{
"value": "Example University",
"lang": "en"
},
{
"value": "Exemple d'Université",
"lang": "fr"
}
]
}
},
"proof": {}
}
- 두 소프트웨어 시스템이 데이터를 교환 해야하는 경우 두 시스템이 이해하는 용어를 사용 해야한다. 비유하자면 두 사람이 어떻게 의사소통을 하는지 고려하는것
- 검증가능한 크리덴셜 및 검증가능한 프레젠테이션에는 URIs로 식별되는 많은 속성과 값이 있다.
- @context 속성을 사용하여 이러한 짧은 별칭을 특정 VC, VP에 필요한 URI 매핑
- @context의 속성 값은 첫 번째 항목이 https://www.w3.org/2018/credentials/v1 값을 갖는 URI 인 순서 집합이어야 한다.
- 배열의 후속 항목은 반드시 컨텍스트 정보를 표현 해야하며 URIs 또는 객체의 조합으로 구성되어야 한다
- 기본 컨텍스트 URI (https://www.w3.org/2018/credentials/v1)를 사용하여 대화가 검증 가능한 크리덴셜에 관한 것임을 설정한다.
- 두 번째 URI (https://www.w3.org/2018/credentials/examples/v1)는 대화가 예제에 관한 것임을 설정한다.
- https://www.w3.org/2018/credentials/v1에 있는 데이터는 절대 업데이트 되지 않으며 다운로드 및 캐시 되어야 하는 정적 문서이다.
식별자(Identifier)
{
"id": "http://example.edu/credentials/58473",
"credentalSubject": {
"id": "did:example:ebfeb1gfew46546ge"
}
}
- 식별자는 하나의 대상을 가리키는 것으로, 우리가 일상에서 흔히 사용하는 식별자의 사례로는 주민등록번호가 있다.
- 유요한 주민등록번호는 반드시 유일한 값이며, 한 사람만을 가리킨다.
- VC문서 내에는 여러 단계에서 id를 가질수 있는데, 각 id가 무엇을 식별하기 위한 id인지는 context에 따라 결정된다.
- Issuer는 현재 사영하고 있는 VC를 누군가 식별해야 할 필요가 있을때 VC에 id 속성을 부여함
- 식별자는 하나의 개체를 특정하는데는 도움이 되지만 반대로 식별자와 개체 간 상관관계가 드러나는 순간 프라이버시 위협. 즉 상황에 따라 id는 생략될 수 있다.
타입(Type)
// 타입 속성의 본 데이터
{
"type": ["VerifiableCredential", "AlumniCredential"]
}
- 데이터를 받은 시스템이 본 데이터를 해석하기 위해서는 context문서에서 정의한 데이터 타입에 따른 것인지 확인
- 배열에 VerifiableCredential은 이 데이터가 VC라는 것을 의미하고, AlumniCredential은 이 VC가 졸업에 관련된 것이라는 것을 정의한다.
크리덴셜 주체(Credential subject)
// degree 속성에서는 그 학위의 종류(type)가 학사(BacheolerDegree)이고,
// 학위명(name)은 공학학사(Bachelor of Science and Arts)라는 것을 설명한다.
{
"credentialSubject": {
"id": "did:example:ebqasf54fqgq5qgq21",
"degree": {
"type": "BachelorDegree", // 학사
"name": "Bachelor of Science and Arts" // 공학학사
}
}
}
- 어떤 주체(Subject)에 대한 클레임들의 집합
- credentialSubject 속성은 이러한 클레임들을 포함하는 부분
- 즉 VC는 credentialSubject 속성이 반드시 필요하다(클레임이 없는 VC는 의미 없기 때문)
- credentialSubject는 주체를 식별하는 id속성으로 탈중앙식별자(DID)를 가진다.
- ID 자체만으로 언뜻 봐서 누구를 가리키는지 알기 어렵지만 DID가 여러 곳에서 사용되고, 다양한 정보들이 연결되게 되면 결국에는 해당 DID가 누구를 가리키는지, 그것과 연결된 개인정보는 무엇인지 확인할 수 있는 위험에 노출될 수 있다.
- degree 속성에는 그 학위의 종류(Type)가 학사(BachelorDegree)이고, 학위명(name)은 공학학사(Bachelor of Science and Arts) 라는 것을 의미 한다.
- 즉 VC의 주체가 어떤 학위를 가지고 있는지를 해당 VC를 통해 검증할 수 있게 된다
☆VC는 아래 예제와 같이 두 주체를 동시에 포함하여 각 주체 관계를 나타낼수 있다
{
...
"credentialSubject": [
{
"id": "did:example:elkqfegw449e9gefwffw2",
"name": "Mr.Park",
"spouse": "did:example:ec27665w46fw656gfe6"
},
{
"id": "did.example:ec27qwfg8e6546ge",
"name": "Ms.Kim",
"spouse": "did.example:ebew5e45ge55geg"
}
],
...
}
발급자(Issuer)
{
...
"issuer" : "did:example:76e4946wf64f654ge66f"
...
}
- VC에서는 반드시 이 VC를 발급했는지 파악할 수 있어야 한다.
- VC에서는 issuer속성이 필수 이며, issuer 속성은 DID 혹은 URL을 값으로 가진다.
- 이 값을 통해 궁극적으로 Issuer가 누구인지 검증 가능한 방법으로 확인이 가능하다.
'블록체인 sw개발자' 카테고리의 다른 글
리눅스 top 프로세스 정보 (0) | 2024.03.11 |
---|---|
React recoil 전역상태 (1) | 2024.01.08 |
React Hooks 정리 (1) | 2024.01.03 |
react-query 활용 (0) | 2024.01.02 |
<React> 지뢰 찾기 컴포넌트 (1) | 2023.11.28 |