密碼學承諾之原理和應用 - Kate多項式承諾

warm3snow發表於2024-10-11

主頁

微信公眾號:密碼應用技術實戰
部落格園首頁:https://www.cnblogs.com/informatics/
GIT地址:https://github.com/warm3snow

簡介

多項式承諾是一種實用性比較強的密碼學承諾方案,允許一個方(承諾者)向另一個方(驗證者)承諾一個多項式的值,而不洩露多項式的具體形式。在零知識證明、可驗證密碼共享等領域有廣泛應用,常見的多項式承諾有Kate多項式承諾、FRI多項式承諾,IPA多項式承諾等。本文將重點介紹Kate多項式承諾的構造和應用。

在閱讀下文之前,瞭解基礎的密碼學承諾原理和應用是非常有必要的,讀者可以參考以下幾篇文章:
《密碼學承諾之原理和應用 - 概覽》
《密碼學承諾zhi原理和應用 - Sigma承諾》
《密碼學承諾之原理和應用 - Pedersen承諾》

前言

多項式

在詳細介紹Kate多項式承諾之前,我們先來簡單介紹一下多項式的基本概念。多項式一般表示為:

\[f(x) = a_0 + a_1x + a_2x^2 + \cdots + a_dx^d = \sum_{i=0}^{d}a_ix^i \]

上述多項式中,\(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\)的一個生成元

多項式承諾

多項式承諾主要流程如下:

