zk-STARKs와 투명한 영지식의 세계

반응형
반응형

zk-STARKs와 투명한 영지식의 세계

1편 : 비밀을 말하지 않고 진실을 증명하기(feat.영지식 증명)

2편 : zk-SNARKs 다항식과 타원곡선의 수학

 

2편에서 살펴본 zk-SNARKs는 강력하지만 치명적인 약점이 있습니다. 신뢰할 수 있는 설정(Trusted Setup)이라는 아킬레스건 말입니다. 비밀값이 유출되면 전체 시스템이 무너지고, 매번 새로운 회로마다 복잡한 의식을 거쳐야 합니다.

2018년, 이더리움 공동창립자 비탈릭 부테린과 StarkWare 팀이 제시한 zk-STARKs는 이 문제를 근본적으로 해결했습니다. 신뢰할 수 있는 설정 없이도 영지식 증명을 구현하면서, 양자 컴퓨터에도 안전하고, 더 나은 확장성까지 제공합니다.

오늘은 zk-STARKs의 핵심 기술인 FRI(Fast Reed-Solomon Interactive Oracle Proofs)다항식 커밋먼트 방식을 깊이 있게 분석해보겠습니다.

🔍 zk-STARKs: 투명성을 통한 혁신

STARKs의 기술적 정의

zk-STARKs = Zero-Knowledge Scalable Transparent ARguments of Knowledge

 

SNARKs와의 핵심 차이점

🔓 Transparent (투명성)

SNARKs: 신뢰할 수 있는 설정 필요 (Trusted Setup)
STARKs: 완전히 투명함 - 공개된 랜덤성만 사용

보안 근거: 해시 함수의 일방향성과 충돌 저항성
암호학적 가정: 최소한의 가정만 필요

📈 Scalable (확장 가능함)

SNARKs: 증명 생성 시간 O(C log C), C = 회로 크기
STARKs: 증명 생성 시간 O(C log² C)

하지만 더 나은 병렬화 가능성:
- 더 단순한 연산 (해시만 사용)
- GPU 친화적 구조
- 메모리 효율성

크기와 성능 비교 분석

증명 크기 비교

SNARKs (Groth16): 192바이트 (상수)
STARKs: 수십 KB ~ 수백 KB (log² 크기)

실제 예시:
- 단순한 계산: STARKs ~42KB
- 복잡한 계산: STARKs ~200KB
- 매우 복잡한 계산: STARKs ~1MB

검증 시간 비교

SNARKs: 2-6ms (쌍함수 계산)
STARKs: 10-50ms (해시 기반 검증)

확장성 차이:
SNARKs: O(1) - 계산 크기와 무관
STARKs: O(log² C) - 계산 크기에 따라 증가하지만 느리게

 

 

 

🎯 해시 기반 영지식: 새로운 패러다임

해시 함수의 장점

zk-STARKs는 타원곡선 대신 해시 함수만을 사용합니다

 

보안 근거

필요한 가정: 해시 함수의 일방향성
- SHA-256, Blake2s, Poseidon 등
- 양자 컴퓨터에도 안전
- 잘 연구된 안전성

불필요한 가정:
- 이산 로그 문제 (양자 컴퓨터로 깨짐)
- 타원곡선 쌍함수의 복잡한 수학
- 특정 곡선의 특수한 성질

 

구현 장점

단순함: 해시 함수만 구현하면 됨
효율성: 하드웨어 가속 쉬움
표준화: 검증된 해시 알고리즘 사용
디버깅: 중간 과정 검증 가능

Merkle Tree와 Polynomial Commitment

STARKs의 핵심은 다항식을 Merkle Tree로 커밋하는 것입니다.

기본 구조

1. 다항식 f(x)를 특정 점들에서 평가
2. 평가값들을 Merkle Tree로 커밋
3. 증명자가 필요한 값들만 공개
4. Merkle Path로 검증

구체적 과정

다항식: f(x) = 3x² + 2x + 1
도메인: {1, 2, 4, 8, 16, 32, 64, 128} (2의 거듭제곱)

평가값:
f(1) = 6, f(2) = 17, f(4) = 57, f(8) = 209, ...

Merkle Tree:
Root = Hash(Hash(Hash(6,17), Hash(57,209)), Hash(...))

🔄 AIR: Algebraic Intermediate Representation

계산을 다항식으로 표현하기

STARKs는 계산을 AIR(Algebraic Intermediate Representation)로 변환합니다:

실행 테이블(Execution Trace)

피보나치 수열 계산 예시:
Step | a | b | c
-----|---|---|---
  0  | 1 | 1 | 2
  1  | 1 | 2 | 3  
  2  | 2 | 3 | 5
  3  | 3 | 5 | 8
  4  | 5 | 8 | 13

