# Groth16 (Groth's 2016 zk-SNARK)

Groth16은 옌스 그로트(Jens Groth)가 2016년 EUROCRYPT에서 발표한 페어링 기반 zk-SNARK 증명 시스템입니다. 증명이 타원곡선 군 원소 3개로 매우 작고 검증이 빠르기 때문에, 온체인 검증 비용이 중요한 블록체인 애플리케이션에서 오랫동안 표준처럼 쓰였습니다.

## 자세히 알아보기

Groth16은 증명하려는 계산을 R1CS(Rank-1 Constraint System) 형태의 산술 회로로 표현하고, 이를 QAP(이차 산술 프로그램)로 바꿔 다항식 관계로 증명합니다. 증명은 G₁ 원소 2개와 G₂ 원소 1개로 이루어지며, BN254 곡선에서 압축하지 않아도 256바이트입니다. 검증은 회로 크기와 무관하게 몇 번의 페어링 연산으로 끝나며, 공개 입력 수에 비례하는 작은 계산만 추가됩니다.

대가는 신뢰 설정입니다. 회로마다 비밀 난수로 증명 키와 검증 키를 만드는 과정이 필요하고, 그 비밀(이른바 유독성 폐기물)을 누군가 보관하면 가짜 증명을 만들 수 있습니다. 그래서 실무에서는 다수 참가자가 순서대로 난수를 섞는 다자간 의식(ceremony)을 열어 '한 명이라도 정직하게 비밀을 폐기하면 안전'하도록 만듭니다. 보통 범용 단계(Powers of Tau)와 회로별 단계(Phase 2)로 나뉘며, 회로를 수정하면 회로별 단계를 다시 해야 합니다.

이 한계 때문에 이후 PLONK처럼 하나의 범용 설정을 여러 회로에 재사용하는 방식, STARK처럼 설정이 필요 없는 방식이 등장했습니다. 그럼에도 Groth16은 증명 크기와 검증 비용 면에서 여전히 최상위권이어서 다른 증명을 마지막에 Groth16으로 감싸는 구성도 많이 쓰입니다.

## 블록체인·암호화폐에서는

Zcash는 2018년 Sapling 업그레이드에서 Groth16을 도입했습니다. Ethereum에서는 EIP-196/197 BN254 프리컴파일 덕분에 Groth16 검증을 스마트 컨트랙트에서 저렴하게 할 수 있어, Tornado Cash 같은 믹서와 Circom·snarkjs로 만든 많은 zk 애플리케이션이 Groth16을 사용했습니다. Filecoin도 저장 증명에 Groth16을 씁니다.

## 쉽게 말하면

아무리 긴 계산이라도 결과가 맞다는 증거를 엽서 한 장 크기로 압축해 주는 도구입니다. 다만 그 엽서 양식을 만들 때 쓴 비밀 도장은 반드시 폐기되어야 합니다.

## 예시

Tornado Cash에서 사용자는 '이 풀에 예치된 기록 중 하나의 비밀 값을 알고 있다'는 Groth16 증명을 제출해 출금했습니다. 컨트랙트는 증명과 무효화 값(nullifier)만 확인하므로 어느 예치 기록에서 나온 출금인지는 드러나지 않습니다.

---
출처: https://achivx.kr/glossary/groth16-groth16-%EC%A6%9D%EB%AA%85-%EC%8B%9C%EC%8A%A4%ED%85%9C/ · ACHIVX 용어 사전 · 수정일 2026-10-20
