> For the complete documentation index, see [llms.txt](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/basics/undefined/zero-knowledge-proof-zkp.md).

# 영지식 증명(Zero-Knowledge Proof, ZKP)

영지식 증명이란 자신이 어떤 정보를 알고 있다는 사실을, 그 정보 자체를 공개하지 않고도 상대방에게 증명하는 기술이다.

### 영지식 증명의 세 가지 원칙

* **완전성 (Completeness):** 증명자(prover)의 주장(statement)이 참이고, 증명자와 검증자(verifier) 모두 정직하게 프로토콜을 따른다면, 검증자는 항상 그 증명을 올바르다고 수용해야 한다.
* **건전성 (Soundness):** 증명자의 주장이 거짓이라면, 검증자를 속여서 그 주장이 참이라고 믿게 만들 수 있는 확률은 무시할 수 있을 정도로 낮아야 한다. 이는 시스템의 보안과 신뢰성을 지키는 핵심적인 방어 장치다.
* **영지식성 (Zero-Knowledge):** 증명 과정이 끝났을 때, 검증자는 증명자의 주장이 참이라는 사실 외에는 그 어떤 추가적인 정보도 얻어서는 안 된다. 이것이 ZKP를 통한 프라이버시 보장의 핵심이다.

결론적으로, 이 세 가지 원칙은 영지식 증명이 **정확하고(완전성), 안전하며(건전성), 개인정보를 보호(영지식성)하는** 신뢰할 수 있는 기술임을 보장한다.

영지식 증명의 종류에는 증명자와 검증자가 상호작용(대화)하는 **대화형 영지식 증명**과 상호작용 없이 증명자의 증거를 검증자가 받아서 혼자 검증해 증명하는 형태의 **비대화형 영지식 증명**이 있다.

***

## **대화형 영지식 증명 (Interactive Zero-Knowledge Proof)**

### Schnorr protocol

Schnorr 영지식 증명은 다음의 3단계로 이루어져 있다

#### 1. Commit 단계 (Prover → Verifier)

* Prover는 임의의 숫자 $$r$$을 선택하고,
* &#x20;$$t = g^r(mod$$  $$p)$$를 계산한 후 Verifier에게 보낸다.
  * 이것을 **commitment**라고 한다

#### 2. Challenge 단계 (Verifier → Prover)

* Verifier는 임의의 도전 값 $$c$$를 선택하여 Prover에게 보낸다.
  * 이 $$c$$는 보통 난수 혹은 해시로 생성된다.

#### 3. Response 단계 (Prover → Verifier)

* Prover는 다음을 계산하여 보낸다.

<p align="center"><span class="math">s=r+c⋅x </span>   <span class="math"> mod  (p−1)</span></p>

* Verifier는 아래 식을 확인한다.

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FFOWHH6TRbPzdayfS85nW%2Fimage%20(24).png?alt=media&amp;token=13a541f4-c592-4a1c-8028-6d0c79dcf15f" alt=""><figcaption></figcaption></figure>

이게 성립하면 Verifier는 Prover가 $$x$$를 알고 있다고 인정한다.

***

## **비대화형 영지식 증명 (Non-Interactive Zero-Knowledge Proof)**

대화형 영지식 증명에 비해 비용 효율적으로, 더 적은 계산으로 빠르게 검증이 가능한 것이 특징이다. 당사자간의 신뢰 구축이 어려운 분산형 시스템에 적합한 모델로, 블록체인 네트워크에서 활용하기에 더욱 알맞다.

### Schnorr protocol을 비대화형으로 전환: **Fiat-Shamir heuristic**

Schnorr protocol 처럼 **대화형 ZKP**는 Verifier의 challenge (e)를 직접 받아야 한다.

> Fiat-Shamir heuristic은 이 e 값을 랜덤하게 받는 대신,
>
> 해시 함수를 사용해 스스로 결정하게 만든다.

{% hint style="warning" %}

#### 주의: 해시 함수는 랜덤 오라클로 가정

Fiat-Shamir는 안전성을 **랜덤 오라클 모델**에서만 보장한다.

(해시 함수는 무작위처럼 동작한다고 가정해야 한다.)
{% endhint %}

#### Schnorr protocol과 기본적으로 수식도 동일하나 해시 함수를 사용한다는 점이 차이점이다.

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2Fc3JRIPsMdpjVCV4Wn366%2Fimage%20(25).png?alt=media&amp;token=3ff19d6b-937a-4bd4-a45f-2c5a936baf0d" alt=""><figcaption></figcaption></figure>

증명자와 검증자 간의 대화(conversation)과정이 사라진 대신, 증명자가 검증자에게 최종 제출할 증거가 추가되었다. 결론적으로, 대화과정을 제거한 대신 증거의 길이가 길어지는 트레이드 오프가 발생하였다.
