# Groth16

STEP 1은 오늘날 가장 널리 쓰이는 프로토콜 중 하나인 Groth16 계열을 축으로 삼아서, ZK-SNARK가 어떤 식으로 설계되고 어떤 형태의 객체들로 표현되는지 큰 그림을 잡는 것이 목표다.

먼저 **NIZK**(비상호작용 영지식 증명)를 통해 "대화"에서  "하나의 증명"으로 바뀌는 개념적 과정을 본다. 그 다음 **Pinocchio** 프로토콜을 통해, 임의의 프로그램을 제약과 다항식 관계로 바꿔서 증명하는 **zk-SNARK**의 기본 틀을 학습한다.

마지막으로 이 계열을 가장 정제된 형태로 구현한 **Groth16**을 살펴보며 "짧은 증명 + 빠른 검증"이라는 SNARK의 특징이 어떤 설계에서 나오는지 살펴본다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://upsidezkp.gitbook.io/upside-zkp-docs/step-1/groth16.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
