Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

영지식 증명을 활용한 탈중앙화된 신원증명 오픈 세미나 정리

왜 ZKP를 이용한 신원증명인가?

성인인증을 한다고 가정해보자. 내가 성인임을 증명하기 위해 내 개인정보를 노출해야 한다.

개인정보를 제공하지 않고 내가 어떻게 성인임을 어떻게 증명할 수 있을까? => 영지식 증명(머클증명을 통한 소속확인)

머클 트리

블록의 정보를 헤더에 요약하는 방법

영지식 증명

증명자가 스도쿠 문제를 풀었다는 것을 검증자에게 답을 제출하지 않고 답을 풀었다는 것을 증명할 수 있다.

증명자

Proof를 제출!

검증자

Proof를 검증하는 주체

이더리움 블록체인 + Zokrates

개념적으로만 존재하는 것을 라이브러리로 제공한다.

  • 이더리움 영지식증명 라이브러리
  • 증명(Proof) 생성 및 검증용 스마트 컨트랙트를 만들어줌

검증자는 블록체인 네트워크에 존재한다.

기본 아키텍처

  • 등록(Register)
    • 오프체인으로 신원등록기관에 자격을 증명합니다.
    • 스마트 컨트랙트로 만들어둔 머클트리에 신청자의 공개키 등록
  • 증명(Prooving)
    • 본인의 머클 경로 조회
    • 영지식 증명을 이용한 머클트리 내에 존재증명 생성
  • 활용(Application)
    • 부가 서비스 활용

응용 사례

  • 무기명 전자 투표

구현 및 제약 사항

  • 머클트리 서킷: 그룹을 정의하기
  • 언링커블 태그: 그룹에 속함을 증명
  • 스마트 컨트랙트

검증에 많은 가스가 사용됨: 확장성 이슈

  • 이더리움 메인체인을 사용하기 힘듬
  • 프라이빗 블록체인은 신뢰도가 떨어짐
  • 탈중앙화된 레이어2 솔루션

키 관리의 문제

  • 유저들은 공인인증서와 비슷한 개인키를 관리해야함
  • 분실할 경우

구현상의 문제

머클트리 depth에 관한 서킷 구현 문제

  • fixed depth merkle
  • unfixed depth merkle

스마트 컨트랙트에 엄청나게 큰 머클이 만들어질 수 있을까?

  • 유권자 10만명 길이의 머클트리 구현?
  • 프라이빗 체인 or 레이어2 솔루션 필요