개요

영지식 증명은 어떤 명제가 참임을 설득하면서도 그 근거가 되는 비밀은 끝까지 숨기는 절차를 말함 블록체인과 프라이버시 보존 컴퓨팅에서 핵심 도구로 자리 잡았고 범용 계산의 유효성을 작은 증명으로 압축해 전달하는 현대 프로토콜의 기초로 쓰임 이 글은 기본 개념과 직관, 수학적 성질, 대화형과 비대화형의 차이, 디지털 서명과의 구분, 이산로그 기반 간단 Σ-프로토콜까지 한 번에 정리함

목적과 맥락

  • 비밀을 공개하지 않고 유효성만 검증하려는 요구 증가
  • 퍼블릭 블록체인에서 데이터 비공개 유지와 정합성 보장 필요 확대
  • 오프체인 연산을 온체인에 작은 증명으로 제출해 확장성과 비용 개선 추구

핵심 개념과 정의

  • Prover 비밀을 가진 참여자. 비밀을 공개하지 않고 명제의 참을 설득하려는 주체
  • Verifier 검증자. Prover가 비밀을 가진 사실 또는 명제가 참이라는 사실만 확인하려는 주체
  • Witness 또는 Secret 명제의 참을 뒷받침하는 비밀 값 또는 비밀 지식
  • Statement 공개 가능한 명제 표현. 예 y = g^x mod p에서 x를 알고 있음을 증명
  • Challenge 검증자가 제시하는 무작위 도전값. 조작 불가와 예측 불가가 전제
  • Transcript 또는 View 대화형 상호작용의 기록. 시뮬레이터가 동일 분포로 재현 가능해야 영지식 성립

영지식 증명의 세 가지 성질

  • 완전성 Completeness 정직한 Prover가 비밀을 가지고 있으면 정직한 Verifier는 높은 확률로 설득됨
  • 건전성 Soundness 비밀이 없으면 Prover가 속일 확률이 매우 낮음. 도전 공간 확대나 반복으로 속임 확률을 지수적으로 낮춤
  • 영지식성 Zero-Knowledge Verifier는 명제가 참이라는 사실 외 추가 정보를 얻지 못함. 시뮬레이터가 실제와 구별 불가한 트랜스크립트를 비밀 없이 생성 가능해야 함

직관적 예시 알리바바 동굴

  • 동굴의 두 갈래 A와 B 사이를 가로막는 문이 있고 비밀 주문을 알면 반대편으로 넘어올 수 있음
  • 검증자는 Prover가 들어간 뒤 무작위로 A 또는 B로 나오라고 요구함
  • Prover가 주문을 모르면 자신이 들어간 쪽을 요구받을 때만 성공 가능. 1회 성공 확률 1/2
  • k회 독립 반복하면 모두 속일 확률 2^-k로 급감
  • 검증자는 주문 내용은 모르지만 Prover가 주문을 안다는 사실만 높은 확률로 확신 가능함

핵심 포인트

  • 비밀 노출 없이 유효성만 확인 가능
  • 무작위 도전과 반복으로 사기 가능성 급감
  • 대화 기록만으로 비밀 자체를 유추 불가

형식적 관점과 시뮬레이터

  • 대화형 증명은 Prover P와 Verifier V가 커밋-챌린지-리스폰스 구조로 상호작용함
  • Transcript는 도전값과 응답 및 공개 상태를 포함하는 관찰 기록을 의미함
  • 영지식성은 시뮬레이터 S가 비밀 없이도 실제와 분포가 같은 Transcript를 생성할 수 있음을 요구함
  • 의미는 검증자가 얻은 정보가 공개 난수로도 재현 가능한 수준에 한정됨을 보장한다는 것임

사전 공모 이슈와 설계 포인트

  • 대화형 프로토콜에선 검증자와 Prover가 사전 공모했다면 제3자는 배제 불가 이슈가 생김
  • 이 경우를 지정 검증자 영지식 designated-verifier ZK로 분류 가능
  • 공개 검증이 필요하면 비대화형 영지식 NIZK 또는 공개 검증 가능한 Σ-프로토콜 조합을 사용해 누구나 검증 가능하게 설계 필요
  • Fiat–Shamir 변환으로 도전값을 해시로 결정하면 제3자도 단일 증명을 검증 가능
  • 운영 시 검증자의 내부 시드나 도전값 생성 과정을 과도하게 공개하면 지정 검증자 시나리오의 영지식성이 약화될 수 있음

대화형과 비대화형

  • 대화형 Interactive 실시간으로 도전과 응답을 주고받는 구조. 장점은 단순성과 강한 보안 모델. 단점은 왕복 상호작용과 제3자 설득 한계 가능
  • 비대화형 Non-Interactive 하나의 짧은 증명을 생성해 누구나 검증. Fiat–Shamir로 대화형 도전을 해시로 대체. SNARK와 STARK 등에서 표준 사용
  • 트레이드오프 네트워크 왕복 제거와 공개 검증 가능성 vs 해시를 랜덤 오라클로 보는 가정과 경우에 따라 신뢰 설정 필요

디지털 서명과의 차이

  • 신원 노출 서명은 공개키로 서명자 신원이 구조적으로 드러남. ZK는 신원과 비밀 모두 숨기고 유효성만 증명 가능
  • 제3자 설득 서명은 메시지-서명 쌍을 누구나 검증 가능해 완전 설득 지향. ZK도 NIZK나 공개 검증 가능한 구성에선 제3자 설득 가능. 다만 지정 검증자 ZK에선 제3자 설득이 제한됨
  • 프록시 릴레이 공격 대화형 식별 프로토콜은 중간자 릴레이 공격 위험 존재. 세션 바인딩과 채널 인증, 도전값 바인딩으로 완화 필요. 서명은 보통 프로토콜 레벨 인증과 채널 보안으로 대응
  • 연결 고리 Σ-프로토콜에 Fiat–Shamir를 적용하면 서명 스킴으로 전환 가능. 대표가 Schnorr 서명임

ZKP Under the Hood 이산로그 기반 Σ-프로토콜

가장 고전적인 지식증명은 이산로그 가정 위에서 동작함 공통 입력 y = g^x mod p에서 x가 비밀이며 Prover는 x를 안다는 사실을 증명함

기본 설정

  • 큰 소수 p와 생성원 g를 가진 소수 차수 q 부분군 선택. 연산은 지수에서 mod q로 수행
  • 공통 값 y = g^x mod p는 공개. x는 Prover만 아는 비밀

1비트 챌린지 버전 직관

  • 커밋 Prover가 임의의 r를 뽑아 C = g^r mod p 전송
  • 챌린지 Verifier가 z ∈ {0,1} 전송
  • 응답 z = 0이면 r 공개. z = 1이면 s = r + x mod q 공개
  • 검증 z = 0이면 g^r ≟ C 확인. z = 1이면 g^s ≟ C · y 확인
  • Prover가 x를 모르면 두 경우를 동시에 만족시키는 응답을 준비 불가. 1회 속임 확률 1/2. k회 반복 시 2^-k로 감소

일반화된 Schnorr 식별 프로토콜

  • 도전값 c를 Z_q에서 무작위 선택
  • 커밋 C = g^r
  • 응답 s = r + c·x mod q
  • 검증 g^s ≟ C · y^c
  • 비대화형으로는 c = H(domain, context, g, y, C)로 정하고 단일 증명을 생성함. 여기서 H는 도메인 분리와 컨텍스트 바인딩을 포함한 해시 함수이며 랜덤 오라클 가정 하에서 분석함

주의사항

  • 안전한 구현은 군 차수 q 기준으로 지수 연산 수행 필요
  • r은 CSPRNG로 매 증명마다 새로 생성. r 재사용은 즉시 비밀 유출로 이어짐
  • 해시 입력엔 도메인 분리 태그와 세션 ID, 검증자 식별 등 컨텍스트를 바인딩해 재생 공격과 교차 프로토콜 간섭을 방지 필요

간단 검증 스니펫 예시

아래는 원리 전달용 최소 형태임. 실제 구현에선 안전한 군 선택, 상수시간 연산, 에러 처리 포함 필요

## 공개 파라미터 p, g, y와 커밋 C, 도전 z, 응답 resp를 검증하는 예시

def verify_one_bit(p, g, y, C, z, resp):
    if z == 0:
        ## resp == r
        return pow(g, resp, p) == C
    else:
        ## resp == s = r + x mod q
        return pow(g, resp, p) == (C * y) % p

def verify_schnorr(p, g, y, C, c, s):
    ## 일반형 검증식 g^s == C * y^c mod p
    left = pow(g, s, p)
    right = (C * pow(y, c, p)) % p
    return left == right

확률적 보장과 파라미터 선택

  • 1회 속임 확률은 1 / |ChallengeSpace| 임
  • 1비트 도전이면 1/2. k회 독립 반복 시 2^-k로 수렴
  • NIZK나 공개 검증에서는 도전 공간을 128비트 이상으로 설정해 단일 증명으로 충분한 사운드니스 확보 권장
  • 블록체인 환경에서는 검증 비용과 증명 크기, 사운드니스 비트를 함께 고려해 회로 크기와 파라미터를 선택 필요