제약 조건 (Constraints)

다음 단계 제약:
a_{i+1} = b_i
b_{i+1} = c_i  
c_{i+1} = a_i + b_i

다항식으로 표현:
P₁(x) = a(ωx) - b(x) = 0
P₂(x) = b(ωx) - c(x) = 0
P₃(x) = c(ωx) - a(x) - b(x) = 0

여기서 ω는 원시 n차 단위근

다항식 interpolation과 평가

라그랑주 보간법 적용

실행 테이블의 각 열을 다항식으로 변환:

a(x): 점 (1,1), (ω,1), (ω²,2), (ω³,3), (ω⁴,5), ... 를 지나는 다항식
b(x): 점 (1,1), (ω,2), (ω²,3), (ω³,5), (ω⁴,8), ... 를 지나는 다항식
c(x): 점 (1,2), (ω,3), (ω²,5), (ω³,8), (ω⁴,13), ... 를 지나는 다항식

제약 검증

H₁(x) = (a(ωx) - b(x)) / Z_H(x)
H₂(x) = (b(ωx) - c(x)) / Z_H(x)  
H₃(x) = (c(ωx) - a(x) - b(x)) / Z_H(x)

여기서 Z_H(x) = x^n - 1 (vanishing polynomial)

H₁, H₂, H₃가 모두 다항식이면 모든 제약이 만족됨

🌟 FRI: Fast Reed-Solomon Interactive Oracle Proofs

Reed-Solomon 코드의 기본 원리

FRI의 핵심은 Reed-Solomon 코드의 근접성 테스트입니다:

Reed-Solomon 코드란:

다항식 f(x) (차수 < d)를 n개 점에서 평가한 것
RS[n,d] = {(f(α₁), f(α₂), ..., f(αₙ)) | deg(f) < d}

성질:
- 최소 거리: n - d + 1
- 오류 정정 능력: (n - d)/2
- 효율적인 인코딩/디코딩

근접성 문제:

주어진 벡터 v가 어떤 차수 d 다항식의 평가값에 가까운가?

정확하게는: RS 코드워드와의 해밍 거리가 작은가?
FRI는 이를 효율적으로 검증하는 프로토콜

FRI 프로토콜의 작동 원리

핵심 아이디어: 차수 감소

f₀(x) = f(x) (차수 d)
f₁(x) = (f₀(x) + f₀(-x))/2 + α₁ · (f₀(x) - f₀(-x))/(2x) (차수 ~d/2)
f₂(x) = (f₁(x) + f₁(-x))/2 + α₂ · (f₁(x) - f₁(-x))/(2x) (차수 ~d/4)
...

k번 반복하면 차수가 d/2^k로 감소

단계별 과정

 

1단계: 초기 커밋

증명자:
- f₀(x)를 도메인 D₀에서 평가
- Merkle Tree MT₀에 커밋
- 루트 해시 r₀ 전송

검증자:
- 랜덤 αᵢ 생성하여 전송

2단계: 접기(Folding) 반복

증명자:
for i = 0 to k-1:
  - fᵢ₊₁(x) 계산 (차수 절반으로 감소)
  - 도메인 Dᵢ₊₁에서 평가 (크기 절반으로 감소)
  - Merkle Tree MTᵢ₊₁에 커밋
  - 루트 해시 rᵢ₊₁ 전송
  - 검증자로부터 αᵢ₊₁ 수신

3단계: 최종 다항식

마지막 f_k(x)는 충분히 낮은 차수 (상수 또는 선형)
증명자가 계수를 직접 전송
검증자가 직접 검증 가능

4단계: 일관성 검사

검증자가 랜덤 점들을 선택
각 단계에서의 접기 관계식 확인:
f_{i+1}(x²) = (f_i(x) + f_i(-x))/2 + α_i · (f_i(x) - f_i(-x))/(2x)

Merkle Path를 통해 필요한 값들 요청 및 검증

FRI의 수학적 엄밀성

건전성 분석

만약 f₀가 차수 d 다항식이 아니라면:
- 각 접기 단계에서 오류 확률 존재
- k번의 쿼리로 오류 확률 2^(-k)까지 감소
- 실용적으로는 80-128비트 보안 달성

완전성 증명

f₀가 진짜 차수 d 다항식이라면:
- 각 접기 관계식이 정확히 성립
- 최종 다항식도 올바른 계수
- 검증이 항상 성공

📊 구체적 구현: STARK 증명 생성

Step-by-Step 증명 과정

1단계: 실행 테이블 생성

계산: x³ + x + 5 = 35 검증

