【隱私計算筆談】MPC系列專題(六):零知識證明和位元承諾

PlatON技術團隊發表於2022-12-21

零知識證明

互動式證明系統由兩方參與,分別為證明者(Prover)和驗證者 (Verifier)。證明者掌握某一秘密,證明者需要讓驗證者相信自己掌握該秘密。

互動式證明過程需要多輪,最典型的是每一輪驗證者向證明者傳送一個詢問資訊(挑戰,Challenge),證明者對詢問資訊進行計算,並回覆資訊響應(Response)。

驗證者根據證明者每一輪的回覆資訊決定是否相信證明者。在互動式證明系統中,通訊通道是必須的。互動式證明系統滿足:

完備性:如果證明者知道某一秘密,驗證者將接受證明的證明。

可靠性:如果證明者能以一定的機率使驗證者相信證明者的證明,則證明者知道相應的秘密。 

零知識證明(Zero-Knowledge Proof),是指證明者在不讓驗證者掌握秘密資訊的前提下,使得驗證者確信自己確實掌握了這些資訊。驗證者除了知道證明者能證明某一事實外,不能得到其他任何資訊。
圖片

例如,Alice宣稱知道一個能夠對拋硬幣正反面的訣竅。Bob要驗證Alice的宣稱,只需要當著Alice的面拋硬幣。

Bob拋一次硬幣Alice能猜中結果的機率為1/2,連續拋兩次硬幣Alice都能猜中結果的機率為1/4,連續拋?次硬幣Alice都能猜中結果的機率為1/\( 2^? \),當?足夠大時,就可以認為Alice全都正確猜中是不可能事件。

那麼如果Alice真的全都猜對了,Bob就可以相信Alice的宣稱。
圖片
另一個經典的例子是有一個簡單的迷宮:
圖片
C和D之間有一扇需要秘密口令才能開啟的門,證明者要向驗證者證明自己能夠開啟這扇門,又不想洩露秘密口令。可以採用如下所述的證明協議:

1. 驗證者在協議開始時停留在位置 A
2. 證明者一直走到迷宮內部的位置 C 或者位置 D 處 
3. 在證明者消失之後,驗證者走到位置 B 處,然後命令證明者從某個出口處出來
4. 證明者根據驗證者的命令,從對應出口處出來
5. 證明者和驗證者重複以上過程?輪 

只有證明者知道口令,每次驗證者要求證明者從指定路口出來時,證明者才能根據命令開啟門穿過去或者原路返回,從指定路口出來。

如果證明者不知道開啟門的秘密口令,則證明者只能原路返回。因此不知道口令的證明者只能在一開始猜測驗證者要求的路口,並從該路口進入,一輪猜對的機率是1/2,重複?輪後,證明者都能猜對機率為1/\( 2^? \),重複的輪數?足夠多時,驗證者就可相信證明者擁有開啟門的秘密口令。 

接下來介紹Schnorr零知識證明協議:

 令? =<?>是?階群,?為大素數,證明者擁有秘密知識? ∈??,並公開系統公鑰\( ?=?^? \) 。

1. 證明者產生一個隨機數?∈??,計算\( ?=?^? \)併傳送給驗證者。
2. 驗證者Bob產生一個隨機數?∈{0,1}併傳送給證明者Alice。
3. 如果?=0,證明者計算?=?;如果?=1,證明者計算?=?+?。之後證明者將?傳送給驗證者。
4. 若?=0,證明者驗證??=?;如果?=1,證明者計算\( ?^?=?? \)。

圖片
公鑰\( ?=?^? \),由於離散對數分解困難,因此無法直接根據\( ?^? \)計算出?。因為證明者根據?的值選擇傳送?+?或者?,若證明者不知道?的值,那麼當驗證者傳送?=1時,證明者無法發出正確的?=?+?,驗證者在驗證\( ?^?=?^{?+?}=?^?· ?^?=?·? \)時就會驗證失敗。

想象一個攻擊者Tom,他知道Bob之後產生的?為什麼值。則Tom可以任?(?)意構造?,若?=0則讓\( ?=?^? \);若?=1則讓?=? 。即只要攻擊者知道Bob之後產生的?具體為什麼值,Tom都可構造一個?,使得Bob認為Tom知道?的值,雖然Tom其實並不知道?,只知道Bob會產生的?的值,即Bob並不知道?的任何資訊,所以無法區分出Alice和Tom。

位元承諾

位元承諾(Bit Commitment),最早在1995年由圖靈獎獲得者Blum首先提出。

位元承諾分為兩個階段,第一個階段為承諾階段,承諾者向驗證者承諾秘密值?,並向驗證者傳送對驗證者保密的秘密值?。

第二個階段是揭示階段,承諾者向驗證者揭示第一個階段承諾的確實是?,同時驗證者得知秘密值?的內容。也可以簡單理解成承諾階段,承諾方將一個訊息鎖進一個盒子裡,再將該訊息傳送給驗證方。

圖片

驗證階段,承諾方將盒子開啟,向驗證方展示盒子裡的內容,以證明自己確實將訊息鎖在盒子裡傳送給了驗證方。

接下來介紹一個基於強單向函式(雜湊函式)的承諾方案,將該強單向函式記為???ℎ(?)(滿足找出任意兩個?和?,使得?(?)=?(?)不可行;已知?(?),無法求出?;任意兩個不同的?和?,無法區分出?(?)和?(?)哪個的原像是?):

承諾階段:

1. Alice產生兩個隨機數\( ?_1,?_2 \)。
2. Alice將隨機數\( ?_1,?_2 \)與自己將要承諾的訊息M進行連線,記為\( ?_1,?_2,? \)。
3. Alice計算\( ?_1,?_2,? \)的雜湊值\( ?=???ℎ(?_1,?_2,?) \),並將?和\( ?_1 \)傳送給Bob,作為Alice對訊息m的承諾。 

揭示階段:

1. Alice將\( ?_1,?_2,? \)告知Bob

2. Bob 計算\( ?_1,?_2,? \)的雜湊值?′,並將?′的值與?進行比較,如果匹配,則承諾有效。 

由於Hash的抗一次原像性(preimage resistance),Bob無法根據???ℎ(?1,?2,?)計算出?,保證了計算意義上的隱藏性,Bob的計算力無法計算出?。

若Hash滿足對於任意?,函式\( ℎ_?(?_1,?_2) = ???ℎ(?_1,?_2,?) \)都是規則的(即每個像的原像個數都相同),那麼\( ???ℎ(?_1,?_2,?) \)在資訊理論意義上隱藏了?,因為?的取值與\( ???ℎ(?_1,?_2,?) \)是獨立的,即對於任意?!=?′,任意取值?都滿足

\( ??[???ℎ(?_1,?_2,?)=?]=??[???ℎ(?_1,?_2,?′) = ?] \)

通俗的說,Bob即使有無限的計算力,計算出滿足\( ???ℎ(?)=???ℎ(?_1,?_2,?) \)的所有?的集合?,?中任意一個元素是(\( ?_1,?_2,? \))的機率也都相同,Bob猜對的機率只有1/|?|。

在實際中,我們通常可假設Hash(*)是一個隨機預言機(random oracle),且\( ?_1 \)和\( ?_2 \)足夠長,保證ℎ?是接近規則的,在統計意義上隱藏了?的資訊。

相關文章