본문 바로가기

블록체인 sw개발자

W3C 탈중앙화 식별자 표준

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 참조

 

검증가능한 크리덴셜이란

 

신분증과 같이 우리가 일상에서 사용하는 크리덴셜에는 다음과 같다

  1. 신분증의 주체를 식별할 수 있는 정보- 주민등록번호, 이름,사진 등
  2. 해당 신분증을 발급한 기관 정보- 정부, 경찰청, 외교부 등
  3. 크리덴셜의 요도에 대한 정보 - 주민등록증, 운전면허증, 여권 등
  4. 발급한 기관이 보증하는 주체에 대한 속성정보- 국적, 생일, 면허, 종류 등
  5. 신분증의 제약조건에 대한 정보 - 유요기관, 발급날짜 등

디지털 세계에서 사용하려는 크리덴셜도 물리적 세계의 신분증과 동일한 정보를 제공할 수 있어야 겠죠?

 

자기주권 신원 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를 검증하기 위해 필요한 식별자, 키 쌍, 메타데이터 등을 저장하는 저장소이다. 현재 블록체인이 주로 사용되고 있으나 신뢰할 수 있는 방식이면 어떤 종류라도 가능하다.

 

기본 컨셉

 

HolderIssuer에게 VC를 요청하면, IsserHolder가 본인인지 확인한 후 본인이 맞다면 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