실행 테이블:
Step | x | x² | x³ | x³+x | x³+x+5
-----|---|----|----|------|-------
  0  | 3 | 9  | 27 |  30  |  35

2단계: 보조 열 추가

경계 조건과 제약을 만족하도록 보조 열 추가:

Step | x | x² | x³ | x³+x | x³+x+5 | flag
-----|---|----|----|------|--------|-----
  0  | 3 | 9  | 27 |  30  |  35    |  1

3단계: 다항식 보간

각 열을 다항식으로 변환:
P_x(X), P_{x²}(X), P_{x³}(X), P_{x³+x}(X), P_{x³+x+5}(X)

제약 다항식:
C₁(X) = P_{x²}(X) - P_x(X)²
C₂(X) = P_{x³}(X) - P_x(X) · P_{x²}(X)  
C₃(X) = P_{x³+x}(X) - P_{x³}(X) - P_x(X)
C₄(X) = P_{x³+x+5}(X) - P_{x³+x}(X) - 5

4단계: 몫 다항식 계산

각 제약에 대해:
Q₁(X) = C₁(X) / Z_H(X)
Q₂(X) = C₂(X) / Z_H(X)
Q₃(X) = C₃(X) / Z_H(X)
Q₄(X) = C₄(X) / Z_H(X)

여기서 Z_H(X) = X^n - 1

5단계: 무작위화 및 결합

검증자가 무작위 α, β 전송
결합 다항식:
F(X) = α₁Q₁(X) + α₂Q₂(X) + α₃Q₃(X) + α₄Q₄(X)

추적 다항식들과 함께 FRI에 제출

6단계: FRI 실행

F(X)에 대해 FRI 프로토콜 실행:
- 차수 바인딩 검증
- Reed-Solomon 근접성 증명
- 최종 증명 π_FRI 생성

증명 크기 분석

FRI 증명 구성요소

1. Merkle Tree 루트들: 32바이트 × k라운드
2. 최종 다항식 계수: 32바이트 × 상수
3. 쿼리 응답: (32바이트 × 2 × 쿼리 수 × k라운드)
4. Merkle Path들: log(도메인 크기) × 32바이트 × 쿼리 수

총 크기 ≈ 32k + 32c + 64qk + 32q log(n)

실제 수치 예시

n = 2²⁰ (도메인 크기), k = 20 (라운드), q = 80 (쿼리)

계산:
- 루트들: 32 × 20 = 640바이트
- 최종 계수: 32 × 4 = 128바이트  
- 쿼리 응답: 64 × 80 × 20 = 102,400바이트
- Merkle Path: 32 × 80 × 20 = 51,200바이트

총 증명 크기: ~150KB

🚀 최적화 기법과 실용성

Circle STARKs

원형 도메인 사용

기존: 곱셈군에서 작업 (FFT 사용)
Circle: 원형 군에서 작업

장점:
- 더 단순한 산술
- 더 나은 곡선 친화성
- Plonky3에서 구현

배치 증명과 재귀

배치 증명

여러 실행 테이블을 동시에 증명:
- 공통 FRI 사용
- 증명 크기 상각
- 검증 시간 개선

재귀적 STARKs

STARK 증명의 검증을 또 다른 STARK로 증명:
- 무한 압축 가능
- 실시간 체인 구성
- Cairo/Starknet에서 활용

하드웨어 최적화

GPU 가속

FRI의 각 단계는 병렬 처리 가능:
- FFT/NTT 연산
- Merkle Tree 구성
- 해시 계산

성능 개선: CPU 대비 10-100배

메모리 최적화

스트리밍 방식:
- 전체 다항식을 메모리에 보관하지 않음
- 필요한 부분만 즉석 계산
- 메모리 요구량 대폭 감소

🏭 실제 응용: StarkNet과 Cairo

Cairo 언어

고급 언어에서 STARK까지

Cairo 코드:
func fibonacci(n) -> felt {
    if n == 0 { return 0; }
    if n == 1 { return 1; }
    return fibonacci(n-1) + fibonacci(n-2);
}

컴파일 과정:
Cairo → AIR → Execution Trace → STARK Proof

StarkNet 아키텍처

레이어 2 확장성

이더리움 메인넷:
- 높은 가스비
- 초당 15거래
- 완전한 보안

StarkNet:
- 낮은 가스비 (1/100)
- 초당 수천 거래  
- STARK로 보안 상속

상태 전이 증명

수천 개의 거래를 배치로 처리:
1. 모든 거래를 Cairo로 실행
2. 실행 테이블 생성
3. STARK 증명 생성 (오프체인)
4. 이더리움에 증명만 제출 (192바이트)
5. 온체인에서 검증 (수십 ms)

