안녕하세요. 일루넥스 개발팀 배누리입니다.
이번 글에서는 루니버스에서 주최한 DID 온라인 세미나에 참여하며 얻은 DID에 대한 개념을 정리하고 공유해보려 합니다.
우선, DID가 무엇인지에 대해 알아보겠습니다.
DID는 Decentralized Identity의 줄임말로, ‘탈중앙화된 ID’라는 의미입니다.
한번에 이해하기 어려운데요. 기존의 시스템과 비교하여 설명해보도록 하겠습니다.
기존에는 디지털 세계에서 개인을 식별하기 위해서 공인인증서나 ID, 비밀번호를 사용합니다. 이러한 개인 정보들은 중앙화된 기관에 기반하고 있습니다.
예를 들어, 네이버의 ID, 비밀번호는 네이버가 가지고 관리를 하고 있습니다. 개인이 개인 인증을 하기 위해서는 네이버와 같은 중앙 기관에 신원 인증 요청을 보내고,
중앙 기관이 대신 인증을 해주는 형태입니다.
이러한 방식의 문제점은 무엇일까요?
자신의 개인정보가 어디에 활용되는 지 알 수 없고, 중앙 기관이 개인정보를 악용하더라도 사용자는 알기 어렵습니다.
반면에 DID는 다른 인증시스템을 이용합니다. 탈중앙화 인증 시스템을 이용하여
개인은 개인의 정보를 스스로 생성, 사용, 삭제하면서 중앙화된 기관이 아닌 본인이 개인 인증을 하게됩니다.
제 삼자의 개입없이도 충분한 보안성을 가지고 있으며, 필요한 정보만을 선택해서 제공할 수 있습니다.
이번에는 DID기술을 통한 개인정보에 대한 검증은 어떻게 이루어지는 간단하게 살펴보도록 하겠습니다.
(출처: w3c)
DID 생태계 참여자는 크게 발행기관(Issuer), 사용자(Holder), 검증기관(Verifier) 이렇게 세 주체가 있습니다.
(Issuer와 Holder가 동일할 경우 2개)
발행기관은 자격증명을 발행하는 기관입니다. 발행기관이 발행한 자격증명은 사용자의 디바이스에 저장됩니다.
사용자는 자신의 자격증명을 요구하는 검증 기관에게 자신의 자격증명을 전달할 수 있습니다.
이 과정은 블록체인을 통해 진위여부 확인할 수 있으며, 위조를 방지합니다.
즉, DID 기술은 인증 정보를 각 사용자의 디바이스에 분산된 형태로 저장하는 안전한 인증 시스템을 구축합니다.
또한 추가 인증 없이 이전 데이터를 불러와 인증할 수 있기 때문에 사용자는 편리하게 신원정보를 이용할 수 있습니다.
검증 과정에 대해 더 구체적으로 알아보도록 하겠습니다.
검증 과정은 상단의 과정을 거쳐 이루어집니다.
사용자가 기업에 졸업증명서와 진료기록을 제출해야 한다는 예를 들어 한 단계씩 살펴보도록 하겠습니다.
DID는 DID 주소 값과 1:1 관계를 가지는 DID document를 가집니다.
발행기관과 사용자는 이를 Distributed Ledger(블록체인)에 저장하게 됩니다.
사용자는 DID Document를 블록체인에 등록합니다.
EXAMPLE 2: Minimal self-managed DiD Document
{
"@context": "https://www.w3.org/ns/did/v1",
"id": "did:example:123456789abcdefghi",
"authentication": [{
"id": "did:example:123456789abcdefghi#keys-1",
"type": "Ed25519VerificationKey2018",
"controller": "did:example:123456789abcdefghi",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}],
"service": [{
"id":"did:example:123456789abcdefghi#vcs",
"type": "VerifiableCredentialService",
"serviceEndpoint": "https://example.com/vc/"
}]
}
(출처: w3c)
w3c에서 제공하는 DID Document의 예시입니다.
id는 사용자의 고유 ID입니다. publicKey는 DID 소유권 인증에 필요한 키이며, authentication은 DID 소유권 인증방식입니다.
예시 문서를 보시는 것과 같이 DID Document에 개인 정보는 올라가지 않습니다. DID Document를 Public한 블록체인에 올라가는 정보이기 때문입니다.
개인 정보는 VC에 들어가게 됩니다. 그림에서 보시는 것과 같이 발행기관, 사용자, 인증기관을 이동할 뿐이며 체인에는 저장되지 않습니다.
상단의 그림에 있는 DID method는 Distributed Ledger마다 DID Document의 명세를 정의한 문서입니다.
EXAMPLE 1: A simple example of a verifiable credential
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://www.w3.org/2018/credentials/examples/v1"
],
"id": "http://example.edu/credentials/1872",
"type": ["VerifiableCredential", "AlumniCredential"],
"issuer": "https://example.edu/issuers/565049",
"issuanceDate": "2010-01-01T19:73:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"alumniOf": {
"id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
"name": [{
"value": "Example University",
"lang": "en"
}, {
"value": "Exemple d'Université",
"lang": "fr"
}]
}
},
"proof": {
"type": "RsaSignature2018",
"created": "2017-06-18T21:19:10Z",
"proofPurpose": "assertionMethod",
"verificationMethod": "https://example.edu/issuers/keys/1",
"jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5X
sITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUc
X16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtj
PAYuNzVBAh4vGHSrQyHUdBBPM"
}
}
(출처: w3c)
상단의 이미지는 VC의 예시입니다.
사용자가 졸업증명서를 대학교에 발급 신청한 상황이라고 가정해보겠습니다.
대학교는 상단과 같은 내용으로 작성한 VC를 사용자에게 전달하게 됩니다.
상단의 이미지는 VP의 예시입니다. VP는 VC와 동일하게 구성되어 있습니다.
사용자가 졸업증명서와 진료기록을 기업에 제출해야한다고 가정해본다고 하면,
VerifiableCredential에는 졸업증명, 진료기록으로 받은 VC들이 들어 갈 것입니다.
proof에는 해당 VC들을 사용자가 소유하고 있다는 증명내용이 들어갈 것입니다.
VP를 제출받은 인증 기관은 VP에 들어있는 사용자, 발급기관의 DID를 사용하여 블록체인에 검증과정을 거칩니다.
해당 소유자에게서 온 증명서가 맞는지, 실제 발급기관에서 발급된 것이 맞는지 등을 확인합니다.
내용에 문제가 없을 경우 검증을 완료하게 됩니다.
지금까지 DID와, DID를 이용한 신원 증명의 과정에 대해 간략하게 알아보았습니다.
개인의 정보에 대한 주권을 가질 수 있다는 점, 제출이 필요한 정보만 제공할 수 있어 프라이버시가 보장된다는 점, 보안성이 높다는 점 등
탈중앙화된 신원 인증 도입을 통해 얻을 수 있는 장점들과, 그 과정에 대해 알게 된 시간이었습니다.
읽어주셔서 감사합니다.