설계 포인트와 운영 수칙

  • 그룹과 곡선 선택 secp256k1, P-256, BLS12-381, Bandersnatch, ristretto255 등 표준 계열 우선 고려
  • 난수 생성 CSPRNG 필수. 커밋 nonce r 재사용 금지. 시스템 RNG 품질 모니터링 필요
  • 파라미터 바인딩 도전 해시에 프로토콜 식별자, 세션 ID, 검증자 식별 또는 채널 특성 포함해 세션 고정 효과 확보
  • 트랜스크립트 관리 지정 검증자 시나리오에서는 불필요한 내부 난수 공개를 줄임. 공개 검증 목표면 처음부터 NIZK 또는 SNARK류 선택
  • 부채널 대응 타이밍 누수와 캐시 기반 누수에 대비해 상수시간 구현과 블라인딩 적용
  • 리플레이 및 릴레이 방지 세션 바인딩, nonce, 타임스탬프, 채널 인증 적용
  • 회귀 방지 회로나 명세 변경 시 검증 규칙에 대한 테스트 자동화와 호환성 체크 필요

SNARK vs STARK vs Bulletproofs 한눈 비교

항목SNARKSTARKBulletproofs
설정일부 시스템 신뢰 설정 필요. Plonk류는 범용 SRS 가능투명 설정. 신뢰 설정 불요신뢰 설정 불요
증명 크기매우 작음 수십 바이트 수준까지 가능비교적 큼 수십 KB 이상로그 크기. 범위증명은 수 KB 수준
검증 비용빠름. 온체인 친화적보통에서 빠름. 해시 중심검증 비용 큼. 집계로 완화 가능
보안 가정페어링과 다항식 약속 등 수학적 가정해시 기반 IOP와 FRI. 포스트 양자 내성 기대내적 논증 기반. 일반군 가정
활용 예zkEVM, 롤업, 영지식 브리지투명한 롤업, 대규모 추적 증명범위증명, UTXO 프라이버시

각 계열의 실제 성능은 구현과 회로 구조, 하드웨어에 크게 의존함

블록체인 적용 예

  • 잔액과 금액을 숨긴 비공개 전송과 감사 가능성 확보
  • 신원 속성 최소 공개 KYC 예 나이 이상 여부만 증명
  • 영지식 롤업 상태 전개 증명과 데이터 가용성 보완
  • 오라클 입력의 유효성 증명과 오프체인 계산 검증
  • MPC와 결합한 다자 프라이버시 계산의 결과 정합성 증명

자주 묻는 질문

  • ZK면 항상 제3자 설득 불가임? 아님. NIZK나 공개 검증 가능한 구성에선 누구나 검증 가능함
  • STARK는 포스트 양자 보안 보장임? 양자에 대해 알려진 공격이 약하다는 의미의 내성 기대 수준임. 수학적 증명된 보장은 아님
  • 왜 r 재사용이 위험함? 서로 다른 도전에 같은 r을 쓰면 x가 선형식으로 노출됨
  • 왜 q 모듈러를 강조함? 안전한 지수 연산의 정의역은 군 차수 q이기 때문임. p-1 전역 모듈러는 안전하지 않을 수 있음

검증과 회귀 방지 체크리스트

  • 사운드니스 목표 비트와 도전 공간이 요구 수준 충족하는지 점검
  • 난수 생성 모듈 품질과 시드 관리 상태 감사
  • 도메인 분리 태그와 세션 ID가 해시 입력에 포함되는지 확인
  • 재생 공격과 프록시 릴레이 가능성에 대한 테스트와 채널 인증 적용
  • 상수시간 연산 준수 여부와 메모리 접근 패턴 누수 점검
  • 회로 변경 시 검증 규칙 스냅샷과 회귀 테스트 자동화

마무리

영지식 증명은 비밀을 드러내지 않고도 유효성을 설득하는 체계임 완전성-건전성-영지식성의 삼각을 이해하고 대화형과 비대화형의 차이를 파악하면 설계 선택이 명확해짐 실무에서는 안전한 군 선택과 난수, 도전 공간 크기, 세션 및 채널 바인딩, 신뢰 설정과 부채널 대응을 종합적으로 관리 필요 목표는 비밀을 지키면서도 누구나 또는 지정된 상대가 납득할 수 있는 검증 가능한 시스템을 만드는 것임

참고 링크