Skip to content

hyuki0130/zkp-101

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

33 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Noir Zero-Knowledge Proof 101 ๐Ÿ”

Noir๋ฅผ ์‚ฌ์šฉํ•œ Zero-Knowledge Proof ์™„๋ฒฝ ๊ฐ€์ด๋“œ (ํ•œ๊ธ€)

๐Ÿ“– ์†Œ๊ฐœ

์ด ์ €์žฅ์†Œ๋Š” Noir๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Zero-Knowledge Proof ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฐฐ์šฐ๋Š” ์ข…ํ•ฉ ํŠœํ† ๋ฆฌ์–ผ์ž…๋‹ˆ๋‹ค.

Noir๋Š” Zero-Knowledge Proof ํšŒ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด(DSL)๋กœ, ํ”„๋ผ์ด๋ฒ„์‹œ๋ฅผ ๋ณดํ˜ธํ•˜๋ฉด์„œ๋„ ๊ณ„์‚ฐ์˜ ์ •ํ™•์„ฑ์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ํ•™์Šต ๋ชฉํ‘œ

์ด ํŠœํ† ๋ฆฌ์–ผ์„ ์™„๋ฃŒํ•˜๋ฉด ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • โœ… Zero-Knowledge Proof์˜ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
  • โœ… Noir ์–ธ์–ด๋กœ ํšŒ๋กœ(circuit) ์ž‘์„ฑ
  • โœ… ์ฆ๋ช… ์ƒ์„ฑ ๋ฐ ๊ฒ€์ฆ
  • โœ… ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ZKP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
  • โœ… ๋ธ”๋ก์ฒด์ธ๊ณผ ํ†ตํ•ฉ

๐Ÿ“š ํŠœํ† ๋ฆฌ์–ผ ๋ชฉ์ฐจ

  • Noir์™€ Zero-Knowledge Proof ๊ฐœ๋…
  • Noir/Nargo ์„ค์น˜
  • Barretenberg ๋ฐฑ์—”๋“œ ์„ค์น˜
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•
  • Nargo๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • ํšŒ๋กœ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด
  • Private vs Public ์ž…๋ ฅ
  • Witness ๊ฐœ๋…
  • ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰
  • ๋ฐ์ดํ„ฐ ํƒ€์ž… (Field, ์ •์ˆ˜, ๋ฐฐ์—ด, ๊ตฌ์กฐ์ฒด)
  • ํ•จ์ˆ˜์™€ ์ œ์–ด ํ๋ฆ„
  • ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ•
  • ํŠธ๋ ˆ์ดํŠธ์™€ ์ œ๋„ค๋ฆญ
  • Assert์™€ ์ œ์•ฝ ์กฐ๊ฑด
  • ZKP ๋™์ž‘ ์›๋ฆฌ
  • Barretenberg๋ฅผ ์‚ฌ์šฉํ•œ ์ฆ๋ช… ์ƒ์„ฑ
  • ๊ฒ€์ฆ ํ‚ค ์ดํ•ด
  • Solidity ๊ฒ€์ฆ ๊ณ„์•ฝ ์ƒ์„ฑ
  • ์‹ค์ „ ์˜ˆ์ œ (๋‚˜์ด ๊ฒ€์ฆ, ํˆฌํ‘œ ์‹œ์Šคํ…œ)
  • NoirJS ์†Œ๊ฐœ
  • ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ZKP ์•ฑ ๊ฐœ๋ฐœ
  • ๋‚˜์ด ๊ฒ€์ฆ ์›น ์•ฑ ๊ตฌ์ถ•
  • ๋ธ”๋ก์ฒด์ธ ํ†ตํ•ฉ
  • ๋ฐฐํฌ ๋ฐ ์ตœ์ ํ™”

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js 18+
  • npm ๋˜๋Š” yarn
  • ํ„ฐ๋ฏธ๋„ (bash, zsh)

์„ค์น˜

# 1. Noir ์„ค์น˜
curl -L https://raw.githubusercontent.com/noir-lang/noirup/refs/heads/main/install | bash
source ~/.zshrc  # ๋˜๋Š” source ~/.bashrc
noirup

# 2. Barretenberg ์„ค์น˜
curl -L https://raw.githubusercontent.com/AztecProtocol/aztec-packages/refs/heads/next/barretenberg/bbup/install | bash
source ~/.bashrc
bbup

# 3. ์„ค์น˜ ํ™•์ธ
nargo --version
bb --version

์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ

# ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
nargo new hello_noir
cd hello_noir

# ํšŒ๋กœ ์ž‘์„ฑ (src/main.nr)
# fn main(x: Field, y: pub Field) {
#     assert(x != y);
# }

# ์ž…๋ ฅ๊ฐ’ ์ค€๋น„ (Prover.toml)
# x = "1"
# y = "2"

# ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰
nargo compile
nargo execute

# ์ฆ๋ช… ์ƒ์„ฑ
bb prove -b ./target/hello_noir.json -w ./target/hello_noir.gz --write-vk -o ./target

# ์ฆ๋ช… ๊ฒ€์ฆ
bb verify -p ./target/proof -k ./target/vk

๐Ÿ’ก ์ฃผ์š” ์˜ˆ์ œ

์˜ˆ์ œ 1: ๋‚˜์ด ๊ฒ€์ฆ

fn main(age: Field, min_age: pub Field) {
    assert(age >= min_age);
}

์šฉ๋„: ์ •ํ™•ํ•œ ๋‚˜์ด๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ  ์ตœ์†Œ ๋‚˜์ด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•จ์„ ์ฆ๋ช…

์˜ˆ์ œ 2: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ

fn simple_hash(password: Field) -> Field {
    password * password + password + 1
}

fn main(password: Field, expected_hash: pub Field) {
    let hash = simple_hash(password);
    assert(hash == expected_hash);
}

์šฉ๋„: ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ์žˆ์Œ์„ ์ฆ๋ช…

์˜ˆ์ œ 3: ๋ฒ”์œ„ ์ฆ๋ช…

fn main(value: Field, min: pub Field, max: pub Field) {
    assert(value >= min);
    assert(value <= max);
}

์šฉ๋„: ์ •ํ™•ํ•œ ๊ฐ’์„ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ๋ฒ”์œ„ ๋‚ด์— ์žˆ์Œ์„ ์ฆ๋ช…

๐Ÿ› ๏ธ ์ฃผ์š” ๋ช…๋ น์–ด

Nargo ๋ช…๋ น์–ด

nargo new <project>      # ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
nargo check              # ๋ฌธ๋ฒ• ๊ฒ€์ฆ
nargo compile            # ํšŒ๋กœ ์ปดํŒŒ์ผ
nargo execute            # ํšŒ๋กœ ์‹คํ–‰ (witness ์ƒ์„ฑ)
nargo test               # ํ…Œ์ŠคํŠธ ์‹คํ–‰
nargo info               # ํšŒ๋กœ ์ •๋ณด ํ™•์ธ

Barretenberg ๋ช…๋ น์–ด

bb prove                 # ์ฆ๋ช… ์ƒ์„ฑ
bb verify                # ์ฆ๋ช… ๊ฒ€์ฆ
bb write_vk              # ๊ฒ€์ฆ ํ‚ค ์ƒ์„ฑ
bb contract              # Solidity ๊ณ„์•ฝ ์ƒ์„ฑ

๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

zpf-101/
โ”œโ”€โ”€ README.md                    # ์ด ํŒŒ์ผ
โ”œโ”€โ”€ tutorials/                   # ํŠœํ† ๋ฆฌ์–ผ ๋ฌธ์„œ
โ”‚   โ”œโ”€โ”€ 01-installation.md
โ”‚   โ”œโ”€โ”€ 02-first-project.md
โ”‚   โ”œโ”€โ”€ 03-language-basics.md
โ”‚   โ”œโ”€โ”€ 04-proof-generation.md
โ”‚   โ””โ”€โ”€ 05-web-application.md
โ””โ”€โ”€ examples/                    # ์˜ˆ์ œ ์ฝ”๋“œ (์—ฌ๊ธฐ์— ์‹ค์Šต ํ”„๋กœ์ ํŠธ ์ถ”๊ฐ€)
    โ”œโ”€โ”€ hello_world/
    โ”œโ”€โ”€ age_verification/
    โ””โ”€โ”€ voting_system/

๐ŸŽ“ Zero-Knowledge Proof๋ž€?

Zero-Knowledge Proof(์˜์ง€์‹ ์ฆ๋ช…)๋Š” ์–ด๋–ค ์ •๋ณด๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๊ทธ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ฆ๋ช…ํ•˜๋Š” ์•”ํ˜ธํ•™์  ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

3๊ฐ€์ง€ ํ•ต์‹ฌ ์†์„ฑ

  1. ์™„์ „์„ฑ (Completeness): ์ง„์‹คํ•œ ์ฆ๋ช…์ž๋Š” ํ•ญ์ƒ ๊ฒ€์ฆ์ž๋ฅผ ์„ค๋“ํ•  ์ˆ˜ ์žˆ์Œ
  2. ๊ฑด์ „์„ฑ (Soundness): ๊ฑฐ์ง“ ์ฆ๋ช…์ž๋Š” ๊ฒ€์ฆ์ž๋ฅผ ์†์ผ ์ˆ˜ ์—†์Œ
  3. ์˜์ง€์‹์„ฑ (Zero-Knowledge): ์ฆ๋ช… ์ž์ฒด๋Š” ๋น„๋ฐ€ ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์Œ

์‹ค์ƒํ™œ ์˜ˆ์‹œ

  • ๐ŸŽ‚ ๋‚˜์ด๊ฐ€ 18์„ธ ์ด์ƒ์ž„์„ ์ฆ๋ช…ํ•˜๋˜, ์ •ํ™•ํ•œ ๋‚˜์ด๋Š” ๊ณต๊ฐœํ•˜์ง€ ์•Š์Œ
  • ๐Ÿ”‘ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ์žˆ์Œ์„ ์ฆ๋ช…ํ•˜๋˜, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž์ฒด๋Š” ๋…ธ์ถœํ•˜์ง€ ์•Š์Œ
  • ๐Ÿ’ฐ ๊ณ„์ขŒ ์ž”๊ณ ๊ฐ€ ์ถฉ๋ถ„ํ•จ์„ ์ฆ๋ช…ํ•˜๋˜, ์ •ํ™•ํ•œ ๊ธˆ์•ก์€ ์ˆจ๊น€

๐ŸŒŸ ์ฃผ์š” ํŠน์ง•

Noir์˜ ์žฅ์ 

  • ๐Ÿฆ€ Rust-like ๋ฌธ๋ฒ•: ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์›€
  • ๐Ÿ”ง ๋ฐฑ์—”๋“œ ๋…๋ฆฝ์ : ๋‹ค์–‘ํ•œ ์ฆ๋ช… ์‹œ์Šคํ…œ ์ง€์›
  • โšก ๋น ๋ฅธ ์ปดํŒŒ์ผ: ํšจ์œจ์ ์ธ ACIR ์ƒ์„ฑ
  • ๐ŸŒ ์›น ์ง€์›: NoirJS๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰
  • ๐Ÿ”— ๋ธ”๋ก์ฒด์ธ ํ†ตํ•ฉ: Solidity ๊ฒ€์ฆ ๊ณ„์•ฝ ์ž๋™ ์ƒ์„ฑ

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ๐Ÿ—ณ๏ธ ์ต๋ช… ํˆฌํ‘œ ์‹œ์Šคํ…œ
  • ๐Ÿฆ ํ”„๋ผ์ด๋น— ๊ธˆ์œต ๊ฑฐ๋ž˜
  • ๐ŸŽซ ์‹ ์› ํ™•์ธ (KYC)
  • ๐ŸŽฎ ๊ฒŒ์ž„ ๋กœ์ง ๋ณดํ˜ธ
  • ๐Ÿ” ๋น„๋ฐ€ ๋ฉค๋ฒ„์‹ญ ์ฆ๋ช…

๐Ÿ“– ์ฐธ๊ณ  ์ž๋ฃŒ

๊ณต์‹ ๋ฌธ์„œ

์ปค๋ฎค๋‹ˆํ‹ฐ

์ถ”๊ฐ€ ํ•™์Šต ์ž๋ฃŒ

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

์ด ํŠœํ† ๋ฆฌ์–ผ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด:

  1. ์ด ์ €์žฅ์†Œ๋ฅผ Fork
  2. ์ƒˆ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (git checkout -b feature/improvement)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹ (git commit -am 'Add new tutorial')
  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ (git push origin feature/improvement)
  5. Pull Request ์ƒ์„ฑ

๐Ÿ“ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

โ“ FAQ

Q: Noir๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ์•”ํ˜ธํ•™ ์ง€์‹์ด ํ•„์š”ํ•œ๊ฐ€์š”?

A: ์•„๋‹ˆ์š”! ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์‹๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธํ•™์€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Q: Noir๋Š” ์–ด๋–ค ๋ธ”๋ก์ฒด์ธ๊ณผ ํ˜ธํ™˜๋˜๋‚˜์š”?

A: Ethereum, Polygon, Arbitrum ๋“ฑ EVM ํ˜ธํ™˜ ์ฒด์ธ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Q: ์ฆ๋ช… ์ƒ์„ฑ์— ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋‚˜์š”?

A: ๊ฐ„๋‹จํ•œ ํšŒ๋กœ๋Š” 1-2์ดˆ, ๋ณต์žกํ•œ ํšŒ๋กœ๋Š” ์ˆ˜์‹ญ ์ดˆ ์ •๋„ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

Q: ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

A: Noir๋Š” ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ, ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์‚ฌ๋ฅผ ๊ฑฐ์นœ ํ›„ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽ‰ ์‹œ์ž‘ํ•˜๊ธฐ

์ค€๋น„๋˜์…จ๋‚˜์š”? Chapter 1: ์„ค์น˜ ๊ฐ€์ด๋“œ๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”!


๋งŒ๋“  ์ด: Noir ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ์ž๋“ค ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ: 2025-10-03

์งˆ๋ฌธ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์œผ์‹œ๋ฉด Issues์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”! ๐Ÿš€

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors