ERC-7231 신원 집약 NFT (Identity-aggregated NFT)
Final · 서명·인증 · 2023-06-25 작성
웹2와 웹3의 여러 계정 신원을 본인 승인으로 NFT에 묶고 그 바인딩을 온체인에서 검증할 수 있게 하는 ERC-721 확장 표준입니다.
왜 필요한가
웹3에서는 개인이 중앙 관리자 없이 자기 계정을 소유하고 필요한 정보만 골라 여러 앱에 제시할 수 있다는 장점이 있습니다. 그러나 기존 해법에는 한계가 있습니다. ENS 같은 이름 서비스는 개방적이고 탈중앙화되어 있지만 데이터 표준화가 부족하고 태생적 익명성 때문에 신원 인증이 어렵습니다. 소울바운드 토큰(SBT)은 중앙화된 증명자에 의존하고 데이터 변조를 막지 못하며 프라이버시를 지키는 방식으로 데이터를 장부에 기록하지 못합니다. 그 결과 개인의 웹2 계정과 웹3 주소가 흩어진 채로 남아 하나로 집계된 신원을 온체인에서 활용하기 어렵습니다. 이 표준은 개인이 직접 승인한 웹2·웹3 신원 집계를 NFT(SBT 포함)에 바인딩해 이 문제를 풉니다.
심층 설명
ERC-721 확장과 메타데이터 스키마
이 표준은 ERC-721에 확장 함수 세트를 더하는 방식이라 ERC-721과 완전히 호환됩니다. ERC-165, ERC-721, ERC-1271이 필요합니다. 메타데이터 JSON에는 name, description, image 외에 MultiIdentities 배열을 추가합니다. 각 항목은 웹2 플랫폼 계정이나 블록체인에서 만든 탈중앙 신원(DID)을 담는 userID, 그 userID의 검증자 주소인 verifierUri, 메모인 memo, 사용자 ID 정보의 속성 객체인 properties로 구성됩니다. 이 스키마로 NFT ID와 UserIDInfo 배열을 묶어 여러 신원을 매끄럽게 집계할 수 있습니다.
setIdentitiesRoot와 getIdentitiesRoot
setIdentitiesRoot(id, identitiesRoot)는 NFT ID에 멀티 userID 루트 데이터 해시를 바인딩해 저장하고 SetIdentitiesRoot 이벤트를 냅니다. 외부 호출을 허용해야 합니다(MUST). getIdentitiesRoot(id)는 NFT ID로 bytes32 형식의 multiUserIDsRoot를 반환해야 하고 상태를 변경하면 안 되며 외부 호출을 허용해야 합니다. 사용자가 메타데이터를 설정한 뒤 이 함수로 해시된 userID 묶음과 NFT ID 사이의 안전한 바인딩을 만듭니다. 이 바인딩을 수행할 권한은 사용자에게만 있으므로 데이터가 오로지 사용자에게 속함이 보장됩니다.
verifyIdentitiesBinding의 4단계 검증
verifyIdentitiesBinding은 NFT ID, NFT 소유자 주소, 검사할 userID 목록, 검증할 메시지 해시인 identitiesRoot, ECDSA 서명을 받습니다. ERC-1271 프로토콜 기반 서명 방식으로 userID와 NFT 소유자 주소의 온체인·오프체인 바인딩을 검증하며, 구체적으로 1) NFT 소유권 검증, 2) userID 형식 검증, 3) identitiesRoot 일관성 검증, 4) NFT 소유자의 서명 검증을 수행합니다. 검증을 통과하면 true, 아니면 false를 반환해야 하고 상태를 변경하면 안 되며 외부 호출을 허용해야 합니다.
기존 해법과의 차이
ENS는 개방적이고 탈중앙화되어 이더리움 기반 앱에 편리하지만 데이터 표준화가 부족하고 태생적 익명성 때문에 신원 인증이 어렵습니다. SBT 같은 다른 해법은 중앙화된 증명자에 의존하고 데이터 변조를 막지 못하며 프라이버시를 지키는 방식으로 데이터를 장부 자체에 기록하지 않습니다. 이 표준은 개인이 직접 인증한 웹2·웹3 신원 집계를 NFT(SBT 포함)에 바인딩하는 신원 집약 NFT로 신원 문제 해결의 경계를 넓힙니다.
신원 진위 확인은 표준 밖의 문제
개인의 신원, 지갑, 계정의 진위를 어떻게 확인할지는 이 표준이 정하지 않습니다. 원문은 zk 기반 DID 온체인 인증 같은 온체인 방법과 auth2, openID2 같은 오프체인 인증 알고리즘 등 다양한 방법이 있다고만 밝힙니다. 즉 이 표준은 인증된 신원 정보를 NFT에 묶고 그 바인딩을 검증하는 틀을 제공하고 인증 자체는 구현에 맡깁니다.
쓸 때 주의할 점
- 신원 데이터의 추가·삭제는 사용자 몫: 이 표준은 사용자가 NFT와 신원 바인딩 정보를 직접 추가하거나 삭제하는 방식으로 자신의 신원, 지갑, 관련 데이터에 대한 소유권과 통제권을 가지도록 합니다. 데이터 관리가 전적으로 사용자 손에 있습니다.