검증가능 크리덴셜은 실제로 어떻게 작동하는가

블록체인 학위증명 — 3부작 중 2부: 아키텍처

1부에서 저는 학위 검증에 블록체인이 거의 필요 없으며, 어려운 문제는 위·변조가 아니라 신뢰라고 주장했습니다. 이제 시스템이 실제로 어떻게 돌아가는지 봅시다. 구성 요소를 보고 나면, 체인이 어디에(그리고 과연 필요한지) 들어가는지가 분명해집니다.

신뢰 삼각형

모든 검증가능 크리덴셜 시스템에는 세 주체가 있습니다.

  • 발급자(Issuer) — 크리덴셜을 발급하는 대학.
  • 보유자(Holder) — 이를 받아 보관하는 학생.
  • 검증자(Verifier) — 이를 확인하는 기업.

이들 사이를 세 가지 데이터가 오갑니다.

  • DID(분산 식별자)did:web:snu.ac.kr 같은 신원. 조회하면 그 주체의 공개키가 담긴 DID Document가 반환됩니다.
  • VC(검증가능 크리덴셜) — 서명된 크리덴셜. 주장들(“이 사람은 2026년 학사 학위 보유”)에 발급자 서명이 붙은 것.
  • VP(검증가능 프레젠테이션) — 보유자가 하나 이상의 VC를 감싸 제출하는 포장지. 여기에 보유자 본인 서명이 한 겹 더해집니다.

1단계 — 신원(DID)

각 주체는 키쌍과 DID를 가집니다. DID를 만드는 방식이 바로 블록체인이 들어가고 안 들어가는 갈림길입니다.

  • did:key — 키쌍으로 로컬에서 생성. 체인도 서버도 불필요. 보통 학생이 사용.
  • did:web — 대학이 snu.ac.kr/.well-known/에 공개키 게시. 도메인 신뢰에 기대며 체인 없음.
  • did:ethr — 공개키와 키 교체 이력을 온체인 레지스트리(ERC-1056)에 기록. 체인이 처음 등장하는 지점.

2단계 — 발급 (OID4VCI)

학생이 대학 발급 포털에 로그인하면, 대학이 VC를 만들어 학생 지갑으로 보냅니다. 이 표준 절차가 OID4VCI(OpenID for VC Issuance)입니다. VC는 개념적으로 이렇게 생겼습니다.

{
  "issuer": "did:web:snu.ac.kr",
  "credentialSubject": { "id": "did:key:학생DID", "degree": "학사", "year": 2026 },
  "credentialStatus": { "type": "BitstringStatusList", "index": 50 },
  "proof": { "...발급자 서명..." }
}

proof가 전부입니다. 대학이 개인키로 문서 전체를 서명했기 때문에, 한 필드만 바꿔도 서명이 깨집니다. “위조 방지”의 8할가량이 바로 여기서 끝납니다. 서명만으로요, 블록체인 없이.

3단계 — 보관

발급된 VC는 대학 서버가 아니라 학생 지갑에 저장됩니다. 이것이 자기주권 신원(SSI)의 핵심입니다. 대학이 문을 닫아도 학생은 크리덴셜을 계속 소유하고 통제합니다. (우연찮게도 1부의 트러스트 앵커 문제가 살고 있는 지점이기도 합니다.)

4단계 — 제시와 검증 (OID4VP)

기업 사이트에서 학생이 “DID로 지원”을 누르면 지갑이 열리고, 선택한 VC를 VP로 감싸 제출합니다. 이 절차가 OID4VP입니다. 검증자는 네 가지를 순서대로 확인합니다.

  1. 발급자 서명 — VC의 proof가 정말 대학 키로 서명됐는가? (발급자 DID Document를 조회해 키 대조)
  2. 보유자 바인딩 — VP를 제출한 사람이 VC가 발급된 주체와 동일한가? (타인 크리덴셜 도용 방지)
  3. 폐기 여부 — 이 VC가 취소되지 않았는가? (5단계 참조)
  4. 트러스트 앵커did:web:snu.ac.kr가 정말 그 대학 것인가? ← 암호학으로 매듭지을 수 없는 거버넌스 단계.

5단계 — 폐기, 까다로운 부분

VC는 발급을 되돌릴 수 없지만, 학위가 취소되는 경우는 종종 생깁니다. 흔한 해법이 상태 리스트(status list) 입니다. 발급자가 긴 비트열을 게시하고, 각 VC에 포인터(“50번째 칸을 확인하라”)를 심어둡니다. 취소하려면 50번째 비트를 0에서 1로 바꾸면 됩니다. 검증 시점에 검증자가 리스트를 받아 그 비트를 읽고요. 이 리스트를 웹서버에 두면 체인이 필요 없고, 스마트컨트랙트에 두면 온체인 폐기 레지스트리가 됩니다.

전체 모양

정리하면 생애주기는 발급 → 서명 → 보관 → 제시 → 검증 → 폐기입니다. 이 중 얼마나 많은 부분이 서명과 상태 리스트만으로 돌아가는지 눈여겨보세요. 블록체인은 있더라도 몇 군데 — 발급자 레지스트리, 폐기, 앵커링 — 에만 끼어듭니다. 그게 바로 3부의 주제입니다.


Tags: 검증가능크리덴셜, 분산신원증명, 자기주권신원, Web3, 블록체인

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다