성능 지표

StarkEx (dYdX에서 사용)

- 거래 처리량: 9,000 TPS
- 가스비 절약: 99%+
- 증명 생성 시간: 30분/배치
- 증명 크기: ~300KB
- 검증 시간: ~500ms

🔬 고급 주제: DEEP-FRI와 최적화

DEEP-FRI 프로토콜

Direct Evaluation Efficiently Proven FRI

기존 FRI의 한계:
- 다항식 평가 증명이 간접적
- 추가 쿼리 라운드 필요

DEEP-FRI 개선:
- 직접적인 평가값 증명
- 효율성 개선
- 보안성 강화

수학적 구조

f(z) = y임을 증명하려면:
g(x) = (f(x) - y)/(x - z)

g(x)가 다항식임을 FRI로 증명하면
f(z) = y가 자동으로 증명됨

Proximity Gaps

근접성 갭 이론

Reed-Solomon 코드와의 거리 분석:
- δ-가까움: 해밍 거리 ≤ δn
- ρ-원거리: 해밍 거리 ≥ ρn

FRI는 이 갭을 이용해 효율적 구별

실용적 매개변수 선택

보안성 vs 효율성

도메인 크기 n:
- 큰 n: 더 많은 계산 지원, 느린 증명
- 작은 n: 빠른 증명, 제한된 계산

쿼리 수 q:
- 많은 q: 높은 보안성, 큰 증명
- 적은 q: 작은 증명, 낮은 보안성

실제 선택: 80-128비트 보안을 위해 q = 80-128

📈 양자 내성과 미래 전망

Post-Quantum Security

양자 컴퓨터 대응

SNARKs 취약점:
- 이산 로그 문제 → 쇼어 알고리즘으로 깨짐
- 타원곡선 → 양자 컴퓨터로 공격 가능

STARKs 강점:
- 해시 함수 기반 → 양자 내성
- 그로버 알고리즘: 보안성 절반 감소만
- 해시 크기 2배로 동일 보안성 유지

발전 방향

효율성 개선

1. 새로운 다항식 커밋먼트:
   - FRI-Binius: 바이너리 필드 사용
   - Circle STARKs: 원형 도메인 활용

2. 하드웨어 최적화:
   - ASIC 설계
   - 전용 GPU 커널
   - 양자 회로 최적화

3. 프로토콜 개선:
   - Plonky2/3: 재귀 최적화  
   - Risc0: 범용 VM 지원
   - Winterfell: 산업용 구현

새로운 응용 분야

1. 대용량 데이터 증명:
   - 머신러닝 모델 실행 증명
   - 대규모 데이터 처리 검증
   - 과학 계산 재현성

2. 분산 시스템:
   - 블록체인 인터체인
   - 분산 컴퓨팅 검증
   - 클라우드 컴퓨팅 무결성

3. 규제 준수:
   - 프라이버시 보존 감사
   - 규정 준수 자동 증명
   - 투명성과 프라이버시 양립

🎯 마무리: 투명성이 만드는 신뢰

zk-STARKs는 투명성과 확장성이라는 두 가지 핵심 가치를 동시에 실현한 기술입니다. 신뢰할 수 있는 설정의 부담 없이도 강력한 영지식 증명을 제공하며, 양자 컴퓨터 시대까지 대비하고 있습니다.

오늘 분석한 핵심 기술들:

🔓 투명성의 가치:

  • 해시 함수만으로 구현 가능한 단순함
  • 신뢰할 수 있는 설정의 위험성 제거
  • 양자 내성을 통한 미래 보장

📈 확장성의 실현:

  • FRI를 통한 효율적 다항식 증명
  • 병렬 처리 친화적 구조
  • 하드웨어 가속 최적화 가능성

🏗️ 실용성의 증명:

  • StarkNet의 성공적 운영
  • dYdX의 9,000 TPS 달성
  • Cairo 언어의 생태계 구축

🔮 미래 잠재력:

  • 양자 컴퓨터 시대 대응
  • 대용량 계산 검증 가능
  • 새로운 응용 분야 개척

zk-STARKs와 zk-SNARKs는 서로 다른 장단점을 가진 상호 보완적 기술입니다. SNARKs는 작은 증명 크기와 빠른 검증으로 즉시 응답이 필요한 응용에 적합하고, STARKs는 투명성과 확장성으로 대규모 시스템과 장기적 보안이 중요한 응용에 적합합니다.

두 기술 모두 순수 수학이 현실 문제를 해결하는 강력한 도구임을 보여주며, 앞으로 더 많은 혁신을 가져올 것입니다.

 

Designed by JB FACTORY