主頁
微信公眾號:密碼應用技術實戰
部落格園首頁:https://www.cnblogs.com/informatics/
GIT地址:https://github.com/warm3snow
簡介
多項式承諾是一種實用性比較強的密碼學承諾方案,允許一個方(承諾者)向另一個方(驗證者)承諾一個多項式的值,而不洩露多項式的具體形式。在零知識證明、可驗證密碼共享等領域有廣泛應用,常見的多項式承諾有Kate多項式承諾、FRI多項式承諾,IPA多項式承諾等。本文將重點介紹Kate多項式承諾的構造和應用。
在閱讀下文之前,瞭解基礎的密碼學承諾原理和應用是非常有必要的,讀者可以參考以下幾篇文章:
《密碼學承諾之原理和應用 - 概覽》
《密碼學承諾zhi原理和應用 - Sigma承諾》
《密碼學承諾之原理和應用 - Pedersen承諾》
前言
多項式
在詳細介紹Kate多項式承諾之前,我們先來簡單介紹一下多項式的基本概念。多項式一般表示為:
上述多項式中,\(a_0, a_1, a_2, ..., a_d\)是多項式係數,\(x\)是多項式的變數,\(d\)是多項式的次數(或多項式的度)。多項式的次數是指多項式中最高次冪的指數,例如上述多項式的次數為\(d\),因此上述\(f(x)\)我們也稱作\(d\)次多項式。多項式係數\(a_0, a_1, a_2, ..., a_d\)是多項式的重要組成部分,它們決定了多項式的形狀和性質,也是需要保護的重要資訊。
多項式的值是指將變數x代入多項式後的結果,例如\(f(\beta)\)表示將\(x=\beta\)代入多項式中,計算出的結果。
多項式的根是指多項式的值為0的點,即\(f(x) = 0\)的點。
多項式有兩個重要的性質:
- 一元n次多項式最多有n個根,假設根為\(\beta_1, \beta_2, ..., \beta_d\),則多項式可以表示為:\(f(x) = (x-\beta_1)(x-\beta_2)...(x-\beta_d)\)
- 商多項式,多項式減去在某一個點的多項式值(如點:<\(a, f(a)\)>), 可以被另一個多項式整除,這個多項式稱為商多項式。商多項式表示為\(h(x) = \frac{f(x)-f(a)}{x-a}\)
注:在零知識證明中,通常會將要證明的問題轉化為多項式表達,並透過多項式與商多項式的等式關係來進行證明。
雙線性對映
在多項式承諾驗證中,會用到雙線性對映的概念。雙線性對映(Bilinear Map)是數學中一種重要的對映,尤其在密碼學和數論中有廣泛的應用。它是一種特殊的函式,具有以下性質:
定義
設\(G\)是一個乘法迴圈群, \(g\)是一個生成元, \(G_T\)是另一個群。一個對映\(e: G \times G \rightarrow G_T\)被稱為雙線性對映,如果滿足以下條件:
- 雙線性:對於任意的\(a, b \in Z_p\)和\(g, h \in G\),有\(e(g^a, h^b) = e(g, h)^{ab}\)
- 非退化性:對於任意的\(g \in G\),\(e(g, g) \neq 1\)
- 可計算性:對於任意的\(g, h \in G\),\(e(g, h)\)可以在多項式時間內計算
重要性質:
- 可交換性:對於任意的\(g, h \in G\),\(e(g, h) = e(h, g)\)
- 分配性:對於任意的\(g, h1, h2 \in G\),\(e(g, h1 \cdot h2) = e(g, h1) \cdot e(g, h2)\)
- \(e(g, g)為G_T\)的一個生成元
多項式承諾
多項式承諾主要流程如下:
- [00] Setup初始化階段:承諾者和驗證者共享公共參考串CRS
- CRS:common reference string,是一個公開的字串,一般透過可信的第三方生成,用於多項式承諾的構造
- [01] Commit承諾階段:承諾者計算多項式承諾\(C = Commit(CRS, f(α))\),併傳送\(C\)給驗證者。
- C的計算依賴於多項式\(f(x)\)和公共參考串CRS
- 注在多項式承諾中,多項式的度需要滿足\(d \leq t\),其中\(t\)是公共參考串中的最高冪次
- [02] Open開啟階段:承諾者揭示多項式\(f(x)\)
- f(x)是多項式的具體形式,承諾者直接揭示多項式\(f(x)\),如多項式引數和係數
- [03] VerifyPoly驗證階段:驗證者重新計算多項式承諾\(C^{'} = Commit(CRS, f(α))\)
- 驗證者重新計算多項式承諾\(C^{'}\),並驗證\(C^{'}\)和\(C\)是否相等
以上方式的多項式承諾開啟階段是明文揭示,即承諾者直接揭示多項式\(f(x)\),驗證者重新計算多項式承諾\(C^{'} = Commit(CRS, f(x))\),並驗證\(C^{'}\)和\(C\)是否相等。
明文揭示的方式簡單直接,但存在以下問題:
- 多項式階數較高時,明文揭示的方式會導致通訊量較大
- 明文揭示的方式無法保護多項式,必須公開
Kate多項式承諾
為了解決明文揭示多項式承諾存在的問題,Kate多項式承諾基於多項式點開啟的方式,實現了多項式的承諾和驗證。點開啟方式指的是承諾者不直接揭示多項式\(f(x)\),而是揭示多項式在某個點的值\(f(β)\),並提供一個witness證明,驗證者透過雙線性對映驗證多項式在β點的值是否正確。透過點開啟的方式,Kate多項式承諾解決了明文揭示的問題,同時保護了多項式的隱私。
Kate多項式承諾的構造一般有兩種方案,兩種方案在安全性上有所不同:
- 計算隱藏的Kate多項式承諾:承諾的值在計算上是隱藏的,意味著對於任何多項式時間的攻擊者,無法有效區分兩個不同的承諾。換句話說,攻擊者在計算上無法從承諾中推斷出承諾的內容。
- 無條件隱藏的Kate多項式承諾:承諾的值在計算上是無條件隱藏的,意味著對於任何攻擊者,無法從承諾中推斷出承諾的內容。
定義上比較抽象,簡單來說就是無條件隱藏透過引入隨機性,使得承諾的值在計算上無法被推斷出來,而計算隱藏僅使用離散對數困難性假設,使得承諾的值在計算上無法被推斷出來。
計算隱藏的Kate多項式承諾
計算隱藏的Kate多項式承諾的構造如下:
[00] Setup初始化階段
Kate多項式承諾需要初始化階段,主要是生成和公開CRS,以及雙線性對映\(e: G \times G \rightarrow G_T\)。在Kate多項式承諾中CRS如下:
其中,\(G\)代表乘法群,\(g\)是\(G\)的一個生成元,\(α\)是一個隨機數,\(t\)是最高冪次。注:在零知識證明中,\(α\)是一個私密的值,不會公開,需要被安全銷燬(通常被稱為有毒廢料)。
注:在Kate論文中,CRS被叫做PK,即公鑰。
[01] Commit承諾階段
承諾者計算多項式的承諾值\(C = Commit(CRS, f(x))\),併傳送\(C\)給驗證者。多項式的承諾值計算方式如下:
- \(a_i\)是多項式的係數, 承諾者已知
- CRS是公共參考串,CRS中包含了\(g^{α^i}\)的值,因此承諾者可以在不知道\(α\)的情況下計算\(C\)
[02] CreateWitness點開啟階段
承諾者計算多項式在某個點的值\(f(β)\),並提供一個witness證明\(w\),其中\(w\)是多項式在β點的承諾,計算方式如下:
- 首先計算商多項式
- 計算\(f(x)\)在β點的值
- 計算商多項式在α點的承諾值
承諾者將\((β, f(β), w)\)傳送給驗證者。
[03] VerifyEval點驗證階段
驗證者使用雙線性對映驗證多項式在β點的開啟值是否正確,驗證方式如下:
正確性驗證:
根據商多項式的定義,有:\(f(α) - f(β) = φ(α) \cdot (α-β)\),因此:
因此,\(e(C, g) = e(w, g^{α}/g^{β}) \cdot e(g, g)^{f(β)}\),驗證透過。
無條件隱藏的Kate多項式承諾
無條件隱藏的Kate多項式承諾構造與計算隱藏的Kate多項式承諾流程類似,區別在於:
- 初始化階段的CRS不同
- 承諾值的生成和驗證方式不同(承諾值生成基於Pedersen承諾)
初始化階段
CRS的構造如下:
其中,\(h\)是\(G\)的另一個生成元。
Commit承諾階段
承諾者計算多項式的承諾值\(C = Commit(CRS, f(x))\),計算方式如下:
CreateWitness點開啟階段
承諾者計算多項式在某個點的值\(f(β)\),並提供一個witness證明\(w\),計算方式如下:
- 計算商多項式
- 計算點開啟值
\(g^{φ(α)}\)和\(h^{\hat{φ(α)}}\)計算方式基於CRS(方式與上文相同,略),承諾者將\((β, f(β), \hat{f(β)}, w)\)傳送給驗證者。
VerifyEval點驗證階段
驗證者使用雙線性對映驗證多項式在β點的開啟值是否正確,驗證方式如下:
正確性驗證:
\(h\)是\(G\)中的一個群元素,因此不是一般性可設\(h = g^\lambda\),其中\(\lambda\)是一個隨機數。因此:
根據商多項式的定義,有:\(f(α) - f(β) = φ(α) \cdot (α-β)\),\(\hat{f(α)} - \hat{f(β)} = \hat{φ(α)} \cdot (α-β)\),因此:
因此,\(e(C, g) = e(w, g^{α}/g^{β}) \cdot e(g^{f(β)} \cdot h^{\hat{f(β)}}, g)\),驗證透過。
結語
Kate多項式承諾是一種實用性比較強的多項式承諾方案,透過點開啟的方式,可以在保護多項式隱私的同時,有效減少通訊量。Kate多項式承諾在零知識證明、可驗證密碼共享等領域有廣泛應用。瞭解Kate多項式承諾的原理和構造,對於學習zk-snarks、zk-starks等零知識證明協議是非常有幫助的。透過本文的介紹,希望讀者能夠對Kate多項式承諾有一個初步的瞭解,併為進一步學習零知識證明協議打下基礎。
參考文獻
- 【1】Polynomial Commitment
- 【2】Non-interactive zero-knowledge proof
- 【3】Commitment_scheme