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/vkfn main(age: Field, min_age: pub Field) {
assert(age >= min_age);
}์ฉ๋: ์ ํํ ๋์ด๋ฅผ ๊ณต๊ฐํ์ง ์๊ณ ์ต์ ๋์ด ์๊ตฌ์ฌํญ์ ๋ง์กฑํจ์ ์ฆ๋ช
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);
}์ฉ๋: ๋น๋ฐ๋ฒํธ๋ฅผ ๊ณต๊ฐํ์ง ์๊ณ ์ฌ๋ฐ๋ฅธ ๋น๋ฐ๋ฒํธ๋ฅผ ์๊ณ ์์์ ์ฆ๋ช
fn main(value: Field, min: pub Field, max: pub Field) {
assert(value >= min);
assert(value <= max);
}์ฉ๋: ์ ํํ ๊ฐ์ ๊ณต๊ฐํ์ง ์๊ณ ํน์ ๋ฒ์ ๋ด์ ์์์ ์ฆ๋ช
nargo new <project> # ์ ํ๋ก์ ํธ ์์ฑ
nargo check # ๋ฌธ๋ฒ ๊ฒ์ฆ
nargo compile # ํ๋ก ์ปดํ์ผ
nargo execute # ํ๋ก ์คํ (witness ์์ฑ)
nargo test # ํ
์คํธ ์คํ
nargo info # ํ๋ก ์ ๋ณด ํ์ธ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(์์ง์ ์ฆ๋ช )๋ ์ด๋ค ์ ๋ณด๋ฅผ ๊ณต๊ฐํ์ง ์์ผ๋ฉด์๋ ๊ทธ ์ ๋ณด๋ฅผ ์๊ณ ์๋ค๋ ์ฌ์ค์ ์ฆ๋ช ํ๋ ์ํธํ์ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์์ ์ฑ (Completeness): ์ง์คํ ์ฆ๋ช ์๋ ํญ์ ๊ฒ์ฆ์๋ฅผ ์ค๋ํ ์ ์์
- ๊ฑด์ ์ฑ (Soundness): ๊ฑฐ์ง ์ฆ๋ช ์๋ ๊ฒ์ฆ์๋ฅผ ์์ผ ์ ์์
- ์์ง์์ฑ (Zero-Knowledge): ์ฆ๋ช ์์ฒด๋ ๋น๋ฐ ์ ๋ณด๋ฅผ ๋ ธ์ถํ์ง ์์
- ๐ ๋์ด๊ฐ 18์ธ ์ด์์์ ์ฆ๋ช ํ๋, ์ ํํ ๋์ด๋ ๊ณต๊ฐํ์ง ์์
- ๐ ๋น๋ฐ๋ฒํธ๋ฅผ ์๊ณ ์์์ ์ฆ๋ช ํ๋, ๋น๋ฐ๋ฒํธ ์์ฒด๋ ๋ ธ์ถํ์ง ์์
- ๐ฐ ๊ณ์ข ์๊ณ ๊ฐ ์ถฉ๋ถํจ์ ์ฆ๋ช ํ๋, ์ ํํ ๊ธ์ก์ ์จ๊น
- ๐ฆ Rust-like ๋ฌธ๋ฒ: ๋ฐฐ์ฐ๊ธฐ ์ฌ์
- ๐ง ๋ฐฑ์๋ ๋ ๋ฆฝ์ : ๋ค์ํ ์ฆ๋ช ์์คํ ์ง์
- โก ๋น ๋ฅธ ์ปดํ์ผ: ํจ์จ์ ์ธ ACIR ์์ฑ
- ๐ ์น ์ง์: NoirJS๋ก ๋ธ๋ผ์ฐ์ ์์ ์คํ
- ๐ ๋ธ๋ก์ฒด์ธ ํตํฉ: Solidity ๊ฒ์ฆ ๊ณ์ฝ ์๋ ์์ฑ
- ๐ณ๏ธ ์ต๋ช ํฌํ ์์คํ
- ๐ฆ ํ๋ผ์ด๋น ๊ธ์ต ๊ฑฐ๋
- ๐ซ ์ ์ ํ์ธ (KYC)
- ๐ฎ ๊ฒ์ ๋ก์ง ๋ณดํธ
- ๐ ๋น๋ฐ ๋ฉค๋ฒ์ญ ์ฆ๋ช
์ด ํํ ๋ฆฌ์ผ์ ๊ธฐ์ฌํ๊ณ ์ถ์ผ์๋ค๋ฉด:
- ์ด ์ ์ฅ์๋ฅผ Fork
- ์ ๋ธ๋์น ์์ฑ (
git checkout -b feature/improvement) - ๋ณ๊ฒฝ์ฌํญ ์ปค๋ฐ (
git commit -am 'Add new tutorial') - ๋ธ๋์น์ ํธ์ (
git push origin feature/improvement) - Pull Request ์์ฑ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค.
A: ์๋์! ๊ธฐ๋ณธ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ง์๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. ์ํธํ์ ์์ฐ์ค๋ฝ๊ฒ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.
A: Ethereum, Polygon, Arbitrum ๋ฑ EVM ํธํ ์ฒด์ธ ๋ชจ๋ ์ง์ํฉ๋๋ค.
A: ๊ฐ๋จํ ํ๋ก๋ 1-2์ด, ๋ณต์กํ ํ๋ก๋ ์์ญ ์ด ์ ๋ ์์๋ฉ๋๋ค.
A: Noir๋ ํ๋ฐํ ๊ฐ๋ฐ ์ค์ด๋ฉฐ, ๋ง์ ํ๋ก์ ํธ์์ ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ๊ฐ์ฌ๋ฅผ ๊ฑฐ์น ํ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
์ค๋น๋์ จ๋์? Chapter 1: ์ค์น ๊ฐ์ด๋๋ก ์์ํ์ธ์!
๋ง๋ ์ด: Noir ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ์๋ค ๋ง์ง๋ง ์ ๋ฐ์ดํธ: 2025-10-03
์ง๋ฌธ์ด๋ ํผ๋๋ฐฑ์ด ์์ผ์๋ฉด Issues์ ๋จ๊ฒจ์ฃผ์ธ์! ๐