Ver5.0 블록체인 기반 DID(탈중앙화 신원증명) 완전정복: 개념부터 실제 구현 구조까지 친구처럼 쉽게 풀어보기 🪪⛓️

블록체인 기반 DID(탈중앙화 신원증명) 완전정복: 개념부터 실제 구현 구조까지 친구처럼 쉽게 풀어보기 🪪⛓️
“이번에 새로 가입하는 사이트인데 또 휴대폰 인증하고, 또 신분증 찍고, 또 비밀번호 만들래…” 😮💨
다들 한 번쯤 해본 생각이죠? 우리는 서비스마다 내 신원을 매번 처음부터 다시 증명하고 있어요. 그 과정에서 내 개인정보는 수십, 수백 개 회사 서버에 흩어져 쌓이고요.
오늘 같이 볼 주제가 바로 이 문제를 정면으로 겨냥한 기술, DID(Decentralized Identifier, 탈중앙화 식별자)예요. 커피 한 잔 들고 편하게 따라와요. 개념 → 표준 → 동작 원리 → 실제 구현 코드 → 금융 활용 → 한계까지 차근차근 정리해볼게요. ☕
1. DID가 뭔데? 한 줄 요약부터 가보자 🧭
DID는 특정 기관이 발급·관리하지 않아도, 내가 스스로 만들고 스스로 통제하는 디지털 식별자예요. 국제 웹 표준 단체인 W3C가 2022년 7월 ‘Decentralized Identifiers (DIDs) v1.0’을 정식 권고안(Recommendation)으로 채택했어요. 즉 “어떤 스타트업의 독자 규격”이 아니라 웹 표준이라는 거죠.
생김새는 이렇게 단순해요.
did:example:123456789abcdefghi
│ │ │
│ │ └─ 메서드별 고유 식별 문자열
│ └─ DID 메서드 (어떤 방식/네트워크를 쓰는지)
└─ 스킴 (항상 "did")
URL이 https://로 시작하는 것처럼, DID는 did:로 시작해요. 그 뒤의 메서드(method)가 이 DID를 어디에 어떻게 기록하고 조회하는지 정해요. 예를 들어 did:ethr은 이더리움 기반, did:ion은 비트코인 위에 올라간 Sidetree 기반, did:web은 웹 도메인 기반, did:key는 공개키 자체에서 파생되는 방식이에요. W3C의 DID 사양 레지스트리에는 이미 수백 개의 메서드가 등록돼 있어요.
💡 오해 하나 정리! “DID = 블록체인”은 아니에요. W3C 표준은 블록체인을 필수로 요구하지 않아요. 표준 문서는 이걸 ‘검증 가능한 데이터 레지스트리(Verifiable Data Registry)’라고 추상적으로 부르고, 블록체인·분산 원장은 그 대표적 구현 수단 중 하나일 뿐이에요. 다만 “위변조가 어렵고, 누구나 조회 가능하고, 특정 주체가 독점하지 않는” 성질 때문에 블록체인이 가장 널리 쓰이는 기반인 건 맞아요.
2. 왜 굳이 ‘탈중앙화’ 신원이 필요할까? 🤔
디지털 신원 모델은 보통 세 단계로 진화했다고 설명해요. 그림보다 카드로 보는 게 편하니까 정리해볼게요.
사이트마다 아이디·비번 따로.
기업 DB에 정보가 쌓이고, 해킹 한 방에 대량 유출.
“구글/카카오로 로그인”.
편하지만 플랫폼이 내 로그인 흐름을 다 앎. 계정 정지되면 줄줄이 막힘.
신원 증명을 내 지갑에 보관하고 필요한 것만 골라 제출.
DID가 이 모델의 핵심 부품.
여기서 나온 개념이 자기주권 신원(SSI, Self-Sovereign Identity)이에요. 2016년 크리스토퍼 앨런(Christopher Allen)이 SSI의 10가지 원칙(존재, 통제, 접근, 투명성, 지속성, 이동성, 상호운용성, 동의, 최소화, 보호)을 정리하면서 널리 퍼졌죠. 핵심은 딱 하나예요. “내 신원 데이터의 주인은 나”.
현실로 비유해볼게요. 실물 지갑 속 운전면허증은 경찰청이 발급했지만, 들고 다니는 건 나예요. 편의점 알바생이 술 살 때 내 나이를 확인하려고 경찰청에 전화하지 않잖아요? 면허증 위조 방지 장치를 보고 바로 믿죠. DID는 이 경험을 온라인으로 옮긴 거예요. 차이점은 디지털에서는 “생년월일 전체 대신 ‘성인임’만” 보여줄 수도 있다는 것! 이게 엄청 큰 차이예요.
3. DID 생태계의 3대 구성요소: DID · DID 문서 · VC 🧩
3-1. DID 문서(DID Document)
DID 자체는 그냥 문자열이에요. 이 문자열을 ‘해석(resolve)’하면 DID 문서라는 JSON 데이터가 나와요. 여기에 “이 DID의 주인이 서명할 때 쓰는 공개키”와 “연락할 수 있는 서비스 주소” 등이 담겨요.
{
"@context": "https://www.w3.org/ns/did/v1",
"id": "did:example:123456789abcdefghi",
"verificationMethod": [{
"id": "did:example:123456789abcdefghi#key-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:example:123456789abcdefghi",
"publicKeyMultibase": "z6Mk...생략"
}],
"authentication": ["did:example:123456789abcdefghi#key-1"],
"assertionMethod": ["did:example:123456789abcdefghi#key-1"],
"service": [{
"id": "did:example:123456789abcdefghi#msg",
"type": "DIDCommMessaging",
"serviceEndpoint": "https://agent.example.com"
}]
}
⚠️ 중요 포인트 DID 문서에는 이름·주민번호 같은 개인정보를 넣지 않아요. 공개키와 서비스 정보만 들어가요. 블록체인은 한 번 기록하면 지우기 어려우니, 개인정보를 체인에 올리는 건 설계상 금기에 가까워요. 개인정보는 아래에서 볼 VC에 담겨 내 지갑(오프체인)에 보관돼요.
3-2. 검증 가능한 증명(VC, Verifiable Credential)
VC는 발급자가 “이 DID의 주인은 ○○이다”라고 전자서명한 디지털 증명서예요. 재직증명서, 학위증, 운전면허, 은행의 실명확인 결과 같은 것들이죠. W3C는 2019년 VC 데이터 모델 1.0을 권고안으로 냈고, 2025년 5월에는 VC Data Model 2.0을 정식 권고안으로 발표했어요.
3-3. 검증 가능한 제출(VP, Verifiable Presentation)
VP는 내가 지갑에서 VC(혹은 그 일부)를 골라 “지금 이 검증자에게 제출합니다”라고 내 키로 한 번 더 서명해 묶은 꾸러미예요. 검증자가 보낸 일회성 값(nonce·challenge)을 함께 서명하기 때문에, 누가 중간에 VP를 가로채서 재사용(리플레이 공격)하기 어렵게 만들어요.
| 구성요소 | 쉽게 말하면 | 어디에 저장? |
|---|---|---|
| DID | 내 디지털 주민번호… 아니고, 내가 만든 ‘주소’ | 블록체인 등 레지스트리 |
| DID 문서 | 그 주소의 공개키 명함 | 레지스트리(또는 웹) |
| VC | 기관이 도장 찍어준 증명서 | 내 지갑(오프체인) |
| VP | 증명서를 골라 제출하는 봉투 | 제출 순간 생성·전송 |
4. 실제로 어떻게 돌아갈까? 단계별 흐름 🔄
은행 계좌 실명확인 결과를 VC로 받아, 증권사 비대면 계좌 개설에 쓰는 시나리오로 따라가 볼게요.
내 지갑 앱이 기기 안에서 공개키·개인키 쌍을 만들어요. 공개키로 DID를 만들고, 필요하면 블록체인에 DID 문서를 등록해요. 개인키는 절대 기기 밖으로 안 나가요(보안 칩·Secure Enclave 등 활용).
은행 앱에서 “실명확인 증명 발급”을 누르면, 은행은 내가 그 DID의 진짜 주인인지(개인키 서명으로) 확인하고 VC를 서명해 내려줘요.
VC는 내 휴대폰 지갑에 저장. 체인엔 개인정보가 안 올라가요.
증권사가 “실명확인 VC 보여주세요 + 이 nonce에 서명해줘요”라고 요청(QR 코드 등).
필요한 항목만 골라 VP로 묶어 서명 후 제출.
증권사는 블록체인에서 ① 은행의 DID 문서(공개키)를 조회해 VC 서명을 확인하고, ② 내 공개키로 VP 서명을 확인하고, ③ 폐기 목록을 보고 증명이 취소되지 않았는지 체크. 은행에 직접 물어볼 필요가 없어요!
6번이 진짜 마법 포인트예요. 기존 방식이라면 증권사가 은행이나 인증기관 API를 매번 호출해야 하고, 그 기록이 다 남죠. DID 방식에서는 발급자가 “누가 언제 어디서 내 증명서를 썼는지” 알 수 없어요. 이걸 ‘발급자-검증자 비연결성’이라고 불러요. 프라이버시 측면에서 엄청 큰 장점이죠.
5. 블록체인은 정확히 어디서 일할까? ⛓️
여기서 많이들 헷갈려요. “그럼 내 증명서가 블록체인에 올라가는 거야?” → 아니요! 블록체인이 맡는 일은 생각보다 소박하고, 그래서 더 중요해요.
“이 DID의 현재 공개키는 이것”이라는 정보를 위변조 불가하게 기록. 키를 바꾸면(키 로테이션) 업데이트 이력도 남아요.
은행·정부 같은 발급자의 DID와 공개키를 공개. 검증자가 “진짜 그 은행 서명인지” 확인하는 근거.
증명서가 취소됐는지 여부. 개인정보 없이 비트 목록·해시 형태로 관리하는 방식이 쓰여요.
“실명확인 VC는 이런 항목으로 구성” 같은 공통 양식 정보.
왜 굳이 블록체인이냐면, 이 정보들을 특정 회사 서버 하나에 두면 결국 그 회사가 신원 생태계의 문지기가 되기 때문이에요. 서버가 멈추면 전체 검증이 멈추고, 운영자가 마음대로 기록을 바꿀 수도 있죠. 블록체인은 여러 노드가 같은 원장을 유지하니 단일 장애점과 단일 통제자를 없애는 역할을 해요.
퍼블릭 vs 프라이빗(허가형) 체인
| 구분 | 예시 | 장점 | 고민거리 |
|---|---|---|---|
| 퍼블릭 | did:ethr(이더리움), did:ion(비트코인+Sidetree) | 누구나 참여, 높은 탈중앙성 | 수수료, 처리 속도, 규제 대응 |
| 허가형 | Hyperledger Indy 기반 네트워크(Sovrin 등) | 신원 특화 설계, 빠르고 저렴 | 참여 노드 제한 → 탈중앙성 논쟁 |
| 비체인형 | did:web, did:key | 구축 쉬움, 비용 거의 없음 | did:web은 도메인 소유자에 의존 |
참고로 did:ion은 마이크로소프트가 주도해 2021년 메인넷에 올린 방식으로, 수많은 DID 작업을 묶어서 비트코인 트랜잭션 하나에 앵커링하고 실제 데이터는 IPFS에 둬요. “체인에는 최소한만” 철학의 좋은 예죠. Hyperledger Indy는 아예 신원 전용으로 설계된 분산원장이고, 지갑·에이전트 쪽 툴킷인 Aries, 암호 라이브러리인 Ursa(현재는 다른 프로젝트로 기능이 이관) 등과 함께 생태계를 이뤘어요.
6. 프라이버시의 비밀병기: 선택적 공개와 영지식증명 🕵️
DID가 진짜 매력적인 이유가 여기 있어요. 술집 입구에서 “성인 맞아요?”라고 물었을 때, 실물 신분증은 이름·주소·생년월일·사진을 전부 보여줘요. 과잉 공개죠.
VC에서 필요한 항목만 골라 제출. 예: 이름은 숨기고 국적만. SD-JWT(IETF 표준화 진행), BBS 서명 등이 대표 기술.
값 자체를 안 보여주고 조건만 증명. 예: 생년월일 노출 없이 “만 19세 이상 = 참”. 상대는 진위만 확인 가능.
서비스마다 다른 DID(페어와이즈 DID)를 써서, 여러 서비스가 정보를 합쳐 나를 추적하기 어렵게.
금융 쪽에서 상상해보면 감이 확 와요. 대출 심사에 “연소득 3천만 원 이상”만 증명하면 되는데 지금은 원천징수영수증 전체를 내죠. ZKP 기반 VC라면 정확한 연봉 숫자 없이 기준 충족 여부만 전달할 수 있어요. 개인정보 최소수집 원칙을 기술적으로 강제하는 셈이에요.
7. 개발자 시점: 직접 구현해보면 이렇게 생겼어 👩💻
개념만 보면 막연하니까, 대표 오픈소스로 흐름을 짚어볼게요. 아래는 이더리움 계열 DID 리졸버와 JWT 형식 VC를 다루는 did-jwt-vc 라이브러리 사용 흐름이에요(설명용으로 단순화했어요. 실제 서비스에서는 키를 코드에 넣으면 절대 안 돼요!).
① 발급자가 VC 만들기
import { createVerifiableCredentialJwt } from 'did-jwt-vc'
import { EthrDID } from 'ethr-did'
// 발급자(은행)의 DID와 서명키 (실무에선 HSM/KMS에 보관)
const issuer = new EthrDID({ identifier: '0x발급자주소', privateKey: '보안저장소에서로드' })
const vcPayload = {
sub: 'did:ethr:0x사용자주소', // 증명 대상(소유자)
nbf: Math.floor(Date.now() / 1000),
vc: {
'@context': ['https://www.w3.org/2018/credentials/v1'],
type: ['VerifiableCredential', 'KYCCredential'],
credentialSubject: {
kycVerified: true,
ageOver19: true
}
}
}
const vcJwt = await createVerifiableCredentialJwt(vcPayload, issuer)
// → 이 문자열을 사용자 지갑으로 전달
② 검증자가 확인하기
import { verifyCredential } from 'did-jwt-vc'
import { Resolver } from 'did-resolver'
import { getResolver } from 'ethr-did-resolver'
const resolver = new Resolver(getResolver({ infuraProjectId: '...' }))
// 내부적으로: 발급자 DID → DID 문서 조회 → 공개키로 서명 검증
const verified = await verifyCredential(vcJwt, resolver)
console.log(verified.verifiableCredential.credentialSubject)
// { id: 'did:ethr:0x사용자주소', kycVerified: true, ageOver19: true }
보이죠? 검증 코드 어디에도 “은행 API 호출”이 없어요. 리졸버가 블록체인에서 공개키를 가져와 수학적으로 검증할 뿐이에요. 실무 구현에서는 여기에 다음이 붙어요.
폐기 확인 Status List 등으로 VC가 취소됐는지 확인
신뢰 목록 “이 발급자 DID가 정말 공인 은행인가?” → 트러스트 레지스트리 확인
nonce 검증 VP가 이번 요청에 대해 새로 서명된 건지 확인
통신 표준 OpenID4VCI(발급)·OpenID4VP(제출), DIDComm 등 프로토콜 채택
키 관리 기기 보안 영역, 키 백업·복구 설계
💡 현장 팁 최근 흐름은 “완전히 새로운 프로토콜”보다는 이미 익숙한 OAuth/OpenID 계열에 VC를 얹는 방식(OpenID for Verifiable Credentials)이 대세예요. 기존 로그인 인프라와 붙이기 쉬워서 금융권 도입 문턱이 낮거든요. 또 하나, 서명이 맞는 것과 발급자를 믿을 수 있는 것은 별개라는 점! 아무나 DID를 만들 수 있으니 “누가 공인 발급자인가”를 정하는 거버넌스가 기술만큼 중요해요.
이런 구현을 혼자 하기 버겁다면 블록체인 개발이나 보안 컨설팅 재능을 가진 전문가를 찾는 것도 방법이에요. 재능넷 같은 재능 공유 플랫폼에서 스마트컨트랙트 개발, 앱 연동 같은 작업을 의뢰하는 사례도 늘고 있죠.
8. 금융·핀테크에서 DID가 빛나는 순간 💳
“블록체인과 암호화폐” 하면 보통 코인 시세부터 떠올리지만, 사실 업계에서 가장 현실적인 블록체인 활용처 중 하나가 신원이에요. 돈이 오가는 곳엔 반드시 “너 누구야?”가 따라오니까요.
한 금융사에서 받은 본인확인 결과를 VC로 받아 다른 금융사 가입에 재사용. 고객은 반복 인증 지옥 탈출, 기관은 KYC 비용 절감.
일정 금액 이상 가상자산 이전 시 송·수신인 정보를 주고받아야 하는 규정. 정보 교환·사업자 식별에 DID·VC 접근이 논의돼요.
소득·재직·자산 증명을 선택적 공개로 제출. 종이 서류와 스캔 위변조 문제 감소.
지갑 주소에 “KYC 완료” 같은 자격만 연결해, 실명은 숨긴 채 규제 요건을 충족하려는 시도.
한국은 이미 DID 선진국이에요 🇰🇷
은근히 모르는 분들 많은데, 우리나라는 DID를 국가 단위 서비스에 실제로 적용한 나라예요.
✅ 모바일 운전면허증: 2022년 행정안전부가 블록체인 기반 DID 기술을 적용해 발급을 시작했어요. 정보 제공 여부를 사용자가 선택할 수 있고, 성인 인증 시 필요한 정보만 보여줄 수 있죠.
✅ 모바일 주민등록증: 2024년 말 시범 발급을 시작해 2025년부터 전국 확대 발급이 진행됐어요. 실물 주민등록증과 동일한 법적 효력을 가져요.
✅ 민간 사례: 이동통신 3사가 함께 만든 PASS 앱의 모바일 신분증 서비스, 금융권 DID 기반 인증 등 다양한 시도가 이어져 왔어요.
해외도 움직임이 커요. 유럽연합은 2024년 eIDAS 2.0 규정을 발효시켜, 회원국이 시민에게 EU 디지털 신원 지갑(EUDI Wallet)을 제공하도록 했어요(2026년경까지 제공 목표). 기술 구조가 VC·선택적 공개와 맞닿아 있어서, 글로벌 표준 경쟁에서도 이 방향이 주류로 굳어지는 분위기예요.
9. 그런데… 장밋빛만은 아니야 😅 현실적인 한계들
친구라면 좋은 얘기만 하면 안 되죠. DID가 넘어야 할 산도 확실히 있어요.
| 과제 | 무슨 문제? | 대응 방향 |
|---|---|---|
| 🔑 키 분실 | 개인키를 잃으면 신원 통제권도 잃음. “비밀번호 찾기”가 없음 | 소셜 복구, 다중서명, 기기 보안칩·클라우드 암호화 백업 |
| 🔗 상호운용성 | DID 메서드·VC 포맷이 너무 다양해 서로 안 통함 | W3C·OpenID·IETF 표준 수렴, 상호운용성 테스트 |
| ⚖️ 잊혀질 권리 | 블록체인은 삭제가 어려워 개인정보보호법과 충돌 가능 | 개인정보는 오프체인, 체인엔 공개키·해시만 |
| 🏛️ 거버넌스 | 누가 신뢰할 발급자를 정하나? 결국 중앙 권위가 필요 | 트러스트 프레임워크, 정부·업계 공동 레지스트리 |
| 📱 사용성 | 일반 사용자에게 키·지갑 개념은 어려움 | 기존 앱·간편인증 UX 안에 자연스럽게 녹이기 |
| 🧮 네트워크 효과 | 발급자·검증자가 충분해야 가치가 생김 | 정부 신분증 등 ‘앵커’ 서비스로 확산 견인 |
특히 “완전한 탈중앙화”와 “규제 준수” 사이의 줄다리기는 금융권에서 계속될 숙제예요. 금융사는 결국 공인된 신원을 원하고, 공인은 어딘가의 권위를 필요로 하니까요. 그래서 현실적인 답은 “모든 걸 블록체인으로”가 아니라 “신뢰의 근거는 공인 기관, 정보의 통제권은 사용자”라는 하이브리드 구조로 수렴하는 중이에요. 우리나라 모바일 신분증이 정확히 이 모델이죠.
10. 한눈에 정리! 오늘의 핵심 요약 📝
✔️ DID = 내가 만들고 내가 통제하는 식별자 (W3C 표준, 2022년 권고안)
✔️ DID 문서 = 공개키·서비스 주소 명함. 개인정보는 안 담음
✔️ VC = 기관이 서명한 디지털 증명서, 내 지갑에 보관 (VC 2.0 표준 2025년)
✔️ VP = 필요한 것만 골라 제출하는 서명 꾸러미
✔️ 블록체인 = 공개키·발급자 정보·폐기 상태를 위변조 없이 공유하는 공용 게시판
✔️ 선택적 공개·ZKP = 필요한 만큼만 증명하는 프라이버시 무기
✔️ 금융 활용 = 재사용 KYC, 트래블룰, 비대면 계좌·대출 증빙
✔️ 과제 = 키 복구, 상호운용성, 거버넌스, 사용성
정리하자면 DID는 “코인처럼 화려하진 않지만, 블록체인이 일상에 스며드는 가장 조용하고 강력한 통로”예요. 이미 여러분 폰 속 모바일 신분증에서 돌아가고 있을지도 모르고요. 😉 다음에 또 “인증하세요” 창이 뜨면, 이 글의 삼각형 그림을 떠올려 보세요. 머지않아 그 창 대신 “지갑에서 증명 하나 고르기”가 표준이 될 테니까요. 재능넷 지식인의 숲에서 또 재밌는 기술 이야기로 만나요! 🙌
참고 자료
· W3C, Decentralized Identifiers (DIDs) v1.0 — https://www.w3.org/TR/did-core/
· W3C, Verifiable Credentials Data Model v2.0 — https://www.w3.org/TR/vc-data-model-2.0/
· W3C, DID Specification Registries — https://www.w3.org/TR/did-spec-registries/
· Christopher Allen, The Path to Self-Sovereign Identity — http://www.lifewithalacrity.com/2016/04/the-path-to-self-soverereign-identity.html
· OpenID Foundation, OpenID for Verifiable Credentials — https://openid.net/sg/openid4vc/
· European Commission, European Digital Identity Wallet — https://ec.europa.eu/digital-building-blocks/sites/display/EUDIGITALIDENTITYWALLET
· decentralized-identity/did-jwt-vc (GitHub) — https://github.com/decentralized-identity/did-jwt-vc
댓글 작성
이 글에 대한 여러분의 생각을 들려주세요
로그인이 필요합니다
댓글을 작성하려면 먼저 로그인해주세요.
댓글 0
지식인의 숲 - 지적 재산권 보호 고지
지적 재산권 보호 고지
- 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
- AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
- 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
- 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
- AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.
아직 댓글이 없습니다.