Back to Home

Zero Knowledge Proof với KZG commitment scheme

Trong bài viết này mình sẽ giải thích lược đồ commitment bằng đa thức được giới thiệu bởi Kate, ZaveruchaGoldberg. Lược đồ này được áp dụng vào Zero Knowledge Proof trên công nghệ blockchain (Proto-Danksharding EIP-4844) nhằm thu gọn kích thước của proof thành một giá trị cố định mà không quan tâm đến kích cỡ thông điệp như cách dùng merkle tree và merkle path.

Bài toán ZKP qua lược đồ commitment

Một người có thể tuyên bố rằng người ấy biết message mm bằng cách commit một giá trị cc sao cho bất cứ ai cũng có thể dùng cc để verify điều này, tuy nhiên thông tin của mm không hề bị tiết lộ hoặc bị làm giả. Nghĩa là, sẽ không thể hoặc rất khó tìm thấy mm' sao có thể dùng cc để verify cho mm' . Điều này phù hợp với các tính chất của Zero Knowledge Proof (xem lại bài ZKP).

Đối với lược đồ commitment bằng đa thức. Một người có thể chứng minh rằng người ấy biết chính xác một đa thức ϕ(x)\phi(x), nghĩa là người này biết toàn bộ giá trị các hệ số aia_i của ϕ(x)\phi(x) thay vì là biết thông tin về message mm.

Thiết lập lược đồ

Bước 1: Thiết lập trust một lần duy nhất. Sau bước này, các bước khác sẽ được lặp lại để chứng minh cho các đa thức khác nhau.

  • Cho gg là phần tử sinh (generator) của một group pairing-friendly elliptic curve G\mathbb G

  • Gọi ll là bậc cao nhất của các đa thức có thể được tạo.

  • Chọn một giá trị τF\tau \in \mathbb F ngẫu nhiên bất kỳ, được gọi là trapdoor

  • Tính các giá trị g,gτ,gτ2,,gτlg,g^{\tau}, g^{\tau^2}, \dots, g^{\tau^l}. Chú ý rằng τ\tau được giữ bí mật, không tiết lộ.

Bước 2: Bước này để một người chứng minh rằng anh ta biết một đa thức ϕ(x)=i=0kϕixi\phi(x) = \sum_{i=0}^k\phi_ix^i với bậc kk nhỏ hơn hoặc bằng ll. Tuy nhiên để đơn giản, cứ xem như ϕ(x)\phi(x)ll hệ số với các hệ số ϕi>k=0\phi_{i>k} = 0.

  • Ta có: ϕ(x)=i=0lϕixi    ϕ(τ)=i=0lϕiτi\phi(x) = \sum_{i=0}^l\phi_ix^i \implies \phi(\tau)=\sum_{i=0}^l\phi_i\tau^i

  • Tính giá trị c=gϕ(τ)c=g^{\phi(\tau)} thông qua các giá trị đã setup g,gτ,gτ2,,gτlg,g^{\tau}, g^{\tau^2}, \dots, g^{\tau^l} bằng cách tính i=0l(gτi)ϕi=gi=0lϕiτi=gϕ(τ)\prod_{i=0}^l(g^{\tau^i})^{\phi_i} = g^{\sum_{i=0}^l\phi_i\tau^i} = g^{\phi(\tau)}

  • Commit giá trị cc

Bước 3: Thiết lập bằng chứng π\pi

  • Chọn một giá trị aa bất kỳ, tính ϕ(a)=b\phi(a)=b

  • Tính π=gq(τ)\pi=g^{q(\tau)}, trong đó q(x)=ϕ(x)bxa\displaystyle q(x) = \frac {\phi(x) - b} {x-a}. Để ý rằng q(τ)q(\tau) chỉ có có thể tồn tại nếu và chỉ nếu ϕ(a)=b\phi(a)=b. Ta có thể dễ dàng chứng minh điều này như sau:

    • Ta có ϕ(a)=b    ϕ(x)ϕ(a)=i=0lϕixii=0lϕiai=i=0lϕi(xiai)\phi(a) = b \implies \phi(x) - \phi(a) = \sum_{i=0}^l \phi_ix^i - \sum_{i=0}^l \phi_ia^i = \sum_{i=0}^l \phi_i(x^i - a^i) sẽ luôn tồn tại (xa)(x-a) và vì thế sẽ triệt tiêu mẫu số của q(x)q(x) . Nếu không (xa)(x-a) ở mẫu số sẽ gây phép chia cho 00.

  • Output a,b,πa,b,\pi

Bước 4: Verify

Cần kiểm tra điều kiện e(cgb,g)=e(π,gτga)\boxed{e(\frac c {g^b}, g) = e(\pi, \frac {g^{\tau}}{g^a})}, với ee là một cặp ghép song tuyến tính. Điều này xảy ra vì:

e(cgb,g)=e(gϕ(τ)gb,g)=e(gϕ(τ)b,g)=e(g,g)ϕ(τ)b=e(g,g)q(τ)(τa)=e(gq(τ),gτa)=e(π,gτga)e(\frac c {g^b}, g) = e(\frac {g^{\phi(\tau)}} {g^b}, g)\\ = e(g^{\phi(\tau)-b},g)\\ = e(g,g)^{\phi(\tau)-b} \\ = e(g,g)^{q(\tau)(\tau-a)}\\ = e(g^{q(\tau)},g^{\tau-a}) \\= e(\pi,\frac {g^{\tau}}{g^a})

Kết thúc

Như vậy, ta thấy chỉ cần hai giá trị cc- commit và π\pi- proof với kích thước xác định, ta có thể chứng minh một người biết đa thức ϕ(x)\phi(x), thay vì phải reveal toàn bộ các hệ số ϕi\phi_i của đa thức này. Phương pháp này giúp tinh gọn kích thước proof so với mô hình Merkle tree, Merkle path.

Comments

0/300

Leave name/email blank to comment anonymously

No comments yet. Be the first to comment!