合約量化跟單系統開發搭建丨現成原始碼搭建

aa111111發表於2023-03-29

加密多項式

結合上述同態加密,我們現在可以用一個隨機值x去加密計算多項式,並相應地修改零知識協議。


假設多項式方程為p ( x ) = x 3 − 3 x + 2 x p(x) = x^3-3x+2xp(x)=x 

3

 −3x+2x,我們可以確定該多項式的係數分別為:1,-3,2。因為同態加密並不允許對一個加密的值取冪,所以我們連同需要加密值的冪次一起加密,分別為:E ( x ) , E ( x 2 ) , E ( x 3 ) E(x),E(x^2),E(x^3)E(x),E(x 

2

 ),E(x 

3

 ),所以我們計算加密的多項式如下:

E ( x 3 ) 1 ⋅ E ( x 2 ) − 3 ⋅ E ( x ) 2 = ( g x 3 ) 1 ⋅ ( g x 2 ) − 3 ⋅ ( g x ) 2 = g 1 x 3 ⋅ g − 3 x 2 ⋅ g 2 x = g x 3 − 3 x 2 + 2 x E(x^3)^1 \cdot E(x^2)^{-3} \cdot E(x)^2=(g^{x^3})^1 \cdot(g^{x^2})^{-3} \cdot (g^x)^2=\\ g^{1x^3} \cdot g^{-3x^2} \cdot g^{2x}=g^{x^3-3x^2+2x}

E(x 

3

 ) 

1

 ⋅E(x 

2

 ) 

−3

 ⋅E(x) 

2

 =(g 

3

 

 ) 

1

 ⋅(g 

2

 

 ) 

−3

 ⋅(g 

x

 ) 

2

 =

1x 

3

 

 ⋅g 

−3x 

2

 

 ⋅g 

2x

 =g 

3

 −3x 

2

 +2x

 


透過這樣的運算,我們得到了多項式在未知x xx處的加密求值。這是一個非常強大的機制,而且由於同態性,同一個多項式在加密空間中的加密求值總是相同的。


現在我們更新我們前面介紹的協議版本,對於冪次為d dd的多項式:


驗證者

抽取一個隨機值s ss,例如,金鑰

對於s ss計算所有冪次i ii的加密值,其中i ∈ [ 0 , . . . , d ] i \in [0,...,d]i∈[0,...,d],例如E ( s i ) = g s i E(s^i)=g^{s^i}E(s 

i

 )=g 

i

 

 

計算未加密的目標多項式t ( s ) t(s)t(s)

將已經加密的s ss的冪次多項式傳送給證明者:E ( s 0 ) , E ( s 1 ) , . . . , E ( s d ) E(s^0),E(s^1),...,E(s^d)E(s 

0

 ),E(s 

1

 ),...,E(s 

d

 )

證明者

計算多項式h ( x ) = p ( x ) t ( x ) h(x) = \frac{p(x)}{t(x)}h(x)= 

t(x)

p(x)

 

使用加密的多項式g s 0 , g s 1 , . . . , g s d g^{s^0},g^{s^1},...,g^{s^d}g 

0

 

 ,g 

1

 

 ,...,g 

d

 

 和係數c 0 , c 1 , . . . , c n c_0,c_1,...,c_nc 

0

 ,c 

1

 ,...,c 

n

 ,計算E ( p ( s ) ) = g p ( s ) = ( g s d ) c d . . . ( g s 1 ) c 1 ⋅ ( g s 0 ) c 0 E(p(s))=g^{p(s)}=(g^{s^d})^{c_d}...(g^{s^1})^{c_1} \cdot (g^{s^0})^{c_0}E(p(s))=g 

p(s)

 =(g 

d

 

 ) 

d

 

 ...(g 

1

 

 ) 

1

 

 ⋅(g 

0

 

 ) 

0

 

 和E ( h ( s ) ) = g h ( s ) E(h(s))=g^{h(s)}E(h(s))=g 

h(s)

 

證明者將g p 和 g h g^p和g^hg 

p

 和g 

h

 傳送給驗證者

驗證者

驗證者在加密的情況下檢查p = t ( s ) ⋅ h p=t(s) \cdot hp=t(s)⋅h:g p = ( g h ) t ( s ) ⟹ g p = g t ( s ) ⋅ h g^p = (g^h)^{t(s)} \Longrightarrow g^p = g^{t(s) \cdot h}g 

p

 =(g 

h

 ) 

t(s)

 ⟹g 

p

 =g 

t(s)⋅h

 

在這裡,證明者是不知道關於s ss的任何資訊的。雖然在這樣的協議中證明者的能力是有限的,他仍然可以使用任何其他手段偽造證明沒有實際使用提供加密的多項式,例如,如果證明者聲稱有一個令人滿意的多項式只使用s 3 s^3s 

3

 和s 1 s^1s 

1

 兩個多項式,顯然這是不可能驗證當前協議。


限制一個多項式

一個多項式的知識就是這個它的係數c 0 , c 1 , . . . , c i c_0,c_1,...,c_ic 

0

 ,c 

1

 ,...,c 

i

 ,以及在該協議中我們將這些係數對以及加密的s ss的項用係數再求冪,例如:E ( s i ) c i = g c i ⋅ s i E(s^i)^{c_i}=g^{c_i \cdot s^i}E(s 

i

 ) 

i

 

 =g 

i

 ⋅s 

i

 

 。我們已經在s ss的加密指數的選擇上限制了證明者,但是這樣的限制不是強制的,有一種可能存在找到一些任意值z p , z h z_p,z_hz 

p

 ,z 

h

 ,滿足等式z p = ( z h ) t ( s ) z_p = (z_h)^{t(s)}z 

p

 =(z 

h

 ) 

t(s)

 ,將他們傳送給驗證者,代替g p , g h g^p,g^hg 

p

 ,g 

h

 。例如:對於隨機數r rr,z h = g r , z p = ( g t ( s ) ) r z_h =g^r,z_p=(g^{t(s)})^rz 

h

 =g 

r

 ,z 

p

 =(g 

t(s)

 ) 

r

 ,其中g t ( s ) g^{t(s)}g 

t(s)

 是提供加密s ss的指數項。顯然存在這種威脅,這就是為什麼驗證者需要證明僅僅由自身提供的加密s ss的指數項用於計算g p , g h g^p,g^hg 

p

 ,g 

h

 ,而不是其他。


讓我們考慮一個冪次為1的多項式f ( x ) = c ⋅ x f(x)=c \cdot xf(x)=c⋅x,對應s ss項的加密值為E ( s ) = g s E(s)=g^sE(s)=g 

s

 。我們可以確定僅僅有一個加密項,同態性乘以係數c cc,結果為( g s ) c (g^s)^c(g 

s

 ) 

c

 。有一種方法是要求對另一個移位的加密值和原始值執行相同的操作,作為校驗和的算術類比,確保結果是對原始值的求冪。


Alice有一個值a aa,她要求Bob可以取任意次方,但要求只有a aa可以取冪,而不是其它:


選擇一個隨機數α \alphaα

計算a ′ = a α ( m o d   n ) a' = a^{\alpha} (mod \ n)a 

 =a 

α

 (mod n)

向Bob提供一個元組( a , a ′ ) (a,a')(a,a 

 ),要求對每個值執行相同的任意求冪,並使用結果元組( b , b ′ ) (b,b')(b,b 

 )進行回覆。例如:b α = b ′ ( m o d   n ) b^{\alpha}=b'(mod \ n)b 

α

 =b 

 (mod n)

因為Bob不能從元組( a , a ′ ) (a,a')(a,a 

 )抽取α \alphaα,Bob透過以下操作進行有效回應:


選擇一個值c cc

計算b = ( a ) c ( m o d   n ) b=(a)^c(mod \ n)b=(a) 

c

 (mod n)和b ′ = ( a ′ ) c ( m o d   n ) b' = (a')^c(mod \ n)b 

 =(a 

 ) 

c

 (mod n)

向Alice傳送元組( b , b ′ ) (b,b')(b,b 

 )

Alice收到後進行驗證:


( b ) α = b ′ ( a c ) α = ( a ′ ) c a c ⋅ α = ( a α ) c (b)^{\alpha}=b' \quad (a^c)^{\alpha} = (a')^c \quad a^{c \cdot \alpha}=(a^{\alpha})^c(b) 

α

 =b 

 (a 

c

 ) 

α

 =(a 

 ) 

c

 a 

c⋅α

 =(a 

α

 ) 

c

 

結論


Bob對元組的兩個值應用了相同的指數(即c)


Bob能夠適用Alice的元組並保留了α \alphaα的關係


Bob知道指數c,因為使用同一個指數才會產生一個有效元組( b . b ′ ) (b.b')(b.b 

 )


Alice不知道c,Bob也不知道α \alphaα


,該協議向Alice提供了一個證明,Bob確實用他知道的某個值對a求冪,而他不能做任何其他操作,例如乘法、加法,因為這會消除α-移位關係.


在同態加密背景下,求冪是加密值的乘法。我們可以將同樣的結構應用到簡單的一系數多項式中f ( x ) = c ⋅ x : f(x)=c \cdot x:f(x)=c⋅x:


驗證者選擇一個隨機數s , α s,\alphas,α和提供計算冪次為1的偏移:( g s , g α ⋅ s ) (g^s,g^{\alpha \cdot s})(g 

s

 ,g 

α⋅s

 )

證明者應用一個係數c cc:( ( g s ) c , ( g α ⋅ s ) c ) = ( g c ⋅ s , g α ⋅ c ⋅ s ) ((g^s)^c,(g^{\alpha \cdot s})^c)=(g^{c \cdot s},g^{\alpha \cdot c \cdot s})((g 

s

 ) 

c

 ,(g 

α⋅s

 ) 

c

 )=(g 

c⋅s

 ,g 

α⋅c⋅s

 )

驗證者驗證:( g c ⋅ s ) α = g α ⋅ c ⋅ s (g^{c \cdot s})^{\alpha}=g^{\alpha \cdot c \cdot s}(g 

c⋅s

 ) 

α

 =g 

α⋅c⋅s

 

像這種構造,限制了證明者僅僅使用由驗證者提供的加密s ss的項,因此證明者只能選擇多項式的係數c cc,計算傳送給驗證者。我們幫將這種一次多項式的方法擴充套件的多項式中,因為每一項使用同態加法合併在一起。因此,如果證明者給s的冪次加密以及它們的移位值,他可以計算原始多項式和移位多項式,其中必須保持相同的檢查。特別是對於d次多項式:


驗證者提供加密的項g s 0 , g s 1 , . . . , g s d g^{s^0},g^{s^1},...,g^{s^d}g 

0

 

 ,g 

1

 

 ,...,g 

d

 

 和偏移項g α ⋅ s 0 , g α ⋅ s 1 , . . . , g α ⋅ s d g^{\alpha \cdot s^0},g^{\alpha \cdot s^1},...,g^{\alpha \cdot s^d}g 

α⋅s 

0

 

 ,g 

α⋅s 

1

 

 ,...,g 

α⋅s 

d

 

 

證明者

使用提供的冪函式s計算加密多項式:g p ( s ) = ( g s 0 ) c 0 ⋅ ( g s 1 ) c 1 ⋅ . . . ⋅ ( g s d ) c d = g c 0 s 0 + c 1 s 1 + . . . + c d s d g^{p(s)}=(g^{s^0})^{c_0} \cdot (g^{s^1})^{c_1} \cdot ... \cdot (g^{s^d})^{c_d}=g^{c_0s^0+c_1s^1+...+c_ds^d}g 

p(s)

 =(g 

0

 

 ) 

0

 

 ⋅(g 

1

 

 ) 

1

 

 ⋅...⋅(g 

d

 

 ) 

d

 

 =g 

0

 s 

0

 +c 

1

 s 

1

 +...+c 

d

 s 

d

 

 

用s的冪對應的α-移位來計算加密的“移位”多項式:g α p ( s ) = ( g α s 0 ) c 0 ⋅ ( g α s 1 ) c 1 ⋅ . . . ⋅ ( g α s d ) c d = g c 0 α s 0 + c 1 α s 1 + . . . + c d α s d = g α ( c 0 s 0 + c 1 s 1 + . . . + c d s d ) g^{\alpha p(s)}=(g^{\alpha s^0})^{c_0} \cdot (g^{\alpha s^1})^{c_1} \cdot ...\cdot (g^{\alpha s^d})^{c_d}=g^{c_0\alpha s^0+c_1\alpha s^1+...+c_d\alpha s^d}=g^{\alpha(c_0s^0+c_1s^1+...+c_ds^d)}g 

αp(s)

 =(g 

αs 

0

 

 ) 

0

 

 ⋅(g 

αs 

1

 

 ) 

1

 

 ⋅...⋅(g 

αs 

d

 

 ) 

d

 

 =g 

0

 αs 

0

 +c 

1

 αs 

1

 +...+c 

d

 αs 

d

 

 =g 

α(c 

0

 s 

0

 +c 

1

 s 

1

 +...+c 

d

 s 

d

 )

 

將g p , g p ′ g^p,g^{p'}g 

p

 ,g 

 

 傳送給驗證者

驗證者檢驗:( g p ) α = g p ′ (g^p)^{\alpha}=g^{p'}(g 

p

 ) 

α

 =g 

 

 

對於我們先前的舉得多項式:p ( x ) = x 3 − 3 x 2 + 2 x p(x)=x^3-3x^2+2xp(x)=x 

3

 −3x 

2

 +2x執行以下步驟:


驗證者提供E ( s 3 ) , E ( s 2 ) , E ( s ) E(s^3),E(s^2),E(s)E(s 

3

 ),E(s 

2

 ),E(s),和它的偏移E ( α s 3 ) , E ( α s 2 ) , E ( α s ) E(\alpha s^3),E(\alpha s^2),E(\alpha s)E(αs 

3

 ),E(αs 

2

 ),E(αs)

證明者計算:

g p = g p ( s ) = ( g s 3 ) 1 ⋅ ( g s 2 ) − 3 ⋅ ( g s ) 2 = g s 3 ⋅ g − 3 s 2 ⋅ g 2 s = g s 3 − 3 s 2 + 2 s g^p = g^{p(s)} = (g^{s^3})^1 \cdot (g^{s^2})^{-3} \cdot (g^{s})^2=g^{s^3} \cdot g^{-3s^2} \cdot g^{2s}= g^{s^3-3s^2+2s}g 

p

 =g 

p(s)

 =(g 

3

 

 ) 

1

 ⋅(g 

2

 

 ) 

−3

 ⋅(g 

s

 ) 

2

 =g 

3

 

 ⋅g 

−3s 

2

 

 ⋅g 

2s

 =g 

3

 −3s 

2

 +2s

 

g p ′ = g α p ( s ) = ( g α s 3 ) 1 ⋅ ( g α s 2 ) − 3 ⋅ ( g α s ) 2 = g α s 3 ⋅ g − 3 α s 2 ⋅ g 2 α s = g α ( s 3 − 3 s 2 + 2 s ) g^{p'} = g^{\alpha p(s)} = (g^{\alpha s^3})^1 \cdot (g^{\alpha s^2})^{-3} \cdot (g^{\alpha s})^2=g^{\alpha s^3} \cdot g^{-3\alpha s^2} \cdot g^{2\alpha s}= g^{\alpha (s^3-3s^2+2s)}g 

 

 =g 

αp(s)

 =(g 

αs 

3

 

 ) 

1

 ⋅(g 

αs 

2

 

 ) 

−3

 ⋅(g 

αs

 ) 

2

 =g 

αs 

3

 

 ⋅g 

−3αs 

2

 

 ⋅g 

2αs

 =g 

α(s 

3

 −3s 

2

 +2s)

 

驗證者檢驗( g p ) α = g p ′ (g^p)^{\alpha} = g^{p'}(g 

p

 ) 

α

 =g 

 

 :

( g s 3 − 3 s 2 + 2 s ) α = g α ( s 3 − 3 s 2 + 2 s ) (g^{s^3-3s^2+2s})^{\alpha} = g^{\alpha (s^3-3s^2+2s)}(g 

3

 −3s 

2

 +2s

 ) 

α

 =g 

α(s 

3

 −3s 

2

 +2s)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2942342/,如需轉載,請註明出處,否則將追究法律責任。

相關文章