현재 우리가 살아가는 시대를 정의하는 가장 상위의 키워드로 많은 전문가들이 디지털 전환을 이야기 하고 있습니다.
사이버 세상뿐만 아니라 우리의 일상생활 속에 수많은 기기들이 네트워크와 연결되고 디지털 데이터로 소통하여 서비스를 제공하기 시작을 했고 의료, 교육, 제조 그리고 농축 수산까지 모든 분야에서 디지털 화가 빠르게 재현되고 있기 때문입니다. 이러한 디지털 시대에서 디지털로 전환되는 실생활 서비스 대부분은 디지털 ID를 필요로 하고 있습니다. 기존의 물리적인 매체에 기반했던 사용자 식별과 검증 수단이 디지털 서비스에서는 적합하지 않기 때문이다. 기존의 실물 ID는 빠르게 디지털 아이디로 전환되고 있는 중입니다.
사용자의 지갑과 주머니 속의 실물 ID는 모두 디지털 ID로 전환과정이 진행되고 있습니다. 결제수단으로 사용되고 있는 플라스틱 카드는 이미 많은 사용자들이 디지털 카드를 이용하고 있고 각종 신분증, 증명서, 열쇠들도 디지털화 되는 중입니다. 가까운 시일내에 스마트폰 하나만 있으면 지갑이나 신분증 없이도 일상생활이 가능한 시대가 되는 것은 분명해 보입니다. 즉 DID 기술은 이러한 변화를 빠르게 진행시킬수 있는 혁신 기술이라 할 수 있습니다.
디지털 ID 개념
국제 표준화 단체 IOS에서는 디지털ID를 개체와 연관된 속성들의 집합이라고 정의 하고 있습니다. 여기서 개체란 사람, 계기, 서비스 등을 지칭 합니다. 속성이란 사용자가 태어나면서 가지고 있는 고유한 신체적 특징을 포함해서 그 사람이 보유하고 기억하고 행동하는 것들 모두를 포함하는 개념입니다. 또한 사회생활을 하면서 획득하게 되는 직위나 역할도 포함이 될 수가 있습니다.DID는 이러한 모든 속성들을 포멧으로 구성하고 활용할 수 있게 하는 기술입니다.
사용자 인증
디지털 ID의 가장 기본적인 활용은 사용자 인증입니다. 사용자 인증은 사용자가 시스템에 등록되어 있는 정당한 사용자인지 확인하는 절차를 의미하고 사용자 인증은 패스워드와 같은 사용자 지식에 기반한 인증 그리고 OTP와 같은 물리적 매체를 이용하는 소재 기반이 있는 얼굴 지문 등 사용자 고유의 생체 특징을 이용하는 생체 기반 인증으로 크게 구분하고 있습니다. 그리고 디지철 ID는 디지털 서명 서비스에 많이 활용되는데 디지털 서명은 문서가 위변조되지 않았으며 거래 상대방 본인이 해당 디지털 문서를 작성하였음을 보장하는 기술로 DID 서비스에서도 요소기술로 활용되고 있습니다. 디지털 ID의 활용은 디지털 신분증 서비스라 할 수 있습니다. 디지털 신분증은 오늘 설명해 드리는 DID의 대표적인 응용서비스이기도 합니다.
신뢰하기 힘들고 제한된 신원정보
현재 대부분의 사용자들은 수많은 사이트의 ID를 등록을 하고 있는데 내 정보가 어디에 있고 거기에 어떤 정보가 있는지 바로 파악하기가 힘들다. 그리고 사용자가 온라인상에서 무엇을 하는지 ID의 이용 활동을 통해 지속될 수도 있고 ID에 대한 신뢰성 문제라든지 ID의 유출과 도용 같은 문제 등 다양한 문제를 가지고 있습니다. DID는 기존 ID관리 기술이 가진 문제를 완벽히 해결하지 못 할지라도 해결하기 위한 기본 방안을 제시를 하고 있습니다.
*DID Credentials: 정부 발급 신원 확인 문서, 학력 및 자격증 등 제3자가 암호학저으로 검증할 수 있는 크리덴셜을 정의 합니다.
DID 모델은 사용자의 특정 신호를 보장해줄 수 있는 발급자로부터 데이터(transaction)를 받고 사용자의 Credentials을 보관 하고 있다가 특정 사용자에게 필요한 서비스에 해당하는 Credentials 을 제출해서 이용하는 구조로 설계되어 있습니다.
중앙집중형 모델과 달리 다수의 Credentials을 발급하는 기관이 존재를 하고 있고 사용자 본인이 직접 자신의 신원정보를 관리하고 활용하는 구조로 되어있습니다. 그리고 서비스 제공자가 발급자와 사전에 신뢰 관계를 구축하지 않아도 블록체인과 같은 신뢰할 수 있고 검증이 가능한 그런 저장소를 통해서 Credentials의 신뢰성을 검증할 수 있는 그런 방안도 제공을 해줍니다.
검증자(Verifier) : 자격증명(신원정보) 검증자
검증절차를 위해 VC(검증 가능한 크리덴셜), VP(검증 가능한 프레젠테이션)을 받는 역할
사례 : 직원, 보안담당자, 웹사이트
* SSI (자기주권 신원모델) 는 중앙 집중식 데이터베이스나 중앙 기관에 의해 의존하지 않고 사용자가 디지털 신원 지갑을 통해 자신의 신원 정보를 소유하고 관리할 수 있도록 합니다. 이는 사용자가 자신의 개인 정보를 안전하게 보호하고 필요한 경우에만 공유할 수 있도록 합니다.(블록체인 기반)
SSI(자기주권 신원모델)에서 최소한의 정보 공개 원칙에 입각해 필요한 정보들로만 구성된 새로운 형식을 필요로 하는데 이게 바로 VP입니다.
SSI에서 핵심은 개인정보 보호힙니다, 하지만 여기서 문제가 생기는데. 예를 들어 주민등록증을 VC로 만든다면 모든 Claim들이 VC에 포함되게 됩니다. 주민등록증을 가지고 담배를 산다고 했을때 필요한 정보는 성인인지 아닌지만 확인하면 되는데, 성인 인증을 위해 불필요한 Claim(발급기관, 이름, 주소, 유효기간)까지 제공할 필요는 없기 때문입니다.
즉 VP에서는 필요한 Claims만 모은 새로운 VC를 만들고 VC와 동일한 검증 과정을 거치게 됩니다.
VC & DID
DID 서비스를 구축하기 위해서는 많은 기술이 필요하지만 핵심 적인 기술은 웹 표준화 기구(W3C)를 통해 국제표준화된
Verifiable Credential(VC) 와 Decentralized Identifiers(DID) 두가지 기술에 기반으로 하고 있습니다.
첫번째는 DID 생태계에서 사용자의 고유한 식별 정보를 정의 하는 DID분산식별자라는 기술이고 두번째는 사용자의 다양한 신원 속성을 관리하는 데이터 모델을 정의하는 VC 기술입니다.
DID식별자의 정의 - DID의 식별자는 중앙집중화된 서버와 같은 등록 기간이 필요하지 않은 전역 고유 식별자로 정의 하고 있습니다. DID의 식별자는 응용 도메인에서 사용자를 유일하게 식별하기 위한 모임에서 DID 식별자와 1:1로 맵핑이 되는 계약이 문서를 통해서 사용자를 인증하거나 디지털 서명 검증을 할 수 있는 정보를 포함 하고 있습니다. DID문서의 신뢰성을 위해서 블록체인과 같은 식별저장소를 통해서 관리도 하고 있습니다.
DID를 생성할 때 Private-Key, Public-Key 쌍을 생성하고, Private-Key는 단말과 같은 안전한 장소에 보관하고 Public-Key는 블록체인에 기록하는 모습을 확인할 수 있습니다.
EXAMPLE 1: A simple DID document
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/ed25519-2020/v1"
]
"id": "did:example:123456789abcdefghi", // DID
"authentication": [{ // 이외, Assertion(VC 검증에 활용)
"id": "did:example:123456789abcdefghi#keys-1", // DID URL 예
"type": "Ed25519VerificationKey2020",
"controller": "did:example:123456789abcdefghi",
"publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV" // 인증에 사용할 공개키 정보
}]
}
위에 그림에서 DID 컨트롤러는 DID document를 업데이트 할 수 있는 권한을 가진 엔티티의 DID 값 입니다. 보통은 DID 컨트롤러는 DID document의 Subject 자신이 되는게 일반적이지만, 다른 엔티티가 업데이트 권한을 위임 받아서 DID document를 업데이트 할 수 있습니다. 즉, DID 컨트롤러는 DID document의 Public-Key를 추가/제거하거나 Service-Endpoint를 추가/제거하는 것은 DID 컨트롤러가 수행할 수 있습니다. 이 외에 DID 컨트롤러와 비슷하지만 약간 다른 개념으로 Key 컨트롤러라는 것도 있습니다. 이 둘의 차이점은, DID 컨트롤러는 DID document의 최상위 엘리먼트로써 “controller” 이름의 속성으로 지정하며 해당 속성이 지정되지 않더라도 암묵적으로 추론 가능합니다 (i.e., 가령, 해당 DID document의 디폴트 DID 컨트롤러는 DID Subject라는 사실 추론). 반면에 Key 컨트롤러는 각 “publicKey” 속성 하위에 “controller” 이름의 속성으로 지정하며 반드시 명시적으로 지정을 해야 합니다. 이는 DID document의 DID 컨트롤러가 엔티티를 Key 컨트롤러에 지정 가능하기 때문입니다.
마지막으로 DID resolver는 DID 값을 입력으로 받아서 해당하는 DID document를 결과로써 반환하는 소프트웨어나 하드웨어를 의미합니다. 이러한 처리를 DID resolution이라고 하며, 입력된 DID에 대한 DID document를 가져올 때, DID 값에 지정된 DID method에 따라서 resolution 절차를 달리하게 됩니다. 이는 DID 플랫폼마다 DID document를 생성, 조회, 갱신, 삭제하는 방법이 전혀 다르기 때문입니다. 이렇듯 DID Method Registry에 등록된 여러 DID 플랫폼이 정의해 놓은 다양한 규격에 맞춰서 DID document를 조회하는 것은 쉽지 않습니다. 그래서, 여러 DID 플랫폼들에서 만들어진 DID 값을 입력하면 resolution을 쉽게 처리해주는 것으로 DIF에서 오픈소스로 공개된 Universal Resolver라는 것도 있습니다.
VC 검증 가능한 크리덴셜
크리덴셜을 고수하는 가장 기본적인 요소는 Claim입니다. Claim은 주채(subject)의 특성(Property)에 대한 정보(Value)를 설명하는 것으로 정의되는데 예를 들어 "Mr.Park 의 성별은 남성이다" 와 같은 형태를 갖습니다.
즉 Credential 은 동일한 주체에 대한 하나 이상의 Claim 집합이라고 할 수 있으며 다양한 신원 정보가 있는 주민등록증과 같은 형태를 생각하시면 될 것 같습니다.
그런데 이러한 Claim이 맞다는 사실을 누군가가 보증할 수 있어야 하고 내용이 위변조 되지 않았음을 증명 할 수 있는 방법이 필요한데 이러한 방법을 위해서 암호학적으로 처리된 데이터를 포함하는 것이 VC입니다.
credential metadata : 크리덴셜을 해설할 수 있게 설명해주는 메타데이터
claim : 신원정보에 대한 데이터 구조 주체에 대한 claim 집합
proofs : 검증하기위한 증명, 영지식 증명같은 것
VP 검증가능한 프레젠테이션 구조
VP는 Presentation Metadata, Verifiable Credentials, Proofs로 구성된다.
- 어떤 사람이 본인의 신분증을 제시하는데 데이터가 필요하고
- VC를 새로운 구성의 형식으로 만든것.
- VC들을 뭐라고 생각하면 좋을까? (운전면허증, 신분증)이라고 가정을 할때
- 내 신상정보를 모두 보여줄 필요없이 (운전면허증에서 운전 면허증 번호와 신분증의 집주소) === 새로운 형식의 VP
- VP를 검증하는 주체가 두가지의 검증을 가지고 서비스를 이용할수 있다
presentation Metadata : 해당 데이터가 VP라는것을 명시한 type, 이용약관, evidence 등 VP 검증에 참고할 수 있는 데이터가 포함 될 수 있다.
Verifiable Credentials : 사용자는 검증인이 요구하는 ID 속성을 가진 VC를 선택하여 Verifiable Vredentials 항목에 넣을 수 있다. VC 내에 존재하는 Cliam 중 검증인이 요구하는 ID 속성을 가진 VC를 선택하여 VC에 포함할 수 있기 떄문에 사요자의 프라이버시를 보호 할 수 있다.
Proofs : VP를 수신한 검증인은 VC 내에 포함된 Proof 항목을 통해 VC진위 여부를 검증 할 수 있다.
VC ex)
let vcData = {
id: "did.example:123456789qwfqefqf",
credentailSubject: {
name: "Mr.Park",
age: 30,
email: "sang@naver.com",
},
issuer: "did:example:issuer",
issuanceDate: "202x-xx-xx",
expirationDate: "20xx-xx-xx",
proof: {
type: "Ed25519Signature2018",
created: "2024-xx-xxxx",
proofPurpose: "assertionMethod",
verificationMethod: "did:example:isser#key1",
signatureValue: "B64encodeSignatureValue",
},
};
let vcJsonString = JSON.stringify(vcData, null, 4);
console.log("json", vcJsonString);
- vcData라는 JavaScript 객체를 정의합니다. 이는 VC(검증 가능한 크리덴셜)에 대한 데이터를 나타냅니다.
- JSON.stringify() 함수를 사용하여 JavaScript 객체를 JSON 형식의 문자열로 변환합니다. null을 사용하여 들여쓰기를 지정하지 않고, 4를 사용하여 4칸의 들여쓰기를 추가합니다.
- issuanceData(발급일)는 VC가 발급된 날짜 즉 발급된 시점을 나타내며 VC의 유효성을 확인하는데 사용될 수 있습니다.
- expirationDate(만료일)는 VC의 유효기간이 만료되는 날짜를 나타내고 날짜이후 더이상 유효하지 않습니다.
- verificationMethod(검증방법) 는 VC를 검증하는데 사용되는 방법으로 이는 주로 디지털 서명의 공개키나 DID와 같은 식별자를 가리키며 VC Issuer 즉 발행자가 제공합니다. VC를 검증할 때, verificationMethod를 사용하여 VC의 서명을 확인하고 발급자의 공개키를 사용하여 서명의 유효성을 검증합니다.
- signatureValue (서명 값)는 VC의 서명을 포함 한다. VC가 발급자에 의해 서명되었음을 나타내며 VC의 무결성을 보장하는데 사용됩니다.
Metamask와 같은 디지털 지갑은 주로 블록체인 기술을 기반으로 동작하며, 사용자의 개인 키를 안전하게 저장하고 관리하여 사용자의 디지털 자산 및 신원 정보를 보호합니다. 이러한 디지털 지갑은 사용자가 블록체인 네트워크 상에서 자신의 신원 정보를 관리하고 제어할 수 있도록 도와줍니다.
이러한 디지털 지갑에서 VC(검증 가능한 크리덴셜) 데이터를 가질 수 있는 원리는 다음과 같습니다:
- DID(Distributed Identifier) 생성: 사용자는 Metamask와 같은 디지털 지갑을 통해 자신의 DID를 생성합니다. DID는 사용자의 고유한 식별자로서 블록체인 상에서 사용됩니다.
- VC 발급 요청: 사용자는 VC를 발급 받기 위해 디지털 지갑을 사용하여 발급 요청을 합니다. 이 요청은 발급자에게 전송되고, 발급자는 사용자의 요청에 따라 VC를 생성하고 서명합니다.
- VC 수신 및 저장: 발급자가 VC를 생성하고 서명하면, 이를 사용자의 디지털 지갑에 전송됩니다. 사용자는 Metamask와 같은 디지털 지갑을 통해 VC를 안전하게 수신하고 저장할 수 있습니다.
- VC 관리 및 사용: 사용자는 Metamask를 통해 수신한 VC를 관리하고 필요한 곳에서 제출할 수 있습니다. 이를 통해 사용자는 자신의 신원 정보를 안전하게 보호하고 필요한 서비스나 프로세스에서 VC를 사용할 수 있습니다.
이러한 과정을 통해 Metamask와 같은 디지털 지갑은 사용자의 신원 정보를 안전하게 관리하고, 필요한 경우 VC 데이터를 제공하여 사용자가 다양한 서비스에서 신원 확인이나 인증을 받을 수 있도록 합니다.
DID의 사용 사례
시나리오는 사용자가 입사지원을 하기 위한 과정을 DID 기술을 통해서 어떻게 진행하는지 간략한 절차를 보도록 합시다.
시나리오의 참여자는 사용자와 입사지원에 필요한 신원증명을 발급하는 학교 그리고 자격증 관리 기관이 있다고 가정을 합니다. 초기 셋업단계에서 DID 생태계에 참여하는 모든 참여자는 DID 식별자를 생성을 해서 분석하는 과정을 거칩니다.
자격증도 마찬가지로 사용자의 디지털 지갑 앱을 통해서 DID와 관련된 정보를 자동 생성을 하고 DID문서를 신뢰 저장소에 등록을 합니다. 이제 사용자는 디지털 졸업 증명서와 자격증을 DID 식별자와 크리덴셜 기술을 통해서 발급을 받아 제출을 하고 입사기업에서는 제출된 증명서를 자동으로 검증 할 수 있게 합니다. 기존에는 종이로 출력된 증명서나 PDF 문서를 다운로드 받아 전송하는 불편한 과정을 겪어야 하고 전송된 증명서를 검증하는 데에도 사람의 노력이 많이 필요합니다.
DID기술은 이러한 과정을 디지털 지갑을 통해서 몇번의 클릭만 하고 조작을 통해서 편하게 진행할 수 있도록 할 수가 있고 신원 정보의 신뢰성도 단호화된 검증을 수행할 수 있도록 하고 있습니다.
DID 보안의 이슈
DID 크리덴셜은 사용자의 민감한 개인정보를 포함 할 수 있습니다. 이러한 민감한 정보를 의도치 않게 노출되는 것을 방지할 수 있어야 하고 다양한 시나리오의 서비스에 필요한 만큼의 최소 정보만 제공할 수 있도록 익명, 가명 하라든지 선택적 정보 은닉과 같은 프라이버시 관련 기술이 연구가 되고 있습니다. 그리고 디지털 지갑 속에는 기존의 실물 지갑보다 더많은 신분증과 카드가 탑재될 수 있습니다. 그래서 한번 분실되면 여러가지 사용자 피해와 불편을 초래하게 됩니다. 따라서 디지털 지갑 속에 데이터를 안전하게 보호를 하면서 디지털 지갑이 분실되더라도 안전하고 편리하게 복구 할 수 있는 방안이 필요합니다. 마지막은 발급된 크리덴셜을 잔잔히 운용에서만 활용 될 수 있다면 디지털 신분증과 같은 서비스는 확산되기가 쉽지 않을 겁니다. 따라서 디지털 신분증을 다양한 영역에서 활용될 수 있도록 향후 운영기술과 관련된 기술의 표준화 등의 필요로 하고 있으며 현재 관련 연구개발이 진행되고 있는 상황입니다.
'Blockchain' 카테고리의 다른 글
[Blockchain] 데이터 구조 header/body (1) | 2024.01.23 |
---|---|
[Blockchain] Merkle (0) | 2024.01.23 |
[Blockchain] 개인키&공개키 (0) | 2024.01.22 |