深入瞭解 zk-SNARKs
這篇文章主要是更深入介紹zk-SNARKs,不可避免的會有”一些“數學出現,不過會盡量著重在數學式背後的意義,而不是深入探討數學公式,如果不知道什麼是zk-SNARKS的,可以先參考 這篇 跟 這篇 。 一開始的假設 1. Alice有一個多項式P(x) 2. Bob選一個點 s 給Alice 3. Alice回傳P(s)給Bob 希望能達到 1. Alice不知道點 s,Bob不知道多項式P(x)。(Blindness) 2. 但Alice可傳回P(s)給Bob,並且Bob可以驗證P(s)。(verifiable) 也就是雙方都不知道對方的資訊,卻可以共同得到一個可被驗證的結果 上面就是基本的假設。然後,先定義一些基本的數學式 上述所提的多項式定義為: P(x)=C0+C1x+C2x2+...+Cnxn 首先,先介紹Homomorphic Hiding( 同態隱藏 ) [1] ,藉由 同態隱藏 可以達到 隱藏資訊 的目的。我們從數學定義來看他有什麼特質。首先E(x)的定義為E(x)=gx ,然後 E(x+y)=E(x)∗E(y) HH支援線性相加,所以下列式子成立 E(ax+by)=gax+by=gax∗gby=E(x)a+E(y)b * HH的假設:知道E(x),是無法回推x的值 若我們對P(x)作 同態隱藏 , 可以得出 E(P(x))=E(C0+C1x+C2x2+...+Cdd)=E(1)C0∗E(s)C1∗E(s2)C2...E(sd)Cd 也就是Bob只需要給E(1),E(s),E(s2),...E(sd),而不用給s(E(s)無法反推出s),Alice就可以得出E(P(s))的值。藉此可以達成第一點的blindness,接下來就是要如何達成verifiable,因為Alice有可能給一個假的值,非P(x)上的點,所以要確保Alice會乖乖地照規矩來。接下來就要介紹如何保證Alice會送出正確的結果,並且Bob可以驗證。 Computation --> Arithmetic Ci...