零知識證實 | 4.如何驗證多項式盲計算的值?

這篇文章正式介紹一下Bob如何驗證Alice發過來的E(P(s))的值是否正確。實際上,咱們想要實現2個目的:函數

  • 雙盲:Alice不知道s,Bob也不知道P(X)
  • 可驗證:Alice只有發送正確的E(P(s))的值,纔會被Bob接受

要實現第2個目標,須要用到上一篇文章裏介紹的α對和KCA的概念。.net

上一篇文章裏的KCA只用到了一個α對,咱們能夠擴展一下,讓Bob給Alice發送多個α對(使用同一個α):3d

(a_1,b_1),(a_2,b_2),…,(a_d,b_d)

Alice須要回覆一個α對,根據以前介紹的方法,她能夠從上面的α對中隨機挑選一個(a_i,b_i),而後各自乘以一個係數:(a',b') = (c \cdot a_i, c \cdot b_i)。那麼,除此以外,還有沒有其餘方法生成新的α對呢?答案是確定的,咱們能夠經過"線性組合"來生成。cdn

舉個例子,隨機選2個係數c_1,c_2,生成新的α對:(a',b') = (c_1 \cdot a_1 + c_2 \cdot a_2, c_1 \cdot b_1 + c_2 \cdot b_2)blog

咱們來證實一下:it

b' = c_1 \cdot b_1 + c_2 \cdot b_2 = c_1 \cdot \alpha \cdot a_1 + c_2 \cdot \alpha \cdot a_2 = \alpha \cdot (c_1 \cdot a_1 + c_2 \cdot a_2) = \alpha \cdot a'

能夠發現,確實是一個α對。咱們能夠經過求和符號寫出新α對的通常形式:io

(a',b') = (\Sigma^d_{i=1}c_ia_i, \Sigma^d_{i=1}c_ib_i)

根據上面的分析,能夠引出一個"d階係數知識假設",簡稱d-KCAclass

假設G是一個有限循環羣,g是它的一個生成元。Bob選取一個α和一個s,而後把下面這些α對發送給Alice:擴展

(g,\alpha \cdot g), (s \cdot g, \alpha s \cdot g), …, (s^d \cdot g, \alpha s^d \cdot g)

若是Alice成功回覆了一個新的α對,那麼Alice必定持有一組係數c_0,c_1,…,c_d,使得a'=\Sigma^d_{i=1}c_is^i循環

能夠發現,Bob發的這組α對不是隨便給出來的,對應d次多項式的每一項。

有了d-KCA的保證,咱們就能夠來驗證Alice給出的盲計算結果了:

  • 假設G是一個有限循環羣,g是它的一個生成元

  • 選取同態隱藏函數E(x) = x \cdot g

  • Bob隨機選擇一個α和一個s,把生成的α對發送給Allice:

    (a_0,b_0) = (E(1),\alpha \cdot E(1))

    (a_1,b_1) = (E(s), \alpha \cdot E(s))

    … …

    (a_d,b_d) = (E(s^d), \alpha \cdot E(s^d))

  • Alice須要保守的祕密是P(X)的係數:P(X) = c_0 + c_1 \cdot s + … + c_d \cdot s^d

  • Alice計算新的α對:

    a' = P(s) \cdot g = c_0 \cdot g + c_1 \cdot s \cdot g + … + c_d \cdot s^d \cdot g)= c_0 \cdot a_0 + c_1 \cdot a_1 + … + c_d \cdot a_d = \Sigma^d_{i=0}c_i \cdot a_i

    b' = \alpha \cdot a' = \Sigma^d_{i=0}c_i \cdot \alpha \cdot a_i = \Sigma^d_{i=0}c_i \cdot b_i

    而後把(a',b')發送給Bob

  • Bob驗證(a',b')是不是α對,若是是的話就接受該回復

通過這一過程,Bob就能夠確認Alice確實知道這組係數了(根據d-KCA)。所以,咱們把上一篇文章中的圖改一下,讓Alice知道的2個祕密合二爲一,就能夠獲得下面這張圖了:

最終的效果是:在Bob不知道P(X)中的係數,Alice也不知道α跟s的狀況下,確認了Alice的確知道這組多項式係數。

仍是舉個簡單的實例結束本篇文章,假設g=3, d=2

Bob隨機選擇一組係數s=2, \alpha=4,而後把3個α對發送給Alice:

(a_0,b_0) = (E(1), \alpha \cdot E(1)) = (3, 4 \cdot 3|_{mod7}) = (3, 5)

(a_1,b_1) = (E(s), \alpha \cdot E(s)) = (2 \cdot 3|_{mod7}, 4 \cdot 2 \cdot 3|_{mod7}) = (6, 3)

(a_2,b_2) = (E(s^2), \alpha \cdot E(s^2)) = (2^2 \cdot 3|_{mod7}, 3 \cdot 2^2 \cdot 4|_{mod7}) = (5, 6)

假設Alice持有的多項式爲P(X) = 1 + 2 \cdot X + 3 \cdot X^2,在收到Bob的α對以後,計算新的α對:

a' = \Sigma^2_{i=0}c_i \cdot a_i = 1 \cdot a_0 + 2 \cdot a_1 + 3 \cdot a_2 = 1 \cdot 3 + 2 \cdot 6 + 3 \cdot 5|_{mod7} = 30|_{mod7} = 2

b' = \Sigma^2_{i=0}c_i \cdot b_i = 1 \cdot b_0 + 2 \cdot b_1 + 3 \cdot b_2 = 1 \cdot 5 + 2 \cdot 3 + 3 \cdot 6|_{mod7} = 29|_{mod7} = 1

而後把(a',b') = (2,1)發送給Bob。

Bob接收到Alice的回覆以後,驗證其是否爲α對:

\alpha \cdot a' = 4 \cdot 2|_{mod7} = 8|_{mod7} = 1 = b'

驗證成功!至此,Bob確信Alice確實知道P(X)的這組係數。

相關文章
相關標籤/搜索