image

  • [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多項式承諾的構造如下:

image

[00] Setup初始化階段

Kate多項式承諾需要初始化階段,主要是生成和公開CRS,以及雙線性對映\(e: G \times G \rightarrow G_T\)。在Kate多項式承諾中CRS如下:

\[CRS = (G, g^α, g^{α^2}, ..., g^{α^t}) \]

其中,\(G\)代表乘法群,\(g\)\(G\)的一個生成元,\(α\)是一個隨機數,\(t\)是最高冪次。注:在零知識證明中,\(α\)是一個私密的值,不會公開,需要被安全銷燬(通常被稱為有毒廢料)。

注:在Kate論文中,CRS被叫做PK,即公鑰。

[01] Commit承諾階段

承諾者計算多項式的承諾值\(C = Commit(CRS, f(x))\),併傳送\(C\)給驗證者。多項式的承諾值計算方式如下:

\[C = g^{f(α)} = g^{\sum_{i=0}^{d}{a_iα^i}} = \prod_{i=0}^{d}g^{a_iα^i} = \prod_{i=0}^{d}{(g^{α^i})^{a_i}} \]

  • \(a_i\)是多項式的係數, 承諾者已知
  • CRS是公共參考串,CRS中包含了\(g^{α^i}\)的值,因此承諾者可以在不知道\(α\)的情況下計算\(C\)

[02] CreateWitness點開啟階段

承諾者計算多項式在某個點的值\(f(β)\),並提供一個witness證明\(w\),其中\(w\)是多項式在β點的承諾,計算方式如下:

  • 首先計算商多項式

\[φ(x) = \frac{f(x) - f(β)}{x - β} = \sum_{i=0}^{d-1}b_ix^i \]

  • 計算\(f(x)\)在β點的值

\[f(β) = \sum_{i=0}^{d}a_iβ^i \]

  • 計算商多項式在α點的承諾值

\[w = Commit(CRS, φ(x)) = g^{φ(α)} = g^{\sum_{i=0}^{d-1}{b_iα^i}} = \prod_{i=0}^{d-1}g^{b_iα^i} = \prod_{i=0}^{d-1}{(g^{α^i})^{b_i}} \]

承諾者將\((β, f(β), w)\)傳送給驗證者。

[03] VerifyEval點驗證階段

驗證者使用雙線性對映驗證多項式在β點的開啟值是否正確,驗證方式如下:

\[e(C, g) \stackrel{?}{=} e(w, g^{α}/g^{β}) \cdot e(g, g)^{f(β)} \]

正確性驗證:

\[e(w, g^{α}/g^{β}) \cdot e(g, g)^{f(β)} = e(g^{φ(α)}, g^{α-β}) \cdot e(g, g)^{f(β)} = e(g,g)^{φ(α) \cdot (α-β)+f(β)} \]

根據商多項式的定義,有:\(f(α) - f(β) = φ(α) \cdot (α-β)\),因此:

\[e(w, g^{α}/g^{β}) \cdot e(g, g)^{f(β)} = e(g,g)^{f(α)-f(β)+f(β)} = e(g,g)^{f(α)} = e(g^{f(α)}, g) = e(C, g) \]

因此,\(e(C, g) = e(w, g^{α}/g^{β}) \cdot e(g, g)^{f(β)}\),驗證透過。

無條件隱藏的Kate多項式承諾

無條件隱藏的Kate多項式承諾構造與計算隱藏的Kate多項式承諾流程類似,區別在於:

  • 初始化階段的CRS不同
  • 承諾值的生成和驗證方式不同(承諾值生成基於Pedersen承諾)

初始化階段

CRS的構造如下:

\[CRS = (G, g^α, g^{α^2}, ..., g^{α^t}, h, h^α, h^{α^2}, ..., h^{α^t}) \]

其中,\(h\)\(G\)的另一個生成元。

Commit承諾階段

承諾者計算多項式的承諾值\(C = Commit(CRS, f(x))\),計算方式如下:

\[C = g^{f(α)} \cdot h^{\hat{f(α)}} f(α) = \sum_{i=0}^{d}{a_iα^i} \hat{f(α)} = \sum_{i=0}^{d}{b_iα^i} = \prod_{i=0}^{d}{(g^{α^i})^{a_i}} \cdot \prod_{i=0}^{d}{(h^{α^i})^{b_i}} \]

CreateWitness點開啟階段

承諾者計算多項式在某個點的值\(f(β)\),並提供一個witness證明\(w\),計算方式如下:

  • 計算商多項式

\[φ(x) = \frac{f(x) - f(β)}{x - β} \hat{φ(x)} = \frac{\hat{f(x)} - \hat{f(β)}}{x - β} \]

  • 計算點開啟值

\[w = Commit(CRS, φ(x)) \cdot Commit(CRS, \hat{φ(x)}) = g^{φ(α)} \cdot h^{\hat{φ(α)}} \]

\(g^{φ(α)}\)\(h^{\hat{φ(α)}}\)計算方式基於CRS(方式與上文相同,略),承諾者將\((β, f(β), \hat{f(β)}, w)\)傳送給驗證者。

VerifyEval點驗證階段

驗證者使用雙線性對映驗證多項式在β點的開啟值是否正確,驗證方式如下:

\[e(C, g) \stackrel{?}{=} e(w, g^{α}/g^{β}) \cdot e(g^{f(β)} \cdot h^{\hat{f(β)}}, g) \]

正確性驗證:

\(h\)\(G\)中的一個群元素,因此不是一般性可設\(h = g^\lambda\),其中\(\lambda\)是一個隨機數。因此:

\[e(w, g^{α}/g^{β}) \cdot e(g^{f(β)} \cdot h^{\hat{f(β)}}, g) = e(g^{φ(α)} \cdot h^{\hat{φ(α)}}, g^{α-β}) \cdot e(g^{f(β)} \cdot h^{\hat{f(β)}}, g) = e(g^{φ(α)+\lambda\hat{φ(α)}}, g^{α-β}) \cdot e(g^{f(β)+\lambda\hat{f(β)}}, g) = e(g,g)^{φ(α) \cdot (α-β)+\lambda\hat{φ(α)} \cdot (α-β) + f(β) + \lambda\hat{f(β)}} = e(g,g)^{φ(α) \cdot (α-β)+ f(β) + \lambda \cdot(\hat{φ(α)} \cdot (α-β) + \hat{f(β)})} \]

根據商多項式的定義,有:\(f(α) - f(β) = φ(α) \cdot (α-β)\)\(\hat{f(α)} - \hat{f(β)} = \hat{φ(α)} \cdot (α-β)\),因此:

\[e(w, g^{α}/g^{β}) \cdot e(g^{f(β)} \cdot h^{\hat{f(β)}}, g) = e(g,g)^{φ(α) \cdot (α-β)+ f(β) + \lambda \cdot(\hat{φ(α)} \cdot (α-β) + \hat{f(β)})} = e(g,g)^{f(α) - f(β)+ f(β) + \lambda \cdot(\hat{f(α)} - \hat{f(β)} + \hat{f(β)})} = e(g,g)^{f(α) + \lambda \cdot \hat{f(α)}} = e(g^{f(α)} \cdot g^{\lambda \cdot \hat{f(α)}}, g) = e(g^{f(α)} \cdot h^{\hat{f(α)}}, g) = e(C, g) \]

因此,\(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

相關文章