ERC-7734 탈중앙 신원 확인 표준 (Decentralized Identity Verification (DID))

Final · 서명·인증 · 2024-06-26 작성

이름이나 서류 같은 신원 정보는 체인 밖에 두고 그 정보의 해시만 온체인에 올려 신원을 만들고 확인하고 철회할 수 있게 하는 최소한의 표준입니다.

왜 필요한가

지금의 신원 확인은 대부분 중앙 기관이 맡습니다. 절차가 번거롭고 한곳에 모인 개인정보가 유출 사고에 노출되기 쉬우며 정작 사용자는 자기 신원 데이터를 통제하지 못합니다. 블록체인 기반의 탈중앙 신원(DID, Decentralized Identity) 솔루션이 대안으로 나왔지만 기존 방식은 다루는 속성과 상호작용이 많아 구조가 복잡하고 그만큼 개발자와 사용자가 도입하기 어렵습니다. 이 표준은 반대로 구조를 최대한 단순하게 유지합니다. 온체인에는 주소와 해시, 확인 여부만 남기고 이름이나 나이 같은 세부 신원 속성과 실제 검증 절차는 체인 밖(오프체인)에 맡깁니다. 덕분에 민감한 정보가 블록체인에 직접 저장되지 않아 프라이버시가 지켜지고 디앱에 붙이기 쉬워 더 넓은 채택을 노릴 수 있습니다.

구현해야 하는 것

심층 설명

Identity 구조체: 온체인에 남는 최소한의 정보

신원은 userAddress(사용자의 이더리움 주소), identityHash(신원 데이터의 해시), verificationHashes(확인에 쓰인 해시 2개, bytes32[2]), isVerified(확인 여부), timestamp(신원 생성 시각)의 다섯 필드로만 이루어집니다. 신원 자체는 고유 주소(공개키)로 표현되고 이름이나 나이 같은 추가 속성은 전부 선택 사항으로 오프체인 관리에 맡깁니다. 이 최소 구조가 구현을 가볍게 유지해 불필요한 복잡성을 피하고 채택을 넓히려는 설계의 핵심입니다.

createIdentity: 신원 생성

호출자가 신원 데이터의 해시인 identityHash를 넘겨 자기 신원을 만듭니다. 참조 구현은 identities[msg.sender].userAddress == address(0) 검사로 같은 주소의 신원이 이미 있으면 "Identity already exists"로 되돌립니다. 생성 시 verificationHashes는 빈 해시 [bytes32(0), bytes32(0)]으로, isVerified는 false로 초기화되고 timestamp에는 block.timestamp가 들어가며 IdentityCreated 이벤트가 발생합니다.

verifyIdentity: 확인 해시의 의미는 구현자 몫

호출자가 bytes32[2] 확인 해시를 제출하면 컨트랙트가 이를 저장하고 isVerified를 true로 바꾼 뒤 IdentityVerified 이벤트를 냅니다. 확인 해시는 오프체인 증명, 암호학적 챌린지, 어테스테이션 등에서 유도할 수 있으며 정확한 의미와 유도 방법은 의도적으로 구현자에게 맡겨 둡니다. 해석을 열어 두면 민감 정보를 체인에 올리지 않으면서도 구현마다 필요한 검증 방식을 유연하게 붙일 수 있다는 것이 이 설계의 근거입니다. 참조 구현은 신원이 존재하는지만 확인하고 해시 내용 자체는 검증하지 않습니다.

revokeIdentity와 getIdentity: 철회와 조회

revokeIdentity는 호출자의 isVerified를 false로 되돌리고 IdentityRevoked 이벤트를 냅니다. 참조 구현에서 철회는 확인 상태만 해제할 뿐 신원 구조체 자체를 지우지는 않습니다. getIdentity는 아무 주소나 받아 그 주소의 Identity 구조체를 반환하는 조회 함수로, 디앱이 사용자의 확인 상태를 읽는 통로가 됩니다. 생성, 확인, 철회가 모두 이벤트로 남아 투명성과 추적 가능성이 보장됩니다.

다른 DID 표준과의 차별점

기존 탈중앙 신원 솔루션이 폭넓은 신원 속성과 상호작용을 표준 안에 담으려는 것과 달리, 이 표준은 미니멀리즘, 사용자 통제, 프라이버시에 집중합니다. 온체인 구조를 단순하게 유지하고 세부 신원 관리와 검증은 오프체인 메커니즘에 의존합니다. 제안은 이 단순함이 도입 장벽을 낮춰 사용자 중심의 안전한 생태계를 우선하는 디앱에 맞는 선택지가 된다고 주장합니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs