合約量化跟單系統開發搭建丨現成原始碼搭建
加密多項式
結合上述同態加密,我們現在可以用一個隨機值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
x
3
)
1
⋅(g
x
2
)
−3
⋅(g
x
)
2
=
g
1x
3
⋅g
−3x
2
⋅g
2x
=g
x
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
s
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
s
0
,g
s
1
,...,g
s
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
s
d
)
c
d
...(g
s
1
)
c
1
⋅(g
s
0
)
c
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
)
c
i
=g
c
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
s
0
,g
s
1
,...,g
s
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
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
用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
)
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 p , g p ′ g^p,g^{p'}g
p
,g
p
′
傳送給驗證者
驗證者檢驗:( g p ) α = g p ′ (g^p)^{\alpha}=g^{p'}(g
p
)
α
=g
p
′
對於我們先前的舉得多項式: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
s
3
)
1
⋅(g
s
2
)
−3
⋅(g
s
)
2
=g
s
3
⋅g
−3s
2
⋅g
2s
=g
s
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
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
−3s
2
+2s)
驗證者檢驗( g p ) α = g p ′ (g^p)^{\alpha} = g^{p'}(g
p
)
α
=g
p
′
:
( 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
s
3
−3s
2
+2s
)
α
=g
α(s
3
−3s
2
+2s)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2942342/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 合約跟單系統開發(原始碼搭建方案)_現成原始碼
- 量化合約跟單系統開發(樣式搭建)合約量化原始碼系統開發流程原始碼
- 現貨量化跟單丨合約跟單系統開發丨原始碼丨量化機器人開發技術分析原始碼機器人
- 合約量化系統開發(原始碼搭建)原始碼
- 現貨合約秒合約跟單系統開發(原始碼案例)搭建原始碼
- 現成跟單量化合約模式系統開發原始碼搭建(技術介紹)模式原始碼
- 合約跟單系統丨合約跟單系統開發(正式版)丨合約跟單開發原始碼說明原始碼
- 量化交易現貨合約對沖跟單app系統開發案例演示(原始碼搭建)APP原始碼
- 合約跟單系統開發(原始碼案例)丨合約跟單開發原始碼案例部署原始碼
- 量化合約系統開發(方案模式)|合約量化系統開發(原始碼搭建)模式原始碼
- 量化合約系統開發技術案例(原始碼)丨合約量化系統開發解決方案(搭建)原始碼
- 量化合約跟單系統開發(開發平臺)丨量化合約跟單開發原始碼功能原始碼
- 量化合約系統開發丨合約量化系統開發原始碼丨合約量化系統開發技術Demo原始碼
- 合約跟單開發(正式版)丨合約跟單系統開發(方案及策略)丨合約跟單系統原始碼功能原始碼
- 合約跟單開發說明丨合約跟單系統開發(方案及策略)丨合約跟單原始碼版原始碼
- 合約跟單開發需求丨合約跟單系統開發(技術方案)丨合約跟單原始碼及功能原始碼
- 合約量化系統丨合約量化開發原始碼邏輯原始碼
- 合約量化跟單|秒合約|現貨跟單系統開發
- 合約量化系統丨合約量化系統開發策略及詳情丨合約量化開發原始碼邏輯原始碼
- 量化合約丨合約量化丨合約跟單丨交易所繫統開發實現技術案例及原始碼(demo)原始碼
- 量化合約原始碼搭建開發案例丨合約量化技術開發成熟Demo原始碼
- 量化跟單系統開發丨Python程式設計原始碼丨跟單合約交易策略開發技術Python程式設計原始碼
- 淺談/合約跟單系統開發/合約量化系統開發原始碼功能/方案原始碼
- 關於/合約跟單系統開發/合約量化系統開發原始碼功能/方案原始碼
- 量化合約原始碼開發技術/合約量化系統開發技術原始碼搭建程式原始碼
- 現貨量化跟單交易程式策略系統模型開發丨量化丨合約丨python模型Python
- 現貨量化/原始碼/秒合約/量化跟單交易系統合約開發python技術原始碼Python
- 量化合約開發功能版丨量化合約系統開發(策略詳細)丨量化合約跟單原始碼成熟原始碼
- 合約量化開發(案例版)丨合約量化系統開發(技術說明)丨合約量化系統原始碼規則原始碼
- 量化合約/合約量化/合約跟單系統開發(策略及詳細)案例原始碼原始碼
- 量化跟單/秒合約/原始碼系統開發/永續合約量化交易開發技術分析原始碼
- 合約跟單系統開發丨合約跟單appAPP
- 現貨跟單量化/合約跟單/系統開發/量化合約交易/永續合約/秒合約解析
- 合約跟單/系統開發/現貨量化跟單/永續合約/秒合約策略
- 合約量化系統開發(詳細方案)丨合約量化系統開發(Python原始碼)Python原始碼
- 永續合約開發/秒合約/合約跟單/量化交易跟單系統技術開發丨Python示例Python
- SET智慧合約量化系統開發|秒合約量化開發搭建
- 合約量化系統開發(成熟及策略)丨合約量化開發(原始碼專案)原始碼