P[EchoBroadcast] Pi (1)StartBroadcasti(x):↱i(⋆,x,0)WaitBroadcasti(x):x^_∙↰i(⋆,0)coni←Hash(x^_∙)↱i(⋆,coni,1)return x_∙EndBroadcasti():con^_∙↰i(⋆,1)if ∃j.con^j=coni:stop(⋆,1)F[SyncComm]⊗F[Hash]Leakage:={Hash,stop}
P[Commit] Pi xi,ri←⊥(1)SetCommiti(x):xi←x,ri$012λSetBroadcasti(Hash(xi,ri))Commiti():SendBroadcasti(⋆)WaitCommiti():return WaitBroadcasti()Openi():assert xi=⊥↱i(⋆,(xi,ri),2)WaitOpeni():c_∙←WaitCommiti()EndBroadcasti()(x^_∙,r^_∙)↰i(⋆,2)if ∃j. Hash(x^j,r^j)=cj:stop(⋆,2)return x^_∙F[Stop]⊚F[SyncComm]⊗F[Hash]Leakage:={Hash,stop}⊲P[EchoBroadcast]
\boxed{
\begin{matrix}
\colorbox{FBCFE8}{\large
$\mathscr{P}[\text{Convert}]$
}\cr
\cr
\boxed{
\small{
\begin{aligned}
&\colorbox{FBCFE8}{\large
$P_i$
}\cr
\cr
&Z\_{j i}, f_i \gets \bot\cr
\cr
&\underline{
(1)\text{SetMask}_i():
}\cr
&\enspace
f_i \xleftarrow{\$} \{ f_i \in \mathbb{F}_q[X]\_{\leq t - 1} \mid f_i(0) = 0 \\}
\cr
&\enspace
F_i \gets f_i \cdot G
\cr
&\enspace
\text{SetCommit}_i(F_i)
\cr
&\enspace
\text{Commit}_i()
\cr
\cr
&\underline{
\text{WaitMask}_i():
}\cr
&\enspace
\text{WaitCommit}_i()
\cr
\cr
&\underline{
(1)\text{Share}_i(z_i):
}\cr
&\enspace
\text{Open}_i()
\cr
&\enspace
Z_i \gets z_i \cdot G
\cr
&\enspace
\pi_i \gets \text{Prove}_i^\varphi(Z_i; z_i)
\cr
&\enspace
\Rsh_i(\star, (Z_i, \pi_i), 0)
\cr
&\enspace
\Rsh_i(\star, [z_i + f_i(j) \mid j \in [n]], 1)
\cr
\cr
&\underline{
\text{WaitShare}_i():
}\cr
&\enspace
F\_\bullet \gets \text{WaitOpen}_i()
\cr
&\enspace
(Z\_{\bullet i}, \pi\_{\bullet i}) \gets \Lsh_i(\star, 0)
\cr
&\enspace
\texttt{if } \exists j.\ \neg \text{Verify}^\varphi(\pi\_{ji}, Z_j)
\cr
&\enspace\enspace
\texttt{stop}(\star, 0)
\cr
&\enspace
x\_{\bullet i} \gets \Lsh_i(\star, 1)
\cr
&\enspace
x_i \gets \sum_j x\_{ji},\ Z \gets \sum_j Z_j, \enspace F \gets Z + \sum_j F_j
\cr
&\enspace
\texttt{if } \exists j.\ (\text{deg}(F_j) \neq t - 1 \lor F_j(0) \neq 0) \lor x_i \cdot G \neq F(i):
\cr
&\enspace\enspace
\texttt{stop}(\star, 1)
\cr
&\enspace
\texttt{return } (x_i, Z)
\cr
\cr
&\underline{
\text{Z}_i(j):
}\cr
&\enspace
\texttt{return } Z\_{ji}
\cr
\end{aligned}
}
}
\quad
\begin{matrix}
F[\text{SyncComm}]\cr
\circledcirc \cr
F[\text{Stop}]
\end{matrix}\cr
\cr
\text{Leakage} := \{\texttt{stop}\}
\end{matrix}
}
\lhd \mathscr{P}[\text{Commit}]
P[KeyShare] Pi (1)Sharei(z):zi←zfi${fi∈Fq[X]_≤t−1∣fi(0)=si}Fi←fi⋅GSetCommiti(Fi)Commiti()WaitCommiti()Openi()πi←Proveiφ(Fi(0);zi)↱i(⋆,πi,0)↱i(⋆,[fi(j)∣j∈[n]],1)F_∙←WaitOpeni()π_∙i←↰i(⋆,1)if ∃j. ¬Verifyφ(π_ji,Fj(0))stop(⋆,0)x_∙i←↰i(⋆,1)xi←j∑x_ji,F←j∑Fj(0)if ∃j. deg(Fj)=t−1∨xi⋅G=F(i):stop(⋆,3)return (xi,F(0))F[SyncComm]⊚F[Stop]Leakage:={stop}⊲P[Commit]
P[KeyGen] Pi (1)Geni():s$Fqreturn Sharei(s)⊲P[KeyShare]
P[Presign] Pi setupi←falsexi,X←⊥(1)Setupi():(xi,X)←Geni()setupi←true(1)Presigniτ():assert setupi(ai,bi,ci,A,B,C)←Triplei(τ,0)()(ki,di,kdi,K,D,KD)←Triplei(τ,1)()↱i(⋆,λ(P)⋅kdi,1)↱i(⋆,λ(P)⋅(ki+ai),2)↱i(⋆,λ(P)⋅(xi+bi),3)kd_∙↰i(⋆,1)ka_∙↰i(⋆,2)xb_∙↰i(⋆,3)kd←j∑kdjif kd⋅G=KD:stop(⋆,1)ka←j∑kajif ka⋅G=K+A:stop(⋆,2)xb←j∑xbjif xb⋅G=X+B:stop(⋆,3)R←kd1⋅Dσi←ka⋅xi−xb⋅ai+cireturn (X,R,ki,σi)F[SyncComm]⊚F[Stop]Leakage:={stop}⊲P[KeyGen]⊗P[Triple]
P[Sign] Pi setupi←false(1)Setupi():super.Setupi()setupi←true(1)Signiτ(m):assert setupi(X,R,ki,σi)←Presigniτ()si←Hash(m)⋅ki+x(R)⋅σi↱i(⋆,si,4)s_∙←↰i(⋆,4)s←j∑sjif ¬ECDSA.Verify(X,m,(R,s)):stop(⋆,4)return sF[SyncComm]⊚F[Stop]Leakage:={stop}⊲P[Presign]
P[Multiply] Pi starti←⊥(1)StartMultiplyi(a,b):starti←true∀j=i. StartMTAi(0,ij)(Flipi(a,b))∀j=i. StartMTAi(1,ij)(Flipi(b,a))(1)EndMultiplyi():assert startiwait_(i,0)∀j.(γ0_j,γ1_j)←(EndMTAi(0,ij)(),EndMTAi(1,ij)())return a⋅b+j∑(γj0+γ1_j)⊲F[MTA]n2
P[Triple] Pi (1)Triplei():fi,ei$Fq[X]_≤t−1Fi,Ei←fi⋅G,ei⋅GSetCommiti((Fi,Ei))Commiti()SetMaski()WaitCommiti()WaitMaski()Openi()πi0←Proveφ(Fi(0);fi(0))πi1←Proveφ(Ei(0);ei(0))↱i(⋆,(πi0,πi1),0)↱i(⋆,[(fi(j),ei(j))∣j∈[n]],1)(F_∙,E_∙)←WaitOpeni()(π0_∙i,π1_∙i)←↰i(⋆,1)(a_∙i,b_∙i)←↰i(⋆,1)ai←j∑a_ji,F←j∑Fj(0)bi←j∑a_ji,E←j∑Ej(0)bad0←∃j.¬Verifyφ(πj0,Fj(0))bad1←∃j.¬Verifyφ(πj1,Ej(0))if ai⋅G=E(i)∨bi⋅G=F(i)∨bad0∨bad1stop(⋆,0)Multiplyi(fi(0),ei(0))Ci←ei(0)⋅F(0)πi2←Proveψ(Ei(0),F(0),Ci;ei(0))↱i(⋆,(Ci,πi),1)(C_∙,π2_∙)↰i(⋆,1)if ∃j. ¬Verifyψ(πj2,(Ej(0),F(0),Cj))stop(⋆,1)zi←WaitMultiplyi()Sharei(zi)ci←WaitSharei(C)return (ai,bi,ci,E(0),F(0),C)F[ZK(ψ)]⊗F[SyncComm]⊚F[Stop]Leakage:={stop}⊲P[Commit]⊗P[Convert]⊗P[Multiply]
Ideal Protocols
P[IdealBroadcast] Pi (1)StartBroadcasti(x):SetBroadcasti(x)SendBroadcasti(⋆)WaitBroadcasti():x_∙←GetBroadcasti(⋆)Synci(⋆)return x_∙EndBroadcasti():WaitSynci(⋆)if BadBroadcasti():stop(⋆,1)F[Broadcast] xi,sent_ij,trap_ij←⊥(1)SetBroadcasti(x):xi←xSendBroadcasti(S):assert xi=⊥sent_ij←true (∀j∈S)GetBroadcasti(S):wait_(i,0) sent_ji (∀j∈S)return [xj∣j∈S]Trap(j,m_∙):assert ∀i. mi=⊥∨(trap_ij=⊥∧xi=⊥)trap_ij←miBadBroadcasti():return ∃j. trap_ji=⊥∧trap_ji=x_j⊗F[Sync(1)]⊗F[Stop]Leakage:={Trap,stop}
P[IdealCommit] Pi (1)SetCommiti(x):SetCommiti(x)Commiti():Commiti(⋆)WaitCommiti():WaitCommiti(⋆)Synci(⋆)Openi():Openi(⋆)WaitOpeni():WaitCommiti()WaitSynci(⋆)return WaitOpeni(⋆)F[Commit] xi,com_ij,open_ij←⊥(1)SetCommiti(x):xi←xCommiti(S):com_ij←true (∀j∈S)WaitCommiti(S):wait_(i,0)∀j∈S. com_jiOpeni(S):assert xi=⊥open_ij←true(∀j∈S)WaitOpeni(S):wait_(i,2)∀j∈S. open_jireturn x_∙⊗F[Sync(1)]⊚F[Stop]Leakage:={stop}
F[MTA] Pi a1,a2,β1,β2←⊥Δ←⊥(1)StartMTAi(a):ai←aSample():assert a1,a2,Δ=⊥if β1,β2=⊥:(β1,β2)${(β1,β2)∈Fq2∣β1+β2=a1⋅a2+Δ}(1)EndMTAi():wait_(i,0)a1,a2,Δ=⊥Sample()return βi(1)Cheat(Δ)Δ←Δ
P[IdealMultiply] Pi a,b←⊥(1)StartMultiplyi(a,b):a,b←a,ba_∙←a, b_∙←bStartMultiplyi(a_∙,b_∙)(1)EndMultiplyi():return a⋅b+EndMultiplyi()F[Multiply] a_ij,b_ij,βi,Δ←⊥(1)StartMultiplyi(a_∙,b_∙):a_i∙←a_∙, b_i∙←b_∙(1)EndMultiplyi():wait_(i,0)∀i=j. a_ij,b_ij=⊥∧Δ=⊥∧a_ii=⊥Sample()return βiSample():assert ∀i=j. a_ij,b_ij=⊥∧Δ=⊥if ∀i. βi=⊥:c←∑_i=ja_ij⋅b_ji(β1,…,βn)←{βi$Fqn∣i∑βi=c+Δ}(1)Cheat(Δ):Δ←ΔLeak(i,j):return a_ij,b_ij=⊥
F[ZK(φ)] Π[∙]←⊥Provei(b;a):assert φ(a)=bπ$012λΠ[π]←breturn πVerify(π,b):return Π[π]=⊥∧Π[π]=b
Connections
(All for negligeable epsilon, and up to t−1 malicious corruptions.)
- P[EchoBroadcast]⇝P[IdealBroadcast].
- P[Commit]⇝P[IdealCommit]
- P[KeyShare]⇝P[IdealKeyShare]
- P[KeyGen]⇝P[IdealKeyGen]
- P[Convert]⇝P[IdealConvert]
- P[Presign]⇝P[IdealPresign]
- P[Sign]⇝P[IdealSign]
- P[Multiply]⇝F[Multiply]
- P[Triple]⇝P[IdealTriple]