课堂模式

课堂展示只含定义 / 定理 / 协议 / 证明 / 关键公式等「一屏一框」;叙述性说明留在网页阅读里(展示时默认不出现)。点击任意框的 课堂展示 ↗,或按下方按钮从第一框开始;用 ← → 翻页,内容默认适配屏幕。

第 9 章 恶意安全性

学习目标

  • 掌握本章核心定义、协议步骤与安全结论。

  • 能复述协议输入/输出与理想功能,并指出图中关键步骤。

  • 理解半诚实/恶意设定下的证明思路(模拟器与归约)。

本章,我们介绍恶意安全的协议。 我们首先介绍GMW编译器 [Gol et al., 1987]。这是一个通用的编译器,它使用零知识证明技术(zero-knowledge proofs) [Gol et al., 1985],可以将任意半诚实安全的协议转化为恶意安全的协议。 接着,我们介绍切分选择技术(cut-and-choose),它的思想是让某个参与方(假设为 \(P_1\))生成多个副本,然后由另一个参与方(假设为 \(P_2\))随机选择一部分副本让 \(P_1\) 打开,如果这部分都是正确的,双方才使用剩余的副本继续执行协议,从而避免 \(P_1\) 做出违背协议的行为。使用切分选择技术使姚氏混淆电路协议获得恶意安全性,是切分选择的一个典型应用。 接下来我们介绍恶意安全的BGW协议。在Ben-Or,Goldwasser,Wigderson(BGW)的论文 [Ben et al., 1988]中,对于半诚实敌手和恶意敌手分别设计了协议,而「BGW协议(半诚实安全)」一节介绍的是半诚实安全的协议。恶意安全的BGW协议使用了可验证秘密分享(verifiable secret sharing),对于 \(t < n/3\) 的(恶意的)被攻陷方,实现了完美的安全性。 最后,我们介绍BDOZ [BDOZ, 2011]和SPDZ [DPSZ, 2012]协议。它们使用了消息认证码(message authentication codes, MACs)以获得恶意安全性。

GMW编译器

GMW编译器~[Gol et al., 1987]

使用零知识证明技术~[Gol et al., 1985],可以将任意的半诚实安全的协议转化为恶意安全的协议。零知识证明是密码学中的一个重要工具,它可以让证明者(prover)向验证者(verifier)证明某个陈述(statement)为真,但不泄露陈述的正确性以外的任何信息。这个工具乍一看可能会令读者感到非常神奇和神秘,我们先通过一个简单的例子来带领读者了解零知识证明。

一个零知识证明的例子。形式化地说,零知识证明是一个两方协议,其中一方为证明者,另一方为验证者。证明者希望证明某个陈述为真。我们将这个陈述记为 \(x\). 在数学上,陈述为真意味着存在见证(witness) \(w\),满足 \(\mathcal{R}(x, w) = 1\),其中 \(\mathcal{R}\) 是一个二元NP关系(relation)。 而证明过程不能向验证者泄露 \(w\) 以及其他任何信息。

下面,我们给出一个零知识证明的具体例子。它的公共陈述是一个Pedersen承诺和一个Lifted ElGamal密文,证明者要证明承诺的值和加密的值是相同的。这个协议可能的具体场景是这样的:参与方首先用Pedersen承诺方案对自己的输入 \(m\) 进行承诺,然后协议的第一步需要对输入 \(m\) 加密,参与方需要证明自己遵循协议加密了承诺的值,当然,他不能泄露自己的输入。

我们在第2章已经介绍过Pedersen承诺(「承诺」一节)和ElGamal加密方案(「严格的安全性证明」一节)。简单回顾一下。首先,公共参数包括一个阶为 \(q\) 的循环群 \(\mathbb{G}\). 我们将Pedersen承诺的承诺密钥记为 \(\mathsf{ck} \in \mathbb{G}\),Pedersen承诺定义为 \(\mathsf{Com}_{\mathsf{ck}}(m) = g^m \mathsf{ck}^r\),其中 \(g\) 是群 \(\mathbb{G}\) 的生成元,\(r \leftarrow_{\$} \mathbb{Z}_q\) 是均匀随机选择的。Lifted ElGamal加密是ElGamal加密的变体。我们将公钥记为 \(\mathsf{pk}, \mathsf{pk} = g^\mathsf{sk}\). Lifted ElGamal加密定义为 \(\mathsf{Enc}_{\mathsf{pk}}(m) = (c_1, c_2) = (g^r, g^m \mathsf{pk}^r)\),其中 \(g\) 是群 \(\mathbb{G}\) 的生成元,\(r \leftarrow_{\$} \mathbb{Z}_q\) 是均匀随机选择的。不难看出,Pedersen承诺和Lifted ElGamal加密都具有加法同态的性质。此外,由于对Lifted ElGamal密文解密时需要计算 \(\mathsf{DLog}(c_2 / c_1^\mathsf{sk}) = m\),因此实际使用中 \(m\) 的值不能太大。

我们将证明者的Pedersen承诺记为 \(c, \; c = g^m \mathsf{ck}^s\);将Lifted ElGamal密文记为 \((c_1, c_2), \; (c_1, c_2) = (g^t, g^m \mathsf{pk}^t)\). 验证者对于 \(c\) 中的承诺值和 \((c_1, c_2)\) 中的加密值一无所知(根据Pedersen承诺的隐藏性和ElGamal加密的IND-CPA安全性),证明者知道 \(m, s, t\)(但不知道私钥 \(\mathsf{sk}\)),他希望证明承诺值等于加密值,并且不泄露任何额外信息(特别是不能泄露 \(m\))。

在这个场景下,陈述是所有公开的信息,包括 \((g, \mathsf{ck}, \mathsf{pk}, c, c_1, c_2)\),见证是证明者的私有信息 \(m, s, t\),关系 \(\mathcal{R}\) 的定义如下

GMW编译器 · 公式

\[\mathcal{R} = \{ ((g, \mathsf{ck}, \mathsf{pk}, c, c_1, c_2), m, s, t) \; | \; c = g^m \mathsf{ck}^s \; \wedge \; c_1 = g^t \; \wedge \; c_2 = g^m \mathsf{pk}^t \}\]

我们给出关系 \(\mathcal{R}\) 的零知识证明协议,如图 9.1所示。

关系 \(\mathcal{R}\) 的零知识证明协议

陈述:\(g, \mathsf{ck}, \mathsf{pk}, c, c_1, c_2 \in \mathbb{G}\).

见证:\(m, s, t\) \ s.t. \ \(c = g^m \mathsf{ck}^s \; \wedge \; c_1 = g^t \; \wedge \; c_2 = g^m \mathsf{pk}^t\).

协议:

证明者 \(P\) 执行如下操作:

  • \(m', s', t' \leftarrow_{\$} \mathbb{Z}_q\);

  • 计算 \(a_1 = g^{m'} \mathsf{ck}^{s'}, \; a_2 = g^{t'}, \; a_3 = g^{m'} \mathsf{pk}^{t'}\);

  • \(P \rightarrow V: a_1, a_2, a_3\).

验证者 \(V\) 执行如下操作:

  • \(e \leftarrow_{\$} \mathbb{Z}_q\);

  • \(V \rightarrow P: e\).

证明者 \(P\) 执行如下操作:

  • 计算 \(z_1 = m' + e \cdot m, \; z_2 = s' + e \cdot s, \; z_3 = t' + e \cdot t\);

  • \(P \rightarrow V: z_1, z_2, z_3\).

验证者 \(V\) 验证以下等式是否成立,如果都成立,则输出1(表示接受),否则输出0(表示拒绝):

  • \(g^{z_1} \mathsf{ck}^{z_2} \stackrel{?}{=} a_1 \cdot c^e\);

  • \(g^{z_3} \stackrel{?}{=} a_2 \cdot c_1^e\);

  • \(g^{z_1} \mathsf{pk}^{z_3} \stackrel{?}{=} a_3 \cdot c_2^e\).

零知识证明需要满足三个性质:完备性(completeness),可靠性(soundness)和零知识性(zero-knowledge)。完备性指的是:如果证明者和验证者都是诚实的,那么验证者接受证明的概率为1;可靠性指的是:如果验证者接受了证明者的证明,那么(以压倒性的概率)陈述为真;零知识性指的是:验证者不能获得除了陈述为真以外的任何信息。

我们发现,图 9.1的协议分为3步:证明者先发送初始消息 \(a = (a_1, a_2, a_3)\),验证者再发送随机值 \(e\),然后证明者发送回答消息 \(z = (z_1, z_2, z_3)\). 其中,验证者发送的消息是随机值,与证明者发送的消息无关。如果零知识证明协议中验证者的消息都是均匀随机选取的,那么它被称为公共硬币(public-coin)的协议。 像图 9.1这类3步的公共硬币零知识证明协议被称为Sigma协议(Sigma protocols)。 下面,我们形式化地定义Sigma协议以及它的完备性、可靠性、零知识性。

定义

Sigma协议是一类3步公共硬币证明系统。对于关系 \(\mathcal{R}\) 的Sigma协议由三个算法 \((\mathcal{C}, \mathcal{Z}, \mathcal{V})\) 组成,且满足下述定义的完备性、2-特殊可靠性(2-special soundness)、诚实验证者零知识性(special honest verifier zero-knowledge):

  • \(a \leftarrow \mathcal{C}(x, w; r)\):该算法以陈述 \(x\)、见证 \(w\) 和随机硬币 \(r\) 作为输入,输出初始消息 \(a\).

  • \(z \leftarrow \mathcal{Z}(x, w, r, e)\):该算法以陈述 \(x\)、见证 \(w\)、随机硬币 \(r\) 以及挑战值 \(e \in \{0, 1\}^\lambda\) 作为输入,输出回答消息 \(z\).

  • \(0/1 \leftarrow \mathcal{V}(x, a, e, z)\):该算法以陈述 \(x\)、初始消息 \(a\)、挑战值 \(e\) 以及回答消息 \(z\) 作为输入,输出0或1分别代表拒绝或接受。

  • 完备性:对于所有 \((x, w) \in \mathcal{R}, \; e \in \{0, 1\}^\lambda\),有

    \[\Pr[a \leftarrow \mathcal{C}(x, w; r); \; z \leftarrow \mathcal{Z}(x, w, r, e): \mathcal{V}(x, a, e, z) = 1] = 1\]
  • 2-特殊可靠性:存在确定性多项式时间提取器 \(\mathcal{X}\),使得对任意PPT的敌手 \(\mathcal{A}\) 都有

    \[\Pr \left[ \begin{array}{l} (x, a) \leftarrow \mathcal{A}(1^\lambda); \; e, e' \leftarrow_{\$} \{0, 1\}^\lambda; \\ z, z' \leftarrow \mathcal{A}(e, e'); \; w \leftarrow \mathcal{X}(x, a, \{e, z\}, \{e', z'\}) \end{array}: \begin{array}{l} e \neq e' \; \wedge \; \mathcal{V}(x, a, e, z) = 1 \; \wedge \\ \mathcal{V}(x, a, e', z') = 1 \; \wedge \; (x, w) \notin \mathcal{R} \end{array} \right] = 0\]
  • 诚实验证者零知识性:存在PPT的算法 \(\mathcal{S}\),使得对任意PPT的敌手 \(\mathcal{A}\) 都有

    \[\begin{aligned} & \Pr[(x, e) \leftarrow \mathcal{A}(1^\lambda); \; a \leftarrow \mathcal{C}(x, w; r); \; z \leftarrow \mathcal{Z}(x, w, r, e): \mathcal{A}(a, z) = 1] \\ \approx & \Pr[(x, e) \leftarrow \mathcal{A}(1^\lambda); (a, z) \leftarrow \mathcal{S}(x, e): \mathcal{A}(a, z) = 1] \end{aligned}\]
    其中 \(r\) 是均匀随机选取的,\(\mathcal{A}\) 输出的值必须满足 \((x, w) \in \mathcal{R}\) 和 \(e \in \{0, 1\}^\lambda\).

完备性很容易理解:在证明者和验证者都诚实执行协议的情况下,验证者接受证明的概率为1. 2-特殊可靠性的直观含义是:给定陈述 \(x\),如果对于同一个初始消息 \(a\),有两组可以通过验证的会话 \((a, e, z)\) 和 \((a, e', z')\),那么提取器 \(\mathcal{X}\) 就能够提取出见证 \(w\). 换句话说,我们可以构造这样的提取器,它先与证明者 \(P\) 执行协议,得到 \((a, e, z)\),再将 \(P\) 倒带(rewind)到第2步,发送一个新的挑战值 \(e'\),得到第二组会话 \((a, e', z')\),即可提取出见证 \(w\). 诚实验证者零知识性要求存在一个模拟器 \(\mathcal{S}\),给定挑战值 \(e\),\(\mathcal{S}\) 需要在不知道见证 \(w\) 的情况下模拟协议会话 \((a, e, z)\),且与真实的协议会话不可区分。因为 \(\mathcal{S}\) 不知道 \(w\),但可以模拟出与真实会话不可区分的协议会话,那么我们可以知道:真实的协议会话不会泄露 \(w\).

从模拟器 \(\mathcal{S}\) 的定义中,我们可以看出消息顺序的微妙之处。在实际执行协议时,证明者必须先发送初始消息 \(a\),再接收随机挑战值 \(e\),最后发送回答消息 \(z\);而模拟器是先知道了挑战值 \(e\),再模拟出消息 \(a\) 和 \(z\). 也就是说,证明者在发送初始消息 \(a\) 的时候必须不知道挑战值 \(e\),协议才有可靠性;而如果先知道了挑战值 \(e\),模拟器就可以在不知道见证 \(w\) 的情况下模拟出协议会话 \((a, e, z)\),这体现了协议的零知识性。

下面,我们证明图 9.1中的协议的安全性。

定理

图 9.1中的协议是对关系 \(\mathcal{R}\) 的Sigma协议,满足完备性、2-特殊可靠性、诚实验证者零知识性。

GMW编译器 · 证明

首先证明完备性。当证明者和验证者均诚实执行协议时,有

\[\begin{aligned} & a_1 \cdot c^e = g^{m'} \mathsf{ck}^{s'} \cdot (g^m \mathsf{ck}^s)^e = g^{m' + e \cdot m} \mathsf{ck}^{s' + e \cdot s} = g^{z_1} \mathsf{ck}^{z_2} \\ & a_2 \cdot (c_1)^e = g^{t'} \cdot (g^t)^e = g^{t' + e \cdot t} = g^{z_3} \\ & a_3 \cdot (c_2)^e = g^{m'} \mathsf{pk}^{t'} \cdot (g^m \mathsf{pk}^t)^e = g^{m' + e \cdot m} \mathsf{pk}^{t' + e \cdot t} = g^{z_1} \mathsf{pk}^{z_3} \end{aligned}\]

完备性得证。

接着证明2-特殊可靠性。如果对于初始消息 \(a_1, a_2, a_3\),有 \((e, z_1, z_2, z_3)\) 和 \((e', z'_1, z'_2, z'_3)\) 都能通过验证,根据验证等式,有

\[g^{z_1} \mathsf{ck}^{z_2} = a_1 \cdot c^e\]
\[g^{z_3} = a_2 \cdot c_1^e\]
\[g^{z_1} \mathsf{pk}^{z_3} = a_3 \cdot c_2^e\]
\[g^{z'_1} \mathsf{ck}^{z'_2} = a_1 \cdot c^{e'}\]
\[g^{z'_3} = a_2 \cdot c_1^{e'}\]
\[g^{z'_1} \mathsf{pk}^{z'_3} = a_3 \cdot c_2^{e'}\]

将式(式 9.1)除以式(式 9.4),得到

\[g^{z_1-z'_1} \mathsf{ck}^{z_2-z'_2} = c^{e-e'}\]

即

\[c = g^{(z_1-z'_1)(e-e')^{-1}} \mathsf{ck}^{(z_2-z'_2)(e-e')^{-1}}\]

同理,将式(式 9.2)除以式(式 9.5),得到

\[g^{z_3-z'_3} = c_1^{e-e'}\]

即

\[c_1 = g^{(z_3-z'_3)(e-e')^{-1}}\]

最后,将式(式 9.3)除以式(式 9.6),得到

\[g^{z_1-z'_1} \mathsf{pk}^{z_3-z'_3} = c_2^{e-e'}\]

即

\[c_2 = g^{(z_1-z'_1)(e-e')^{-1}} \mathsf{pk}^{(z_3-z'_3)(e-e')^{-1}}\]

由式(式 9.7)、式(式 9.8)和式(式 9.9),我们提取出了见证 \(m = (z_1-z'_1)(e-e')^{-1}, s = (z_2-z'_2)(e-e')^{-1}, t = (z_3-z'_3)(e-e')^{-1}\) 满足 \(c = g^m \mathsf{ck}^s \; \wedge \; c_1 = g^t \; \wedge \; c_2 = g^m \mathsf{pk}^t\).

最后证明诚实验证者零知识性。我们需要构造算法 \(\mathcal{S}\),给定挑战值 \(e\),输出 \((a_1, a_2, a_3, z_1, z_2, z_3)\),使得 \((a_1, a_2, a_3, e, z_1, z_2, z_3)\) 与真实会话不可区分。\(\mathcal{S}\) 的构造如下。它的输入是挑战值 \(e\),它均匀随机选取 \(z_1, z_2, z_3 \leftarrow_{\$} \mathbb{Z}_q\),然后计算 \(a_1 = \frac{g^{z_1} \mathsf{ck}^{z_2}}{c^e}, \; a_2 = \frac{g^{z_3}}{c_1^e}, \; a_3 = \frac{g^{z_1} \mathsf{pk}^{z_3}}{c_2^e}\),然后输出 \((a_1, a_2, a_3, z_1, z_2, z_3)\). 下面我们论证 \(\mathcal{S}\) 模拟的会话与真实会话有相同的分布。首先,无论是模拟的会话还是真实会话,\(e\) 都是均匀随机值。\(\mathcal{S}\) 模拟的会话中,\(z_1, z_2, z_3\) 是均匀随机选取的,真实协议中,\(z_1 = m' + e \cdot m, \; z_2 = s' + e \cdot s, \; z_3 = t' + e \cdot t\),由于 \(m', s', t'\) 是均匀随机选取的,所以真实会话中的 \(z_1, z_2, z_3\) 也是均匀随机值。最后,根据验证等式 \(g^{z_1} \mathsf{ck}^{z_2} = a_1 \cdot c^e, \; g^{z_3} = a_2 \cdot c_1^e, \; g^{z_1} \mathsf{pk}^{z_3} = a_3 \cdot c_2^e\),在给定 \(e\) 和 \(z_1, z_2, z_3\) 的情况下,\(a_1, a_2, a_3\) 的值也唯一确定。故 \(\mathcal{S}\) 模拟的会话与真实会话有相同的分布。

证毕。

从这个简单的例子可以看出,零知识证明确实是可以构造的,它并不神秘。实际上,对于任意的NP关系,都存在零知识证明协议 [Gol et al., 1986]。因此,在安全多方计算中,参与方也可以通过零知识证明协议来证明自己诚实地遵循协议执行。

GMW编译器。给定一个半诚实安全的协议 \(\Pi\),GMW编译器将其转化为恶意安全的协议 \(\Pi'\). \(\Pi'\) 的执行过程如下。

  1. 输入承诺:每个参与方对自己的输入值进行承诺。即参与方 \(P_i\) 计算承诺值 \(c_i = \mathsf{Com}(x_i, \rho_i)\),其中 \(x_i\) 是 \(P_i\) 的输入,\(\rho_i\) 是随机数。\(P_i\) 将 \(c_i\) 公开。

  2. 抛硬币:每个参与方 \(P_i\) 均匀选择随机数 \(r_{i, i}\) 并承诺,将承诺公开。其他参与方 \(P_j, \; j \neq i\) 均匀选择随机数 \(r_{i, j}\) 并承诺。所有参与方完成承诺后,\(P_j, \; j \neq i\) 将 \(r_{i, j}\) 打开。协议执行过程中,\(P_i\) 使用 \(r_i = \bigoplus\limits_{j=1}^n r_{i, j}\) 作为随机数。这样的构造使得只要有一个参与方是诚实的,那么 \(r_i\) 就是均匀随机的。

  3. 执行协议:在协议执行过程中,当参与方 \(P_i\) 发送消息时,通过零知识证明协议证明该消息是使用 \(x_i\) 为输入,\(r_i\) 为随机数,诚实地遵循协议执行得到的。

GMW编译器给出了一个理论上完美的结论:任何半诚实安全的协议都可以转化为恶意安全的协议。但是,使用这样的通用方法得到的协议往往运行效率较低,不适用于实际场景。

切分选择

直观思想

姚氏混淆电路协议对于半诚实的敌手是安全的,但是无法抵御恶意敌手。具体而言,协议中电路生成方 \(P_1\) 需要为电路 \(\mathcal{C}\) 生成混淆电路,恶意的 \(P_1\) 可以生成另一个电路 \(\mathcal{C}'\) 的混淆电路并发送给 \(P_2\). 对 \(\mathcal{C}'\) 求值可能会泄露额外的信息,甚至直接泄露 \(P_2\) 的输入!

切分选择(cut-and-choose)技术(注:cut-and-choose这个名称,最初类比的是互不信任的双方公平地分蛋糕的方法 [Brassard et al., 1988]:一方将蛋糕切为两块(cut),另一方选择自己的那份(choose)。姚氏混淆电路协议cut-and-choose的过程与分蛋糕已经有所不同。)的基本思想是:\(P_1\) 对电路 \(\mathcal{C}\) 生成多个混淆电路的副本,然后 \(P_2\) 随机选择一部分要求 \(P_1\) 打开。只要有一个被打开的电路是错误的,\(P_2\) 就知道 \(P_1\) 在作弊,协议中止。如果打开的电路都是正确的,那么 \(P_1\) 和 \(P_2\) 使用未被打开的电路继续执行协议,此时,\(P_2\) 有信心认为未被打开的电路大多数是正确的。

如果电路的计算结果不一致?当 \(P_1\) 和 \(P_2\) 使用切分选择技术执行协议时,假设 \(P_1\) 打开的电路全部都是正确的,那么他们将继续执行协议,对所有未打开的电路进行计算。此时,有两种可能的情况:(1) 所有电路的计算结果都一致;(2) 电路的计算结果不一致。对于情况1,\(P_2\) 可以将这个结果作为协议的输出发送给 \(P_1\). 对于情况2,出现不一致的计算结果的唯一可能就是 \(P_1\) 在作弊,我们的第一反应也许是:\(P_2\) 应该立刻中止协议。

然而,这样做是不安全的,\(P_1\) 有如下的攻击方式。假设协议中 \(P_1\) 需要生成 \(s\) 个混淆电路,\(P_2\) 随机选择 \(s/2\) 个电路让 \(P_1\) 打开。\(P_1\) 构造一个特殊的混淆电路,当 \(P_2\) 的输入的第一个比特为1时,它会输出错误的结果,如果 \(P_2\) 的输入的第一个比特为0,那么它的输出是正确的。然后,对于其余 \(s - 1\) 个混淆电路,\(P_1\) 正确地生成。此时,当 \(P_2\) 随机选择 \(s/2\) 个电路时,这个错误的混淆电路被检测到的概率为1/2. 如果它没有被检测到,协议将继续运行,这会泄露 \(P_2\) 的输入的第一个比特:如果这个比特是1,电路将出现不一致的计算结果,\(P_2\) 将中止协议;如果这个比特是0,\(P_2\) 将完成协议运行。也就是说,\(P_1\) 有1/2的概率可以获得 \(P_2\) 的输入的第一个比特。

直观思想 · 公式

这个例子告诉我们,即使 \(P_2\) 知道 \(P_1\) 在作弊,他也不能直接中止协议,而是应该输出大多数电路的计算结果。我们来计算一下此时 \(P_1\) 攻击成功的概率。假设 \(P_1\) 生成 \(s\) 个混淆电路,\(P_2\) 随机选择 \(s/2\) 个电路让 \(P_1\) 打开。我们将打开的电路全部正确记为事件noAbort,将计算的电路有一半或更多错误电路记为事件badMaj,将错误电路的数量记为badTotal. 那么,当打开的 \(s/2\) 个电路全都正确且计算的 \(s/2\) 个电路有一半或更多错误的概率为

\[\begin{aligned} \Pr[\text{noAbort} \; \wedge \; \text{badMaj}] & = \sum\limits_{i=s/4}^{s/2} \Pr[\text{noAbort} \; \wedge \; \text{badTotal} = i] \leq \sum\limits_{i=s/4}^{s/2} \frac{ \displaystyle \binom{s-i}{s/2} }{ \displaystyle \binom{s}{s/2} } = \frac{1}{ \displaystyle \binom{s}{s/2} } \sum\limits_{i=s/4}^{s/2} \binom{s-i}{s/2} \\ & = \frac{1}{ \displaystyle \binom{s}{s/2} } \sum\limits_{i=0}^{s/4} \binom{s/2+i}{s/2} = \frac{1}{ \displaystyle \binom{s}{s/2} } \sum\limits_{i=0}^{3s/4} \binom{i}{s/2} = \frac{1}{ \displaystyle \binom{s}{s/2} } \binom{3s/4+1}{s/2+1} \end{aligned}\]

直观思想 · 公式

其中,倒数第二个等号是因为当 \(i < s/2\) 时,\(\binom{i}{s/2} = 0\). 最后一个等号是因为 \(\sum\limits_{k=0}^n \binom{k}{m} = \binom{n+1}{m+1}\),这个公式的证明参见书 [GKP, 1994],第174页。接下来,我们推导其上界。

\[\begin{aligned} \frac{ \displaystyle \binom{\frac{3s}{4}+1}{\frac{s}{2}+1} }{ \displaystyle \binom{s}{\frac{s}{2}} } & = \frac{ (\frac{3s}{4} + 1)! }{ (\frac{s}{2} + 1)! (\frac{s}{4})! } \cdot \frac{ (\frac{s}{2})! (\frac{s}{2})! }{s!} = \frac{ (\frac{3s}{4} + 1)! }{s!} \cdot \frac{(\frac{s}{2})!}{(\frac{s}{4})!} \cdot \frac{(\frac{s}{2})!}{(\frac{s}{2} + 1)!} \\ & = \frac{ (\frac{s}{2}) (\frac{s}{2} - 1) \cdots (\frac{s}{4} + 1) }{ s (s - 1) \cdots (\frac{3s}{4} + 2) } \cdot \frac{1}{ (\frac{s}{2} + 1) } \\ & = \frac{ (\frac{s}{2}) }{s} \cdot \frac{ (\frac{s}{2} - 1) }{s - 1} \cdots \frac{ (\frac{s}{4} + 2) }{ (\frac{3s}{4} + 2) } \cdot \frac{ (\frac{s}{4} + 1) }{ (\frac{s}{2} + 1) } \end{aligned}\]

直观思想 · 公式

令 \(t = s/4\),上式等于

\[\frac{2t}{4t} \cdot \frac{2t - 1}{4t - 1} \cdots \frac{t + 2}{3t + 2} \cdot \frac{t + 1}{2t + 1} = \left( \prod\limits_{i=2}^t \frac{t + i}{3t + i} \right) \cdot \frac{t + 1}{2t + 1}\]

直观思想 · 公式

对于所有的 \(i < t\),都有 \(\frac{t + i}{3t + i} < \frac{1}{2}\),故上式的上界为 \(\frac{1}{2^{t-1}}\),因此我们有

\[\Pr[\text{noAbort} \; \wedge \; \text{badMaj}] < \frac{1}{2^{s/4-1}}\]

如果我们希望这个概率小于 \(2^{-40}\),只需取 \(s = 164\) 即可。

输入一致性(input consistency)。在基于切分选择技术的协议中,\(P_2\) 要对多个混淆电路的副本进行计算。我们需要确保每个混淆电路的输入是相同的,即输入一致性。\(P_2\) 的输入一致性比较容易实现:对于 \(P_2\) 的每个输入比特,\(P_1\) 和 \(P_2\) 仅执行一次OT协议一次性地发送所有混淆电路中该输入导线的密钥。但是,\(P_1\) 有可能在不同的混淆电路提供不同的输入,从而试图获取额外信息。例如,假设 \(P_1\) 和 \(P_2\) 的输入为 \(x, y \in \{0, 1\}^n\),他们希望计算 \(x\) 和 \(y\) 的内积,即 \(f(x, y) = \langle x, y \rangle = x_1 y_1 + … + x_n y_n\),其中 \(x_i\) 是 \(x\) 的第 \(i\) 位,\(y_i\) 是 \(y\) 的第 \(i\) 位。假设 \(P_1\) 和 \(P_2\) 恰好需要计算 \(n\) 个混淆电路。对于第 \(i\) 个混淆电路,\(P_1\) 将其输入的第 \(i\) 位设置为1,其余位为设置为0. 于是,\(P_2\) 计算第 \(i\) 个电路得到的结果就是 \(y_i\). 然后,\(P_2\) 输出大多数电路的结果,这将泄露 \(P_2\) 的输入中大多数比特是0还是1.

零知识证明可以解决 \(P_1\) 的输入一致性问题。一种可行(但不太高效的)方法如下:假设 \(P_1\) 生成了 \(s\) 个混淆电路。在进行切分选择检查之前,对于 \(P_1\) 的每条输入导线,\(P_1\) 对每个电路中该导线值0对应的密钥和1对应的密钥进行承诺,所有承诺值构成了“0集合”和“1集合”(“0集合”和“1集合”的大小均为 \(s\))。然后,\(P_2\) 随机选择 \(s/2\) 个电路让 \(P_1\) 打开。\(P_1\) 在打开电路的同时也打开“0集合”和“1集合”中对应电路的密钥,\(P_2\) 检查打开的电路导线值0的密钥确实在“0集合”中,导线值1的密钥确实在“1集合”中。最后,当 \(P_1\) 向 \(P_2\) 发送 \(P_1\) 的输入在未打开的电路中的密钥时,\(P_1\) 用零知识证明协议证明:这些密钥都在“0集合”中或这些密钥都在“1集合”中。不难看出,这样的构造确保了用于计算的大多数电路中,\(P_1\) 的输入是一致的。然而,证明密钥都在“0集合”中或都在“1集合”中的零知识证明协议是比较低效的,我们将在「LP11协议」一节介绍一种更高效的零知识证明构造。

选择性中止攻击(selective abort attack/selective failure attack)。现在,我们通过零知识证明确保了 \(P_1\) 的输入一致性。但是,\(P_2\) 的输入对应的密钥需要 \(P_1\) 在OT协议中提供,恶意的 \(P_1\) 可以在OT协议中提供错误的输入来获取额外信息。假设 \(w_i\) 是 \(P_2\) 的一条输入导线,它的密钥是 \(k_i^0, k_i^1\),\(P_1\) 应该将 \((k_i^0, k_i^1)\) 作为OT协议的输入(注:这里做了简化,实际上应该有 \(s/2\) 对密钥。)。但是,\(P_1\) 可以将OT协议的输入设置为 \((k_i^0, 0)\). 这样一来,如果 \(P_2\) 的这个输入比特是0,他将完成协议,不会发现任何异常;如果 \(P_2\) 的这个输入比特是1,他就没有得到对应的密钥,无法计算混淆电路,只能中止协议。\(P_1\) 通过观察 \(P_2\) 是否中止协议从而知道 \(P_2\) 的输入比特。

为了抵御选择性中止攻击,我们需要让 \(P_1\) 在执行OT协议的同时对OT协议的输入进行承诺(这种OT称为committing OT [Kiraz, 2006]),然后在进行切分选择检查时将打开的电路对应的承诺一起打开。具体而言,\(P_1\) 和 \(P_2\) 首先对 \(P_2\) 的每个输入比特执行committing OT协议。然后,\(P_1\) 发送 \(s\) 个混淆电路给 \(P_2\),\(P_2\) 随机选择 \(s/2\) 个电路让 \(P_1\) 打开。\(P_1\) 同时打开这些电路在committing OT协议中的两个输入(利用committing OT的绑定性),\(P_2\) 检查这些输入都是正确的。这样的方法可以确保 \(P_1\) 在大多数OT协议中使用了正确的输入。

\(P_1\) 的输出真实性(output authenticity)。上述方法可以确保 \(P_2\) 进行电路计算后大多数电路的输出(以压倒性的概率)是正确的。在混淆电路协议中,\(P_2\) 在最后一步将协议输出发送给 \(P_1\),在半诚实敌手模型下,这没有任何问题,但是,在恶意敌手模型下,恶意的 \(P_2\) 可以发送任意的错误输出给 \(P_1\).

需要注意的是,在恶意敌手模型下进行两方安全计算时,我们无法实现公平性(fairness) [Cleve, 1986]。也就是说,协议无法使参与双方同时获得输出,恶意的参与方可以在获得输出后停止执行协议,使诚实参与方不获得输出。以混淆电路协议为例,我们无法阻止 \(P_2\) 在获得输出后停止执行协议。但是,我们能够实现的是:如果 \(P_2\) 向 \(P_1\) 发送协议输出,\(P_1\) 可以检查输出的真实性(authenticity)。

这里采用的技术是消息认证码(message authentication codes, MACs),并且,如果我们能安全地计算任意单一输出功能 \(f(x, y)\) 使得只有 \(P_2\) 得到输出,那么我们可以基于其构造一个实现功能 \(f = (f_1, f_2)\) 的协议,其中 \(P_1\) 得到 \(f_1(x, y)\),\(P_2\) 得到 \(f_2(x, y)\).

协议构造如下。令 \(f = (f_1, f_2)\) 是一个功能。我们需要构造一个安全的协议使 \(P_1\) 得到 \(f_1(x, y)\),\(P_2\) 得到 \(f_2(x, y)\);我们有一个能够安全计算任何功能的协议,但是只有 \(P_2\) 能获得输出。令 \(\mathbb{F}\) 是包含 \(f_1\) 所有取值 \(\{f_1(x, y)\}_{x, y \in \{0, 1\}^n}\) 的域,令 \(p, a, b \leftarrow_{\$} \mathbb{F}\) 是在 \(\mathbb{F}\) 上均匀随机选取的值。定义单一输出功能 \(g\) 如下:\(g((p, a, b, x), y) = (\alpha, \beta, f_2(x, y))\),其中 \(\alpha = p + f_1(x, y), \; \beta = a \cdot \alpha + b\),运算符号 \(\langle +, \cdot \rangle\) 由域 \(\mathbb{F}\) 所定义。这里的 \(\alpha\) 是以 \(p\) 为密钥使用“一次一密”加密的密文,\(\beta\) 是 \(\alpha\) 的消息认证码。双方使用只有 \(P_2\) 能获得输出的协议计算功能 \(g\),然后 \(P_2\) 将 \((\alpha, \beta)\) 发给 \(P_1\). \(P_1\) 检查 \(\beta \stackrel{?}{=} a \cdot \alpha + b\),如果是,输出 \(\alpha - p\),否则输出 \(\bot\).

显然,“一次一密”的完美安全性保证了 \(P_2\) 不知道 \(f_1(x, y)\),而 \(P_2\) 成功伪造消息认证码 \(\beta = a \cdot \alpha + b\) 的概率为 \(1 / |\mathbb{F}|\). 回顾一下,在「独立模型」一节中,(独立模型下)对于恶意敌手的安全性定义考虑的是两个参与方都获得输出的情况。根据上述构造,我们可以使用一种更简单的等价定义,这种定义下只有一个参与方获得输出。我们在之后的协议构造和证明中,也会采用这种更简单的定义。

协议概览。综合以上所有构造,基于切分选择技术的混淆电路协议整体流程如下。

  1. \(P_1\) 生成 \(s\) 个混淆电路。

  2. 对于 \(P_2\) 的每个输入比特,\(P_1\) 和 \(P_2\) 执行committing OT协议使 \(P_2\) 获得对应的密钥。

  3. \(P_1\) 向 \(P_2\) 发送 \(s\) 个混淆电路,以及 \(P_1\) 的输入导线密钥的承诺值。

  4. \(P_2\) 随机选择 \(s/2\) 个电路让 \(P_1\) 打开。

  5. \(P_1\) 打开这些电路,同时打开这些电路在committing OT协议中的输入,打开这些电路中 \(P_1\) 的输入导线密钥的承诺。\(P_2\) 检查正确性。

  6. \(P_1\) 向 \(P_2\) 发送未打开的电路中 \(P_1\) 的输入导线密钥,并证明输入一致性。

  7. \(P_2\) 对未打开的电路进行计算,取大多数电路的计算结果为输出。

  8. (如果 \(P_1\) 也需要获得输出)\(P_2\) 向 \(P_1\) 发送 \(P_1\) 的输出和消息认证码,\(P_1\) 检查消息认证码。

上述流程是基于切分选择的协议的概览。实际上,研究人员对切分选择协议做了大量的优化 [Lin & Pin, 2007; She & She, 2011; She & She, 2013; Kreshe & She, 2012; Lin & Pin, 2011; Hua et al., 2013; Lindell, 2013; Brandao, 2013; Fre et al., 2014; AMPR, 2014]。本书将介绍Lindell和Pinkas在2011年提出的一个比较有代表性的切分选择协议 [Lin & Pin, 2011],并给出安全性证明。

LP11协议

LP11协议 [Lin & Pin, 2011]也遵循上述基本流程,但有以下两点不同:

  1. 在第2步中,LP11协议没有执行committing OT,而是引入了一个新的原语——切分选择OT(Cut-and-Choose OT, CCOT). 在切分选择OT中,发送方的输入是 \((x_1^0, x_1^1), …, (x_s^0, x_s^1)\),接收方的输入是选择比特 \(\sigma_1, …, \sigma_s\) 以及一个大小为 \(s/2\) 的集合 \(\mathcal{J} \subset [s]\). 对于 \(i \in [s]\),接收方得到 \(x_i^{\sigma_i}\)(就像普通的OT那样);对于 \(j \in \mathcal{J}\),接收方得到发送方的两个值 \((x_j^0, x_j^1)\). 发送方不能得到 \(\sigma_1, …, \sigma_s\) 和 \(\mathcal{J}\) 的任何信息。 这里的集合 \(\mathcal{J}\) 实际上就是要打开的电路的索引。切分选择OT将OT协议与切分选择检查结合在一起,有效地抵御了选择性中止攻击(实际上,切分选择OT和committing OT具有类似的作用)。

  2. LP11协议设计了更高效的零知识证明以证明 \(P_1\) 的输入一致性。假设 \(P_1\) 的输入长度为 \(\ell\) 比特,\(P_1\) 选择值 \(g^{a_1^0}, g^{a_1^1}, …, g^{a_\ell^0}, g^{a_\ell^1}\) 以及 \(g^{r_1}, …, g^{r_s}\),然后将第 \(i\) 个输入比特在第 \(j\) 个电路中的密钥设置为 \(g^{a_i^0 \cdot r_j}, g^{a_i^1 \cdot r_j}, \; i \in [\ell], \; j \in [s]\). 基于DDH假设,在已知所有的 \(\{g^{a_i^0}, g^{a_i^1}, g^{r_j}\}\) 和 \(P_1\) 的输入对应的密钥的情况下,其余密钥仍是伪随机的。这样的构造使得 \(P_1\) 的输入一致性零知识证明非常高效。

下面,我们详细介绍这两点。

切分选择OT

切分选择OT理想功能。直观地说,切分选择OT协议是一个批处理的OT协议(它能够对多对输入同时执行OT协议),但有一个额外属性:接收方可以选择一个子集,对于这个子集中的索引,接收方获得两个值。在基于切分选择的协议中,这样的构造非常自然。接收方选择的子集就是让 \(P_1\) 打开的电路的索引,接收方获得这些电路在OT协议中的两个输入,防止 \(P_1\) 进行选择性中止攻击。

图 9.15展示了切分选择OT的理想功能 \(\mathcal{F}_{\mathsf{CCOT}}\) 以及单一选择切分选择OT(single-choice cut-and-choose OT),记为 \(\mathcal{F}_{\mathsf{CCOT}}^S\). 在单一选择切分选择OT中,接收方必须在每一个OT中使用相同的选择比特 \(\sigma\)(这是为了保证切分选择协议中 \(P_2\) 的输入一致性)。

切分选择OT理想功能

切分选择OT理想功能 \(\mathcal{F}_{\mathsf{CCOT}}\):

  • 输入:
    • 发送方 \(P_s\) 的输入是 \(s\) 对消息 \(\bar{x} = \{(x_0^i, x_1^i)\}_{i=1}^s\).

    • 接收方 \(P_r\) 的输入是 \(s\) 个选择比特 \(\sigma_1, …, \sigma_s \in \{0, 1\}\) 和大小为 \(s/2\) 的集合 \(\mathcal{J} \in [s]\).

  • 输出:如果 \(\mathcal{J}\) 的大小不是 \(s/2\),\(P_s\) 和 \(P_r\) 的输出为 \(\bot\). 否则,
    • 对于 \(j \in \mathcal{J}\),接收方 \(P_r\) 获得 \((x_0^j, x_1^j)\).

    • 对于 \(j \notin \mathcal{J}\),接收方 \(P_r\) 获得 \(x_{\sigma_j}^j\).

单一选择切分选择OT理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^S\):

  • 输入:与 \(\mathcal{F}_{\mathsf{CCOT}}\) 相同,但 \(P_r\) 只有一个选择比特 \(\sigma\).

  • 输出:与 \(\mathcal{F}_{\mathsf{CCOT}}\) 相同,但对于 \(j \notin \mathcal{J}\),\(P_r\) 获得 \(x_\sigma^j\).

切分选择OT理想功能

切分选择OT构造思路。切分选择OT基于Peikert,Vaikuntanathan,Waters (PVW)的OT协议 [Pei et al., 2008]构造。PVW协议是在公共参考字符串(Common Reference String, CRS)(注:公共参考字符串是从某个分布中预先随机选择的字符串,它对协议的所有参与方公开;朴素模型(plain model)没有任何初始设置。相比于朴素模型,在公共参考字符串模型下可以构造出实现更强理想功能的协议。)模型下构造的,它的CRS是元组 \((g_0, g_1, h_0, h_1)\),其中 \(g_0\) 是一个阶为 \(q\) 的群的生成元(DDH问题在该群中是困难的),\(g_1 = (g_0)^y\),\(y\) 是一个随机数,\(h_0 = (g_0)^a, \; h_1 = (g_1)^b\) 且 \(a \neq b\). 而切分选择OT协议可以在朴素模型(plain model)下构造,这是因为协议让接收方选择元组 \((g_0, g_1, h_0, h_1)\),其中 \(h_0 = (g_0)^a, \; h_1 = (g_1)^b\),然后证明它满足 \(a \neq b\)(也就是证明它不是Diffie-Hellman元组);具体而言,协议设置 \(b = a + 1\),然后用Sigma协议证明 \((g_0, g_1, h_0, \frac{h_1}{g_1})\) 是Diffie-Hellman元组,使得该证明非常高效。

此外,当 \((g_0, g_1, h_0, h_1)\) 是Diffie-Hellman元组(即 \(a = b\))时,PVW协议的接收方可以获得发送方的两个输入。这恰恰符合切分选择OT的需要!我们让接收方选取 \(s/2\) 对满足 \(a \neq b\) 的 \((h_0, h_1)\)(他只能获得一个输入),选取 \(s/2\) 对满足 \(a = b\) 的 \((h_0, h_1)\)(他可以获得两个输入),这就构成了切分选择OT的雏形。当然,接收方需要证明有 \(s/2\) 对 \((h_0, h_1)\) 满足 \(a \neq b\),也就是需要证明 \(s\) 对 \((h_0, h_1)\) 中有一部分满足某个陈述,这是一个部分知识的证明(proof of partial knowledge),可以通过CDS组合 [Cra et al., 1994]高效地实现。下面,我们对上述思路的每一部分详细阐释。

PVW协议(的变体)。图 9.2展示了PVW协议在朴素模型下的变体。

PVW协议(朴素模型变体)

输入:发送方 \(P_s\) 的输入是 \((x_0, x_1)\),接收方 \(P_r\) 的输入是一个比特 \(\sigma\).

辅助输入:安全参数 \(1^n\) 和 \((\mathbb{G}, q, g_0)\),其中 \(\mathbb{G}\) 是一个阶为 \(q\),以 \(g_0\) 为生成元的群,\(q\) 的长度为 \(n\).

  1. 接收方 \(P_r\) 随机选择 \(y, \alpha_0 \leftarrow_{\$} \mathbb{Z}_q\),设置 \(\alpha_1 = \alpha_0 + 1\),然后计算 \(g_1 = (g_0)^y, \; h_0 = (g_0)^{\alpha_0}, \; h_1 = (g_1)^{\alpha_1}\). \(P_r\) 发送 \((g_1, h_0, h_1)\) 给 \(P_s\).

  2. \(P_r\) 使用零知识证明协议证明 \((g_0, g_1, h_0, h_1)\) 不是DH元组(\(P_r\) 实际上证明 \((g_0, g_1, h_0, \frac{h_1}{g_1})\) 是DH元组,见图 9.3)。

  3. \(P_r\) 选择随机值 \(r\) 并计算 \(g = (g_\sigma)^r, \; h = (h_\sigma)^r\). \(P_r\) 发送 \((g, h)\) 给 \(P_s\).

  4. \(P_s\) 执行如下操作:

    • 定义函数 \(\mathsf{RAND}(w, x, y, z) = (u, v)\),其中 \(u = (w)^s \cdot (y)^t, \; v = (x)^s \cdot (z)^t\),\(s, t \leftarrow_{\$} \mathbb{Z}_q\) 是均匀随机数。

    • \(P_s\) 计算 \((u_0, v_0) = \mathsf{RAND}(g_0, g, h_0, h), \; (u_1, v_1) = \mathsf{RAND}(g_1, g, h_1, h)\).

    • \(P_s\) 将 \((u_0, w_0)\) 和 \((u_1, w_1)\) 发给 \(P_r\),其中 \(w_0 = v_0 \cdot x_0, \; w_1 = v_1 \cdot x_1\).

  5. \(P_r\) 输出 \(x_\sigma = w_\sigma/(u_\sigma)^r\).

DH元组的零知识证明协议

陈述:\((\mathbb{G}, g_0, g_1, u, v)\),其中 \(\mathbb{G}\) 是一个阶为 \(q\),以 \(g_0\) 为生成元的群,\(g_0, g_1, u, v \in \mathbb{G}\).

见证:\(w \text{ s.t. } u = (g_0)^w \wedge v = (g_1)^w\).

  1. 证明者 \(P\) 随机选择 \(a \leftarrow_{\$} \mathbb{Z}_q\),计算 \(\alpha = (g_0)^a\) 并将 \(\alpha\) 发送给验证者 \(V\).

  2. \(V\) 随机选择 \(s, t \leftarrow_{\$} \mathbb{Z}_q\),计算 \(c = (g_0)^s \cdot \alpha^t\) 并将 \(c\) 发送给 \(P\).

  3. \(P\) 随机选择 \(r \leftarrow_{\$} \mathbb{Z}_q\),计算 \(A = (g_0)^r, \; B = (g_1)^r\) 并将 \((A, B)\) 发送给 \(V\).

  4. \(V\) 发送 \(s, t\) 给 \(P\).

  5. \(P\) 检查 \(c \stackrel{?}{=} (g_0)^s \cdot \alpha^t\). 如果不是,那么终止协议。如果是,\(P\) 计算 \(z = s \cdot w + r\) 并发送 \(z\) 和 \(a\) 给 \(V\).

  6. 当且仅当 \(\alpha = (g_0)^a, \; (g_0)^z = A \cdot u^s, \; (g_1)^z = B \cdot v^s\) 时,\(V\) 接受证明。

我们先分析DH元组的零知识证明协议(图 9.3)。它实质上是在Sigma协议的基础上让验证者对挑战值进行承诺,以实现(面对任意验证者的)零知识性。DH元组Sigma协议的初始消息是 \(A = (g_0)^r, \; B = (g_1)^r\),挑战值是 \(s\),回答消息是 \(z = s \cdot w + r\),验证者最后验证 \((g_0)^z \stackrel{?}{=} A \cdot u^s, \; (g_1)^z \stackrel{?}{=} B \cdot v^s\). 在此基础上,协议的第1、2步让验证者对挑战值 \(s\) 使用Pedersen承诺方案(参见「承诺」一节)进行承诺,Pedersen承诺方案的承诺密钥为 \(\alpha = (g_0)^a\) 由证明者选取;在协议的第4、5步,证明者需要额外打开Pedersen承诺(公布 \(s, t\));在协议的第6步,证明者需要额外公布承诺密钥 \(\alpha\) 的离散对数 \(a\). 这样做的目的是:Sigma协议仅满足诚实验证者零知识性(special honest verifier zero-knowledge),但对于任意的验证者,模拟器无法预知挑战值;图 9.3的协议让验证者首先对挑战值进行承诺,使协议获得了(面对任意验证者的)零知识性(注:对挑战值进行承诺,使得模拟器将验证者倒带后,得到的仍是同样的挑战值,感兴趣的读者可以参阅书 [Hazay et al., 2010], Chapter 6中完整的证明。)。

切分选择OT · 公式

接着,我们分析一下PVW协议。首先,接收方在最后一步能接收到正确的消息,因为

\[\frac{w_\sigma}{(u_\sigma)^r} = \frac{v_\sigma \cdot x_\sigma}{(u_\sigma)^r} = \frac{g^s \cdot h^t \cdot x_\sigma}{( (g_\sigma)^s \cdot (h_\sigma)^t )^r} = \frac{g^s \cdot h^t \cdot x_\sigma}{((g_\sigma)^r)^s \cdot ((h_\sigma)^r)^t} = \frac{g^s \cdot h^t \cdot x_\sigma}{g^s \cdot h^t} = x_\sigma\]

关于安全性,这基于 \(\mathsf{RAND}\) 函数的性质:如果 \(\mathsf{RAND}\) 的输入不是DH元组,那么它的输出是两个独立的均匀随机分布的群元素。因此,\((u_0, w_0)\) 和 \((u_1, w_1)\) 中有一个是均匀随机分布的,所以接收方只能获得发送方的一个输入。相反,如果 \((g_0, g_1, h_0, h_1)\) 是DH元组且接收方知道 \(y = \log_{g_0} g_1\),那么接收方可以获得发送方的两个输入。例如,对于 \(\sigma = 0\) 的情况,接收方可以首先执行协议步骤计算 \(x_0\);并且,接收方还可以计算 \(x_1 = w_1 / (u_1)^{r y^{-1}}\),这是因为

切分选择OT · 公式

\[\begin{aligned} \frac{w_1}{(u_1)^{r y^{-1}}} & = \frac{g^s \cdot h^t \cdot x_1}{( (g_1)^s \cdot (h_1)^t )^{r y^{-1}}} = \frac{g^s \cdot h^t \cdot x_1}{( (g_1)^{y^{-1}} )^{s \cdot r} \cdot ( (h_1)^{y^{-1}} )^{t \cdot r}} \\ & = \frac{g^s \cdot h^t \cdot x_1}{( (g_0)^s \cdot (h_0)^t )^r} = \frac{g^s \cdot h^t \cdot x_1}{g^s \cdot h^t} = x_1 \end{aligned}\]

同理,对于 \(\sigma = 1\) 的情况,接收方可以执行协议步骤计算 \(x_1\),并通过计算 \(w_0 / (u_0)^{ry}\) 得到 \(x_0\). 协议中,接收方需要通过零知识证明协议证明 \((g_0, g_1, h_0, \frac{h_1}{g_1})\) 是DH元组,从而确保接收方只能获得发送方的一个输入。

安全性证明需要分别考虑发送方 \(P_s\) 和接收方 \(P_r\) 被攻陷的情况。当发送方 \(P_s\) 被攻陷时,模拟器 \(\mathcal{S}\) 需要提取 \(P_s\) 的两个输入。\(\mathcal{S}\) 设置 \(\alpha_1 = \alpha_0\)(即 \((g_0, g_1, h_0, h_1)\) 是DH元组)并且“伪造”它的零知识证明,从而提取 \(P_s\) 的两个输入。当接收方 \(P_r\) 被攻陷时,模拟器 \(\mathcal{S}\) 可以提取零知识证明中的见证 \(\alpha_0\) 并计算 \(\alpha_1 = \alpha_0 + 1\). 通过检查 \(h = g^{\alpha_0}\) 还是 \(h = g^{\alpha_1}\),模拟器 \(\mathcal{S}\) 可以提取出接收方的选择比特 \(\sigma\).(注:我们对这里的“伪造证明”和“提取见证”作一点补充说明:考虑图 9.3的协议。需要“伪造证明”时,\(\mathcal{S}\) 先与验证者交互得到挑战值 \(s\),然后将验证者倒带,此时 \(\mathcal{S}\) 预先知道了 \(s\),就可以模拟出会话 \((A, B, s, z)\),它与真实会话不可区分(参考定理 9.1的证明)。需要“提取见证”时,\(\mathcal{S}\) 先与证明者交互得到会话 \((A, B, s, z)\),然后将证明者倒带,将挑战值换成 \(s'\),得到会话 \((A, B, s', z')\),基于2-特殊可靠性,可以提取见证 \(w\)(参考定理 9.1的证明),同时,因为在第一次与证明者交互时获得了 \(\alpha\) 的离散对数 \(a\),所以 \(\mathcal{S}\) 在第二次交互时可以将Pedersen承诺 \(c\) 打开为 \(s'\).)

证明某个子集是DH元组(CDS组合)。之前讲到,在切分选择OT中,接收方需要构造 \(s\) 对 \((h_0, h_1)\),并证明有 \(s/2\) 对不是DH元组。证明“不是DH元组”较为困难,接收方实际上证明 \((g_0, g_1, h_0, \frac{h_1}{g_1})\) 是DH元组。也就是说,接收方首先构造 \(\{(h_0^j, h_1^j)\}_{j \in [s]}\),然后证明有 \(s/2\) 个元组 \((g_0, g_1, h_0^j, \frac{h_1^j}{g_1})\) 是DH元组。为了符号的简洁,我们可以将接收方构造的元组记为 \(\{(h_0^j, \tilde{h}_1^j)\}_{j \in [s]}\),令 \(h_1^j = \frac{\tilde{h}_1^j}{g_1}\). 于是,我们需要构造关系 \(\mathcal{R}\) 的零知识证明来证明某个子集是DH元组,其中

切分选择OT · 公式

\[\mathcal{R} = \left\{ \begin{array}{l} ((\mathbb{G}, g_0, g_1, (h_0^1, h_1^1), \dots, (h_0^s, h_1^s)), \{(i_j, w_{i_j})\}) \end{array} \middle| \begin{array}{l} i_j \text{ 互不相同,将 } \; i_j \text{ 的集合记为 } \; I, \; | I | = s/2 \\ \text{且对每个 } \; i_j \in I \text{ 有 } \; h_0^{i_j} = (g_0)^{w_{i_j}}, h_1^{i_j} = (g_1)^{w_{i_j}} \end{array} \right\}\]

我们刚才已经构造了DH元组的零知识证明(图 9.3)。现在,我们需要证明某个大小为 \(s/2\) 的子集是DH元组,并且不泄漏这个子集。这里采用的方法是Cramer,Damgård,Schoenmakers提出的CDS组合 [Cra et al., 1994]。CDS组合将Sigma协议与秘密分享相结合,构成了部分知识的证明(proof of partial knowledge)。协议如图 9.4所示。

子集是DH元组的零知识证明协议

\(\small\)

陈述:\((\mathbb{G}, g_0, g_1, (h_0^1, h_1^1), …, (h_0^s, h_1^s))\),其中 \(\mathbb{G}\) 是一个阶为 \(q\),以 \(g_0\) 为生成元的群。

见证:\(W = \{(i_j, w_{i_j})\} \text{ 满足 } \; i_j \text{ 互不相同,将 } \; i_j \text{ 的集合记为 } I, \; | I | = s/2 \text{ 且对每个 } \; i_j \in I \text{ 有 } \; h_0^{i_j} = (g_0)^{w_{i_j}}, h_1^{i_j} = (g_1)^{w_{i_j}}\).

  1. 验证者对挑战值承诺:
    1. 证明者 \(P\) 随机选择 \(a \leftarrow_{\$} \mathbb{Z}_q\),计算 \(\alpha = (g_0)^a\) 并将 \(\alpha\) 发送给验证者 \(V\).

    2. \(V\) 随机选择 \(t, c \leftarrow_{\$} \mathbb{Z}_q\),计算 \(C = (g_0)^c \cdot \alpha^t\) 并将 \(C\) 发送给 \(P\).

  2. 证明者发送第1条消息:
    1. 对于 \(i \notin I\),\(P\) 随机选择 \(c_i, z_i \leftarrow_{\$} \mathbb{Z}_q\) 并计算 \(A_i = \frac{(g_0)^{z_i}}{(h_0^i)^{c_i}}, \; B_i = \frac{(g_1)^{z_i}}{(h_1^i)^{c_i}}\).

    2. 对于 \(i \in I\),\(P\) 随机选择 \(\rho_i \leftarrow_{\$} \mathbb{Z}_q\) 并计算 \(A_i = (g_0)^{\rho_i}, B_i = (g_1)^{\rho_i}\).

    3. \(P\) 发送 \((A_1, B_1), …, (A_s, B_s)\) 给 \(V\).

  3. 验证者打开挑战值:
    1. \(V\) 发送 \(t, c\) 给 \(P\).

  4. 证明者发送第2条消息:
    1. \(P\) 检查 \(C \stackrel{?}{=} (g_0)^c \cdot \alpha^t\). 如果不是,那么终止协议。如果是,\(P\) 将 \(c\) 作为挑战值。

    2. 将 \(\{c_i\}_{i \notin I}\) 和 \(c\) 视为 \((s/2, s)\)-门限秘密分享的秘密份额和秘密值。它们唯一定义了其他的秘密份额。证明者计算出所有份额 \(c_1, …, c_s\).

    3. 对于 \(i \notin I\),\(z_i\) 为步骤 \(2(\text{a})\) 中选择的 \(z_i\).

    4. 对于 \(i \in I\),计算 \(z_i = c_i \cdot w_i + \rho_i\).

    5. \(P\) 发送 \((c_1, z_1), …, (c_s, z_s)\) 和步骤 \(1(\text{a})\) 中选择的 \(a\) 给 \(V\).

  5. 验证者进行验证:当且仅当以下等式成立时,\(V\) 接受证明:
    1. \(\alpha = g^a\)

    2. \(c_1, …, c_s\) 是 \(c\) 合法的秘密份额

    3. 对于 \(i \in [s]\),\(A_i = \frac{(g_0)^{z_i}}{(h_0^i)^{c_i}}, \; B_i = \frac{(g_1)^{z_i}}{(h_1^i)^{c_i}}\)

协议中执行了 \(s\) 个DH元组的零知识证明的实例,但实际上只有 \(s/2\) 个元组是DH元组。对于这 \(s/2\) 个元组,证明者正常地执行DH元组的零知识证明协议;对于另外 \(s/2\) 个元组,证明者调用模拟器的算法模拟协议的会话,但这需要证明者先知道挑战值。为此,CDS组合巧妙地与秘密分享相结合:将验证者的总挑战值 \(c\) 看作秘密,将子挑战值 \(c_1, …, c_s\) 看作秘密份额。如果采用的是 \((s/2, s)\)-门限秘密分享方案,那么证明者可以自由选择 \(s/2\) 个秘密份额,从而模拟这些实例的会话;如果证明者自由选择了超过 \(s/2\) 个秘密份额,那么这些秘密份额就已经决定了秘密值 \(c\),它恰好与验证者随机选择的挑战值相等的概率是可忽略的。因此,上述协议具有可靠性。同时,模拟的协议会话和真实的协议会话不可区分,因此验证者无法知道哪些实例是DH元组,哪些实例是模拟的,确保了协议的零知识性。

切分选择OT的构造。至此,我们介绍了切分选择OT的所有子部件。我们给出切分选择OT协议的描述,如图 9.5所示。

切分选择OT协议

公共输入:\((\mathbb{G}, q, g_0)\),其中 \(\mathbb{G}\) 是一个阶为 \(q\),以 \(g_0\) 为生成元的群。\(q\) 的长度为 \(n\).

输入:发送方 \(P_s\) 的输入是 \(\{x_0^j, x_1^j\}_{j \in [s]}\);接收方 \(P_r\) 的输入是 \(s\) 个比特 \(\sigma_1, …, \sigma_s\) 和一个大小为 \(s/2\) 的集合 \(\mathcal{J}, \; \mathcal{J} \subset [s]\).

协议:

  • 准备阶段:
    1. 接收方 \(P_r\) 随机选择 \(y \leftarrow_{\$} \mathbb{Z}_q\) 并计算 \(g_1 = (g_0)^y\).

    2. 对于 \(j \in \mathcal{J}\),\(P_r\) 随机选择 \(\alpha_j \leftarrow_{\$} \mathbb{Z}_q\) 并计算 \(h_0^j = (g_0)^{\alpha_j}, \; h_1^j = (g_1)^{\alpha_j}\).

    3. 对于 \(j \notin \mathcal{J}\),\(P_r\) 随机选择 \(\alpha_j \leftarrow_{\$} \mathbb{Z}_q\) 并计算 \(h_0^j = (g_0)^{\alpha_j}, \; h_1^j = (g_1)^{\alpha_j + 1}\).

    4. \(P_r\) 发送 \((g_1, h_0^1, h_1^1, …, h_0^s, h_1^s)\) 给 \(P_s\).

    5. \(P_r\) 通过零知识证明向 \(P_s\) 证明 \(s/2\) 个 \((g_0, g_1, h_0^j, h_1^j)\) 不是DH元组(\(P_r\) 实际上证明 \(s/2\) 个 \((g_0, g_1, h_0^j, \frac{h_1^j}{g_1})\) 是DH元组,见图 9.4。

  • 传输阶段:对于 \(j \in [s]\),执行以下操作(可以并行执行):
    1. \(P_r\) 随机选择 \(r_j \leftarrow_{\$} \mathbb{Z}_q\) 并计算 \(\tilde{g}_j = (g_{\sigma_j})^{r_j}, \; \tilde{h}_j = (h_{\sigma_j}^j)^{r_j}\). \(P_r\) 发送 \((\tilde{g}_j, \tilde{h}_j)\) 给 \(P_s\).

    2. \(P_s\) 执行以下操作:

      • 定义函数 \(\mathsf{RAND}(w, x, y, z) = (u, v)\),其中 \(u = (w)^s \cdot (y)^t, \; v = (x)^s \cdot (z)^t\),\(s, t \leftarrow_{\$} \mathbb{Z}_q\) 是随机数。

      • \(P_s\) 计算 \((u_0^j, v_0^j) = \mathsf{RAND}(g_0, \tilde{g}_j, h_0^j, \tilde{h}_j), \; (u_1^j, v_1^j) = \mathsf{RAND}(g_1, \tilde{g}_j, h_1^j, \tilde{h}_j)\).

      • \(P_s\) 将 \((u_0^j, w_0^j)\) 和 \((u_1^j, w_1^j)\) 发给 \(P_r\),其中 \(w_0^j = v_0^j \cdot x_0^j, \; w_1^j = v_1^j \cdot x_1^j\).

  • 输出阶段:
    1. 对于 \(j \in [s]\),\(P_r\) 计算 \(x_{\sigma_j}^j = \frac{w_{\sigma_j}^j}{(u_{\sigma_j}^j)^{r_j}}\).

    2. 对于 \(j \in \mathcal{J}\),\(P_r\) 计算 \(x_{1-\sigma_j}^j = \frac{w_{1-\sigma_j}^j}{(u_{1-\sigma_j}^j)^{r_j \cdot z_j}}\),其中,当 \(\sigma_j = 0\) 时 \(z_j = y^{-1} \mod q\),当 \(\sigma_j = 1\) 时 \(z_j = y\).

定理

假设DDH问题在群 \(\mathbb{G}\) 中是困难的。图 9.5中的协议对于静态恶意敌手安全实现了理想功能 \(\mathcal{F}_{\mathsf{CCOT}}\)(图 9.15)。

注意,这里的“安全实现”考虑的是独立模型。根据前文所述的思路,模拟器 \(\mathcal{S}\) 的构造非常直接。当发送方 \(P_s\) 被攻陷时,\(\mathcal{S}\) 模拟接收方构造 \(s\) 对 \(\{(h_0^j, h_1^j)\}_{j \in [s]}\),它们全都是DH元组,然后“伪造”零知识证明,从而提取 \(P_s\) 的两个输入。当接收方 \(P_r\) 被攻陷时,\(\mathcal{S}\) 从 \(P_r\) 的零知识证明中提取出见证,从而提取出集合 \(\mathcal{J}\) 和 \(\{\sigma_j\}_{j \notin \mathcal{J}}\). 这里不再给出完整的证明,留作读者练习(注:如果读者在证明时遇到问题,本书的前言中有我的邮箱,欢迎与我交流。)。

单一选择切分选择OT. 如果我们希望接收方在所有OT实例中使用同样的选择比特 \(\sigma\),很自然地,图 9.5中的协议中传输阶段的第1步应该修改为:

切分选择OT

\(P_r\) 随机选择 \(r \leftarrow_{\$} \mathbb{Z}_q\) 并计算 \(g' = (g_\sigma)^r\). 对于 \(j \in [s]\),计算 \(h_j = (h_\sigma^j)^r\). \(P_r\) 发送 \((g', h_1, \dots, h_s)\) 给 \(P_s\) 并零知识地证明其正确性。

这里的零知识证明协议证明的是:存在 \(r \in \mathbb{Z}_q\) 满足“ \(g' = (g_0)^r\) 且对于 \(j \in [s]\) 有 \(h_j = (h_0^j)^r\) ”或“ \(g' = (g_1)^r\) 且对于 \(j \in [s]\) 有 \(h_j = (h_1^j)^r\) ”。换句话说,需要证明 \(\{(g_0, g', h_0^j, h_j)\}_{j \in [s]}\) 都是DH元组或者 \(\{(g_1, g', h_1^j, h_j)\}_{j \in [s]}\) 都是DH元组。该协议如图 9.6所示。

拓展的DH元组的零知识证明协议

陈述:\((\mathbb{G}, g_0, g_1, g', u_1, v_1, …, u_s, v_s, h_1, …, h_s)\),其中 \(\mathbb{G}\) 是一个阶为 \(q\) 的群,\(g_0, g_1\) 是其生成元。

见证:\(r\) \(\text{ s.t. }\) “\(g' = (g_0)^r\) 且对于 \(j \in [s]\) 有 \(h_j = (u_j)^r\) ”或“ \(g' = (g_1)^r\) 且对于 \(j \in [s]\) 有 \(h_j = (v_j)^r\)”

  1. 验证者 \(V\) 随机选择 \(\gamma_1, …, \gamma_s \leftarrow_{\$} \mathbb{Z}_q\) 并发送给证明者 \(P\).

  2. \(P\) 和 \(V\) 本地计算

    \[\tilde{u} = \prod\limits_{i=1}^s (u_i)^{\gamma_i}, \; \tilde{v} = \prod\limits_{i=1}^s (v_i)^{\gamma_i}, \; \tilde{h} = \prod\limits_{i=1}^s (h_i)^{\gamma_i}\]
  3. \(P\) 向 \(V\) 零知识地证明 \((g_0, g', \tilde{u}, \tilde{h})\) 或 \((g_1, g', \tilde{v}, \tilde{h})\) 是DH元组(只需在图 9.4的协议中取 \(s = 2\))。

定理

假设DDH问题在群 \(\mathbb{G}\) 中是困难的。图 9.5中的协议经上述修改后对于静态恶意敌手安全实现了理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^S\)(图 9.15)。

该定理的证明同样非常直接,留作读者练习。

批处理单一选择切分选择OT. 最后,我们的协议需要让计算方对每一条导线执行单一选择切分选择OT,并且在每一个实例中使用同样的集合 \(\mathcal{J}\). 我们将这个理想功能记为 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\),如图 9.16所示。

批处理单一选择切分选择OT理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\)

  • 输入:
    • 发送方 \(P_s\) 的输入是 \(\ell\) 个长度为 \(s\) 的向量 \(\vec{x}_i, \; i \in [\ell]\)(每个向量由 \(s\) 对消息构成)。

    • 接收方 \(P_r\) 的输入是 \(\ell\) 个选择比特 \(\sigma_1, …, \sigma_\ell \in \{0, 1\}\) 和大小为 \(s/2\) 的集合 \(\mathcal{J} \subset [s]\).

  • 输出:如果 \(\mathcal{J}\) 的大小不是 \(s/2\),\(P_s\) 和 \(P_r\) 的输出为 \(\bot\). 否则,
    • 对于 \(i \in [\ell]\) 和 \(j \in \mathcal{J}\),接收方 \(P_r\) 获得 \(\vec{x}_i\) 的第 \(j\) 对消息。

    • 对于 \(i \in [\ell]\) 和 \(j \notin \mathcal{J}\),接收方 \(P_r\) 获得 \(\vec{x}_i\) 的第 \(j\) 对消息的第 \(\sigma_i\) 个值(\(\sigma_i \in \{0, 1\}\),这里的第 \(\sigma_i\) 个值从0开始计数)。

批处理单一选择切分选择OT理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\)

要实现理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\),我们只运行一次切分选择OT协议(图 9.5)的准备阶段,这样就确保了在所有实例中都使用了相同的集合 \(\mathcal{J}\). 然后,对于每个 \(i \in [\ell]\),运行单一选择切分选择OT协议的传输阶段(可以并行地运行)。如此,我们就完成了批处理单一选择切分选择OT协议的构造。

定理

假设DDH问题在群 \(\mathbb{G}\) 中是困难的。图 9.5中的协议经上述修改后对于静态恶意敌手安全实现了理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\)(图 9.16)。

总结。本节,我们从PVW协议开始,利用其特殊的性质(当公共参考字符串是DH元组时可以获得两个输入),构造了切分选择OT. 然后,我们又在此基础上构造了单一选择切分选择OT和批处理单一选择切分选择OT. 在协议中,我们多次使用了基于Sigma协议的零知识证明。至此,我们完成了协议中最重要的原语的构造。

输入一致性零知识证明

接下来,我们来构造另一个原语——输入一致性零知识证明。我们前面讲过,LP11协议中,\(P_1\) 首先选择值 \(g^{a_1^0}, g^{a_1^1}, \dots, g^{a_\ell^0}, g^{a_\ell^1}\) 以及 \(g^{r_1}, \dots, g^{r_s}\),然后将第 \(i\) 个输入比特在第 \(j\) 个电路中的密钥设置为 \(g^{a_i^0 \cdot r_j}, g^{a_i^1 \cdot r_j}, \; i \in [\ell], \; j \in [s]\). 对于每个输入比特(即对于每个 \(i \in [\ell]\)),将 \(P_1\) 的密钥记为 \(k_{i, 1}, \dots, k_{i, s}\). 令 \(h_{i, 0} = g^{a_i^0}, \; h_{i, 1} = g^{a_i^1}, \; u_1 = g^{r_1}, \dots, u_s = g^{r_s}\). 该零知识证明协议证明的是:存在 \(a \in \mathbb{Z}_q\) 满足“ \(h_{i, 0} = g^a\) 且对于 \(j \in [s]\) 有 \(k_{i, j} = (u_j)^a\) ”或“ \(h_{i, 1} = g^a\) 且对于 \(j \in [s]\) 有 \(k_{i, j} = (u_j)^a\) ”。该证明与图 9.6的零知识证明非常类似,如图 9.7所示。

输入一致性零知识证明

陈述:\((\mathbb{G}, g, h_0, h_1, u_1, …, u_s, k_1, …, k_s)\),其中 \(\mathbb{G}\) 是一个阶为 \(q\),以 \(g\) 为生成元的群。

见证:\(a\) \(\text{ s.t. }\) “ \(h_0 = g^a\) 且对于 \(j \in [s]\) 有 \(k_j = (u_j)^a\) ”或“ \(h_1 = g^a\) 且对于 \(j \in [s]\) 有 \(k_j = (u_j)^a\) ”

  1. 验证者 \(V\) 随机选择 \(\gamma_1, …, \gamma_s \leftarrow_{\$} \mathbb{Z}_q\) 并发送给证明者 \(P\).

  2. \(P\) 和 \(V\) 本地计算

    \[\tilde{u} = \prod\limits_{i=1}^s (u_i)^{\gamma_i}, \; \tilde{k} = \prod\limits_{i=1}^s (k_i)^{\gamma_i}\]
  3. \(P\) 向 \(V\) 零知识地证明 \((g, h_0, \tilde{u}, \tilde{k})\) 或 \((g, h_1, \tilde{u}, \tilde{k})\) 是DH元组(只需在图 9.4的协议中取 \(s = 2\))。

协议描述

现在,我们给出LP11协议的完整描述。我们首先给出协议每一步的直观解释。我们将打开的电路称为“检查电路”(check-circuit),未打开的电路称为“计算电路”(evaluation-circuit)。

步骤1:\(P_1\) 构造 \(s\) 个混淆电路。这些混淆电路中,\(P_1\) 的输入导线密钥通过特殊的方式来选择:\(P_1\) 首先选择随机数 \(a_1^0, a_1^1, …, a_\ell^0, a_\ell^1\)(\(P_1\) 的输入长度为 \(\ell\))和 \(r_1, …, r_s\),然后将第 \(j\) 个电路中的第 \(i\) 个输入导线的密钥设置为 \(g^{a_i^0 \cdot r_j}, g^{a_i^1 \cdot r_j}\). 此时,\(g^{a_1^0}, g^{a_1^1}, …, g^{a_\ell^0}, g^{a_\ell^1}, g^{r_1}, …, g^{r_s}\) 构成了 \(P_1\) 的输入密钥的承诺(注:实际上,\(P_1\) 的密钥设置为 \(H(g^{a_i^0 \cdot r_j}), H(g^{a_i^1 \cdot r_j})\),\(H\) 是随机数提取器,参见图 9.8的协议描述。)。

步骤2:参与双方执行批处理单一选择切分选择OT,其中 \(P_1\) 的输入是所有电路中 \(P_2\) 的所有输入导线的密钥,\(P_2\) 的输入是他的协议输入和大小为 \(s/2\) 的随机集合 \(\mathcal{J} \subset [s]\). 于是,对于“检查电路”(索引在 \(\mathcal{J}\) 中的电路),\(P_2\) 获得两个密钥,对于“计算电路”,\(P_2\) 获得其输入对应的密钥。

步骤3:\(P_1\) 给 \(P_2\) 发送 \(s\) 个混淆电路以及 \(P_1\) 的输入密钥的承诺 \(g^{a_1^0}, g^{a_1^1}, …, g^{a_\ell^0}, g^{a_\ell^1}, g^{r_1}, …, g^{r_s}\). 此时,\(P_1\) 已经对 \(s\) 个电路做了承诺,但还不知道要打开哪些电路。

步骤4:\(P_2\) 向 \(P_1\) 展示“检查电路”的集合 \(\mathcal{J}\),并发送这些电路中 \(P_2\) 的第一个输入比特对应的两个密钥以证明其正确性。注意,只有“检查电路” \(P_2\) 才能知道两个密钥。

步骤5:对于“检查电路”,\(P_2\) 需要知道 \(P_1\) 的输入导线密钥才能检查正确性。因此,对于 \(j \in \mathcal{J}\),\(P_1\) 发送 \(r_j\) 给 \(P_2\). 于是,\(P_2\) 可以根据 \(g^{a_i^0}, g^{a_i^1}, r_j\) 来计算 \(g^{a_i^0 \cdot r_j}, g^{a_i^1 \cdot r_j}\),并且这不会泄露“计算电路”中的密钥。

步骤6:\(P_2\) 检查 \(s/2\) 个“检查电路”的正确性,如果存在错误,\(P_2\) 终止协议。如果“检查电路”都是正确的,那么大多数“计算电路”(以压倒性的概率)是正确的。

步骤7:\(P_1\) 向 \(P_2\) 发送“计算电路”中 \(P_1\) 的输入密钥,即,对于“计算电路” \(j\) 的第 \(i\) 条导线,\(P_1\) 向 \(P_2\) 发送 \(g^{a_i^{x_i} \cdot r_j}\),其中 \(x_i\) 是 \(P_1\) 的第 \(i\) 个输入比特。\(P_1\) 通过上述输入一致性零知识证明(图 9.7) 高效地证明所有密钥使用了相同的 \(a_i^{x_i}\).

步骤8:\(P_2\) 计算所有“计算电路”,取大多数电路的输出作为协议输出。注意,即使输出不一致,\(P_2\) 也不能中止协议,否则可能泄露信息(见「直观思想」一节)。由于在恶意敌手模型下,双方获得输出和只有一个参与方获得输出是等价的,因此我们考虑只有 \(P_2\) 获得输出的简单情况(见「直观思想」一节)。

协议描述如图 9.8所示。

LP11协议

\(\small\)

公共输入:统计安全参数 \(s\),函数 \(f\) 等价的布尔电路 \(\mathcal{C}\),\((\mathbb{G}, q, g)\),其中 \(\mathbb{G}\) 是阶为 \(q\),以 \(g\) 为生成元的群。\(|q| = n\).

输入:\(P_1\) 的输入是 \(x \in \{0, 1\}^\ell\),\(P_2\) 的输入是 \(y \in \{0, 1\}^\ell\).

协议:

  1. 构造混淆电路:
    1. \(P_1\) 选择随机值 \(a_1^0, a_1^1, …, a_\ell^0, a_\ell^1 \leftarrow_{\$} \mathbb{Z}_q\) 和 \(r_1, …, r_s \leftarrow_{\$} \mathbb{Z}_q\).

    2. 设 \(w_1, \dots, w_\ell\) 是 \(P_1\) 在电路 \(\mathcal{C}\) 中的输入导线。用 \(w_{i, j}\) 表示第 \(j\) 个混淆电路中的导线 \(w_i\),用 \(k_{i, j}^b\) 表示导线 \(w_{i, j}\) 对应于比特 \(b\) 的密钥。\(P_1\) 将这些输入导线的密钥设置为

      \[k_{i, j}^0 = H(g^{a_i^0 \cdot r_j}), \; k_{i, j}^1 = H(g^{a_i^1 \cdot r_j})\]
      其中,\(H\) 是一个随机数提取器(注:随机数提取器能从不完美的随机源中提取随机数。举例来说,在DDH假设下,已知 \(g^x, g^y\) 时,\(g^{xy}\) 和随机群元素在计算上不可区分,因此可以认为 \(g^{xy}\) 有 \(\log_2(order(g)) = |q|\) 位的熵(entropy)。但是,\(g^{xy}\) 的长度可能远远大于 \(|q|\),例如,\(g\) 是 \(\mathbb{Z}_p^*\) 中阶为 \(q\) 的一个元素,\(p, q\) 是素数且 \(q\) 整除 \(p - 1\),并且 \(|p| = 1024, \; |q| = 512\). 此时,512位的熵分布在 \(g^{xy}\) 的1024位中,因此我们不能直接将 \(g^{xy}\) 作为密钥,而需要使用随机数提取器。读者可参阅文献 [DGHKR, 2004; Carter et al., 1979; Hastad et al., 1999]。)。

    3. \(P_1\) 按照「协议描述」一节中所述的方式构造 \(s\) 个混淆电路,记为 \(GC_1, …, GC_s\),其中导线 \(w_1, …, w_\ell\) 的密钥按照上述方式确定。

  2. 茫然传输:\(P_1\) 和 \(P_2\) 以参数 \(\ell\) 和 \(s\) 执行批处理单一选择切分选择OT(协议见「切分选择OT」一节):
    1. \(P_1\) 定义向量 \(\vec{z}_1, …, \vec{z_\ell}\),其中 \(\vec{z}_i\) 包含了 \(P_2\) 的输入比特 \(y_i\) 在 \(GC_1, …, GC_s\) 中的 \(s\) 对密钥。

    2. \(P_2\) 的输入是大小为 \(s/2\) 的随机集合 \(\mathcal{J} \subset [s]\) 和 \(\sigma_1, …, \sigma_\ell \in \{0, 1\}\),其中 \(\sigma_i = y_i, \; i \in [\ell]\).

    3. 对于 \(GC_j, \; j \in \mathcal{J}\),\(P_2\) 获得他的输入导线的两个密钥;对于其他电路,\(P_2\) 获得他的输入对应的密钥。

  3. 发送电路和承诺:\(P_1\) 向 \(P_2\) 发送 \(s\) 个混淆电路,随机数提取器 \(H\) 的定义,以及 \(P_1\) 的输入导线密钥的承诺 \(\{(i, 0, g^{a_i^0}), (i, 1, g^{a_i^1})\}_{i=1}^\ell, \; \{(j, g^{r_j})\}_{j=1}^s\).

  4. 发送切分选择挑战:\(P_2\) 向 \(P_1\) 发送集合 \(\mathcal{J}\) 以及电路 \(\{GC_j\}_{j \in \mathcal{J}}\) 中 \(P_2\) 的第一个输入比特 \(y_1\) 对应的两个密钥。如果密钥不正确,\(P_1\) 输出 \(\bot\) 并终止协议。\(\{GC_j\}_{j \in \mathcal{J}}\) 称为“检查电路”,\(\{GC_j\}_{j \notin \mathcal{J}}\) 称为“计算电路”。

  5. 发送“检查电路”中所有输入密钥:对于每个“检查电路”\(GC_j\),\(P_1\) 向 \(P_2\) 发送 \(r_j\). \(P_2\) 检查该值与第3步中的 \((j, g^{r_j})\) 是否一致。如果不一致,\(P_2\) 输出 \(\bot\) 并终止协议。

  6. “检查电路”正确性检验:对于 \(j \in \mathcal{J}\),\(P_2\) 使用第3步得到的 \(g^{a_i^0}, g^{a_i^1}\) 和第5步得到的 \(r_j\) 计算 \(GC_j\) 中 \(P_1\) 的输入导线密钥 \(k_{i, j}^0 = H(g^{a_i^0 \cdot r_j}), k_{i, j}^1 = H(g^{a_i^1 \cdot r_j})\). \(P_2\) 将自己的输入导线密钥设置为切分选择OT中获得的值。已知所有的输入导线密钥,\(P_2\) 解密所有的混淆表来检查混淆电路的正确性。如果存在不正确的混淆电路,\(P_2\) 输出 \(\bot\) 并终止协议。

  7. 发送“计算电路”中的密钥:
    1. 对于 \(j \notin \mathcal{J}, \; i \in [\ell]\),\(P_1\) 发送 \(k'_{i, j} = g^{a_i^{x_i} \cdot r_j}\) 给 \(P_2\). \(P_2\) 设置 \(k_{i, j} = H(k'_{i, j})\).

    2. \(P_1\) 证明输入密钥的一致性:对于 \(i \in [\ell]\),\(P_1\) 使用图 9.7的协议并行地证明存在 \(\sigma_i \in \{0, 1\}\) 使得 \(k'_{i, j} = g^{a_i^{\sigma_i} \cdot r_j}\) 对 \(j \notin \mathcal{J}\) 都成立。如果证明不通过,\(P_2\) 输出 \(\bot\) 并终止协议。

  8. 对电路计算:\(P_2\) 用第7步获得的 \(P_1\) 的输入密钥和第2步获得的 \(P_2\) 的输入密钥计算所有的“计算电路” \(\{GC_j\}_{j \notin \mathcal{J}}\). 如果某个电路的计算失败了,\(P_2\) 将其输入记为 \(\bot\). 最后,\(P_2\) 取大多数电路的输出作为协议的输出。

安全性证明

直观上看,如果所有的“检查电路”都是正确的,那么大多数“计算电路”以压倒性的概率是正确的。另一方面,基于DDH假设,\(P_2\) 从 \(g^{a_1^0}, g^{a_1^1}, \dots, g^{a_\ell^0}, g^{a_\ell^1}, g^{r_1}, \dots, g^{r_s}\) 不能获得输入导线密钥的任何信息。因此,协议有两个安全参数:混淆电路的数量 \(s\) 是统计安全参数,\(n = |q|\) 是计算安全参数,其中 \(q\) 是群 \(\mathbb{G}\) 的阶。

下面,我们首先在独立模型下给出严格的安全性证明(考虑只有 \(P_2\) 获得输出的等价定义)。然后,我们讨论协议的UC安全性。

定理

假设DDH问题在群 \(\mathbb{G}\) 中是困难的,假设步骤7(b)的零知识证明协议具有完备性、可靠性和零知识性,假设构造混淆电路使用的加密方案是安全的。那么,图 9.8中的协议在 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\)-混合模型下对于静态恶意敌手安全实现了功能 \(f\).

安全性证明

考虑 \(P_1\) 被攻陷和 \(P_2\) 被攻陷两种情况。

情况1:\(P_1\) 被攻陷。

直观上看,\(P_1\) 只能通过构造错误的混淆电路来攻击协议。在协议中,\(P_1\) 在知道集合 \(\mathcal{J}\) 之前已经对所有电路做了承诺,因此,所有“检查电路”均正确但大多数“计算电路”不正确的概率是关于 \(s\) 的可忽略函数。如「直观思想」一节的分析,这个概率小于 \(2^{-s/4 + 1}\). 注意,如果 \(P_2\) 发现“检查电路”的错误而终止协议,这与 \(P_2\) 的输入是无关的,因此不会泄露 \(P_2\) 的输入。下面,我们给出模拟器 \(\mathcal{S}\) 的构造。

模拟器 \(\mathcal{S}\). 令 \(\mathcal{A}\) 是控制 \(P_1\) 的敌手。模拟器 \(\mathcal{S}\) 在其内部运行 \(\mathcal{A}\),模拟 \(P_2\) 向 \(P_1\) 发送的消息和理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\). \(\mathcal{S}\) 的工作方式如下:

  1. \(\mathcal{S}\) 记录 \(P_1\) 向 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\) 发送的输入(步骤2)。这些输入构成一个 \(\ell \times s\) 的矩阵,矩阵的每个元素是一对消息,记为 \(\{(z_0^{i, j}, z_1^{i, j})\}_{i \in [\ell], j \in [s]}\).

  2. \(\mathcal{S}\) 记录 \(P_1\) 向 \(P_2\) 发送的混淆电路 \(GC_1, …, GC_s\) 和 \(\{(i, 0, u_i^0), (i, 1, u_i^1)\}_{i=1}^\ell, \; \{(j, h_j)\}_{j=1}^s\)(步骤3)。

  3. \(\mathcal{S}\) 随机选择大小为 \(s/2\) 的集合 \(\mathcal{J} \in [s]\),并模拟 \(P_2\) 发送集合 \(\mathcal{J}\) 和 \(\{(z_0^{1, j}, z_1^{1, j})\}_{j \in \mathcal{J}}\) 给 \(P_1\)(步骤4)。

  4. \(\mathcal{S}\) 记录 \(P_1\) 向 \(P_2\) 发送的 \(\{r_j\}_{j \in \mathcal{J}}\),检查 \(h_j = g^r_j\) 对 \(j \in \mathcal{J}\) 是否均成立(步骤5)。如果不成立,\(\mathcal{S}\) 向可信方发送 \(\bot\),模拟 \(P_2\) 终止协议,然后输出 \(\mathcal{A}\) 的输出。

  5. \(\mathcal{S}\) 按照协议规定检查 \(\{GC_j\}_{j \in \mathcal{J}}\) 的正确性(步骤6)。如果不正确,\(\mathcal{S}\) 向可信方发送 \(\bot\),模拟 \(P_2\) 终止协议,然后输出 \(\mathcal{A}\) 的输出。

  6. \(\mathcal{S}\) 记录 \(P_1\) 向 \(P_2\) 发送的 \(\{k'_{i, j}\}_{i \in [\ell], j \notin \mathcal{J}}\)(步骤7(a)).

  7. \(\mathcal{S}\) 从步骤7(b)的零知识证明中提取见证,即,对于 \(i \in [\ell]\),\(\mathcal{S}\) 提取见证 \(a_i\) 满足 \(k'_{i, j} = (h_j)^{a_i}\) 对 \(j \notin \mathcal{J}\) 都成立,且 \(u_i^0 = g^{a_i}\) 或 \(u_i^1 = g^{a_i}\).

    1. 如果对于某个 \(i\),\(\mathcal{S}\) 没有提取合法的见证,那么 \(\mathcal{S}\) 向可信方发送 \(\bot\),模拟 \(P_2\) 终止协议,然后输出 \(\mathcal{A}\) 的输出。

    2. 否则,对于 \(i \in [\ell]\),如果 \(u_i^0 = g^{a_i}\) 则设置 \(x_1 = 0\),如果 \(u_i^1 = g^{a_i}\) 则设置 \(x_1 = 1\).

  8. \(\mathcal{S}\) 代表 \(P_1\) 向可信方发送 \(x = x_1 … x_\ell\),然后输出 \(\mathcal{A}\) 的输出(步骤8)。

我们将图 9.8中的协议记作 \(\Pi\),我们需要证明

\[\{\operatorname{ideal}_{f, \mathcal{S}}(x, y, n, s)\}_{x, y \in \{0, 1\}^\ell; \; n, s \in \mathbb{N}} \stackrel{ \mathrm{comp} }{\approx} \{\operatorname{real}_{\Pi, \mathcal{A}}(x, y, n, s)\}_{x, y \in \{0, 1\}^\ell; \; n, s \in \mathbb{N}}\]

也就是任意PPT的敌手区分这两个随机变量的概率是关于 \(n\) 和 \(s\) 的可忽略函数。

在继续证明之前,我们先定义一下什么是“坏的”电路。对于混淆电路 \(GC_j\),它的输入导线密钥定义如下:

  1. \(P_1\) 的输入导线密钥:令 \((1, 0, g^{a_1^0}), (1, 1, g^{a_1^1}), …, (\ell, 0, g^{a_\ell^0}), (\ell, 1, g^{a_\ell^1}), (j, g^{r_j})\) 是步骤3中 \(P_1\) 发给 \(P_2\) 的值,那么,\(GC_j\) 中 \(P_1\) 的输入导线密钥为 \((g^{a_1^0 \cdot r_j}, g^{a_1^1 \cdot r_j}), …, (g^{a_\ell^0 \cdot r_j}, g^{a_\ell^1 \cdot r_j})\).

  2. \(P_2\) 的输入导线密钥:令 \((z_0^{1, j}, z_1^{1, j}), …, (z_0^{\ell, j}, z_1^{\ell, j})\) 是第2步中 \(P_1\) 在切分选择OT中的输入(\(\vec{z}_1, …, \vec{z}_\ell\) 的第 \(j\) 个元素),那么,这些值是 \(GC_j\) 中 \(P_2\) 的输入导线密钥。

如果 \(P_1\) 和 \(P_2\) 的输入导线密钥不能将 \(GC_j\) 打开为正确的布尔电路 \(\mathcal{C}\),那么我们说 \(GC_j\) 是“坏的”电路。注意,当执行完步骤3时,电路是否为“坏的”已经确定了。

我们将“检查电路”全部正确记为事件noAbort,将“计算电路”有一半或更多是“坏的”电路记为事件badMaj,将“坏的”电路的数量记为badTotal. 下面的断言展示了badMaj和noAbort同时发生的概率的上界。

断言

对于每个 \(s \in \mathbb{N}\),有

\[\Pr[\mathrm{noAbort} \; \wedge \; \mathrm{badMaj}] \leq \frac{ \displaystyle \binom{\frac{3s}{4}+1}{\frac{s}{2}+1} }{ \displaystyle \binom{s}{\frac{s}{2}} } < \frac{1}{2^{s/4-1} }\]

该断言在「直观思想」一节已经推导过。

安全性证明

最后,我们说明如果 \(\mathrm{noAbort} \; \wedge \; \mathrm{badMaj}\) 没有发生,那么

\[\{\operatorname{ideal}_{f, \mathcal{S}}(x, y, n, s)\}_{x, y \in \{0, 1\}^\ell; \; n, s \in \mathbb{N}} \stackrel{ \mathrm{comp} }{\approx} \{\operatorname{real}_{\Pi, \mathcal{A}}(x, y, n, s)\}_{x, y \in \{0, 1\}^\ell; \; n, s \in \mathbb{N}}\]

根据零知识证明的可靠性,\(\mathcal{S}\) 未能提取合法见证的概率是可忽略的。因此 \(\mathcal{S}\) 提取的 \(x\) 就是 \(P_1\) 的输入。又因为 \(\mathrm{noAbort} \; \wedge \; \mathrm{badMaj}\) 没有发生,那么真实世界中大多数电路的输出就是可信方计算 \(f(x, y)\) 的结果。\(\mathcal{S}\) 模拟 \(P_2\) 发送的集合 \(\mathcal{J}\) 和 \(\{(z_0^{1, j}, z_1^{1, j})\}_{j \in \mathcal{J}}\) 与真实世界完全相同,且 \(\mathcal{S}\) 只有在 \(P_2\) 终止协议时才向可信方发送 \(\bot\). 综上,我们完成了“\(P_1\) 被攻陷”时的证明。

情况2:\(P_2\) 被攻陷。

\(P_2\) 被攻陷的情况更为简单。\(P_2\) 在协议中收到了 \(s/2\) 个打开的“检查电路”和 \(s/2\) 个“计算电路”,对于“计算电路” \(P_2\) 只能获得输入导线的一个密钥,并且这些密钥对应于一致的 \(x\) 和 \(y\). 直观上看,\(P_2\) 除了计算这些电路之外做不了其他的事。在切分选择OT中,“单一选择”的性质使 \(P_2\) 无法为不同的电路输入不同的 \(y\). 此外,在步骤4中 \(P_2\) 可能试图发送 \(\mathcal{J}' \neq \mathcal{J}\),但是他必须猜对混淆电路中输入比特 \(y_1\) 的另一个密钥,这个概率是可忽略的。下面,我们给出模拟器 \(\mathcal{S}\) 的构造。

模拟器 \(\mathcal{S}\). 令 \(\mathcal{A}\) 是控制 \(P_2\) 的敌手。模拟器 \(\mathcal{S}\) 在其内部运行 \(\mathcal{A}\),模拟 \(P_1\) 向 \(P_2\) 发送的消息和理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\). \(\mathcal{S}\) 的工作方式如下:

  1. \(\mathcal{S}\) 记录 \(P_2\) 向 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\) 发送的输入 \(\mathcal{J}\) 和选择比特 \(\sigma_1, …, \sigma_\ell\). 如果 \(\mathcal{J}\) 的大小不是 \(s/2\),那么 \(\mathcal{S}\) 向可信方发送 \(\bot\),模拟 \(P_1\) 终止协议,然后输出 \(\mathcal{A}\) 的输出。

  2. \(\mathcal{S}\) 选择随机值 \(a_1^0, a_1^1, …, a_\ell^0, a_\ell^1, r_1, …, r_s \leftarrow_{\$} \mathbb{Z}_q\),然后构造一个 \(\ell \times s\) 的矩阵,矩阵的每个元素是一对长度为 \(n\) 的密钥。对于 \(P_1\) 的输入导线密钥(即 \(i \in [\ell]\)),设置为 \((x_{i, j}^0, x_{i, j}^1) = ( H(g^{a_i^0 \cdot r_j}), H(g^{a_i^1 \cdot r_j}) )\),对于 \(P_2\) 的输入导线密钥,随机选取。

  3. \(\mathcal{S}\) 将这个矩阵作为 \(P_1\) 给 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\) 的输入,然后让 \(P_2\) 获得合理的输出(步骤2),即,对于 \(j \in \mathcal{J}\),\(P_2\) 获得 \(\{(x_{i, j}^0, x_{i, j}^1)\}_{i \in [\ell]}\),对于 \(j \notin \mathcal{J}\),\(P_2\) 获得 \(\{x_{i, j}^{\sigma_i}\}_{i \in [\ell]}\).

  4. \(\mathcal{S}\) 代表 \(P_2\) 发送 \(y = \sigma_1 … \sigma_\ell\) 给可信方,并获得协议输出 \(z\).

  5. 对于 \(j \in \mathcal{J}\),\(\mathcal{S}\) 诚实地构造 \(GC_j\).

  6. 对于 \(j \notin \mathcal{J}\),\(\mathcal{S}\) 按照定理 8.1中的方式构造“假的”混淆电路 \(\widetilde{GC}_j\),它的输出总是 \(z\). 其中,\(P_1\) 和 \(P_2\) 的输入导线密钥使用上述步骤中选择的密钥。

  7. \(\mathcal{S}\) 模拟 \(P_1\) 发送混淆电路和 \(\{(i, 0, g^{a_i^0}), (i, 1, g^{a_i^1})\}_{i=1}^\ell, \; \{(j, g^{r_j})\}_{j=1}^s\) 给 \(P_2\)(步骤3)。

  8. \(\mathcal{S}\) 记录 \(P_2\) 向 \(P_1\) 发送的集合 \(\mathcal{J}'\) 以及密钥 \(\{x_{1, j}^0, x_{1, j}^1\}_{j \in \mathcal{J}'}\)(步骤4),做如下检查:

    1. 如果 \(\mathcal{J}' \neq \mathcal{J}\) 且两个密钥均正确,\(\mathcal{S}\) 输出 \(\mathsf{fail}\) 并停止模拟。

    2. 如果有密钥不正确,\(\mathcal{S}\) 向可信方发送 \(\bot\),模拟 \(P_1\) 终止协议,然后输出 \(\mathcal{A}\) 的输出。

    3. 如果 \(\mathcal{J}' = \mathcal{J}\) 且密钥均正确,\(\mathcal{S}\) 继续模拟。

  9. \(\mathcal{S}\) 模拟 \(P_1\) 向 \(P_2\) 发送第2步中选择的 \(\{r_j\}_{j \in \mathcal{J}}\)(步骤5)。

  10. 对于 \(i \in [\ell], \; j \notin \mathcal{J}\),\(\mathcal{S}\) 模拟 \(P_1\) 向 \(P_2\) 发送 \(k'_{i, j} = g^{a_i^0 \cdot r_j}\),并诚实地执行零知识证明协议证明输入一致性(步骤7)。(\(\mathcal{S}\) 不知道 \(P_1\) 的输入,它取 \(x = 0^\ell\) 为输入。)

  11. 最后,\(\mathcal{S}\) 输出 \(\mathcal{A}\) 的输出。

我们需要证明

\[\{\operatorname{ideal}_{f, \mathcal{S}}(x, y, n, s)\}_{x, y \in \{0, 1\}^\ell; \; n, s \in \mathbb{N}} \stackrel{ \mathrm{comp} }{\approx} \{\operatorname{real}_{\Pi, \mathcal{A}}(x, y, n, s)\}_{x, y \in \{0, 1\}^\ell; \; n, s \in \mathbb{N}}\]

首先,\(\mathcal{S}\) 输出 \(\mathsf{fail}\) 的概率是 \(\mathcal{A}\) 猜对随机密钥的概率,它是可忽略的。其次,在 \(P_2\) 的视图中,唯一的区别在于“计算电路”被替换成了“假的”混淆电路。定理 8.1中已经证明了,(一个)“假的”混淆电路与真实的混淆电路是不可区分的。现在 \(P_2\) 的视图中有 \(s/2\) 个“假的”混淆电路,我们通过标准的混合论证可以证明:它们与真实的混淆电路仍是不可区分的。注意,上述证明必须在 \(P_2\) 获得一致的输入密钥时才成立,而理想功能 \(\mathcal{F}_{\mathsf{CCOT}}^{S, B}\) 的“单一选择”的性质保证了这一点。

证毕。

UC安全性。到目前为止,本节的所有定理考虑的都是独立模型下的安全性。但是,注意到我们的证明中,只有提取零知识证明的见证时使用了倒带技术,其他步骤无需将敌手倒带。因此,如果能将Sigma协议替换成UC安全的零知识证明协议,那么整个协议就变成UC安全的了。在公共参考字符串(Common Reference String, CRS)模型下,存在将Sigma协议转化为UC安全的零知识证明的高效构造 [Dod et al., 2008; Gar et al., 2003]。于是,我们有以下定理。

定理

对于任意的输入长度为 \(\ell\) 的两方功能 \(f\),在公共参考字符串模型和DDH假设下,存在协议 \(\Pi\) 对于静态恶意敌手UC-安全实现了功能 \(f\).

BGW协议(恶意安全)

直观思想

在第3章和「BGW协议(半诚实安全)」一节,我们介绍了BGW协议的半诚实安全版本,它对于半诚实的敌手具有完美安全性。然而,如果敌手是恶意的,那么他有多种攻击协议的方式。假设参与方 \(P_1\) 是被攻陷的,且输入为 \(s\). 首先,在输入分享阶段,\(P_1\) 应该选择一个 \(t\) 阶(注:更准确地说,“\(t\) 阶”应该是“至多 \(t\) 阶”。在均匀随机选取的情况下,多项式阶数不为 \(t\) 的概率为 \(1 / |\mathbb{F}|\),其中 \(\mathbb{F}\) 是使用的域。为了表述的简洁,本章中通常省略“至多”。)多项式 \(q(\cdot)\),满足 \(q(0) = s\),并将秘密份额 \(q(\alpha_i)\) 发送给 \(P_i\). 但是,恶意的 \(P_1\) 可以选择一个阶数大于 \(t\) 的多项式 \(q(\cdot)\),将 \(q(\alpha_i)\) 发送给 \(P_i\),这样一来,任意 \(t + 1\) 个秘密份额都会重建出不同的值,因而 \(P_1\) 的输入是没有被良好定义的。其次,在输出重建阶段,假设输出值为 \(y\),参与方持有 \(y\) 的秘密份额,他们应该公布这些秘密份额来重建输出。但是,恶意的参与方可以公布错误的秘密份额,其他参与方无法知道哪些份额是正确的,哪些是错误的。因此,协议必须提供以下性质:假设一共有 \(n\) 个参与方,被攻陷的参与方不超过 \(t\) 个,输出重建时可以基于 \(n - t\) 个正确的份额和 \(t\) 个错误的份额重建输出值。

对于前一种攻击,解决方案为可验证秘密分享(Verifiable Secret Sharing, VSS)。顾名思义,可验证秘密分享VSS允许其他参与方“验证”(恶意的)秘密分发者(dealer)正确地分享了某个秘密,即秘密值是被良好定义的(注:对于恶意的参与方,我们无法阻止其替换自己的输入。)。对于后一种攻击,解决方案为纠错码(error-correcting code)。一个纠错码的码字(codeword)包含多个元素,当其中有部分元素丢失或错误时(注:一个具体的例子是,在通信传输的过程中,可能有部分信息发生丢失或错误。),如果数量不超过阈值,我们就可以将其“纠正”为原始的正确码字。(注:本节参考了文献[Ash & Lin, 2017]。)

可验证秘密分享。回想一下,在 \((t, n)\)-Shamir秘密分享方案中,参与方首先选定 \(n\) 个互不相同且不为0的值 \((\alpha_1, …, \alpha_n)\). 要分享某个值 \(s\),秘密分享算法首先选择阶数最多为 \(t\) 的随机多项式 \(q(\cdot)\),满足 \(q(0) = s\),然后将秘密份额 \(q(\alpha_i)\) 发送给 \(P_i\). 然而,恶意的秘密分发者可能会违背协议,例如,选择阶数大于 \(t\) 的多项式 \(q(\cdot)\),要想可验证地进行秘密分享,我们可能有以下想法:

  • 参与方共同确定一个以 \(g\) 为生成元的循环群 \(\mathbb{G}\). 算法随机选择 \(q(x) = a_0 + a_1 x + \dots + a_t x^t\),其中 \(a_0 = s\),并公布验证值 \(A_k = g^{a_k}, \; k = 0, \dots, t\),然后将秘密份额 \(s_i = q(\alpha_i)\) 发送给 \(P_i\). \(P_i\) 验证

    \[g^{s_i} \stackrel{?}{=} \prod\limits_{k=0}^t (A_k)^{(\alpha_i)^k}\]
    这种方式被称为Feldman VSS.

  • 参与方共同确定一个以 \(g\) 为生成元的循环群 \(\mathbb{G}\),以及元素 \(h\),满足 \(\log_g h\) 未知。算法随机选择 \(q(x) = a_0 + a_1 x + \dots + a_t x^t\) 和 \(q'(x) = b_0 + b_1 x + \dots + b_t x^t\),其中 \(a_0 = s\),并公布验证值 \(C_k = g^{a_k} h^{b_k}, \; k = 0, \dots, t\),然后将秘密份额 \((s_i, s'_i) = ( q(\alpha_i), q'(\alpha_i) )\) 发送给 \(P_i\). \(P_i\) 验证

    \[g^{s_i} h^{s'_i} \stackrel{?}{=} \prod\limits_{k=0}^t (C_k)^{(\alpha_i)^k}\]
    这种方式被称为Pedersen VSS.

直观上看,上述两种VSS方案在离散对数(Discrete-Log)假设下,对于多项式时间的敌手实现了可验证性(注:可验证性指:如果验证通过,那么任意 \(t + 1\) 个秘密份额插值将得到同样的(不超过 \(t\) 阶的)多项式,即秘密分发者正确地进行了秘密分享。)(注:如果 \(P_i\) 发现秘密份额不满足验证条件,他将提出投诉(complaint),然后,参与方将执行协议的“投诉解决”机制,这部分并非本段的重点,因此略去,读者可参阅文献 [GJKR, 2007]。 )。然而,它们都不能实现完美安全性。对于Feldman VSS,如果参与方有无限的计算力,他可以求解 \(A_k = g^{a_k}\) 的离散对数,得到 \(a_k\),从而打破隐私性;对于Pedersen VSS,虽然验证值 \(C_k = g^{a_k} h^{b_k}\) 完美地隐藏了 \(a_k\),但如果秘密分发者有无限的计算力,他求解 \(h\) 的离散对数,然后就可以任意选择 \(s_i\),再计算满足 \(g^{s_i} h^{s'_i} = \prod\limits_{k=0}^t (C_k)^{(\alpha_i)^k}\) 的 \(s'_i\),从而打破正确性。

BGW的可验证秘密分享在 \(t < n/3\) 的条件下实现了完美安全性,这是因为Shamir秘密分享本质上是Reed-Solomon纠错码。下面,我们详细阐述。

纠错码(Reed-Solomon码)。Reed-Solomon码是一种线性码(linear code),线性码是一种特殊的纠错码,线性码的码字的线性组合也是合法的码字。线性码有三个参数 \([n, k, d]\). 在大小为 \(q\) 的有限域 \(\mathbb{F}\) 上的 \([n, k, d]\)-线性码,指的是其长度为 \(n\)(每个码字包含 \(n\) 个域上的元素),维度(dimension)为 \(k\)(共有 \(q^k\) 个不同的码字),距离为 \(d\)(两个码字的汉明距离(Hamming distance)至少为 \(d\))。

BGW协议需要构造一种长度为 \(n\),维度为 \(k = t + 1\),距离为 \(n - t\) 的线性码。其对应的Reed-Solomon码构造如下。令 \(\mathbb{F}\) 是一个有限域,满足 \(|\mathbb{F}| > n\). 令 \(\alpha_1, …, \alpha_n\) 为域上各不相同的值。令 \(m = (m_0, …, m_t)\) 是要被编码的消息,其中 \(m_i \in \mathbb{F}, \; i \in [t]\). 编码算法如下:

  1. 定义最高 \(t\) 阶的多项式 \(p_m(x) = m_0 + m_1 x + … + m_t x^t\).

  2. 计算码字 \(C(m) = \langle p_m(\alpha_1), …, p_m(\alpha_n) \rangle\).

不难看出,该编码的距离为 \(n - t\)(因为任意两个至多 \(t\) 阶的多项式,最多有 \(t\) 个 \(\alpha\) 点满足 \(p_1(\alpha) = p_2(\alpha)\). 而两个不同的消息 \(m \neq m'\) 定义了两个不同的多项式 \(p_m \neq p_{m'}\),故 \(C(m)\) 和 \(C(m')\) 最多有 \(t\) 处相同)。用 \(d(x, y)\) 来表示码字 \(x, y \in \mathbb{F}^n\) 的汉明距离,我们有以下编码理论中著名的定理。

定理

Reed-Solomon码是有限域 \(\mathbb{F}\) 上的 \([n, t + 1, n - t]\)-线性码,且存在高效的解码算法能够纠正不超过 \(\frac{n - t - 1}{2}\) 个错误,即,对于每个 \(m \in \mathbb{F}^{t+1}\) 和 \(x \in \mathbb{F}^n\),如果 \(d(x, C(m)) \leq \frac{n - t - 1}{2}\),那么解码算法以 \(x\) 为输入时,输出 \(m\).

当 \(t < n/3\) 时,\(n \geq 3t + 1\). 将 \(n = 3t + 1\) 代入上述定理可知,此时我们可以高效地纠正 \(\frac{3t+1-t-1}{2} = t\) 个错误。在BGW协议中,参与方使用Shamir秘密分享方案。假设 \(n\) 个参与方持有秘密份额 \(\{q(\alpha_i)\}_{i \in [n]}\),其中 \(q(\cdot)\) 是至多 \(t\) 阶的多项式,\(q(0) = s\). 我们可以把秘密份额 \(\langle q(\alpha_1), …, q(\alpha_n) \rangle\) 看成Reed-Solomon码字。当需要重建秘密值时,参与方直接广播自己的秘密份额。诚实的参与方一定会广播正确的份额,而被攻陷方可能会广播错误值。但是,由于被攻陷方的数量 \(t < n/3\),最多有 \(t\) 个错误值,因此诚实方可以运行Reed-Solomon解码算法高效地恢复出正确的多项式 \(q(\cdot)\),并计算 \(q(0) = s\).

直观思想 · 公式

综上,我们可以得出结论:当 \(t < n/3\) 时,在输出重建阶段,被攻陷方无法攻击协议——即使他们提供错误的值,诚实方也能(以概率1)重建正确的秘密值。但是,我们还需要一个有效的可验证秘密分享方案,来强制(被攻陷的)秘密分发者分发的秘密份额位于 \(t\) 阶多项式上。下面我们详细阐述BGW的可验证秘密分享。

二元多项式。二元多项式是BGW可验证秘密分享的核心工具。一个 \(t\) 阶的二元多项式,指的是有两个变量的多项式,且每个变量的阶数最多为 \(t\). 它可以写成如下的形式:

\[f(x, y) = \sum\limits_{i=0}^t \sum\limits_{j=0}^t a_{i, j} \cdot x^i \cdot y^j\]

我们用 \(\mathcal{B}^{s, t}\) 表示常数项为 \(s\) 的 \(t\) 阶二元多项式的集合。那么,对于一个属于 \(\mathcal{B}^{s, t}\) 的二元多项式,它的系数的数量为 \((t + 1)^2 - 1 = t^2 + 2t\)(总共有 \((t + 1)^2\) 个系数,但常数项已经被固定为 \(s\))。

在第3章中,我们论证了:\(t + 1\) 个(横坐标不同的)点唯一确定一个 \(t\) 阶多项式,即,给定 \(t + 1\) 个点 \(\{(\alpha_k, \beta_k)\}_{k=1}^{t+1}\),存在唯一的 \(t\) 阶多项式 \(f\) 满足 \(f(\alpha_k) = \beta_k\). 将其推广到二元多项式,直觉上,我们可能会猜测以下结论成立:\(t + 1\) 个 \(t\) 阶一元多项式唯一确定一个 \(t\) 阶二元多项式。具体而言,对于 \(t\) 阶二元多项式 \(S(x, y)\),固定 \(y\) 为某个值 \(\alpha\) 就得到一个 \(t\) 阶一元多项式 \(f(x) = S(x, \alpha)\). 于是,\(t + 1\) 个(互不相同的)值 \(\alpha_1, …, \alpha_{t+1}\) 定义了 \(t + 1\) 个 \(t\) 阶一元多项式 \(f_k(x) = S(x, \alpha_k)\). 反过来,给定 \(t + 1\) 个(互不相同的)值 \(\alpha_1, …, \alpha_{t+1}\) 和 \(t + 1\) 个 \(t\) 阶一元多项式 \(f_1(x), …, f_{t+1}(x)\),应该存在唯一的 \(t\) 阶二元多项式 \(S(x, y)\),满足 \(S(x, \alpha_k) = f_k(x), \; k = 1, …, t + 1\). 我们把上述猜想形式化地写成以下引理。

引理

令 \(t\) 是一个非负整数。令 \(\alpha_1, \dots, \alpha_{t+1}\) 是 \(t + 1\) 个域 \(\mathbb{F}\) 上的不同元素。令 \(f_1(x), \dots, f_{t+1}(x)\) 是 \(t + 1\) 个 \(t\) 阶多项式。那么,存在唯一的 \(t\) 阶二元多项式 \(S(x, y)\),对 \(k = 1, \dots, t + 1\) 都满足

引理(续 2)

\[S(x, \alpha_k) = f_k(x)\]

可以提前告诉读者:该引理是正确的。但为了在本节一次性地连贯介绍BGW协议的总体思路,我们将该引理的证明放在下一小节。

使用二元多项式进行可验证秘密分享。沿着引理 9.1的思路,我们首先将 \(t\) 阶一元多项式 \(q(z)\) “嵌入”二元多项式 \(S(x, y)\) 中,其中 \(q(0) = s\). 具体而言,\(S(x, y)\) 是均匀随机选择的 \(t\) 阶二元多项式,但满足条件 \(S(0, z) = q(z)\). 于是,\(q(\alpha_1), …, q(\alpha_n)\) 就是嵌入 \(S(x, y)\) 的Shamir秘密份额。然后,秘密分发者向 \(P_i\) 发送两个一元多项式 \(f_i(x) = S(x, \alpha_i), \; g_i(y) = S(\alpha_i, y)\). 根据定义,它们满足 \(f_i(\alpha_j) = S(\alpha_j, \alpha_i) = g_j(\alpha_i), \; g_i(\alpha_j) = S(\alpha_i, \alpha_j) = f_j(\alpha_i)\). 这样一来,任意两个参与方 \(P_i\) 和 \(P_j\) 就可以通过检查 \(f_i(\alpha_j) \stackrel{?}{=} g_j(\alpha_i)\) 和 \(g_i(\alpha_j) \stackrel{?}{=} f_j(\alpha_i)\) 来验证他们收到的多项式是否两两一致(consistent)。\(P_i\) 还需要检查自己的多项式是否满足 \(f_i(\alpha_i) \stackrel{?}{=} g_i(\alpha_i)\). 如果验证均通过,\(P_i\) 输出自己的秘密份额为 \(f_i(0) = q(\alpha_i)\).

接下来,我们分析一下该方案的正确性和隐私性。

引理

(BGW VSS正确性)令 \(K \subseteq [n]\) 是索引的集合,满足 \(|K| \geq t + 1\),令 \(\{f_k(x), g_k(y)\}_{k \in K}\) 是 \(t\) 阶多项式对的集合,令 \(\{\alpha_k\}_{k \in K}\) 是域 \(\mathbb{F}\) 上互不相同的非0元素。如果对于所有 \(i, j \in K\),都有 \(f_i(\alpha_j) = g_j(\alpha_i)\),那么存在唯一的 \(t\) 阶二元多项式 \(S\),满足 \(f_k(x) = S(x, \alpha_k)\) 和 \(g_k(y) = S(\alpha_k, y)\) 对所有 \(k \in K\) 都成立。

基于引理 9.1,不难证明引理 9.2是正确的。同样,我们将该引理的证明放在下一小节。

我们还需要证明隐私性,也就是说,被攻陷方接收到的多项式 \(\{f_i(x), g_i(y)\}_{i \in I}, | I | \leq t\) 不会泄露关于 \(s\) 的信息。实际上,我们可以证明一个更强的引理:对于任意两个多项式 \(q_1, q_2\),满足 \(q_1(\alpha_i) = q_2(\alpha_i) = f_i(0)\) 对 \(i \in I\) 都成立,当 \(S(x, y)\) 基于 \(q_1(z)\) 选择时,多项式集合 \(\{f_i(x), g_i(y)\}_{i \in I}\) 的分布与 \(S(x, y)\) 基于 \(q_2(z)\) 选择时 \(\{f_i(x), g_i(y)\}_{i \in I}\) 的分布是相同的。由此得到的推论是:\(\{f_i(x), g_i(y)\}_{i \in I}\) 不会泄露关于秘密是 \(s_1 = q_1(0)\) 还是 \(s_2 = q_2(0)\) 的任何信息。

引理

(BGW VSS隐私性)令 \(\alpha_1, \dots, \alpha_n \in \mathbb{F}\) 是 \(n\) 个互不相同的非0元素,集合 \(I \subset [n] \) 且 \(| I | \leq t\). 令 \(q_1\) 和 \(q_2\) 是两个域 \(\mathbb{F}\) 上的 \(t\) 阶多项式,满足 \(q_1(\alpha_i) = q_2(\alpha_i)\) 对 \(i \in I\) 都成立。那么,

引理(续 2)

\[\Big\{ \{ (i, S_1(x, \alpha_i), S_1(\alpha_i, y)) \}_{i \in I} \Big\} \stackrel{\mathrm{perf}}{=} \Big\{ \{ (i, S_2(x, \alpha_i), S_2(\alpha_i, y)) \}_{i \in I} \Big\}\]

引理(续 3)

其中,\(S_1(x, y)\) 和 \(S_2(x, y)\) 是在约束条件 \(S_1(0, z) = q_1(z)\) 和 \(S_2(0, z) = q_2(z)\) 下均匀随机选择的 \(t\) 阶二元多项式。

该引理的证明与一元多项式的情形类似,实际上是二元情形的推广。同样,我们将该引理的证明放在下一小节。

如果有人提出投诉(complaint)?按照上述协议,如果所有验证都通过,没有参与方提出投诉,那么一切非常美好——被分享的秘密是良好定义的,且不会泄露任何信息。但是,如果有参与方提出投诉,表示他接收到的份额不满足 \(f_i(\alpha_j) = g_j(\alpha_i)\) 和 \(g_i(\alpha_j) = f_j(\alpha_i)\),此时,协议该如何处理呢?

这里我们假设存在认证的(authenticated)广播信道(即广播者的身份是已知的)。对于参与方 \(P_j\),按照协议,他从 \(P_i\) 处收到 \(f_i(\alpha_j), g_i(\alpha_j)\),如果 \(f_j(\alpha_i) \neq g_i(\alpha_j)\) 或 \(g_j(\alpha_i) \neq f_i(\alpha_j)\),这有可能是因为秘密分发者是被攻陷的,或 \(P_i\) 是被攻陷的。此时,\(P_j\) 广播 \((j, i, f_j(\alpha_i), g_j(\alpha_i))\) 来提出投诉. 注意,这里的 \(f_j(\alpha_i), g_j(\alpha_i)\) 是由秘密分发者发给 \(P_j\) 的多项式 \(f_j(x), g_j(y)\) 所定义的。然后,秘密分发者检查 \(f_j(\alpha_i), g_j(\alpha_i)\) 的值是否正确,如果正确,那就什么都不做;如果不正确,秘密分发者广播正确的多项式 \(f_j(x), g_j(y)\),然后其他参与方检查 \(f_j(x), g_j(y)\) 与自己的多项式是否一致。

在秘密分发者是诚实的情况下,容易看出上述方案是可行的。因为这种情况下,所有诚实方一定会获得一致的多项式,投诉只可能是因为被攻陷方提出错误的投诉(此时秘密分发者会广播他的多项式,这不会给被攻陷方带来更多信息),或者被攻陷方向诚实方发送错误的值(此时秘密分发者不会广播诚实方的多项式)。但是,在秘密分发者是被攻陷的情况下,协议必须保证:在投诉解决阶段,除非秘密分发者重新向所有诚实方发送了一致的多项式,否则所有诚实方都应该拒绝并输出 \(\bot\). 因此,投诉解决的方案需要小心的设计。我们先给出完整的协议,如图 9.9所示,然后再解释其原理。

BGW可验证秘密分享协议

\(\small\)

输入:秘密分发者 \(D = P_1\) 持有至多 \(t\) 阶的多项式 \(q(x)\),\(t < n/3\). 其他参与方 \(P_2, …, P_n\) 没有输入。

公共输入:域 \(\mathbb{F}\) 和 \(n\) 个互不相同的非0元素 \(\alpha_1, …, \alpha_n \in \mathbb{F}\).

协议:

  1. 第1轮(发送多项式)。秘密分发者执行以下操作:
    1. 均匀随机选择二元多项式 \(S(x, y) \in \mathcal{B}^{q(0), t}\),满足条件 \(S(0, z) = q(z)\).

    2. 对于 \(i \in [n]\),定义多项式 \(f_i(x) = S(x, \alpha_i), \; g_i(y) = S(\alpha_i, y)\). 向 \(P_i\) 发送多项式 \(f_i(x)\) 和 \(g_i(y)\).

  2. 第2轮(交换子份额)。每个参与方 \(P_i\) 执行以下操作:
    1. 保存从秘密分发者处收到的多项式 \(f_i(x)\) 和 \(g_i(y)\)(如果阶数大于 \(t\),则截断高于 \(t\) 阶的项)。

    2. 对于 \(j \in [n]\),发送 \(f_i(\alpha_j)\) 和 \(g_i(\alpha_j)\) 给 \(P_j\)(注意,这里涉及到发送给自己)。

  3. 第3轮(投诉广播)。每个参与方 \(P_i\) 执行以下操作:
    1. 对于 \(j \in [n]\),令 \((u_j, v_j)\) 是在第2轮中从 \(P_j\) 处收到的值,如果 \(u_j \neq g_i(\alpha_j)\) 或 \(v_j \neq f_i(\alpha_j)\),广播 \(\mathsf{complaint}(i, j, f_i(\alpha_j), g_i(\alpha_j))\).(注意,当 \(f_i(\alpha_i) \neq g_i(\alpha_i)\) 时,\(P_i\) 会广播 \(\mathsf{complaint}(i, i, f_i(\alpha_i), g_i(\alpha_i))\).)

    2. 如果没有参与方广播 \(\mathsf{complaint}\),每个参与方 \(P_i\) 输出 \(f_i(0)\) 并终止。

  4. 第4轮(投诉解决)。对于每条 \(\mathsf{complaint}\) 消息,秘密分发者执行以下操作:
    1. 对于 \(P_i\) 广播的消息 \(\mathsf{complaint}(i, j, u, v)\),检查 \(u \stackrel{?}{=} S(\alpha_j, \alpha_i)\) 和 \(v \stackrel{?}{=} S(\alpha_i, \alpha_j)\). 如果都成立,什么都不做;否则,广播 \(\mathsf{reveal}(i, f_i(x), g_i(y))\).

  5. 第5轮(评估投诉解决)。每个参与方 \(P_i\) 执行以下操作:
    1. 对于所有 \(j \neq k\),如果看到 \(P_k\) 和 \(P_j\) 广播的两条消息 \(\mathsf{complaint}(k, j, u_1, v_1)\) 和 \(\mathsf{complaint}(j, k, u_2, v_2)\) 满足 \(u_1 \neq v_2\) 或 \(v_1 \neq u_2\),那么将 \((j, k)\) 记为 \(\mathsf{joint \text{ } complaint}\). 对于 \(j = k\),如果看到 \(P_j\) 广播的消息 \(\mathsf{complaint}(j, j, u, v)\) 满足 \(u \neq v\),那么将 \((j, j)\) 也记为 \(\mathsf{joint \text{ } complaint}\). 如果存在 \(\mathsf{joint \text{ } complaint}\) \((j, k)\) 且秘密分发者既没有广播 \(\mathsf{reveal}(k, f_k(x), g_k(y))\) 也没有广播 \(\mathsf{reveal}(j, f_j(x), g_j(y))\),那么跳到步骤6(且不广播 \(\mathsf{consistent}\));否则,执行下一步。

    2. 考虑秘密分发者广播的消息集合 \(\mathsf{reveal}(j, f_j(x), g_j(y))\)(如果阶数大于 \(t\),则截断高于 \(t\) 阶的项):

      1. 如果存在一条消息满足 \(j = i\),那么将保存的多项式 \(f_i(x), g_i(y)\) 更新为 \(f_j(x), g_j(y)\),然后跳到步骤6(且不广播 \(\mathsf{consistent}\))。

      2. 如果存在一条消息满足 \(j \neq i\),并且 \(f_i(\alpha_j) \neq g_j(\alpha_i)\) 或 \(g_i(\alpha_j) \neq f_j(\alpha_i)\),那么跳到步骤6(且不广播 \(\mathsf{consistent}\))。

      如果秘密分发者广播的 \(\mathsf{reveal}\) 消息均不满足以上任何一个条件,那么执行下一步。
    3. 广播 \(\mathsf{consistent}\).

  6. 输出决定。每个参与方 \(P_i\) 执行以下操作:
    如果至少 \(n - t\) 个参与方广播了 \(\mathsf{consistent}\),输出 \(f_i(0)\);否则,输出 \(\bot\).

首先,对于秘密分发者是诚实的情况,正如上面的分析,所有诚实方都将获得一致的多项式,因此至少 \(n - t\) 个参与方会广播 \(\mathsf{consistent}\)(至少有 \(n - t\) 个诚实方),最后诚实的参与方 \(P_j\) 将输出 \(f_j(0) = S(0, \alpha_j) = q(\alpha_j)\).

对于秘密分发者是被攻陷的情况,诚实方 \(P_j\) 和 \(P_k\) 有可能收到不一致的多项式。如果他们收到了不一致的多项式,即 \(f_j(x), g_j(y)\) 和 \(f_k(x), g_k(y)\) 满足 \(f_j(\alpha_k) \neq g_k(\alpha_j)\) 或 \(g_j(\alpha_k) \neq f_k(\alpha_j)\),那么他们都会投诉,构成 \(\mathsf{joint \text{ } complaint}\). 然后,秘密分发者必须对此广播一条 \(\mathsf{reveal}\) 消息来解决投诉。要让 \(n - t\) 个参与方广播 \(\mathsf{consistent}\),至少要有 \((n - t) - t \geq t + 1\) 个诚实方广播 \(\mathsf{consistent}\). 这也就代表着,\(t + 1\) 个(或更多)诚实方在第1轮就收到了与 \(\mathsf{reveal}\) 消息中的新多项式两两一致的多项式,根据引理 9.2,这 \(t + 1\) 个(或更多)多项式已经唯一确定了二元多项式 \(S(x, y)\).

最后,我们还需要说明:那些没有广播 \(\mathsf{consistent}\) 的诚实方的多项式,也是来自同样的二元多项式 \(S(x, y)\) 的。这里用反证法。假设存在诚实方 \(P_j\) 满足 \(f_j(x) \neq S(x, \alpha_j)\)(\(g_j(y) \neq S(\alpha_j, y)\) 的情况同理),由于 \(f_j(x)\) 至多为 \(t\) 阶,因此 \(f_j(\alpha_k) = S(\alpha_k, \alpha_j)\) 最多对于 \(t\) 个 \(\alpha_k\) 成立。所以,\(P_j\) 的多项式上的点最多与 \(t\) 个广播了 \(\mathsf{consistent}\) 的诚实方相一致(广播了 \(\mathsf{consistent}\) 的诚实方都有 \(g_k(\alpha_j) = S(\alpha_k, \alpha_j)\))。而现在至少有 \(t + 1\) 个诚实方广播了 \(\mathsf{consistent}\),因此,\(P_j\) 必定和某个广播了 \(\mathsf{consistent}\) 的诚实方有 \(\mathsf{joint \text{ } complaint}\),并且已经被 \(\mathsf{reveal}\) 消息解决了,那么,\(P_j\) 更新后的多项式也是与 \(S(x, y)\) 相一致的。至此,我们完成了BGW可验证秘密分享的分析。

乘法协议。但是协议到这里还没有结束,回想一下,在半诚实安全的BGW协议中,对输入进行秘密分享后,我们需要逐个计算电路中的算术门。加法门与常数乘法门是线性操作,可以在本地完成,我们还需要设计一个对于恶意敌手安全的乘法协议。

假设乘法门的输入导线值为 \(a\) 和 \(b\),参与方 \(P_i\) 持有 \(t\) 阶的秘密份额 \(a_i\) 和 \(b_i\). 秘密份额的乘积 \(a_i \cdot b_i\) 定义了一个 \(2t\) 阶的多项式,其常数项为 \(a \cdot b\). 在半诚实安全的BGW协议中,\(P_i\) 对份额 \(a_i \cdot b_i\) 再进行秘密分享,然后将子份额线性重组,从而降阶为 \(t\) 阶多项式,其常数项仍为 \(a \cdot b\). 在恶意敌手模型下,难题在于:被攻陷方不一定会秘密分享正确的 \(a_i \cdot b_i\). 上文的可验证秘密分享只能保证被分享的秘密是被良好定义的,我们还需要一个机制来强制参与方秘密分享 \(a_i \cdot b_i\).

为此,乘法协议总体分为三步:

  1. 每个参与方首先可验证地秘密分享他们输入导线上的份额,即,\(P_i\) 对秘密份额 \(a_i\) 和 \(b_i\) 进行秘密分享。因为输入份额位于 \(t\) 阶多项式上,它们构成以 \([n, t + 1, n - t]\) 为参数的Reed-Solomon码,因此可以通过纠错码的性质纠正最多 \(t\) 个错误,使每个参与方得到正确的子份额。

  2. 然后,每个参与方秘密分享 \(a_i \cdot b_i\). 由于上一步已经对 \(a_i\) 和 \(b_i\) 正确地秘密分享,因此这一步也能够可验证的进行。换句话说,此步骤中,参与方在已知 \(a_i\) 和 \(b_i\) 的子份额的情况下,验证秘密分发者正确地秘密分享了 \(a_i \cdot b_i\).

  3. 最后,每个参与方持有了 \(a_i \cdot b_i\) 的(\(t\) 阶的)子份额。与半诚实安全的BGW协议中相同,他们将子份额线性重组,得到的份额落在新的 \(t\) 阶多项式上,其常数项为 \(a \cdot b\).

这里,步骤1和2讲得有些模糊,因为协议较为复杂,实在无法用几句话概括总体思想。后文中会对其详细阐释。

协议概览。最后,我们总结一下恶意安全的BGW协议的总体流程。假设被攻陷方的数量不超过 \(t\),\(t < n/3\),参与方存在点对点的安全信道和认证的广播信道。

  1. 输入分享:每个参与方使用上文所述的可验证秘密分享协议分享自己的输入。

  2. 逐门计算:对于加法门和常数乘法门,在本地对秘密份额进行相应的计算;对于乘法门,调用乘法协议进行计算。

  3. 输出重建:对于输出值 \(y\),每个参与方广播自己的秘密份额 \(y_i\),然后调用Reed-Solomon解码算法恢复出 \(y\) 值。

下面,我们开始进行形式化的协议描述和安全性证明。我们将采用模块化的方式,将可验证秘密分享和乘法协议抽象为理想功能 \(\mathcal{F}_{\mathsf{VSS}}\) 和 \(\mathcal{F}_{\mathsf{mult}}\),然后在 \(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}}\}\)-混合模型下实现安全计算协议。

准备工作——Shamir秘密分享的性质与引理证明

在开始正式的协议描述之前,让我们先做一些准备工作:我们给出关于Shamir秘密分享性质的几个引理和推论,以及在上一节中省略的引理证明。

Shamir秘密分享的性质。在「Shamir秘密分享」一节中,我们证明了:任意 \(t\) 个Shamir秘密份额是 \(\mathbb{F}^t\) 上的均匀分布。我们用 \(\mathcal{P}^{s, t}\) 表示常数项为 \(s\),阶数不超过 \(t\) 的所有多项式的集合。上述性质可以写成如下引理。

引理

对于任意秘密 \(s \in \mathbb{F}\),任意互不相同的非0元素 \(\alpha_1, \dots, \alpha_n \in \mathbb{F}\),任意子集 \(I \subset [n]\) 满足 \(| I | = \ell \leq t\),有

引理(续 2)

\[\Big\{ \{ f(\alpha_i) \}_{i \in I} \Big\} \stackrel{\mathrm{perf}}{=} \Big\{ U_\mathbb{F}^{(1)}, \dots, U_\mathbb{F}^{(\ell)} \Big\}\]

引理(续 3)

其中 \(f(x) \leftarrow_{\$} \mathcal{P}^{s, t}\),\(U_\mathbb{F}^{(1)}, \dots, U_\mathbb{F}^{(\ell)}\) 是 \(\ell\) 个独立的服从 \(\mathbb{F}\) 上的均匀分布的随机变量。

很直接地,对于任意的两个秘密 \(s, s'\),有如下推论。

推论

对于任意互不相同的非0元素 \(\alpha_1, \dots, \alpha_n \in \mathbb{F}\),任意两个值 \(s, s' \in \mathbb{F}\),任意子集 \(I \subset [n]\) 满足 \(| I | = \ell \leq t\),以及任意 \(\boldsymbol{y} \in \mathbb{F}^\ell\),有

推论(续 2)

\[\Pr\limits_{f(x) \leftarrow_{\$} \mathcal{P}^{s, t}} \Big[ \boldsymbol{y} = (\{ f(\alpha_i) \}_{i \in I}) \Big] = \Pr\limits_{g(x) \leftarrow_{\$} \mathcal{P}^{s', t}} \Big[ \boldsymbol{y} = (\{ g(\alpha_i) \}_{i \in I}) \Big] = \frac{1}{|\mathbb{F}|^\ell}\]

在实际协议中,每个参与方都需要分享自己的输入。假设共有 \(m\) 个输入,被攻陷方将收到 \(m \cdot | I |\) 个秘密份额。我们将上述结论推广:\(m \cdot | I |\) 个秘密份额也不会泄露关于秘密的任何信息。这是因为这些份额服从 \(\mathbb{F}^{m \cdot | I |}\) 上的均匀分布。

推论

对于任意 \(m \in \mathbb{N}\),任意互不相同的非0元素 \(\alpha_1, \dots, \alpha_n \in \mathbb{F}\),任意两个秘密集合 \((a_1, \dots, a_m) \in \mathbb{F}^m\) 和 \((b_1, \dots, b_m) \in \mathbb{F}^m\),任意子集 \(I \subset [n]\) 满足 \(| I | = \ell \leq t\),有

推论(续 2)

\[\Big\{ \{ (f_1(\alpha_i), \dots, f_m(\alpha_i)) \}_{i \in I} \Big\} \stackrel{\mathrm{perf}}{=} \Big\{ \{ (g_1(\alpha_i), \dots, g_m(\alpha_i)) \}_{i \in I} \Big\}\]

推论(续 3)

其中,对于每个 \(j\),\(f_j(x), g_j(x)\) 都是分别从 \(\mathcal{P}^{a_j, t}\) 和 \(\mathcal{P}^{b_j, t}\) 中均匀随机选取的。

在Shamir秘密分享方案中,秘密分发者随机选取至多 \(t\) 阶的多项式,其常数项为秘密 \(s\). 我们考虑另一种选取多项式的方式,它将最高次项系数(leading coefficient)固定为秘密 \(s\),即 \(f(x) = a_0 + a_1 x + … + a_{t-1} x^{t-1} + s x^t\). 我们用 \(\mathcal{P}^\mathsf{lead}_{s, t}\) 表示最高次项 \(x^t\) 系数为 \(s\) 的所有 \(t\) 阶多项式的集合。与引理 9.4的证明过程类似,此时的秘密份额 \(\{ f(\alpha_i) \}_{i \in I}\) 仍为 \(\mathbb{F}^{| I |}\) 上的均匀随机分布。(注:这个引理是为证明后文中的定理做准备。)

引理

对于任意秘密 \(s \in \mathbb{F}\),任意互不相同的非0元素 \(\alpha_1, \dots, \alpha_n \in \mathbb{F}\),任意子集 \(I \subset [n]\) 满足 \(| I | = \ell \leq t\),有

引理(续 2)

\[\Big\{ \{ f(\alpha_i) \}_{i \in I} \Big\} \stackrel{\mathrm{perf}}{=} \Big\{ U_\mathbb{F}^{(1)}, \dots, U_\mathbb{F}^{(\ell)} \Big\}\]

引理(续 3)

其中 \(f(x) \leftarrow_{\$} \mathcal{P}^\mathsf{lead}_{s, t}\),\(U_\mathbb{F}^{(1)}, \dots, U_\mathbb{F}^{(\ell)}\) 是 \(\ell\) 个独立的服从 \(\mathbb{F}\) 上的均匀分布的随机变量。

准备工作——Shamir秘密分享的性质与引理证明 · 公式

引理证明。下面,我们给出上一节中省略的引理证明。

\[S(x, \alpha_k) = f_k(x)\]

准备工作——Shamir秘密分享的性质与引理证明

通过拉格朗日插值,定义二元多项式 \(S(x, y)\) 如下:

\[S(x, y) = \sum\limits_{i=1}^{t+1} f_i(x) \cdot \frac{\prod_{j \neq i} (y - \alpha_j)}{\prod_{j \neq i} (\alpha_i - \alpha_j)}\]

不难看出,\(S(x, y)\) 为 \(t\) 阶二元多项式,且对 \(k = 1, \dots, t + 1\) 有

\[\begin{aligned} S(x, \alpha_k) & = \sum\limits_{i=1}^{t+1} f_i(x) \cdot \frac{\prod_{j \neq i} (\alpha_k - \alpha_j)}{\prod_{j \neq i} (\alpha_i - \alpha_j)} \\ & = f_k(x) \cdot \frac{\prod_{j \neq k} (\alpha_k - \alpha_j)}{\prod_{j \neq k} (\alpha_k - \alpha_j)} + \sum\limits_{i \in [t+1] \backslash \{k\}} f_i(x) \cdot \frac{\prod_{j \neq i} (\alpha_k - \alpha_j)}{\prod_{j \neq i} (\alpha_i - \alpha_j)} \\ & = f_k(x) + 0 \\ & = f_k(x) \end{aligned}\]

故 \(S(x, y)\) 满足式(式 9.10)。下面只需要证明 \(S(x, y)\) 是唯一的。假设存在两个不同的 \(t\) 阶二元多项式 \(S_1, S_2\) 均满足式(式 9.10)。定义多项式 \(R(x, y)\) 如下

\[R(x, y) = S_1(x, y) - S_2(x, y) = \sum\limits_{i=0}^t \sum\limits_{j=0}^t r_{i, j} \cdot x^i y^j\]

我们证明 \(R(x, y) = 0\). 首先,对于 \(k \in [t + 1]\),有

\[R(x, \alpha_k) = \sum\limits_{i, j = 0}^t r_{i, j} \cdot x^i (\alpha_k)^j = S_1(x, \alpha_k) - S_2(x, \alpha_k) = f_k(x) - f_k(x) = 0\]

我们可以将 \(R(x, \alpha_k)\) 重新写为

\[R(x, \alpha_k) = \sum\limits_{i=0}^t \left( \left( \sum\limits_{j=0}^t r_{i, j} \cdot (\alpha_k)^j \right) \cdot x^i \right)\]

因为 \(R(x, \alpha_k) = 0\),所以 \(R(x, \alpha_k)\) 的系数全为0,即,对每个固定的 \(i \in \{0, 1, …, t\}\) 有 \(\sum_{j=0}^t r_{i, j} \cdot (\alpha_k)^j = 0\). 也就是说,对每个固定的 \(i \in \{0, 1, …, t\}\),多项式 \(h_i(x) = \sum_{j=0}^t r_{i, j} \cdot x^j\) 在 \(t + 1\) 个点 \(\alpha_1, …, \alpha_{t+1}\) 处的值都为0,因而 \(h_i(x)\) 也是0多项式,它的系数 \(r_{i, j}\) 均为0 (\(j \in \{0, 1, …, t\}\))。因此,对于 \(i, j \in \{0, 1, …, t\}\),都有 \(r_{i, j} = 0\). 于是我们得出结论,对于所有的 \(x, y\) 都有 \(R(x, y) = 0\),即 \(S_1(x, y) = S_2(x, y)\).

证毕。

\(\) 引理 9.9. (BGW VSS正确性)令 \(K \subseteq [n]\) 是索引的集合,满足 \(|K| \geq t + 1\),令 \(\{f_k(x), g_k(y)\}_{k \in K}\) 是 \(t\) 阶多项式对的集合,令 \(\{\alpha_k\}_{k \in K}\) 是域 \(\mathbb{F}\) 上互不相同的非0元素。如果对于所有 \(i, j \in K\),都有 \(f_i(\alpha_j) = g_j(\alpha_i)\),那么存在唯一的 \(t\) 阶二元多项式 \(S\),满足 \(f_k(x) = S(x, \alpha_k)\) 和 \(g_k(y) = S(\alpha_k, y)\) 对所有 \(k \in K\) 都成立。

准备工作——Shamir秘密分享的性质与引理证明

令 \(L\) 是一个大小恰好为 \(t + 1\) 的 \(K\) 的子集。由引理 9.1可知,存在唯一的 \(t\) 阶二元多项式 \(S(x, y)\) 满足 \(S(x, \alpha_\ell) = f_\ell(x)\) 对 \(\ell \in L\) 都成立。下面我们证明,如果 \(f_i(\alpha_j) = g_j(\alpha_i)\) 对 \(i, j \in K\) 都成立,那么对所有 \(k \in K\) 都有 \(f_k(x) = S(x, \alpha_k)\) 和 \(g_k(y) = S(\alpha_k, y)\).

首先,根据引理的条件,对于所有 \(k \in K\) 和 \(\ell \in L\) 都有 \(g_k(\alpha_\ell) = f_\ell(\alpha_k)\). 根据 \(S(x, y)\) 的定义,有 \(f_\ell(\alpha_k) = S(\alpha_k, \alpha_\ell)\). 因此,对于所有 \(k \in K\) 和 \(\ell \in L\) 都有 \(g_k(\alpha_\ell) = S(\alpha_k, \alpha_\ell)\). 由于 \(g_k(y)\) 和 \(S(\alpha_k, y)\) 都是 \(t\) 阶多项式,它们在 \(t + 1\) 个点 \(\alpha_\ell\) 处满足 \(g_k(\alpha_\ell) = S(\alpha_k, \alpha_\ell)\),因此对于 \(k \in K\) 都有 \(g_k(y) = S(\alpha_k, y)\).

我们还需要证明 \(f_k(x) = S(x, \alpha_k)\) 对 \(k \in K\) 都成立。根据 \(S(x, y)\) 的定义,当 \(k \in L\) 时该式一定成立,我们需要证明 \(k \in K \backslash L\) 的情况。同样,根据引理的条件,对于所有 \(j, k \in K\) 都有 \(f_k(\alpha_j) = g_j(\alpha_k)\). 而上面已经证明 \(g_j(\alpha_k) = S(\alpha_j, \alpha_k)\) 对 \(j, k \in K\) 都成立。因此,对 \(j, k \in K\) 都有 \(f_k(\alpha_j) = S(\alpha_j, \alpha_k)\). 由于 \(f_k(x)\) 和 \(S(x, \alpha_k)\) 都是 \(t\) 阶多项式,它们在至少 \(t + 1\) 个点 \(\alpha_j\) 处满足 \(f_k(\alpha_j) = S(\alpha_k, \alpha_j)\),因此对于 \(k \in K\) 都有 \(f_k(x) = S(x, \alpha_k)\).

证毕。

准备工作——Shamir秘密分享的性质与引理证明 · 公式

\[\Big\{ \{ (i, S_1(x, \alpha_i), S_1(\alpha_i, y)) \}_{i \in I} \Big\} \stackrel{perf}{=} \Big\{ \{ (i, S_2(x, \alpha_i), S_2(\alpha_i, y)) \}_{i \in I} \Big\}\]

其中,\(S_1(x, y)\) 和 \(S_2(x, y)\) 是在约束条件 \(S_1(0, z) = q_1(z)\) 和 \(S_2(0, z) = q_2(z)\) 下均匀随机选择的 \(t\) 阶二元多项式。

准备工作——Shamir秘密分享的性质与引理证明

定义概率集合(probability ensemble) \(\mathbb{S}_1\) 和 \(\mathbb{S}_2\) 如下:

\[\mathbb{S}_1 = \Big\{ \{ (i, S_1(x, \alpha_i), S_1(\alpha_i, y)) \}_{i \in I} \; | \; S_1 \leftarrow_{\$} \mathcal{B}^{q_1(0), t} \text{ s.t. } S_1(0, z) = q_1(z) \Big\}\]
\[\mathbb{S}_2 = \Big\{ \{ (i, S_2(x, \alpha_i), S_2(\alpha_i, y)) \}_{i \in I} \; | \; S_2 \leftarrow_{\$} \mathcal{B}^{q_2(0), t} \text{ s.t. } S_2(0, z) = q_2(z) \Big\}\]

上述引理等价于证明 \(\mathbb{S}_1 \stackrel{\mathrm{perf}}{=} \mathbb{S}_2 \).

我们首先证明,对于任意的多项式对集合 \(Z = \{ (i, f_i(x), g_i(y)) \}_{i \in I}\),\(\mathbb{S}_1\) 的支持集(support)中与 \(Z\) 一致的二元多项式的数量等于\(\mathbb{S}_2\) 的支持集中与 \(Z\) 一致的二元多项式的数量,这里的一致指的是 \(f_i(x) = S(x, \alpha_i)\) 且 \(g_i(y) = S(\alpha_i, y)\).

注意到,如果存在 \(i, j \in I\) 满足 \(f_i(\alpha_j) \neq g_j(\alpha_i)\),那么 \(\mathbb{S}_1\) 和 \(\mathbb{S}_2\) 的支持集中都不存在与 \(Z\) 一致的二元多项式。另外,如果存在 \(i \in I\) 满足 \(f_i(0) \neq q_1(\alpha_i)\),那么 \(\mathbb{S}_1\) 和 \(\mathbb{S}_2\) 的支持集中也不存在与 \(Z\) 一致的二元多项式(这是因为对于 \(\mathbb{S}_1\) 而言 \(f_i(0) = S(0, \alpha_i) = q_1(\alpha_i)\) 应该成立,对于 \(\mathbb{S}_2\) 也同理,因为 \(q_1(\alpha_i) = q_2(\alpha_i)\) 对 \(i \in I\) 都成立)。

令 \(Z = \{ ( i, f_i(x), g_i(y) ) \}_{i \in I}\) 是 \(t\) 阶多项式对的集合,且满足 \(f_i(\alpha_j) = g_j(\alpha_i)\) 对 \(i, j \in I\) 都成立,\(f_i(0) = q_1(\alpha_i) = q_2(\alpha_i)\) 对 \(i \in I\) 都成立。首先,我们计算 \(\mathbb{S}_1\) 中多项式的数量。因为 \(Z\) 包含 \(I\) 个 \(t\) 阶多项式 \(\{f_i(x)\}_{i \in I}\),并且 \(t + 1\) 个这样的多项式唯一确定一个 \(t\) 阶二元多项式,因此,需要再选择 \(t + 1 - | I |\) 个与 \(q_1(z), \; \{g_i(y)\}_{i \in I}\) 相一致的多项式 \(f_j(x)\) (\(j \neq i\)),即 \(f_j(x)\) 必须满足 \(f_j(\alpha_i) = g_i(\alpha_j)\) 对 \(i \in I\) 都成立,且 \(f_j(0) = q_1(\alpha_j)\). 由此可知,\(f_j\) 有 \(| I | + 1\) 个点已经确定了,而 \(t + 1\) 个点唯一确定一个 \(t\) 阶多项式,所以其余的 \(t - | I |\) 个点可以任意地选择。于是,总共有 \((|\mathbb{F}|^{t - | I |})^{(t+1-| I |)}\) 种方式选择 \(S_1\),使其与 \(Z\) 相一致。接着我们计算 \(\mathbb{S}_2\) 中多项式的数量,其过程与 \(\mathbb{S}_1\) 的计算完全相同,我们得到 \(S_2\) 的选择方式也有 \((|\mathbb{F}|^{t - | I |})^{(t+1-| I |)}\) 种。

至此,我们证明了 \(\mathbb{S}_1\) 的支持集中与 \(Z\) 一致的多项式的数量与 \(\mathbb{S}_2\) 相等。又因为 \(S_1\) 和 \(S_2\) 分别是从 \(\mathbb{S}_1\) 和 \(\mathbb{S}_2\) 的支持集中均匀随机选取的,所以无论概率集合是 \(\mathbb{S}_1\) 还是 \(\mathbb{S}_2\),得到 \(Z\) 的概率都是相等的。证毕。

BGW可验证秘密分享

接下来,我们正式进入BGW协议的介绍。我们首先介绍BGW可验证秘密分享,它的协议已经在上文的讨论中给出,如图 9.9所示。现在,我们要形式化地证明其安全性。

首先,我们定义理想功能 \(\mathcal{F}_{\mathsf{VSS}}\),如图 9.17所示。

BGW可验证秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}\)

\[\mathcal{F}_{\mathsf{VSS}}(q(x), \lambda, \dots, \lambda) = \begin{cases} (q(\alpha_1), \dots, q(\alpha_n)) & \text{ if } \text{deg}(q) \leq t \\ (\bot, \dots, \bot) & \text{ otherwise} \end{cases}\]

BGW可验证秘密分享理想功能

在理想功能 \(\mathcal{F}_{\mathsf{VSS}}\) 中,秘密分发者的输入是多项式 \(q(x)\),其他参与方没有输入;协议的输出是 \(P_i\) 获得秘密份额 \(q(\alpha_i)\). 这里的“可验证性”体现在:(1) 如果 \(q\) 的阶数高于 \(t\),那么所有参与方都会拒绝并输出 \(\bot\);(2) 秘密 \(s = q(0)\) 被隐式地定义了,因而一定是良好定义的。当参与方需要可验证地分享秘密 \(s\) 时,秘密分发者首先随机选取多项式 \(q \leftarrow_{\$} \mathcal{P}^{s, t}\),然后以 \(q(x)\) 为输入运行 \(\mathcal{F}_{\mathsf{VSS}}\) 即可。

注意,这里的 \(\mathcal{F}_{\mathsf{VSS}}\) 是专门为BGW协议而定义的,我们也可以定义一种更广义的VSS(类似于多方场景下的承诺)。但因为BGW协议只需要对秘密份额 \(q(\alpha_1), …, q(\alpha_n)\) 做计算,所以我们采用这种更简单的定义方式。

我们有以下安全性定理。

定理

假设参与方之间存在点对点安全信道、认证的广播信道。假设被攻陷方数量不超过 \(t, \; t < n/3\),图 9.9中的协议 \(\Pi_\mathsf{VSS}\) 对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{VSS}}\)(图 9.17)。

BGW可验证秘密分享 · 证明

要证明此定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

\[\operatorname{exec}_{\Pi_\mathsf{VSS},\mathcal{A},\mathcal{Z}} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{VSS}},\mathcal{S},\mathcal{Z}}\]

其中 \(\mathcal{A}\) 是平凡敌手。

我们分两种情况考虑:(1) 秘密分发者是诚实的,(2) 秘密分发者是被攻陷的。对于第1种情况,我们证明诚实方总会接受分发的秘密份额,即敌手无法通过错误的投诉来影响最终结果;第2种情况更复杂些,我们需要证明:如果秘密分发者解决了投诉,使得至少 \(n - t\) 个参与方广播了 \(\mathsf{consistent}\),那么此时所有诚实方一定持有着一致的秘密份额。

情况1:秘密分发者是诚实的。

在这种情况的理想世界中,秘密分发者向 \(\mathcal{F}_{\mathsf{VSS}}\) 发送 \(q(x)\),每个诚实方 \(P_j\) 从 \(\mathcal{F}_{\mathsf{VSS}}\) 处接收到 \(q(\alpha_j)\). 因为此时被攻陷方没有输入,所以敌手无法影响诚实方的输出。我们要证明:在真实世界中,诚实方 \(P_j\) 也总是输出 \(q(\alpha_j)\),不会输出 \(\bot\).

由于秘密分发者是诚实的,他将遵循协议选择二元多项式,并向每个参与方发送协议规定的一元多项式。此时,诚实方 \(P_j\) 只可能输出 \(f_j(0) = S(0, \alpha_j) = q(\alpha_j)\) 或 \(\bot\)(\(P_j\) 的多项式 \(f_j(x)\) 发生改变只可能是秘密分发者在解决投诉阶段发送了 \(\mathsf{reveal}(j, f'_j(x), g_j(y))\) 且 \(f'_j(x) \neq f_j(x)\),但是诚实的秘密分发者不会这么做)。下面,我们说明 \(P_j\) 不会输出 \(\bot\). 在协议中,当至少 \(n - t\) 个参与方广播 \(\mathsf{consistent}\) 时,诚实方就会输出 \(f_j(0)\) 而不是 \(\bot\). 我们只需证明所有诚实方都会广播 \(\mathsf{consistent}\). 对于诚实方 \(P_j\),他广播 \(\mathsf{consistent}\) 当且仅当以下条件成立:

  1. 秘密分发者解决了所有投诉:如果存在 \(\mathsf{joint \text{ } complaint}\) 消息 \(\mathsf{complaint}(k, \ell, u_1, v_1)\) 和 \(\mathsf{complaint}(\ell, k, u_2, v_2)\) 满足 \(u_1 \neq v_2\) 或 \(v_1 \neq u_2\),秘密分发者在步骤 4(a), 对 \(k\) 或 \(\ell\) 或两者广播了 \(\mathsf{reveal}\) 消息。(见步骤 5(a))

  2. 秘密分发者没有广播 \(\mathsf{reveal}(j, f_j(x), g_j(y))\). (见步骤 5(b)i)

  3. \(\mathsf{reveal}\) 消息与 \(P_j\) 的多项式相一致:每条 \(\mathsf{reveal}\) 消息 \(\mathsf{reveal}(k, f_k(x), g_k(y))\) 都满足 \(g_k(\alpha_j) = f_j(\alpha_k)\) 和 \(f_k(\alpha_j) = g_j(\alpha_k)\). (见步骤 5(b)ii)

在秘密分发者是诚实的情况下,对于每个 \(\mathsf{joint \text{ } complaint}\),他都会广播至少一条 \(\mathsf{reveal}\) 消息。这是因为当 \(u_1 \neq v_2\) 或 \(v_1 \neq u_2\) 时,不可能 \((u_1, v_1)\) 和 \((u_2, v_2)\) 都与 \(S(x, y)\) 相一致,故条件1满足。而且,因为秘密分发者是诚实的,条件3显然满足。最后,只有当 \(P_j\) 的 \(\mathsf{complaint}\) 消息中包含错误的 \((u, v)\) 值时,秘密分发者才会广播 \(\mathsf{reveal}(j, f_j(x), g_j(y))\). 由于 \(P_j\) 是诚实的,这种情况不会发生,故条件2也满足。综上,所有诚实方都会广播 \(\mathsf{consistent}\),因而每个诚实方 \(P_j\) 都会输出 \(f_j(0) = q(\alpha_j)\).

现在,我们可以给出模拟器 \(\mathcal{S}\) 的构造。假设被攻陷方的集合为 \(I\),模拟器 \(\mathcal{S}\) 的工作方式如下:

  • \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{A}\) 与环境 \(\mathcal{Z}\) 的消息。

  • 当 \(\mathcal{S}\) 得到被攻陷方的输出 \(\{q(\alpha_i)\}_{i \in I}\) 时,它需要模拟被攻陷方的视图:\(\mathcal{S}\) 随机选择多项式 \(q'(x)\),满足条件 \(q'(\alpha_i) = q(\alpha_i)\) 对 \(i \in I\) 都成立。然后,\(\mathcal{S}\) 以 \(q'(x)\) 作为秘密分发者的输入,模拟所有诚实方遵循协议执行。

我们证明 \(\mathcal{Z}\) 在理想世界和真实世界的视图是完美不可区分的。首先,观察到模拟的被攻陷方视图是由敌手 \(\mathcal{A}\) 和多项式对 \(\{(f_i(x), g_i(y))\}_{i \in I}\) 所决定的。这是因为除 \(\{(f_i(x), g_i(y))\}_{i \in I}\) 以外的消息只有投诉消息、投诉解决消息和 \(\mathsf{consistent}\) 消息。由于秘密分发者是诚实的,所以诚实方 \(P_j\) 提出投诉只可能是他收到了来自被攻陷方的错误的 \((u_i, v_i)\) 值,此时投诉消息为 \(\mathsf{complaint}(j, i, f_j(\alpha_i), g_j(\alpha_i))\),它等于 \(\mathsf{complaint}(j, i, g_i(\alpha_j), f_i(\alpha_j))\)(因为秘密分发者是诚实的),故这条投诉消息已经由 \(\{(f_i(x), g_i(y))\}_{i \in I}\) 所决定了。对于投诉解决消息,秘密分发者只会发送正确的 \(\mathsf{reveal}(i, f_i(x), g_i(y))\),它也由 \(\{(f_i(x), g_i(y))\}_{i \in I}\) 所决定了。由此可知,模拟视图中的消息由 \(\{(f_i(x), g_i(y))\}_{i \in I}\) 所决定,该结论对真实世界也成立。因此,理想世界与真实世界的唯一区别在于 \(\{(f_i(x), g_i(y))\}_{i \in I}\) 是基于 \(q'(x)\) 还是 \(q(x)\) 所选择的。但是根据引理 9.3,两者的分布完全相同,故 \(\mathcal{Z}\) 在理想世界和真实世界的视图是完美不可区分的。

情况2:秘密分发者是被攻陷的。

在这种情况下,敌手 \(\mathcal{A}\) 控制了秘密分发者,\(\mathcal{S}\) 需要模拟所有诚实方。注意到,除了秘密分发者以外,其他参与方都没有输入且行为是确定性的。\(\mathcal{S}\) 的构造思路是这样的:如果理想世界模拟的运行中,参与方输出 \(\bot\),那么 \(\mathcal{S}\) 代表秘密分发者发送一个不合法的多项式(例如 \(q'(x) = x^{2t}\))给理想功能 \(\mathcal{F}_{\mathsf{VSS}}\);如果模拟的运行中,参与方输出了秘密份额,那么 \(\mathcal{S}\) 根据其看到的秘密份额插值得到 \(S(x, y)\),然后代表秘密分发者发送 \(q(x) = S(0, x)\) 给 \(\mathcal{F}_{\mathsf{VSS}}\).

具体而言,模拟器 \(\mathcal{S}\) 的工作方式如下:

  1. \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{A}\) 与环境 \(\mathcal{Z}\) 的消息。

  2. \(\mathcal{S}\) 模拟 \(n - | I |\) 个诚实方遵循协议执行。

  3. 令 \(\mathsf{num}\) 为理想世界的模拟运行中广播了 \(\mathsf{consistent}\) 的(诚实的和被攻陷的)参与方数量:

    1. 如果 \(\mathsf{num} < n - t\),那么 \(\mathcal{S}\) 代表秘密分发者向 \(\mathcal{F}_{\mathsf{VSS}}\) 发送多项式 \(q'(x) = x^{2t}\) 作为输入(这会让 \(\mathcal{F}_{\mathsf{VSS}}\) 向所有参与方发送 \(\bot\) 作为输出)。

    2. 如果 \(\mathsf{num} \geq n - t\),那么 \(\mathcal{S}\) 通过以下方式计算 \(t\) 阶多项式 \(q'(x)\)。令 \(K \subset [n] \setminus I\) 是所有在模拟运行中广播了 \(\mathsf{consistent}\) 的诚实方的集合。根据引理 9.2,\(\mathcal{S}\) 找到集合 \(K\) 所唯一确定的 \(t\) 阶二元多项式 \(S(x, y)\). 然后,\(\mathcal{S}\) 设置 \(q'(x) = S(0, x)\) 并代表秘密分发者将其发送给 \(\mathcal{F}_{\mathsf{VSS}}\). 最后,\(\mathcal{S}\) 从 \(\mathcal{F}_{\mathsf{VSS}}\) 得到被攻陷方的输出 \(\{q'(\alpha_i)\}_{i \in I}\). \(\mathcal{S}\) 已经知道这些值,所以它们不会被使用。(但是 \(\mathcal{S}\) 需要代表秘密分发者将 \(q'(x)\) 发送给 \(\mathcal{F}_{\mathsf{VSS}}\),来让理想世界的诚实方接收到来自 \(\mathcal{F}_{\mathsf{VSS}}\) 的输出。)

注意到,协议中除了秘密分发者外,其他参与方的行为都是确定性的,并且,此时诚实方没有输入,因此在真实世界的运行和模拟运行中,敌手 \(\mathcal{A}\) 的视图是完全一致的。我们只需要证明,在真实世界和理想世界中,诚实方的输出是一致的。

\[\operatorname{output} \Big( \operatorname{real}_{\Pi_\mathsf{VSS}, \mathcal{A}(z), I}(q(x), \lambda, \dots, \lambda) \Big) = \operatorname{output} \Big( \operatorname{ideal}_{\mathcal{F}_{\mathsf{VSS}}, \mathcal{S}(z), I}(q(x), \lambda, \dots, \lambda) \Big)\]

BGW可验证秘密分享 · 证明

令 \(\boldsymbol{x} = (q(x), \lambda, …, \lambda)\) 是输入向量。我们分两种情况讨论:(1) 存在诚实方输出了 \(\bot\);(2) 没有诚实方输出 \(\bot\).

情况1:存在 \(j \in J\) 满足 \(\operatorname{output}_{j} ( \operatorname{real}_{\Pi_\mathsf{VSS}, \mathcal{A}(z), I}(q(x), \lambda, …, \lambda) ) = \bot\). 根据协议,诚实方 \(P_j\)(在真实世界)输出 \(\bot\) 当且仅当小于 \(n - t\) 个参与方广播了 \(\mathsf{consistent}\). 因为这些消息是广播的,参与方都会接收到同样的消息,因此所有诚实方在真实世界都会输出 \(\bot\).

下面证明,在理想世界中,诚实方也会输出 \(\bot\). 根据模拟器 \(\mathcal{S}\) 的构造,如果真实世界中小于 \(n - t\) 个参与方广播了 \(\mathsf{consistent}\),那么模拟运行中同样也会有小于 \(n - t\) 个参与方广播 \(\mathsf{consistent}\). 此时 \(\mathcal{S}\) 会代表秘密分发者向 \(\mathcal{F}_{\mathsf{VSS}}\) 发送 \(q'(x) = x^{2t}\),使理想世界的所有诚实方输出 \(\bot\).

情况2:对于 \(j \in J\) 都有 \(\operatorname{output}_{j} ( \operatorname{real}_{\Pi_\mathsf{VSS}, \mathcal{A}(z), I}(q(x), \lambda, …, \lambda) ) \neq \bot\). 此时,模拟运行中也有至少 \(n - t\) 个参与方广播 \(\mathsf{consistent}\). 由 \(n \geq 3t + 1\) 可知 \(n - t \geq 2t + 1\),又因为被攻陷方数量不超过 \(t\),所以至少有 \(t + 1\) 个诚实方广播了 \(\mathsf{consistent}\). 我们在“秘密分发者是诚实的”情况中讨论过,诚实方 \(P_j\) 广播 \(\mathsf{consistent}\) 当且仅当以下条件成立:

  1. 秘密分发者解决了所有投诉。(见步骤 5(a))

  2. 秘密分发者没有广播 \(\mathsf{reveal}(j, f_j(x), g_j(y))\). (见步骤 5(b)i)

  3. \(\mathsf{reveal}\) 消息与 \(P_j\) 的多项式相一致。(见步骤 5(b)ii)

令 \(K \subset [n]\) 是模拟器的步骤 3(b) 中广播 \(\mathsf{consistent}\) 的诚实方,对于他们而言,上述条件成立,即 \(f_i(\alpha_j) = g_j(\alpha_i)\) 对 \(i, j \in K\) 都成立。根据引理 9.2,存在唯一的 \(t\) 阶二元多项式 \(S(x, y)\) 满足 \(S(x, \alpha_k) = f_k(x)\) 和 \(S(\alpha_k, y) = g_k(y)\) 对 \(k \in K\) 都成立。由于 \(S(x, y)\) 是唯一的,它也唯一确定了 \(q'(x) = S(0, x)\). 在理想世界中,模拟器 \(\mathcal{S}\) 代表秘密分发者将 \(q'(x)\) 发送给 \(\mathcal{F}_{\mathsf{VSS}}\),使得理想世界的诚实方 \(P_j\) 输出 \(q'(\alpha_j)\).

下面证明,在真实世界中,诚实方 \(P_j\) 也会输出 \(q'(\alpha_j)\). 首先,对于 \(k \in K\),显然 \(P_k\) 会输出 \(q'(\alpha_k)\). 我们只需证明其他没有广播 \(\mathsf{consistent}\) 的诚实方 \(P_j, \; j \notin K\) 也会输出 \(q'(\alpha_j)\). 令 \(f'_j(x)\) 和 \(g'_j(y)\) 是 \(P_j\) 在执行协议步骤 5(b)i 的替换后持有的多项式(该多项式可能与最初收到的多项式不同)。注意,\(P_j\) 没有广播 \(\mathsf{consistent}\),所以上述三个条件不一定成立。但是对于广播了 \(\mathsf{consistent}\) 的参与方 \(P_k, \; k \in K\),他们的多项式 \(f_k(x), g_k(y)\) 一定与 \(P_j\) 的多项式相一致,即 \(f_k(\alpha_j) = g'_j(\alpha_k), \; g_k(\alpha_j) = f'_j(\alpha_k)\). 这意味着对于至少 \(t + 1\) 个值 \(k \in K\),有 \(f'_j(\alpha_k) = S(\alpha_k, \alpha_j)\). 又因为 \(f'_j(x)\) 是至多 \(t\) 阶的多项式,可得 \(f'_j(x) = S(x, \alpha_j)\). 由此可知,\(P_j\) 的输出为 \(f'_j(0) = S(0, \alpha_j) = q'(\alpha_j)\). 证毕。

BGW可验证秘密分享 · 证明

综上所述,模拟器 \(\mathcal{S}\) 的构造在秘密分发者诚实或被攻陷时,都使真实世界和理想世界不可区分,因此协议 \(\Pi_\mathsf{VSS}\) 对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{VSS}}\). 定理证毕。

乘法协议

假设乘法门的输入导线值为 \(a\) 和 \(b\),参与方 \(P_i\) 持有 \(t\) 阶的秘密份额 \(a_i\) 和 \(b_i\). 前文讲过,乘法协议分为三步:

  1. 每个参与方 \(P_i\) 可验证地秘密分享他们输入导线上的份额 \(a_i\) 和 \(b_i\).

  2. 在持有 \(a_i\) 和 \(b_i\) 的子份额的情况下,每个参与方 \(P_i\) 可验证地秘密分享 \(a_i \cdot b_i\).

  3. 将 \(a_i \cdot b_i\) 的子份额线性重组,得到的份额落在新的 \(t\) 阶多项式上,其常数项为 \(a \cdot b\).

下面,我们详细介绍每一步的具体实现。我们的协议描述采用模块化的方式:步骤1被抽象为理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)(见「实现子份额秘密分享理想功能 F_VSS^subshare」一节),为实现该理想功能,我们先定义并行可验证秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\)(见「定义并行可验证秘密分享理想功能 F_VSS^n」一节)以及实现矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\)(见「实现矩阵乘法理想功能 F_mat^ A」一节);步骤2被抽象为理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\)(见「实现乘积子份额秘密分享理想功能 F_VSS^mult」一节),为实现该理想功能,我们需要先实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\)(见「实现多项式求值理想功能 F_eval」一节);最后,基于 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 与 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\),再加上步骤3,我们在「实现乘法理想功能 F_mult」一节实现了乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\).

定义并行可验证秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\)

在BGW协议的输入分享阶段,每个参与方作为秘密分发者运行可验证秘密分享协议,分发自己输入的秘密份额。也就是说,参与方运行 \(n\) 个VSS实例,在第 \(i\) 个实例中 \(P_i\) 是秘密分发者并以 \(q_i(x)\) 作为协议输入。我们需要定义一个理想功能来描述并行地运行VSS所满足的安全性。直观上看,它应该保证所有被分享的秘密是互相独立的,我们可能有以下初步的想法,如图 9.18所示:

并行VSS理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\)(不成熟的尝试)

  1. \(\mathcal{F}_{\mathsf{VSS}}^n\) 接收 \(P_1, …, P_n\) 的输入 \(q_1(x), …, q_n(x)\). 如果 \(P_i\) 没有发送多项式 \(q_i(x)\) 或 \(\text{deg}(q_i) > t\),\(\mathcal{F}_{\mathsf{VSS}}^n\) 定义 \(q_i(x) = \bot\).

  2. 对于 \(i = 1, …, n\),\(\mathcal{F}_{\mathsf{VSS}}^n\) 向 \(P_i\) 发送 \((q_1(\alpha_i), …, q_n(\alpha_i))\).

并行VSS理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\)(不成熟的尝试)

直观上看,该理想功能似乎刻画了并行VSS所应该满足的安全性质。然而,在实际执行中,由于 \(n\) 个VSS实例是并行运行的,敌手可能采取这样的行为:他首先接收诚实方发送的秘密份额,然后再决定他要分享的秘密。也就是说,敌手可以在看到诚实方发给被攻陷方的秘密份额后,再基于这些秘密份额选择被攻陷方的输入多项式(这类敌手被称为rushing adversary)。具体而言,令 \(P_j\) 是一个诚实方,其输入为 \(q_j(x)\),令 \(P_i\) 是一个被攻陷方。在实际执行中,敌手可以首先看到 \(P_i\) 的份额 \(q_j(\alpha_i)\),然后选择输入多项式 \(q_i(x)\),满足 \(q_i(\alpha_i) = q_j(\alpha_i)\). 但是在理想世界中,敌手无法这么做,因为 \(\mathcal{F}_{\mathsf{VSS}}^n\) 的定义使被攻陷方在提供输入多项式之前无法得到关于诚实方多项式的任何信息。

因此,并行地调用 \(n\) 次 \(\mathcal{F}_{\mathsf{VSS}}\) 无法安全实现 \(\mathcal{F}_{\mathsf{VSS}}^n\)(因为在真实世界中存在某种攻击方式,在理想世界中无法实现),我们需要修改协议或理想功能的定义(或两者都修改)。让我们再次审视敌手的攻击方式,可以发现,这种攻击实际上并不会造成协议的不安全,因为秘密份额 \(q_j(\alpha_i)\) 与常数项 \(q_j(0)\) 是相互独立的,敌手让 \(q_i(\alpha_i)\) 依赖于 \(q_j(\alpha_i)\) 并不会对整个协议造成实际影响。因此,我们可以让协议保持不变(仍为并行调用 \(n\) 次 \(\mathcal{F}_{\mathsf{VSS}}\)),而是将理想功能修改如下:令 \(I\) 是被攻陷方的集合。首先,诚实方发送输入多项式 \(q_j(x), \; j \notin I\);然后,模拟器(理想敌手)收到诚实方向被攻陷方发送的秘密份额 \(q_j(\alpha_i), \; j \notin I, \; i \in I\);最后,被攻陷方向理想功能发送他们的输入多项式 \(q_i(x), \; i \in I\). 这样一来,修改后的理想功能就刻画了敌手(rushing adversary)可以基于 \(q_j(\alpha_i)\) 来选择输入多项式的能力。形式化地,并行VSS理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\) 定义如图 9.19所示。

并行VSS理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\)

\(\mathcal{F}_{\mathsf{VSS}}^n\) 接收被攻陷方的集合 \(I \subset [n]\),并执行如下操作:

  1. 对于每个诚实方 \(P_j, \; j \notin I\),\(\mathcal{F}_{\mathsf{VSS}}^n\) 接收其输入多项式 \(q_j(x)\).

  2. 基于诚实方的输入多项式,\(\mathcal{F}_{\mathsf{VSS}}^n\) 向敌手 \(\mathcal{S}\) 发送被攻陷方的秘密份额 \(\{q_j(\alpha_i)\}_{j \notin I, i \in I}\).

  3. 对于 \(i \in I\),\(\mathcal{F}_{\mathsf{VSS}}^n\) 接收其输入多项式 \(q_i(x)\).

  4. 对于 \(j = 1, …, n\),\(\mathcal{F}_{\mathsf{VSS}}^n\) 向 \(P_j\) 发送 \((q_1(\alpha_j), …, q_n(\alpha_j))\). 如果 \(\text{deg}(q_i(x)) > t\),那么发送 \(\bot\) 而不是 \(q_i(\alpha_j)\).

并行VSS理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\)

实现矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\)

接下来,我们首先实现一个较简单的理想功能——矩阵乘法,它将输入向量 \(\boldsymbol{x}\) 映射到 \(\boldsymbol{x} \cdot \boldsymbol{A}\),其中 \(\boldsymbol{A}\) 是一个公开的固定矩阵,第 \(i\) 个参与方 \(P_i\) 持有 \(x_i\),所有参与方都以 \(\boldsymbol{x} \cdot \boldsymbol{A}\) 作为输出。之后,我们会把它作为实现理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的子协议。

让我们首先讨论一下 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的定义。\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 使得参与方安全地计算长度为 \(m\) 的向量 \((y_1, …, y_m) = (x_1, …, x_n) \cdot \boldsymbol{A}\),其中 \(x_1, …, x_n \in \mathbb{F}\) 是各参与方的输入,\(\boldsymbol{A} \in \mathbb{F}^{n \times m}\). (这里 \(m = 1\) 的情况也是有意义的,但在协议中我们需要取 \(m = 2t\).)注意到,矩阵乘法是线性运算(仅包括加法和常数乘法),我们可以沿用半诚实场景下的思路:参与方首先(可验证地)秘密分享各自的输入,然后每个参与方在本地对秘密份额进行线性运算,最后,公布计算后的份额来进行输出重建。与半诚实的协议相比,仅有的不同之处在于——输入分享时使用了可验证秘密分享,以及输出重建时使用了Reed-Solomon解码。因此,矩阵乘法理想功能可以通过以下方式安全地计算:

  1. 输入分享阶段:每个参与方 \(P_i\) 选择随机多项式 \(g_i(x)\),满足条件 \(g_i(0) = x_i\). 然后,\(P_i\) 调用理想功能 \(\mathcal{F}_{\mathsf{VSS}}\) 秘密分享 \(g_i(x)\). 多项式分享结束后,参与方 \(P_i\) 持有份额 \(g_1(\alpha_i), …, g_n(\alpha_i)\).

  2. 计算阶段:参与方 \(P_i\) 计算输出向量的秘密份额 \(\boldsymbol{y}^i = (g_1(\alpha_i), \dots, g_n(\alpha_i)) \cdot {\boldsymbol A}\). 注意到:

    \[\boldsymbol{y}^i = (g_1(\alpha_i), \dots, g_n(\alpha_i)) \cdot {\boldsymbol A} = \begin{bmatrix} g_1(\alpha_i), \dots, g_n(\alpha_i) \end{bmatrix} \cdot \begin{bmatrix} a_{1,1} & \dots & a_{1, m} \\ a_{2,1} & \dots & a_{2, m} \\ \vdots & & \vdots \\ a_{n,1} & \dots & a_{n, m} \\ \end{bmatrix}\]
    因此 \(\boldsymbol{y}^i\) 的第 \(j\) 个元素为 \(\sum_{\ell=1}^n g_\ell(\alpha_i) \cdot a_{\ell, j}\). 将 \(\boldsymbol{y}^i\) 的第 \(j\) 个元素记为 \(y_j^i\),那么 \(y_j^1, \dots, y_j^n\) 是 \(\boldsymbol{y} = (g_1(0), \dots, g_n(0)) \cdot {\boldsymbol A}\) 的第 \(j\) 个元素的Shamir秘密份额。

  3. 输出重建阶段:
    1. 每个参与方 \(P_i\) 将 \(\boldsymbol{y}^i\) 发给其他参与方。

    2. 每个参与方 \(P_i\) 根据收到的秘密份额,运行Reed-Solomon解码算法重建输出 \(\boldsymbol{y} = (g_1(0), \dots, g_n(0)) \cdot {\boldsymbol A}\). 注意到,参与方的秘密份额构成如下的矩阵:

      \[\begin{bmatrix} \leftarrow \boldsymbol{y}^1 \rightarrow \\ \leftarrow \boldsymbol{y}^2 \rightarrow \\ \vdots \\ \leftarrow \boldsymbol{y}^n \rightarrow \\ \end{bmatrix} = \begin{bmatrix} \sum_{\ell=1}^n g_\ell(\alpha_1) \cdot a_{\ell, 1} & \dots & \sum_{\ell=1}^n g_\ell(\alpha_1) \cdot a_{\ell, m} \\ \sum_{\ell=1}^n g_\ell(\alpha_2) \cdot a_{\ell, 1} & \dots & \sum_{\ell=1}^n g_\ell(\alpha_2) \cdot a_{\ell, m} \\ \vdots & & \vdots \\ \sum_{\ell=1}^n g_\ell(\alpha_n) \cdot a_{\ell, 1} & \dots & \sum_{\ell=1}^n g_\ell(\alpha_n) \cdot a_{\ell, m} \\ \end{bmatrix}\]
      矩阵的第 \(j\) 列构成 \(\sum_{\ell=1}^n g_\ell(0) \cdot a_{\ell, j}\) 的Shamir秘密份额,而 \(\sum_{\ell=1}^n g_\ell(0) \cdot a_{\ell, j}\) 就是输出向量的第 \(j\) 个元素。参与方对矩阵的每一列运行Reed-Solomon解码算法得到正确的输出。

直观上看,上述协议满足对于恶意敌手的安全性:\(\mathcal{F}_{\mathsf{VSS}}\) 确保被攻陷方的输入是良好定义的,而Reed-Solomon解码使得被攻陷方无法影响协议输出。然而,正如前面所提到的,我们要将 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 作为实现 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的子协议,因此 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的定义需要更复杂些:首先,每个参与方的输入不是 \(x_i\),而是 \(t\) 阶多项式 \(g_i(x)\) 满足 \(g_i(0) = x_i\)(这是由于 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的需要);其次,参与方的输出不仅仅是 \(\boldsymbol{y} = (g_1(0), …, g_n(0)) \cdot {\boldsymbol A}\),除此之外 \(P_i\) 还需要输出收到的秘密份额 \(g_1(\alpha_i), …, g_n(\alpha_i)\). 于是,理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 定义如下:

实现矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) · 公式

\[\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}(g_1, \dots, g_n) = \Big( (\boldsymbol{y}, \{g_\ell(\alpha_1)\}_{\ell=1}^n), (\boldsymbol{y}, \{g_\ell(\alpha_2)\}_{\ell=1}^n), \dots, (\boldsymbol{y}, \{g_\ell(\alpha_n)\}_{\ell=1}^n) \Big)\]

其中 \(\boldsymbol{y} = (g_1(0), …, g_n(0)) \cdot {\boldsymbol A}\). 尽管只是作了很小的改动,但这使得协议和理想功能的定义需要变得更复杂。

下面,我们分析一下为什么上述改动会造成影响。上文的矩阵乘法协议中,在输出重建阶段,参与方 \(P_i\) 要发送输出向量的秘密份额 \(\boldsymbol{y}^i\). 注意到,向量 \(\boldsymbol{y}^1, …, \boldsymbol{y}^n\) 是完全由输入多项式 \(g_1(x), …, g_n(x)\) 所决定的。但是,在理想世界中,模拟器只能获得(被攻陷方的)部分秘密份额/输入多项式,因此不能模拟 \(\boldsymbol{y}^1, …, \boldsymbol{y}^n\). 具体而言,假设只有 \(P_1\) 是被攻陷方。此时,模拟器可以知道 \(P_1\) 的输出 \(\boldsymbol{y} = (g_1(0), …, g_n(0)) \cdot {\boldsymbol A}\) 和 \(g_1(\alpha_1), …, g_n(\alpha_1)\) 以及 \(P_1\) 的输入多项式 \(g_1(x)\),但不知道诚实方的输入多项式。然而,在真实执行中,敌手可以看到诚实方发送的所有向量 \(\boldsymbol{y}^2, …, \boldsymbol{y}^n\),它们是基于 \(g_1(x), …, g_n(x)\) 和矩阵 \({\boldsymbol A}\) 的一个确定性函数,因此理想世界的模拟器必须模拟诚实方发送完全一致的消息,但基于模拟器拥有的信息,这不可能做到!

让我们审视一下这里遇到的问题:真实协议中的 \(\boldsymbol{y}^1, …, \boldsymbol{y}^n\) 泄露了输入多项式的一些信息,但理想功能并没有这样的泄露。然而,\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的目的是安全地实现 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)(见「实现子份额秘密分享理想功能 F_VSS^subshare」一节的图 9.22),敌手知道 \(\boldsymbol{y}^1, …, \boldsymbol{y}^n\) 对协议的安全性并没有什么影响。实际上,我们甚至可以允许敌手知道向量 \(\boldsymbol{Y}(x) = (Y_1(x), …, Y_m(x)) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol A}\). 因此,我们采取与定义 \(\mathcal{F}_{\mathsf{VSS}}^n\) 时同样的方式:修改理想功能,允许 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 泄漏 \(\boldsymbol{Y}(x)\) 给敌手。于是,矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 定义如图 9.20所示。注意,由于 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 让 \(P_i\) 输出了秘密份额 \(\{g_\ell(\alpha_i)\}_{\ell=1}^n\),与上一节相同,我们考虑rushing adversary,允许敌手基于收到的秘密份额选择输入多项式。

矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\)(参数 \({\boldsymbol A} \in \mathbb{F}^{n \times m}\))

\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 接收被攻陷方的集合 \(I \subset [n]\),并执行如下操作:

  1. 对于每个诚实方 \(P_j, \; j \notin I\),\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 接收其输入多项式 \(g_j(x)\). 如果 \(\text{deg}(g_j(x)) > t\),设置 \(g_j(x) = 0\).

  2. \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 向敌手 \(\mathcal{S}\) 发送被攻陷方的秘密份额 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\).

  3. 对于 \(i \in I\),\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 接收其输入多项式 \(g_i(x)\). 如果 \(\text{deg}(g_i(x)) > t\),设置 \(g_i(x) = 0\).

  4. \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 计算 \(\boldsymbol{Y}(x) = (Y_1(x), …, Y_m(x)) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol A}\).

    1. \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 向敌手 \(\mathcal{S}\) 发送 \(\boldsymbol{Y}(x)\).

    2. 对于 \(j = 1, …, n\),\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 向 \(P_j\) 发送输出 \(\boldsymbol{y} = \boldsymbol{Y}(0)\) 和 \((g_1(\alpha_j), …, g_n(\alpha_j))\).

矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\)

经过修改,上文中的协议就可以安全地实现理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 了。我们给出协议在 \(\mathcal{F}_{\mathsf{VSS}}^n\)-混合模型下的形式化描述,如图 9.21所示。

\(\mathcal{F}_{\mathsf{VSS}}^n\)-混合模型下的 \(\Pi_\mathsf{mat}^{\boldsymbol A}\) 协议

输入:\(P_i\) 的输入为多项式 \(g_i(x)\).

公共输入:域 \(\mathbb{F}\),\(n\) 个互不相同的非0元素 \(\alpha_1, …, \alpha_n \in \mathbb{F}\),以及矩阵 \({\boldsymbol A} \in \mathbb{F}^{n \times m}\).

协议:

  1. 每个参与方 \(P_i\) 检查自己的输入多项式,如果大于 \(t\) 阶,则设置 \(g_i(x) = 0\). 然后将 \(g_i(x)\) 作为输入发送给理想功能 \(\mathcal{F}_{\mathsf{VSS}}^n\).

  2. 每个参与方 \(P_i\) 从 \(\mathcal{F}_{\mathsf{VSS}}^n\) 处接收到 \(g_1(\alpha_i), …, g_n(\alpha_i)\). 如果有的值为 \(\bot\),将其替换为0.

  3. 令 \(\boldsymbol{x}^i = (g_1(\alpha_i), …, g_n(\alpha_i))\). 每个参与方 \(P_i\) 在本地计算 \(\boldsymbol{y}^i = \boldsymbol{x}^i \cdot {\boldsymbol A}\). 等价地说,对于 \(k = 1, …, m\),\(P_i\) 计算 \(Y_k(\alpha_i) = \sum_{\ell=1}^n g_\ell(\alpha_i) \cdot a_{\ell, k}\),其中 \((a_{1, k}, …, a_{n, k})^\mathrm{T}\) 是矩阵 \({\boldsymbol A}\) 的第 \(k\) 列,并保存 \(\boldsymbol{y}^i = (Y_1(\alpha_i), …, Y_m(\alpha_i))\).

  4. 每个参与方 \(P_i\) 向所有参与方 \(P_j, \; 1 \leq j \leq n\) 发送 \(\boldsymbol{y}^i\).

  5. 对于 \(j = 1, \dots, n\),将 \(P_i\) 从 \(P_j\) 处收到的向量记为 \(\hat{\boldsymbol{Y}} = (\hat{Y}_1(\alpha_j), \dots, \hat{Y}_m(\alpha_j))\). 如果某些值缺失,则将其替换为0. 每个参与方执行如下操作:

    • 对于 \(k = 1, …, m\),\(P_i\) 以(可能损坏的)码字 \((\hat{Y}_k(\alpha_1), …, \hat{Y}_k(\alpha_n))\) 为输入,运行Reed-Solomon解码算法(参数 \(d = 2t + 1\)),得到码字 \((Y_k(\alpha_1), …, Y_k(\alpha_n))\),如图 9.10所示。然后重建多项式 \(Y_k(x)\) 并计算 \(y_k = Y_k(0)\).

输出:\(P_i\) 输出 \((y_1, …, y_m)\) 以及秘密份额 \(g_1(\alpha_i), …, g_n(\alpha_i)\).

实现矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) · 公式

图 9.10展示了协议的第5步。\(P_i\) 从每个参与方处收到一个向量,这些向量按行构成一个矩阵,矩阵的每一列与正确的码字的距离最多为 \(t\).

\[\begin{bmatrix} \leftarrow \hat{\boldsymbol{Y}}^1 \rightarrow \\ \leftarrow \hat{\boldsymbol{Y}}^2 \rightarrow \\ \vdots \\ \leftarrow \hat{\boldsymbol{Y}}^n \rightarrow \\ \end{bmatrix} = \begin{bmatrix} \hat{Y}_1(\alpha_1) & \dots & \hat{Y}_k(\alpha_1) & \dots & \hat{Y}_m(\alpha_1) \\ \hat{Y}_1(\alpha_2) & \dots & \hat{Y}_k(\alpha_2) & \dots & \hat{Y}_m(\alpha_2) \\ \vdots & & \vdots & & \vdots \\ \hat{Y}_1(\alpha_n) & \dots & \hat{Y}_k(\alpha_n) & \dots & \hat{Y}_m(\alpha_n) \\ \end{bmatrix}\]

\(P_i\) 收到的向量构成的矩阵,对每一列执行Reed-Solomon解码

定理

假设参与方之间存在点对点安全信道。假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 图 9.21中的协议 \(\Pi_\mathsf{mat}^{\boldsymbol A}\) 在 \(\mathcal{F}_{\mathsf{VSS}}^n\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\)(图 9.20)。

实现矩阵乘法理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) · 证明

要证明此定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

\[\operatorname{exec}_{\Pi_\mathsf{mat}^{\boldsymbol A},\mathcal{A},\mathcal{Z}}^{\mathcal{F}_{\mathsf{VSS}}^n} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A},\mathcal{S},\mathcal{Z}}\]

其中 \(\mathcal{A}\) 是平凡敌手。

模拟器 \(\mathcal{S}\). 模拟器 \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{Z}\) 与 \(\mathcal{A}\) 之间的消息。在 \(\mathcal{F}_{\mathsf{VSS}}^n\)-混合模型下,\(\mathcal{S}\) 还需要模拟 \(\mathcal{F}_{\mathsf{VSS}}^n\). \(\mathcal{S}\) 的工作方式如下。

  1. 当诚实方向 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 发送输入后,模拟器 \(\mathcal{S}\) 记录来自 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的消息 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\)(\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的步骤2)。

  2. 模拟 \(\Pi_\mathsf{mat}^{\boldsymbol A}\) 的步骤1和2:\(\mathcal{S}\) 按照如下方式模拟 \(\mathcal{F}_{\mathsf{VSS}}^n\):

    1. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^n\) 的步骤2,向敌手 \(\mathcal{A}\) 发送 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\).

    2. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^n\) 的步骤3,接收并记录被攻陷方的输入多项式 \(\{g_i(x)\}_{i \in I}\).

    3. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^n\) 的步骤4,向每个被攻陷方 \(P_i, \; i \in I\) 发送 \((g_1(\alpha_i), …, g_n(\alpha_i))\). 如果 \(\text{deg}(g_k(x)) > t\),那么发送 \(\bot\) 而不是 \(g_k(\alpha_i)\).

  3. \(\mathcal{S}\) 代表被攻陷方向 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 发送输入多项式 \(\{g_i(x)\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的步骤3)。

  4. \(\mathcal{S}\) 接收并记录来自 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的消息:(\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的步骤5)

    1. 多项式向量 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol A}\);

    2. 输出向量 \(\boldsymbol{y} = (y_1, …, y_m)\);

    3. 被攻陷方 \(P_i, \; i \in I\) 收到的秘密份额 \(\{(g_1(\alpha_i), …, g_n(\alpha_i))\}_{i \in I}\).

  5. 模拟 \(\Pi_\mathsf{mat}^{\boldsymbol A}\) 的步骤4:对于 \(j \notin I, i \in I\),\(\mathcal{S}\) 模拟 \(P_j\) 向 \(P_i\) 发送 \(\boldsymbol{y}^j = (Y_1(\alpha_j), …, Y_m(\alpha_j))\).

不可区分性。下面证明 \(\mathcal{Z}\) 在真实世界和理想世界中的视图是不可区分的。首先,在 \(\mathcal{F}_{\mathsf{VSS}}^n\)-混合模型下,观察到:诚实方、模拟器 \(\mathcal{S}\)、理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 的行为都是确定性的(因为随机性来源于 \(\mathcal{F}_{\mathsf{VSS}}^n\))。因此,我们证明敌手在理想世界和真实世界中的视图是相同的。由于模拟器 \(\mathcal{S}\) 从 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 收到了 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\) 和 \(\boldsymbol{Y}(x)\),这使得 \(\mathcal{S}\) 能够提供与真实执行中一样的消息。

接下来,我们只需证明在真实世界和理想世界中诚实方的输出是一致的,即 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 在步骤4中计算的 \(\boldsymbol{Y}(x) = (Y_1(x), …, Y_m(x))\) 与协议第5步计算的 \((Y_1(x), …, Y_m(x))\) 是一样的。注意到,每个多项式 \(Y_k(x)\) 是基于诚实方运行Reed-Solomon解码算法得到的码字来重建的,我们只需证明解码算法会得到正确的码字。这是因为诚实方都会提供正确的 \(\hat{Y}_k(\alpha_i)\),即 \(\hat{Y}_k(\alpha_j) = Y_k(\alpha_j)\) 对 \(j \notin I\) 都成立,故码字 \((\hat{Y}_k(\alpha_1), …, \hat{Y}_k(\alpha_n))\) 至少有 \(n - t\) 个元素是正确的。根据定理 9.2,解码算法将输出正确的码字,重建 \(Y_k(x)\). 证毕。

实现子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)

实现子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) · 插图

定义 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\). 非形式化地,\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 允许参与方可验证地秘密分享一些值,这些值本身就是秘密份额。具体而言,假设参与方 \(P_1, …, P_n\) 分别持有 \(f(\alpha_1), …, f(\alpha_n)\),其中 \(f\) 是 \(t\) 阶多项式,然后,每个参与方 \(P_i\) 要向其他参与方秘密分享 \(f(\alpha_i)\),而不能是其他值,如图 9.11所示。

subshare

子份额秘密分享:\(P_i\) 分发 \(f(\alpha_i)\) 的子份额

在半诚实场景下,这很容易做到:每个参与方 \(P_i\) 选择常数项为 \(f(\alpha_i)\) 的随机多项式 \(g_i(x)\),然后向 \(P_j\) 发送 \(g_i(\alpha_j)\). 但是,在恶意敌手场景下,主要的难点在于:如何强制被攻陷方 \(P_i\) 分享正确的 \(f(\alpha_i)\) 而不是其他值。注意,此时有超过 \(t\) 个诚实方,它们的秘密份额唯一确定了 \(f(x)\),因此可以令 \(f(x)\) 为诚实方的秘密份额所确定的 \(t\) 阶多项式,它是良好定义的。我们要确保被攻陷方 \(P_i\) 在分发子份额时使用了常数项为 \(f(\alpha_i)\) 的 \(t\) 阶多项式。

我们先给出 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的定义。当某个被攻陷方 \(P_i\) 向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 提供了不合法的输入时(\(g_i(x)\) 超过 \(t\) 阶或 \(g_i(0) \neq f(\alpha_i)\)),\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 将其替换为常数多项式 \(g'_i(x) = f(\alpha_i)\). 这确保了 \(P_i\) 的输入多项式的常数项总是 \(f(\alpha_i)\). 另外,由于我们在实现 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的协议中调用了理想功能 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 来乘以Reed-Solomon码校验矩阵(parity-check matrix) \({\boldsymbol H}\)(的转置),因此 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 需要向模拟器 \(\mathcal{S}\) 泄漏 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\) 使其能够模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\). 最后,与前面相同,我们考虑rushing adversary,允许敌手基于诚实方向被攻陷方发送的秘密份额来选择输入多项式。\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的定义如图 9.22所示。

子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)

\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 接收被攻陷方的集合 \(I \subset [n]\),并执行如下操作:

  1. 对于每个诚实方 \(P_j, \; j \notin I\),\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 接收其输入 \(\beta_j\). 令 \(f(x)\) 是由点集 \(\{(\alpha_j, \beta_j)\}_{i \notin I}\) 所唯一确定的 \(t\) 阶多项式。

  2. 对于 \(j \notin I\),\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 均匀随机选择 \(t\) 阶多项式 \(g_j(x)\),满足条件 \(g_j(0) = \beta_j = f(\alpha_j)\).

  3. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向敌手 \(\mathcal{S}\) 发送被攻陷方的秘密份额 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\).

  4. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 从(理想)敌手处接收被攻陷方的输入多项式 \(\{g_i(x)\}_{i \in I}\). 如果没有收到 \(g_i(x)\) 或 \(\text{deg}(g_i(x)) > t\),设置 \(g_i(x) = 0\).

  5. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 按照如下方式确定输出多项式 \(g'_1(x), \dots, g'_n(x)\):

    1. 对于 \(j \notin I\),设置 \(g'_j(x) = g_j(x)\).

    2. 对于 \(i \in I\),如果 \(g_i(0) = f(\alpha_i)\) 则 设置 \(g'_i(x) = g_i(x)\),否则设置 \(g'_i(x) = f(\alpha_i)\).

    1. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向敌手 \(\mathcal{S}\) 发送 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\),其中 \({\boldsymbol H}\) 是Reed-Solomon码的校验矩阵(见下文Reed-Solomon编码背景知识)。

    2. 对于 \(j = 1, …, n\),\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向 \(P_j\) 发送输出 \(g'_j(x)\) 和 \((g'_1(\alpha_j), …, g'_n(\alpha_j))\).

子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)

实现子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) · 公式

Reed-Solomon编码背景知识。令 \(G \in \mathbb{F}^{(t+1) \times n}\) 是长度 \(n = 3t + 1\),维度 \(k = t + 1\),距离 \(d = 2t + 1\) 的Reed-Solomon码的生成矩阵(generator matrix)。对向量 \(\boldsymbol{a} = (a_0, …, a_t) \in \mathbb{F}^{t + 1}\) 编码将输出 \(\boldsymbol{a} \cdot G\),其中

\[G = \begin{pmatrix} 1 & 1 & \dots & 1 \\ \alpha_1 & \alpha_2 & \dots & \alpha_n \\ \vdots & \vdots & & \vdots \\ \alpha_1^t & \alpha_2^t & \dots & \alpha_n^t \\ \end{pmatrix}\]

令 \(f(x) = \sum_{\ell=0}^t a_\ell \cdot x^\ell\) 是一个 \(t\) 阶多项式,对向量 \(\boldsymbol{a} = (a_0, …, a_t) \in \mathbb{F}^{t + 1}\) 的Reed-Solomon编码即为向量 \(\langle f(\alpha_1), …, f(\alpha_n) \rangle\). 令 \({\boldsymbol H} \in \mathbb{F}^{2t \times n}\) 是 \(G\) 的校验矩阵,即 \({\boldsymbol H}\) 的秩(rank)为 \(2t\),满足 \(G \times {\boldsymbol H}^\mathrm{T} = 0^{(t+1) \times 2t}\). 注意,\({\boldsymbol H}\) 完全由 \(\alpha_1, …, \alpha_n\) 所决定,因此是一个公开的常量矩阵。码字 \(\boldsymbol{\beta} \in \mathbb{F}^n\) 的伴随式(syndrome)为 \(S(\boldsymbol{\beta}) = \boldsymbol{\beta} \cdot {\boldsymbol H}^\mathrm{T} \in \mathbb{F}^{2t}\). 对于一个正确的码字 \(\boldsymbol{\beta} = \boldsymbol{a} \cdot G\),一定有 \(S(\boldsymbol{\beta}) = 0^{2t}\);对于任意错误向量 \(\boldsymbol{e} \in \mathbb{F}^n\),有 \(S(\boldsymbol{\beta} + \boldsymbol{e}) = S(\boldsymbol{e})\). 如果 \(\boldsymbol{e}\) 与 \(0^{n}\) 的距离不超过 \(t\),那么我们可以对 \(\boldsymbol{\beta} + \boldsymbol{e}\) 进行纠错得到原始向量 \(\boldsymbol{\beta}\). 在Reed-Solomon解码算法中,存在一个子程序可以从伴随式 \(S(\boldsymbol{e})\) 中提取 \(\boldsymbol{e}\). 也就是说,给定一个可能损坏的码字 \(\boldsymbol{\gamma} = \boldsymbol{\beta} + \boldsymbol{e}\),首先计算其伴随式 \(S(\boldsymbol{\gamma}) = \boldsymbol{\gamma} \cdot {\boldsymbol H}^\mathrm{T} = S(\boldsymbol{e})\),然后将 \(S(\boldsymbol{e})\) 输入子程序提取 \(\boldsymbol{e}\). 最后,根据 \(\boldsymbol{e}\) 和 \(\boldsymbol{\gamma}\) 可以提取原始向量 \(\boldsymbol{\beta} = \boldsymbol{\gamma} - \boldsymbol{e}\).

协议构造。协议中,每个参与方 \(P_i\) 选择随机多项式 \(g_i(x)\),其常数项为协议输入值(秘密份额) \(\beta_i\). 令 \(\boldsymbol{\beta} = (\beta_1, …, \beta_n)\). 因为这些输入值位于某个多项式 \(f(x)\) 上,所以对于所有诚实方 \(P_j\) 都有 \(g_j(0) = \beta_j = f(\alpha_j)\). 但是对于被攻陷方 \(P_i\),他的多项式的常数项 \(g_i(0)\) 没有任何保证。令 \(\boldsymbol{\gamma} = (g_1(0), …, g_n(0))\),那么 \(\boldsymbol{\gamma}\) 与 \(\boldsymbol{\beta} = (\beta_1, …, \beta_n)\) 的距离最多为 \(t\). 而 \(\boldsymbol{\beta}\) 的长度为 \(n = 3t + 1\),因此可以通过Reed-Solomon纠错算法来给 \(\boldsymbol{\gamma}\) 纠错。参与方首先将多项式 \((g_1(x), …, g_n(x))\) 发给 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\)(它是图 9.20定义的理想功能,将参数矩阵换为校验矩阵 \({\boldsymbol H}\) 的转置),然后每个参与方 \(P_i\) 得到输出 \((g_1(\alpha_i), …, g_n(\alpha_i))\) 和 \((s_1, …, s_{2t}) = \boldsymbol{\gamma} \cdot {\boldsymbol H}^\mathrm{T}\). 这里 \((s_1, …, s_{2t}) = \boldsymbol{\gamma} \cdot {\boldsymbol H}^\mathrm{T}\) 就是 \(\boldsymbol{\gamma}\) 的伴随式 \(S(\boldsymbol{\gamma})\). 每个参与方基于该伴随式提取错误向量 \(\boldsymbol{e} = (e_1, …, e_n) = \boldsymbol{\gamma} - \boldsymbol{\beta}\). 注意,\(\boldsymbol{e}\) 满足 \(g_i(0) - e_i = f(\alpha_i)\) 对 \(i \in [n]\) 都成立,且 \(\boldsymbol{e}\) 可以由参与方在本地基于 \(S(\boldsymbol{\gamma})\) 提取出来。于是,错误向量 \(\boldsymbol{e}\) 为诚实方提供了计算输出所需要的信息。具体而言,如果 \(e_i = 0\),那么 \(P_i\) 使用了正确的多项式 \(g_i(x)\),参与方可以直接输出 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 的输出 \(g_i(\alpha_j)\);如果 \(e_i \neq 0\),那么参与方就知道 \(P_i\) 是被攻陷的,他们互相发送 \(P_i\) 的秘密份额 \(g_i(\alpha_j)\),重建 \(g_i(x)\)(通过Reed-Solomon解码),然后计算 \(g_i(0) - e_i = f(\alpha_i)\). 最后,参与方设置 \(g'_i(x) = f(\alpha_i)\),与理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 相一致。完整的协议如图 9.23所示。

在进行安全性证明时,有一点需要注意:协议中泄漏了伴随式 \(\boldsymbol{\gamma} \cdot {\boldsymbol H}^\mathrm{T}\),模拟器 \(\mathcal{S}\) 需要在理想世界中模拟该消息。不过,\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向模拟器 \(\mathcal{S}\) 泄漏了 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\),而伴随式就等于 \(\boldsymbol{Y}(0)\),因此 \(\mathcal{S}\) 可以模拟该条消息。

\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\)-混合模型下的 \(\Pi_\mathsf{VSS}^\mathsf{subshare}\) 协议

输入:\(P_i\) 的输入为 \(\beta_i\),诚实方的点集 \((\alpha_j, \beta_j)\) 位于 \(t\) 阶多项式上。

公共输入:域 \(\mathbb{F}\),\(n\) 个互不相同的非0元素 \(\alpha_1, …, \alpha_n \in \mathbb{F}\),它们定义了Reed-Solomon码的校验矩阵 \({\boldsymbol H} \in \mathbb{F}^{2t \times n}\)(见上文Reed-Solomon编码背景知识)。

协议:

  1. 每个参与方 \(P_i\) 均匀随机选择 \(t\) 阶多项式 \(g_i(x)\),满足条件 \(g_i(0) = \beta_i\).

  2. 每个参与方 \(P_i\) 将 \(g_i(x)\) 作为输入发送给 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\),然后从 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 处接收到 \(g_1(\alpha_i), …, g_n(\alpha_i)\) 以及 \(\boldsymbol{s} = (s_1, …, s_{2t}) = (g_1(0), …, g_n(0)) \cdot {\boldsymbol H}^\mathrm{T}\). 注意,这里的 \(\boldsymbol{s}\) 是(可能损坏的)码字 \(\boldsymbol{\gamma} = (g_1(0), …, g_n(0))\) 的伴随式。

  3. 每个参与方在本地以 \(\boldsymbol{s}\) 为输入运行Reed-Solomon解码算法,获得错误向量 \(\boldsymbol{e} = (e_1, …, e_n)\).

  4. 对于 \(k\) 满足 \(e_k = 0\),\(P_i\) 设置 \(g'_k(\alpha_i) = g_k(\alpha_i)\).

  5. 对于 \(k\) 满足 \(e_k \neq 0\):

    1. \(P_i\) 向所有其他参与方发送 \(g_k(\alpha_i)\).

    2. \(P_i\) 接收到 \(g_k(\alpha_1), …, g_k(\alpha_n)\),如果某些值缺失,将其设置为0. \(P_i\) 运行Reed-Solomon解码算法重建 \(g_k(x)\).

    3. \(P_i\) 计算 \(g_k(0)\),然后设置 \(g'_k(\alpha_i) = g_k(0) - e_k\).

输出:\(P_i\) 输出 \(g_i(x)\) 和 \(g'_1(\alpha_i), …, g'_n(\alpha_i)\).

定理

假设参与方之间存在点对点安全信道。假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 图 9.23中的协议 \(\Pi_\mathsf{VSS}^\mathsf{subshare}\) 在 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)(图 9.22)。

实现子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) · 证明

要证明此定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

\[\operatorname{exec}_{\Pi_\mathsf{VSS}^\mathsf{subshare}, \mathcal{A}, \mathcal{Z}}^{\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{S}, \mathcal{Z}}\]

其中 \(\mathcal{A}\) 是平凡敌手。

模拟器 \(\mathcal{S}\). 模拟器 \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{Z}\) 与 \(\mathcal{A}\) 之间的消息。在 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\)-混合模型下,\(\mathcal{S}\) 还需要模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\). \(\mathcal{S}\) 的工作方式如下。

  1. 当诚实方向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 发送输入后,模拟器 \(\mathcal{S}\) 记录来自 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的消息 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤3)。

  2. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{subshare}\) 的步骤2:\(\mathcal{S}\) 按照如下方式模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\):

    1. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 的步骤2,向敌手 \(\mathcal{A}\) 发送 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\).

    2. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 的步骤3,接收并记录被攻陷方的输入多项式 \(\{g_i(x)\}_{i \in I}\).

  3. \(\mathcal{S}\) 向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 发送被攻陷方的输入多项式 \(\{g_i(x)\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤4)。在接下来的运行中,如果 \(\text{deg}(g_i(x)) > t\),\(\mathcal{S}\) 设置 \(g_i(x) = 0\).

  4. \(\mathcal{S}\) 接收并记录来自 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的消息,包括多项式向量 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\) 和被攻陷方的输出:\(\{g'_i(x)\}_{i \in I}\) 和 \(\{g'_1(\alpha_i), …, g'_n(\alpha_i)\}_{i \in I}\).(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤6)。

  5. 继续模拟 \(\Pi_\mathsf{VSS}^\mathsf{subshare}\) 的步骤2:

    1. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 的步骤5(a):向敌手 \(\mathcal{A}\) 发送 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\).

    2. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 的步骤5(b):\(\mathcal{S}\) 计算 \(\boldsymbol{y} = \boldsymbol{Y}(0)\). 此时,\(\mathcal{S}\) 已经从 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 获得了秘密份额 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\),\(\mathcal{S}\) 根据 \(\{g_i(x)\}_{i \in I}\) 计算其余的秘密份额,然后模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 向 \(P_i, \; i \in I\) 发送 \(\boldsymbol{y}\) 和 \((g_1(\alpha_i), …, g_n(\alpha_i))\).

  6. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{subshare}\) 的步骤5(a):令 \(\boldsymbol{s} = \boldsymbol{Y}(0)\). \(\mathcal{S}\) 运行Reed-Solomon解码算法从伴随式 \(\boldsymbol{s}\) 中提取错误向量 \(\boldsymbol{e} = (e_1, …, e_n)\). 对于所有 \(i\) 满足 \(e_i \neq 0\),\(\mathcal{S}\) 模拟 \(P_j, \; j \notin I\) 发送 \(g_i(\alpha_j)\) 给所有其他参与方。

不可区分性。下面证明 \(\mathcal{Z}\) 在真实世界和理想世界中的视图是不可区分的。我们先观察模拟器 \(\mathcal{S}\) 的模拟方式。首先,\(\mathcal{S}\) 需要模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\). 基于 \(\mathcal{S}\) 从 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 处收到的诚实方的秘密份额 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\) 和 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\),\(\mathcal{S}\) 可以模拟出 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 向敌手和被攻陷方发送的消息。此外,在协议 \(\Pi_\mathsf{VSS}^\mathsf{subshare}\) 的步骤5(a)中,\(\mathcal{S}\) 需要模拟诚实方向被攻陷方发送消息,由于伴随式 \(\boldsymbol{s} = \boldsymbol{Y}(0)\),故 \(\mathcal{S}\) 可以提取错误向量 \(\boldsymbol{e}\) 从而进行模拟。

也就是说,真实世界与理想世界的唯一不同在于诚实方多项式的选择——理想世界中,这些多项式由理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 选择;真实世界中,它们由诚实方自己选择。无论在真实世界还是理想世界,诚实方 \(P_j\) 的多项式 \(g_j(x)\) 都是在 \(g_j(0) = \beta_j\) 的条件下均匀随机选择的,它们分布完全相同。而敌手在协议中能做的事只有选择被攻陷方的多项式并发送给 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\). 我们发现,给定诚实方的多项式,敌手的视图与诚实方的输出是关于被攻陷方的多项式的确定性函数。于是,我们只需要证明,给定诚实方的多项式 \(\{g_j(x)\}_{j \notin I}\),\(\mathcal{Z}\) 在真实世界和理想世界中的视图是完全相同的(因为理想世界和真实世界中,诚实方的多项式有相同的分布)。

首先,根据 \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 的方式,\(\mathcal{A}\) 在两个世界中收到来自 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 的消息是相同的(\(\mathcal{S}\) 仅仅是转发)。其次,\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol H}\) 确保了所有诚实方得到同样的伴随式 \(\boldsymbol{s}\),提取出同样的错误向量 \(\boldsymbol{e} = (e_1, …, e_n)\),因此敌手 \(\mathcal{A}\) 在协议步骤5(a)看到的视图也是相同的。最后,考虑诚实方的输出。在理想世界中,每个诚实方 \(P_j\) 的输出是由 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 计算的 \(g'_j(x)\) 和 \((g'_1(\alpha_j), …, g'_n(\alpha_j))\). 在真实世界中,每个诚实方 \(P_j\) 的输出是自己选择的多项式 \(g_j(x)\) 和纠错后的秘密份额 \((g'_1(\alpha_j), …, g'_n(\alpha_j))\). 显然,根据 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的计算方式,对于诚实方 \(P_j\),有 \(g'_j(x) = g_j(x)\). 令 \(f(x)\) 是诚实方的输入份额唯一确定的多项式。令 \(K \subset I\) 是所有满足 \(e_k \neq 0\) 的索引的集合。根据Reed-Solomon解码算法的基本性质,对于 \(k \in K\),有 \(g_k(0) \neq f(\alpha_k)\),因此,根据 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的计算方式,会设置 \(g'_k(x) = f(\alpha_k)\);在真实世界中,同样地,\(P_i\) 也设置 \(g'_k(\alpha_i) = g_k(0) - e_k = f(\alpha_k)\). 故真实世界和理想世界中,诚实方会输出同样的秘密份额。

证毕。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\)

在「实现乘积子份额秘密分享理想功能 F_VSS^mult」一节的协议(实现 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\))中,参与方需要解决“投诉”(complaint)(因为被攻陷方可能提供错误的值)。解决这些投诉的方式是:计算多项式在投诉方的点处的值。具体而言,给定多项式 \(f(x)\) 的份额 \(f(\alpha_1), …, f(\alpha_n)\),参与方需要计算 \(f(\alpha_k)\),其中 \(k\) 是一个公开值,且不泄漏任何其他信息。

我们首先定义理想功能 \(\mathcal{F}_{\mathsf{eval}}^k\). 它的参数是索引 \(k\),\(k\) 指定了需要求多项式在哪个点处的值。\(\mathcal{F}_{\mathsf{eval}}^k\) 的形式化定义如图 9.24所示。在该定义中,\(\mathcal{F}_{\mathsf{eval}}^k\) 只接收了诚实方的输入,忽略了被攻陷方的输入。我们也可以让 \(\mathcal{F}_{\mathsf{eval}}^k\) 接收所有参与方的输入,然后运行Reed-Solomon解码算法。但实际上敌手的输入不会对输出有任何影响,因此我们采用这种更简洁的定义方式。

多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}^k\)

\(\mathcal{F}_{\mathsf{eval}}^k\) 接收被攻陷方的集合 \(I \subset [n]\),并执行如下操作:

  1. 对于每个诚实方 \(P_j, \; j \notin I\),\(\mathcal{F}_{\mathsf{eval}}^k\) 接收其输入 \(\beta_j\). 令 \(f(x)\) 是由点集 \(\{(\alpha_j, \beta_j)\}_{j \notin I}\) 所唯一确定的 \(t\) 阶多项式。

  2. 对于 \(j = 1, …, n\),\(\mathcal{F}_{\mathsf{eval}}^k\) 向 \(P_j\) 发送输出 \((f(\alpha_j), f(\alpha_k))\).

多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}^k\)

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 公式

\(\mathcal{F}_{\mathsf{eval}}^k\) 可以写成以下等价的函数表示:

\[\mathcal{F}_{\mathsf{eval}}^k(\beta_1, \dots, \beta_n) = \Big( (f(\alpha_1), f(\alpha_k)), \dots, (f(\alpha_n), f(\alpha_k)) \Big)\]

其中 \(f\) 是对 \((\beta_1, …, \beta_n)\) 进行Reed-Solomon解码的输出。注意,虽然 \(f(\alpha_i)\) 已经是 \(P_i\) 的输入了,但为了让模拟器可以进行模拟,我们还是需要将其作为输出的一部分(这只是为了安全性证明的需要,对实际协议不会有任何影响)。

Reed-Solomon编码背景知识。下面我们说明:\(f(\alpha_k)\) 是输入秘密份额 \((\beta_1, …, \beta_n)\) 的线性组合(注:这里的秘密份额 \((\beta_1, …, \beta_n)\) 是经过纠错的正确的秘密份额。)。定义参与方的输入向量为 \(\boldsymbol{\beta} = (\beta_1, …, \beta_n)\). 对于 \(j \notin I\),有 \(\beta_j = f(\alpha_j)\),因此,参与方的输入由下式计算

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 公式

\[\boldsymbol{\beta} = V_{\boldsymbol{\alpha}} \cdot \boldsymbol{f}^\mathrm{T}\]

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 公式

其中,\(V_{\boldsymbol{\alpha}}\) 是Vandermonde矩阵,定义如下

\[V_{\boldsymbol{\alpha}} = \begin{pmatrix} 1 & \alpha_1 & \dots & (\alpha_1)^{n-1} \\ 1 & \alpha_2 & \dots & (\alpha_2)^{n-1} \\ \vdots & \vdots & & \vdots \\ 1 & \alpha_n & \dots & (\alpha_n)^{n-1} \\ \end{pmatrix}\]

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 公式

\(\boldsymbol{f}\) 是多项式 \(f(x)\) 的系数构成的向量。注意,\(\boldsymbol{f}\) 的长度为 \(n\),它的第 \(t + 1\) 项之后用0填充。令 \(\boldsymbol{\alpha}_{k} = (1, \alpha_k, (\alpha_k)^2, …, (\alpha_k)^{n-1})\) 是 \(V_{\boldsymbol{\alpha}}\) 的第 \(k\) 行。于是,理想功能的输出为

\[f(\alpha_k) = \boldsymbol{\alpha}_{k} \cdot \boldsymbol{f}^\mathrm{T}\]

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 公式

我们有

\[\boldsymbol{\alpha}_{k} \cdot \boldsymbol{f}^\mathrm{T} = \boldsymbol{\alpha}_{k} \cdot (V_{\boldsymbol{\alpha}}^{-1} \cdot V_{\boldsymbol{\alpha}}) \cdot \boldsymbol{f}^\mathrm{T} = (\boldsymbol{\alpha}_{k} \cdot V_{\boldsymbol{\alpha}}^{-1}) \cdot (V_{\boldsymbol{\alpha}} \cdot \boldsymbol{f}^\mathrm{T}) = (\boldsymbol{\alpha}_{k} \cdot V_{\boldsymbol{\alpha}}^{-1}) \cdot \boldsymbol{\beta}\]

故存在常量向量 \(\boldsymbol{\alpha}_{k} \cdot V_{\boldsymbol{\alpha}}^{-1}\),它与输入向量 \(\boldsymbol{\beta}\) 的内积就是要计算的输出。也就是说,\(\mathcal{F}_{\mathsf{eval}}^k\) 只需对参与方的输入做线性运算。

协议构造。由于 \(\mathcal{F}_{\mathsf{eval}}^k\) 是对参与方的输入进行线性运算,我们似乎可以采用与 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 同样的方法。但是,请注意,\(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\) 允许被攻陷方输入任何值,而 \(\mathcal{F}_{\mathsf{eval}}^k\) 需要保证被攻陷方的输入是正确的秘密份额(即所有秘密份额位于相同的 \(t\) 阶多项式上)。幸运的是,我们可以调用理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 来解决该问题——\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 保证了输入分享阶段中参与方正确地分发了秘密份额的子份额;协议的计算阶段与输出重建阶段与协议 \(\Pi_\mathsf{mat}^{\boldsymbol A}\) 完全一致。完整的协议如图 9.25所示。

\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)-混合模型下的 \(\Pi_\mathsf{eval}^k\) 协议

输入:\(P_i\) 的输入为 \(\beta_i\). 假设诚实方 \(P_j, \; j \notin I\) 的点集 \((\alpha_j, \beta_j)\) 位于 \(t\) 阶多项式 \(f\) 上。

公共输入:域 \(\mathbb{F}\),\(n\) 个互不相同的非0元素 \(\alpha_1, …, \alpha_n \in \mathbb{F}\).

协议:

  1. 每个参与方 \(P_i\) 以 \(\beta_i\) 为输入调用理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\),然后得到 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的输出 \(g'_1(\alpha_i), …, g'_n(\alpha_i)\),其中所有多项式 \(g'_i(x)\) 都不超过 \(t\) 阶,且 \(g'_i(0) = f(\alpha_i)\) 对 \(i \in [n]\) 都成立。

  2. 每个参与方 \(P_i\) 在本地计算 \(Q(\alpha_i) = \sum_{\ell=1}^n \lambda_\ell \cdot g'_\ell(\alpha_i)\),其中 \((\lambda_1, …, \lambda_n) = \boldsymbol{\alpha}_{k} \cdot V_{\boldsymbol{\alpha}}^{-1}\),然后 \(P_i\) 向所有参与方发送 \(Q(\alpha_i)\).

  3. 对于 \(j = 1, …, n\),\(P_i\) 从 \(P_j\) 处收到 \(\hat{Q}(\alpha_i)\). 如果某些值缺失,则将其替换为0. \(P_i\) 以(可能损坏的)码字 \((\hat{Q}(\alpha_1), …, \hat{Q}(\alpha_n))\) 为输入运行Reed-Solomon解码算法,得到码字 \((Q(\alpha_1), …, Q(\alpha_n))\),然后重建多项式 \(Q(x)\) 并计算 \(Q(0)\).

输出:\(P_i\) 输出 \((\beta_i, Q(0))\).

直观上看,该协议是安全的,参与方调用 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 获得了输入的子份额,而这些子份额不会泄露输入份额的任何信息。不过,在构造模拟器 \(\mathcal{S}\) 时,有一些细节需要考虑:\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 除了向 \(P_i\) 发送输出值 \(g'_1(\alpha_i), …, g'_n(\alpha_i)\),还向敌手泄露了向量 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\),其中 \({\boldsymbol H}\) 是Reed-Solomon编码的校验矩阵,\(g_i(x)\) 是 \(P_i\) 的输入多项式(被攻陷方 \(P_i\) 的多项式 \(g_i(x)\) 如果常数项不正确,则 \(g_i(x) \neq g'_i(x)\);对于诚实方 \(P_j\) 都有 \(g_j(x) = g'_j(x)\))。模拟器需要模拟 \(\boldsymbol{Y}(x)\). 注意,\(\boldsymbol{Y}(0) = (g_1(0), …, g_n(0)) \cdot {\boldsymbol H}^\mathrm{T}\) 为输入值的伴随式。可以模拟的原因是伴随式仅依赖于错误向量 \(\boldsymbol{e}\). 下面展开说明。令 \(\boldsymbol{\gamma} = (\gamma_1, …, \gamma_n)\) 是参与方的输入向量(对于 \(i \in I\) 可能有 \(\gamma_i \neq f(\alpha_i)\))。令“正确的”输入向量为 \(\boldsymbol{\beta} = (f(\alpha_1), …, f(\alpha_n))\). 向量 \(\boldsymbol{\gamma}\) 决定了错误向量 \(\boldsymbol{e}\),\(\boldsymbol{e}\) 满足 \(\boldsymbol{\gamma} - \boldsymbol{e} = (f(\alpha_1), …, f(\alpha_n)) = \boldsymbol{\beta}\),且 \(\boldsymbol{e}\) 的汉明重量最多为 \(t\). 伴随式函数 \(S(\boldsymbol{x}) = \boldsymbol{x} \cdot {\boldsymbol H}^\mathrm{T}\) 满足 \(S(\boldsymbol{\gamma}) = S(\boldsymbol{\beta} + \boldsymbol{e}) = S(\boldsymbol{e})\),即 \((\gamma_1, …, \gamma_n) \cdot {\boldsymbol H}^\mathrm{T} = \boldsymbol{e} \cdot {\boldsymbol H}^\mathrm{T}\),而模拟器可以自己计算 \(\boldsymbol{e}\)(模拟器从 \(\mathcal{F}_{\mathsf{eval}}^k\) 的输出中得到被攻陷方的 \(f(\alpha_i), \; i \in I\),通过模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 获得被攻陷方的输入多项式 \(\{g_i(x)\}_{i \in I}\),而 \(e_i = g_i(0) - f(\alpha_i)\);对于 \(j \notin I\),都有 \(e_j = 0\))。故模拟器可以计算 \(\boldsymbol{e} \cdot {\boldsymbol H}^\mathrm{T} = \boldsymbol{\gamma} \cdot {\boldsymbol H}^\mathrm{T} = (g_1(0), …, g_n(0)) \cdot {\boldsymbol H}^\mathrm{T} = \boldsymbol{Y}(0)\).

上面我们说明了模拟器可以计算 \(\boldsymbol{Y}(0)\). 除此之外,对于 \(i \in I\),模拟器知道 \(g_1(\alpha_i), …, g_n(\alpha_i)\),它可以计算 \(\boldsymbol{Y}(\alpha_i) = (g_1(\alpha_i), …, g_n(\alpha_i)) \cdot {\boldsymbol H}^\mathrm{T}\). 我们将证明:\(\boldsymbol{Y}(x)\) 是在 \(\boldsymbol{Y}(0)\) 和 \(\{\boldsymbol{Y}(\alpha_i)\}_{i \in I}\) 的约束条件下的均匀随机 \(t\) 阶多项式向量(当 \(| I | = t\) 时有 \(t + 1\) 个约束条件,此时 \(\boldsymbol{Y}(x)\) 是确定的);对于 \(Q(x)\) 而言也是如此:\(Q(x)\) 是在 \(Q(0)\) 和 \(Q(\alpha_i) = \sum_{\ell=1}^n \lambda_\ell \cdot g'_\ell(\alpha_i), \; i \in I\) 的约束条件下的均匀随机多项式(当 \(| I | = t\) 时 \(Q(x)\) 是确定的)。故模拟器可以模拟协议中所有消息。

我们有以下定理。

定理

假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 图 9.25中的协议 \(\Pi_\mathsf{eval}^k\) 在 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{eval}}^k\)(图 9.24)。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

要证明此定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

\[\operatorname{exec}_{\Pi_\mathsf{eval}^k,\mathcal{A},\mathcal{Z}}^{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{eval}}^k,\mathcal{S},\mathcal{Z}}\]

其中 \(\mathcal{A}\) 是平凡敌手。

模拟器 \(\mathcal{S}\). 模拟器 \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{Z}\) 与 \(\mathcal{A}\) 之间的消息。在 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)-混合模型下,\(\mathcal{S}\) 还需要模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\). \(\mathcal{S}\) 的工作方式如下。

  1. 当诚实方向 \(\mathcal{F}_{\mathsf{eval}}^k\) 发送输入后,模拟器 \(\mathcal{S}\) 得到 \(\mathcal{F}_{\mathsf{eval}}^k\) 向被攻陷方发送的输出 \(\{(f(\alpha_i), f(\alpha_k))\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{eval}}^k\) 的步骤2)。

  2. 模拟 \(\Pi_\mathsf{eval}^k\) 的步骤1:\(\mathcal{S}\) 按照如下方式模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\):

    1. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤3:对于 \(j \notin I\),随机选择多项式 \(g_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}\),然后向敌手 \(\mathcal{A}\) 发送 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\).

    2. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤4,接收并记录被攻陷方的输入多项式 \(\{g_i(x)\}_{i \in I}\). 如果没有收到 \(g_i(x)\),设置 \(g_i(x) = 0\).

    3. 对于 \(i \in I\),检查 \(\text{deg}(g_i(x)) \leq t\) 与 \(g_i(0) = f(\alpha_i)\) 是否成立,如果都成立,设置 \(g'_i(x) = g_i(x)\),否则,设置 \(g'_i(x) = f(\alpha_i)\).(\(\mathcal{S}\) 已经从 \(\mathcal{F}_{\mathsf{eval}}^k\) 的输出中得到了\(f(\alpha_i)\))

    4. 对于 \(j \notin I\),设置 \(g'_j(x) = g_j(x)\).

    5. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤6:

      1. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向敌手 \(\mathcal{A}\) 发送多项式向量 \(\boldsymbol{Y}(x)\),通过如下方式选取:

        • 计算 \((e_1, …, e_n)\):对于 \(j \notin I\) 设置 \(e_j = 0\),对于 \(i \in I\) 设置 \(e_i = g_i(0) - f(\alpha_i)\).

        • 均匀随机选择 \(t\) 阶多项式向量 \(\boldsymbol{Y}(x)\),满足约束条件 \(\boldsymbol{Y}(0) = (e_1, …, e_n) \cdot {\boldsymbol H}^\mathrm{T}\) 以及 \(\boldsymbol{Y}(\alpha_i) = (g_1(\alpha_i), …, g_n(\alpha_i)) \cdot {\boldsymbol H}^\mathrm{T}, \; i \in I\).

      2. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向被攻陷方 \(P_i, i \in I\) 发送输出 \(g'_i(x)\) 和 \(g'_1(\alpha_i), …, g'_n(\alpha_i)\).

  3. 模拟 \(\Pi_\mathsf{eval}^k\) 的步骤3:

    1. \(\mathcal{S}\) 均匀随机选择 \(t\) 阶多项式 \(Q(x)\),满足约束条件 \(Q(0) = f(\alpha_i)\) 以及 \(Q(\alpha_i) = \sum_{\ell=1}^n \lambda_\ell \cdot g'_\ell(\alpha_i), \; i \in I\),其中 \((\lambda_1, …, \lambda_n) = \boldsymbol{\alpha}_{k} \cdot V_{\boldsymbol{\alpha}}^{-1}\).

    2. 对于 \(j \notin I\),\(\mathcal{S}\) 模拟 \(P_j\) 向所有参与方发送 \(Q(\alpha_j)\).

不可区分性。真实世界的运行和理想世界的运行有三个不同:(1) 对于 \(j \notin I\),\(\mathcal{S}\) 选择的多项式 \(g_j(x)\) 的常数项为0而不是 \(f(\alpha_j)\);(2) \(\mathcal{S}\) 是基于约束条件随机选择的 \(\boldsymbol{Y}(x)\),而真实世界中 \(\boldsymbol{Y}(x)\) 是由 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 基于 \((g_1(x), …, g_n(x))\) 计算得到的;(3) \(\mathcal{S}\) 是基于约束条件随机选择的 \(Q(x)\),而真实世界中 \(Q(x)\) 是基于 \((g'_1(x), …, g'_n(x))\) 计算出来的。我们通过三个混合实验证明真实世界和理想世界是不可区分的。

混合实验 \(\mathcal{H}_{0}\):这是理想世界的执行 \(\operatorname{exec}_{\mathcal{F}_{\mathsf{eval}}^k,\mathcal{S},\mathcal{Z}}\).

混合实验 \(\mathcal{H}_{1}\):\(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 相同,除了模拟器 \(\mathcal{S}\) 在步骤2(a)中,选取诚实方 \(P_j\) 多项式 \(g_j(x) \leftarrow_{\$} \mathcal{P}^{\beta_j, t}\) 而不是 \(g_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}\),其中 \(\beta_j = f(\alpha_j)\) 是 \(P_j\) 的输入。

断言1:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 完美不可区分。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

由于 \(| I | \leq t\),根据推论 multi_polynomial_distribution,\(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 中的敌手得到的秘密份额 \(\{g_j(\alpha_i)\}_{j \notin I, i \in I}\) 具有相同的分布,因此 \(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 完美不可区分。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

混合实验 \(\mathcal{H}_{2}\):\(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 相同,除了 \(\boldsymbol{Y}(x)\) 的计算方式改为真实世界中 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的计算方式,即:对于 \(j \notin I\),均匀随机选取 \(t\) 阶多项式 \(g_j(x)\) 满足 \(g_j(0) = f(\alpha_j)\),对于 \(i \in I\),使用被攻陷方提供的多项式 \(g_i(x)\),然后基于 \((g_1(x), …, g_n(x))\) 计算。

断言2:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 完美不可区分。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

这是基于伴随式函数 \(S(\boldsymbol{x}) = \boldsymbol{x} \cdot {\boldsymbol H}^\mathrm{T}\) 的性质。令 \(\boldsymbol{\gamma}\) 是参与方的实际输入,令 \(\boldsymbol{e} = (e_1, …, e_n)\) 是错误向量,那么,我们有 \(S(\boldsymbol{\gamma}) = S(\boldsymbol{e})\). 因此,在 \(\mathcal{H}_{2}\) 和 \(\mathcal{H}_{1}\) 中,对于 \(\boldsymbol{Y}(0)\) 和 \(\{\boldsymbol{Y}(\alpha_i)\}_{i \in I}\) 的约束条件实际上是相同的。接下来的证明与半诚实的情况同理,根据定理 6.1中的证明,对于 \(\boldsymbol{Y}(x)\) 中的每个多项式 \(Y_\ell(x), \; \ell = 1, …, 2t\),基于不超过 \(t + 1\) 个约束条件均匀随机选择的多项式与真实世界的多项式有相同的分布,故 \(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 完美不可区分。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

混合实验 \(\mathcal{H}_{3}\):\(\mathcal{H}_{3}\) 与 \(\mathcal{H}_{2}\) 相同,除了 \(Q(x)\) 的计算方式改为真实世界中的计算方式,即基于 \((g'_1(x), …, g'_n(x))\) 计算。

断言3:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{3}\) 与 \(\mathcal{H}_{2}\) 完美不可区分。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

与断言 2同理,\(\mathcal{H}_{3}\) 与 \(\mathcal{H}_{2}\) 中 \(Q(x)\) 的分布完全相同。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

混合实验 \(\mathcal{H}_{4}\):这是真实世界的执行 \(\operatorname{exec}_{\Pi_\mathsf{eval}^k,\mathcal{A},\mathcal{Z}}^{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}}\).

断言4:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{4}\) 与 \(\mathcal{H}_{3}\) 完美不可区分。

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

\(\mathcal{H}_{4}\) 与 \(\mathcal{H}_{3}\) 中,敌手 \(\mathcal{A}\) 的视图完全相同(根据定义)。我们只需要证明真实世界与理想世界中诚实方的输出相同,即真实协议中诚实方的输出一定是 \(f(\alpha_k)\). 不难发现,\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 保证了输入秘密份额的子份额被正确地分发了,而 \(| I | \leq t\),码字 \((\hat{Q}(\alpha_1), …, \hat{Q}(\alpha_n))\) 至少有 \(n - t\) 个正确的元素,根据Reed-Solomon编码的性质,参与方可以重建正确的 \(Q(0) = f(\alpha_k)\).

实现多项式求值理想功能 \(\mathcal{F}_{\mathsf{eval}}\) · 证明

综上所述,真实世界与理想世界完美不可区分,证毕。

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\)

理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 允许秘密分发者在已经分享了 \(t\) 阶多项式 \(A(x)\) 和 \(B(x)\) 的情况下,可验证地分享随机 \(t\) 阶多项式 \(C(x)\),满足 \(C(0) = A(0) \cdot B(0)\). 这是协议中关键的一步(参见「直观思想」一节的乘法协议概览)。\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的定义如图 9.26所示。

乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\)

\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 接收被攻陷方的集合 \(I \subset [n]\),并执行如下操作:

  1. 对于每个诚实方 \(P_j, \; j \notin I\),\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 接收其输入 \((a_j, b_j)\). (注意,秘密分发者 \(P_1\) 持有多项式 \(A(x), B(x)\),满足 \(A(\alpha_j) = a_j, B(\alpha_j) = b_j\) 对 \(j \notin I\) 都成立。)

  2. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 计算满足 \(A(\alpha_j) = a_j, B(\alpha_j) = b_j, \; j \notin I\) 的唯一的 \(t\) 阶多项式 \(A\) 和 \(B\).

  3. 如果秘密分发者 \(P_1\) 是诚实的(\(1 \notin I\)),那么:

    1. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 计算满足 \(C(0) = A(0) \cdot B(0)\) 的均匀随机 \(t\) 阶多项式 \(C(x)\).

    2. 向诚实方发送输出:\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 向 \(P_1\) 发送多项式 \(C(x)\),向 \(P_j, \; j \notin I\) 发送 \(C(\alpha_j)\).

    3. 向敌手发送输出:\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 向敌手 \(\mathcal{S}\) 发送秘密份额 \(\{(A(\alpha_i), B(\alpha_i), C(\alpha_i))\}_{i \in I}\).

  4. 如果秘密分发者 \(P_1\) 是被攻陷的(\(1 \in I\)),那么:

    1. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 向敌手 \(\mathcal{S}\) 发送 \((A(x), B(x))\).

    2. \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 从 \(P_1\) 处接收多项式 \(C(x)\).

    3. 如果 \(\text{deg}(C) > t\) 或 \(C(0) \neq A(0) \cdot B(0)\),那么设置 \(C(x) = A(0) \cdot B(0)\).

    4. 向诚实方发送输出:对于 \(j \notin I\),\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 向 \(P_j\) 发送 \(C(\alpha_j)\).(此时无需向敌手发送输出)

乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\)

尽管秘密分发者 \(P_1\) 本来就应该知道 \(A(x), B(x)\),参与方 \(P_i\) 本来就应该知道 \(A(\alpha_i), B(\alpha_i)\),在上述定义中 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 还是将这些信息提供给了敌手 \(\mathcal{S}\),这是因为 \(\mathcal{S}\) 需要知道被攻陷方正确的份额才能够进行模拟。在整个乘法协议中,敌手原本就知道这些信息,因此 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 再次发送它们不会造成额外的信息泄露。

请读者注意,\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 适用于参与方已经拥有(导线值的)秘密份额 \(a\) 和 \(b\) 时,通过 \(t\) 阶多项式 \(C(x)\)(满足 \(C(0) = a \cdot b\))可验证地分发 \(a \cdot b\) 的子份额。这里的 \(a\) 和 \(b\) 不是导线上的值,而是导线值的秘密份额。

协议思想。令 \(A(x)\) 和 \(B(x)\) 是用于分享 \(a\) 和 \(b\) 的多项式,满足 \(A(0) = a, B(0) = b\). 协议的思想是:秘密分发者首先选择 \(t\) 个多项式 \(D_1(x), …, D_t(x)\),它们均为 \(t\) 阶,使得 \(C(x) = A(x) \cdot B(x) - \sum_{\ell=1}^t x^\ell \cdot D_\ell(x)\) 是常数项为 \(a \cdot b\) 的随机 \(t\) 阶多项式。注意,\(A(x)\) 和 \(B(x)\) 均为 \(t\) 阶,故 \(A(x) \cdot B(x)\) 的阶数为 \(2t\),秘密分发者选择的 \(D_1(x), …, D_t(x)\) 需要使 \(A(x) \cdot B(x)\) 高于 \(t\) 阶的项全部被抵消,这样 \(C(x)\) 的阶数才能为 \(t\). 然后,秘密分发者分享多项式 \(D_1(x), …, D_t(x)\),每个参与方在本地计算 \(C(x)\) 的秘密份额。注意到,每一个 \(D_\ell(x)\) 都乘以了 \(x^\ell\),因此无论 \(D_1(x), …, D_t(x)\) 如何选择,\(C(x)\) 的常数项始终等于 \(A(0) \cdot B(0) = a \cdot b\). 也就是说,即使恶意的秘密分发者错误地选择 \(D_1(x), …, D_t(x)\),也不会影响 \(C(x)\) 的常数项,但 \(C(x)\) 的阶数可能超过 \(t\).

更具体地,在确定 \(D_1(x), …, D_t(x)\) 后,秘密分发者调用 \(\mathcal{F}_{\mathsf{VSS}}\) 分享这些多项式,\(\mathcal{F}_{\mathsf{VSS}}\) 保证了多项式的阶数为 \(t\) 且参与方持有正确的份额。而参与方本来就持有 \(A(x)\) 和 \(B(x)\) 的份额。给定 \(A(\alpha_j), B(\alpha_j)\) 以及 \(D_1(\alpha_j), …, D_t(\alpha_j)\),\(P_j\) 可以本地计算 \(C(\alpha_j) = A(\alpha_j) \cdot B(\alpha_j) - \sum_{\ell=1}^t (\alpha_j)^\ell \cdot D_\ell(\alpha_j)\). 此时,如果秘密分发者是诚实的,那么参与方的秘密份额位于常数项为 \(a \cdot b\) 的 \(t\) 阶多项式上;如果秘密分发者是被攻陷的,那么这些秘密份额仍然位于常数项为 \(a \cdot b\) 的多项式上(但阶数不能保证)。因此,只需要再设计一种方法使参与方验证 \(C(x)\) 确实是 \(t\) 阶多项式即可。

一个直接的想法是:让秘密分发者再调用 \(\mathcal{F}_{\mathsf{VSS}}\) 分享 \(C(x)\),然后参与方验证自己收到的份额与基于 \(A(\alpha_j), B(\alpha_j), D_1(\alpha_j), …, D_t(\alpha_j)\) 计算得到的 \(C(\alpha_j)\) 相等。具体而言,将 \(P_j\) 从 \(\mathcal{F}_{\mathsf{VSS}}\) 收到的份额记为 \(C'(\alpha_j)\),将计算 \(A(\alpha_j) \cdot B(\alpha_j) - \sum_{\ell=1}^t (\alpha_j)^\ell \cdot D_\ell(\alpha_j)\) 所得的值记为 \(C(\alpha_j)\). 如果 \(C(\alpha_j) \neq C'(\alpha_j)\),那么参与方就像VSS协议中(图 9.9)那样广播“投诉”。如果有超过 \(t\) 个参与方投诉,那么秘密分发者就是被攻陷的,所有参与方广播自己的份额以重建 \(A(x)\) 和 \(B(x)\),并输出 \(A(0) \cdot B(0)\). 但是,需要注意的是,\(C(x)\) 可以是阶数为 \(2t\) 的多项式,它与另一个 \(t\) 阶多项式 \(C'(x)\) 最多可以相交于 \(2t\) 个点。因此,恶意的秘密分发者可以通过 \(\mathcal{F}_{\mathsf{VSS}}\) 分享 \(t\) 阶多项式 \(C'(x)\),其中 \(C'(x)\) 与 \(C(x)\) 在 \(2t\) 个位置 \(\alpha_j\) 处的值相等,且 \(C'(0) \neq a \cdot b\). 由于诚实方的数量至少为 \(2t + 1\),此时,我们只能保证至少有1个诚实方会广播投诉,但投诉的数量不足以让参与方确定秘密分发者是被攻陷的并重建其份额。

这个问题的解决方法是:参与方要明确地解决每一个投诉,验证其是否为合法的。只要有一个合法的投诉,参与方就重建 \(a\) 和 \(b\) 并输出 \(a \cdot b\);如果投诉的不合法的,那么忽略它。这保证了如果没有诚实方提出合法的投诉,那么秘密分发者通过 \(\mathcal{F}_{\mathsf{VSS}}\) 分享的 \(t\) 阶多项式 \(C'(x)\) 与 \(C(x)\) 在至少 \(2t + 1\) 个点处的值一致,而 \(C(x)\) 的阶数最多为 \(2t\),所以一定满足 \(C(x) = C'(x)\),即 \(C(x)\) 的阶数为 \(t\).

这里,我们需要调用「实现多项式求值理想功能 F_eval」一节实现的理想功能 \(\mathcal{F}_{\mathsf{eval}}^k\) 来明确地解决投诉。当 \(P_k\) 提出投诉时,参与方调用 \(\mathcal{F}_{\mathsf{eval}}^k\) 来计算 \(A(\alpha_k), B(\alpha_k), D_1(\alpha_k), …, D_t(\alpha_k)\) 以及 \(C'(\alpha_k)\),然后检查 \(C'(\alpha_k) \stackrel{?}{=} A(\alpha_k) \cdot B(\alpha_k) - \sum_{\ell=1}^t (\alpha_k)^\ell \cdot D_\ell(\alpha_k)\). 如果等式不成立,那么秘密分发者就是被攻陷的,参与方重建 \(a \cdot b\) 并输出。上述方法可以明确地验证每个投诉是否为合法的。注意,参与方一定持有 \(C'(x), D_1(x), …, D_t(x)\) 的正确份额,因为它们是通过 \(\mathcal{F}_{\mathsf{VSS}}\) 分享的,而根据输入的假设,参与方持有的 \(A(x)\) 和 \(B(x)\) 的份额也是正确的,因此可以调用 \(\mathcal{F}_{\mathsf{eval}}^k\) 进行计算。

在秘密分发者是诚实的情况下,参与方不可能提出合法的投诉。此时,如果被攻陷方提出错误的投诉,投诉解决的过程只会公布(被攻陷的)投诉者自己的秘密份额,因而不会让敌手获得任何额外信息。

构造多项式 \(C(x)\). 上文中说到,秘密分发者需要选择特殊构造的 \(t\) 个 \(t\) 阶多项式 \(D_1(x), …, D_t(x)\) 使得 \(C(x) = A(x) \cdot B(x) - \sum_{\ell=1}^t x^\ell \cdot D_\ell(x)\) 是常数项为 \(a \cdot b\) 的随机 \(t\) 阶多项式,其中 \(a = A(0), b = B(0)\). 下面我们介绍选择这些多项式的方式。首先,定义多项式 \(D(x)\) 如下:

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 公式

\[D(x) = A(x) \cdot B(x) = a \cdot b + d_1 x + \dots + d_{2t} x^{2t}\]

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 公式

因为 \(A(x)\) 和 \(B(x)\) 为 \(t\) 阶多项式,所以 \(D(x)\) 的阶数为 \(2t\). 然后,秘密分发者定义 \(D_1(x), …, D_t(x)\) 如下:

\[\begin{aligned} D_t(x) & = r_{t, 0} + r_{t, 1} x + \dots + r_{t, t-1} x^{t-1} + d_{2t} x^t \\ D_{t-1}(x) & = r_{t-1, 0} + r_{t-1, 1} x + \dots + r_{t-1, t-1} x^{t-1} + (d_{2t-1} - r_{t, t-1}) \cdot x^t \\ D_{t-2}(x) & = r_{t-2, 0} + r_{t-2, 1} x + \dots + r_{t-2, t-1} x^{t-1} + (d_{2t-2} - r_{t-1, t-1} - r_{t, t-2}) \cdot x^t \\ & \; \; \vdots \\ D_1(x) & = r_{1, 0} + r_{1, 1} x + \dots + r_{1, t-1} x^{t-1} + (d_{t+1} - r_{t, 1} - r_{t-1, 2} - \dots - r_{2, t-1}) \cdot x^t \end{aligned}\]

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 公式

其中 \(r_{i, j} \leftarrow_{\$} \mathbb{F}\) 都是均匀随机值,\(d_i\) 是 \(D(x) = A(x) \cdot B(x)\) 的系数。也就是说,\(D_\ell(x)\) 除了 \(x^t\) 的系数是特殊选择的,其他项的系数都是均匀随机选择的。我们将 \(D_\ell(x), \; 1 \leq \ell \leq t\) 重新写为以下形式:

\[D_\ell(x) = r_{\ell, 0} + r_{\ell, 1} \cdot x + \dots + r_{\ell, t-1} \cdot x^{t-1} + \Big( d_{t + \ell} - \sum\limits_{m=\ell+1}^t r_{m, t+\ell-m} \Big) \cdot x^t\]

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 公式

多项式 \(C(x)\) 通过下式计算得到:

\[C(x) = D(x) - \sum\limits_{\ell=1}^t x^\ell \cdot D_\ell(x)\]

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 公式

让我们验算一下,当 \(D_1(x), …, D_t(x)\) 按照上述方式选择时,\(C(x)\) 是常数项为 \(a \cdot b\) 的 \(t\) 阶多项式,即:\(D(x)\) 中高于 \(t\) 阶的项都被抵消了。令

\[R_{\ell, t} = d_{t + \ell} - \sum\limits_{m=\ell+1}^t r_{m, t+\ell-m}\]

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 公式

那么

\[D_\ell(x) = r_{\ell, 0} + r_{\ell, 1} \cdot x + \dots + r_{\ell, t-1} \cdot x^{t-1} + R_{\ell, t} \cdot x^t\]

我们来分析一下多项式 \(\sum_{\ell=1}^t x^\ell \cdot D_\ell(x)\). 首先,它的阶数为 \(2t\),常数项为0. 我们将它的系数画成一张表,如表 9.1所示。

\(D_{t-1}\)\(…\)\(r_{t-1, 1}\)\(r_{t-1, 2}\)\(r_{t-1, 3}\)\(…\)\(r_{t-1, t-1}\)\(R_{t-1, t}\)
\(D_{t-2}\)\(…\)\(r_{t-2, 2}\)\(r_{t-2, 3}\)\(r_{t-2, 4}\)\(…\)\(R_{t-2, t}\)
\(\vdots\)\(\iddots\)\(\vdots\)\(\vdots\)\(\vdots\)\(\iddots\)
\(D_3\)\(r_{3,0}\)\(…\)\(r_{3,t-3}\)\(r_{3,t-2}\)\(r_{3, t-1}\)\(…\)
\(D_2\)\(r_{2,0}\)\(r_{2,1}\)\(…\)\(r_{2,t-2}\)\(r_{2,t-1}\)\(R_{2, t}\)
\(D_1\)\(r_{1,0}\)\(r_{1,1}\)\(r_{1,2}\)\(…\)\(r_{1,t-1}\)\(R_{1,t}\)

多项式 \(\sum_{\ell=1}^{t} x^\ell \cdot D_\ell(x)\) 的系数

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 公式

表格中,\(D_\ell(x)\) 的系数向右移了 \(\ell\) 格,这是因为在多项式 \(\sum_{\ell=1}^{t} x^\ell \cdot D_\ell(x)\) 中 \(D_\ell(x)\) 要乘以 \(x^\ell\). 因此,将表中每一列全部相加即可得到对应项的系数。于是,对于 \(k = 1, …, t\),将 \(x^{t + k}\) 对应的列全部相加,得到其系数为

\[R_{k, t} + r_{k+1, t-1} + r_{k+2, t-2} + \dots + r_{t, k} = R_{k, t} + \sum\limits_{m=k+1}^t r_{m, t+k-m}\]

根据式(式 9.11)中 \(R_{k, t}\) 的定义,这个值等于 \(d_{t + k}\). 而 \(d_{t + k}\) 是 \(D(x)\) 中 \(x^{t + k}\) 的系数,由此可知 \(C(x) = D(x) - \sum_{\ell=1}^t x^\ell \cdot D_\ell(x)\) 中大于 \(t\) 阶的项全部被抵消了,因此 \(C(x)\) 是 \(t\) 阶多项式。最后,我们注意到 \(x, x^2, …, x^t\) 的系数都是均匀随机的(因为对于 \(i = 1, …, t\),\(r_{i, 0}\) 都是均匀随机选取的)。故 \(C(x)\) 除了常数项为 \(A(0) \cdot B(0) = a \cdot b\),其他项的系数都是均匀随机的。

协议描述。我们在 \(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{eval}}^1, …, \mathcal{F}_{\mathsf{eval}}^n\}\)-混合模型下给出完整的协议描述,如图 9.27所示。为了简洁,我们用 \(\mathcal{F}_{\mathsf{eval}}\) 表示 \(n\) 个理想功能 \(\mathcal{F}_{\mathsf{eval}}^1, …, \mathcal{F}_{\mathsf{eval}}^n\).

{\(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{eval}}\}\)-混合模型下的 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 协议

\(\small\)

  1. 秘密分发者 \(P_1\) 的输入是 \(t\) 阶多项式 \(A(x)\) 和 \(B(x)\),\(A(0) = a, B(0) = b\).

  2. 参与方 \(P_i\) 的输入是 \(a_i, b_i\),满足 \(a_i = A(\alpha_i), b_i = A(\alpha_i)\).

公共输入:域 \(\mathbb{F}\),\(n\) 个互不相同的非0元素 \(\alpha_1, …, \alpha_n \in \mathbb{F}\).

  1. 分发阶段:
    1. 秘密分发者 \(P_1\) 计算(阶数为 \(2t\) 的)多项式 \(D(x) = A(x) \cdot B(x)\),记为 \(D(x) = a \cdot b + \sum_{\ell=1}^{2t} d_\ell \cdot x^\ell\).

    2. \(P_1\) 在域 \(\mathbb{F}\) 上均匀随机选择 \(t^2\) 个值 \(\{r_{k, j}\}\),其中 \(k = 1, …, t, \; j = 0, …, t - 1\).

    3. 对于 \(\ell = 1, \dots, t\),\(P_1\) 定义多项式 \(D_\ell(x)\) 如下:

      \[D_\ell(x) = \Big( \sum\limits_{m=0}^{t-1} r_{\ell, m} \cdot x^m \Big) + \Big( d_{\ell+t} - \sum\limits_{m=\ell+1}^t r_{m, t+\ell-m} \Big) \cdot x^t\]
    4. \(P_1\) 计算多项式 \(C(x) = D(x) - \sum_{\ell=1}^t x^\ell \cdot D_\ell(x)\).

    5. \(P_1\) 作为秘密分发者以 \(C(x)\) 为输入调用 \(\mathcal{F}_{\mathsf{VSS}}\);每个参与方 \(P_i\) 收到 \(C(\alpha_i)\).

    6. 对于 \(\ell = 1, …, t\),\(P_1\) 作为秘密分发者以 \(D_\ell(x)\) 为输入调用 \(\mathcal{F}_{\mathsf{VSS}}\);每个参与方 \(P_i\) 收到 \(D_\ell(\alpha_i)\).

  2. 验证阶段:每个参与方 \(P_i\) 执行以下操作:
    1. 如果任何一个份额 \(C(\alpha_i), D_\ell(\alpha_i)\) 为 \(\bot\),跳到拒绝阶段(注意,如果有一个诚实方收到 \(\bot\) 那么所有诚实方收到的都是 \(\bot\))。

    2. 否则,\(P_i\) 计算 \(c'_i = a_i \cdot b_i - \sum_{\ell=1}^t (\alpha_i)^\ell \cdot D_\ell(\alpha_i)\). 如果 \(c'_i \neq C(\alpha_i)\),那么 \(P_i\) 广播 \((\mathsf{complaint}, i)\).

    3. 如果有参与方 \(P_k\) 广播 \((\mathsf{complaint}, k)\),那么进入投诉解决阶段;否则,进入输出阶段并输出 \(C(\alpha_i)\).

  3. 投诉解决阶段:设置 \(\mathsf{reject} = \mathsf{false}\). 然后,对于每条投诉 \((\mathsf{complaint}, k)\),执行以下操作:
    1. 调用 \(t + 3\) 次 \(\mathcal{F}_{\mathsf{eval}}^k\):第1次调用中 \(P_i\) 的输入为 \(a_i\),第2次调用中 \(P_i\) 的输入为 \(b_i\),第3次调用中 \(P_i\) 的输入为 \(C(\alpha_i)\),第 \(\ell + 3\) 次调用中 \(P_i\) 的输入为 \(D_\ell(\alpha_i)\),\(\ell = 1, …, t\).

    2. 令 \(\tilde{A}(\alpha_k), \tilde{B}(\alpha_k), \tilde{C}(\alpha_k), \tilde{D}_1(\alpha_k), …, \tilde{D}_t(\alpha_k)\) 为参与方在 \(t + 3\) 次调用 \(\mathcal{F}_{\mathsf{eval}}^k\) 中得到的输出。计算 \(\tilde{C}'(\alpha_k) = \tilde{A}(\alpha_k) \cdot \tilde{B}(\alpha_k) - \sum_{\ell=1}^t (\alpha_k)^\ell \cdot \tilde{D}_\ell(\alpha_k)\).

    3. 如果 \(\tilde{C}'(\alpha_k) \neq \tilde{C}(\alpha_k)\),那么设置 \(\mathsf{reject} = \mathsf{true}\).

    如果 \(\mathsf{reject} = \mathsf{false}\),那么进入输出阶段并输出 \(C(\alpha_i)\);否则,进入拒绝阶段。
  4. 拒绝阶段:
    1. 每个参与方 \(P_i\) 广播 \((a_i, b_i)\). 令 \(\boldsymbol{a} = (a_1, …, a_n)\) 和 \(\boldsymbol{b} = (b_1, …, b_n)\) 是广播的值(缺失的值用0代替)。\(P_i\) 以 \(\boldsymbol{a}\) 和 \(\boldsymbol{b}\) 为输入运行Reed-Solomon解码算法,得到 \(A'(x)\) 和 \(B'(x)\).

    2. 每个参与方 \(P_i\) 设置 \(C(\alpha_i) = A'(0) \cdot B'(0)\).

输出:每个参与方 \(P_i\) 输出 \(C(\alpha_i)\).

\(\caption\){\(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{eval}}\}\)-混合模型下的 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 协议}

我们有以下定理。

定理

假设参与方之间存在认证的广播信道。假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 图 9.27中的协议 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 在 \(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{eval}}\}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\)(图 9.26)。

实现乘积子份额秘密分享理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) · 证明

我们分两种情况考虑:(1) 秘密分发者是诚实的;(2) 秘密分发者是被攻陷的。

情况1:秘密分发者 \(P_1\) 是诚实的。此时,由于秘密分发者是诚实的,敌手 \(\mathcal{A}\) 在所有 \(\mathcal{F}_{\mathsf{VSS}}\) 的调用中都没有输入,只接收秘密份额。此外,根据 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的定义,模拟器 \(\mathcal{S}\) 不向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 提供输入,\(\mathcal{S}\) 只需模拟敌手的视图。模拟器 \(\mathcal{S}\) 采用如下方式进行模拟。首先,均匀随机选择 \(t\) 阶多项式 \(D_2(x), …, D_t(x)\),然后,在以下约束条件下均匀随机选择 \(t\) 阶多项式 \(D_1(x)\):

\[\alpha_i \cdot D_1(\alpha_i) = A(\alpha_i) \cdot B(\alpha_i) - C(\alpha_i) - \sum\limits_{\ell=2}^t (\alpha_i)^\ell \cdot D_\ell(\alpha_i) \text{对} i \in I \text{都成立}\]

这样计算得到的 \(D_1(\alpha_i), …, D_t(\alpha_i)\) 具有正确的分布,因为

\[C(x) = D(x) - \sum\limits_{\ell=1}^t x^\ell \cdot D_\ell(x) = A(x) \cdot B(x) - x \cdot D_1(x) - \sum\limits_{\ell=2}^t x^\ell \cdot D_\ell(x)\]

即

\[x \cdot D_1(x) = A(x) \cdot B(x) - C(x) - \sum\limits_{\ell=2}^t x^\ell \cdot D_\ell(x)\]

我们将证明,模拟器选择的 \(D_\ell(x)\) 与诚实的秘密分发者选择的 \(D_\ell(x)\) 具有相同的分布(因为它们都是在约束条件 \(C(\alpha_i) = A(\alpha_i) \cdot B(\alpha_i) - \sum_{\ell=1}^t (\alpha_i)^\ell \cdot D_\ell(\alpha_i), \; i \in I\) 下的随机多项式)。\(\mathcal{S}\) 还需要模拟投诉解决。注意到,当秘密分发者是诚实的时候,诚实方不会广播投诉。对于每个被攻陷方 \(P_i\) (\(i \in I\)) 广播的投诉 \((\mathsf{complaint}, i)\),\(\mathcal{S}\) 很容易进行模拟,因为 \(\mathcal{S}\) 知道正确的 \(\tilde{A}(\alpha_i) = A(\alpha_i), \tilde{B}(\alpha_i) = B(\alpha_i), \tilde{C}(\alpha_i) = C(\alpha_i)\),对于 \(\ell = 1, …, t\),\(\mathcal{S}\) 使用它选择的 \(\tilde{D}_\ell(\alpha_i) = D_\ell(\alpha_i)\) 作为 \(F_\mathsf{eval}^i\) 的输出。

模拟器 \(\mathcal{S}\) 的工作方式如下。

  1. 当诚实方向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送输入后,\(\mathcal{S}\) 收到 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送的秘密份额 \(\{(A(\alpha_i), B(\alpha_i), C(\alpha_i))\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的步骤3(c))。

  2. \(\mathcal{S}\) 选择 \(t - 1\) 个均匀随机 \(t\) 阶多项式 \(D_2(x), …, D_t(x)\).

  3. 对于 \(i \in I\),\(\mathcal{S}\) 计算

    \[D_1(\alpha_i) = (\alpha_i)^{-1} \cdot \Big( A(\alpha_i) \cdot B(\alpha_i) - C(\alpha_i) - \sum\limits_{\ell=2}^t (\alpha_i)^\ell \cdot D_\ell(\alpha_i) \Big)\]
  4. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 的步骤1(e)和1(f):\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}\) 向每个被攻陷方 \(P_i, \; i \in I\) 发送输出 \(C(\alpha_i), D_1(\alpha_i), …, D_t(\alpha_i)\).

  5. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 的步骤2和3:对于每个广播了 \((\mathsf{complaint}, k)\) 的被攻陷方 \(P_k\),\(\mathcal{S}\) 模拟投诉解决阶段:\(\mathcal{S}\) 模拟 \(t + 3\) 次 \(\mathcal{F}_{\mathsf{eval}}^k\) 的调用,对于 \(i \in I\),模拟 \(\mathcal{F}_{\mathsf{eval}}^k\) 向被攻陷方 \(P_i\) 发送输出 \((A(\alpha_i), A(\alpha_k)), (B(\alpha_i), B(\alpha_k)), (C(\alpha_i), C(\alpha_k))\) 和 \(\{(D_\ell(\alpha_i), D_\ell(\alpha_k))\}_{\ell=1}^t\).

不可区分性。我们证明理想世界与真实世界是不可区分的。我们首先证明诚实方的输出有相同的分布,然后,我们证明:给定诚实方的输出,敌手的视图在理想世界和真实世界的分布相同。

诚实方的输出。令诚实方的输入所在的 \(t\) 阶多项式为 \(A(x)\) 和 \(B(x)\). 在理想世界中,理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 从 \(\mathcal{P}^{A(0) \cdot B(0), t}\) 中均匀随机选择 \(C(x)\),然后向每个参与方 \(P_j\) 发送输出 \((A(\alpha_j), B(\alpha_j), C(\alpha_j))\). 在真实世界中,秘密分发者按照协议 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 的步骤1(a)到1(d)来选择 \(D_1(x), …, D_t(x)\) 和 \(C(x)\),根据定义,其满足 \(C(0) = A(0) \cdot B(0)\). 因为秘密分发者是诚实的,所有投诉解决的结果都会是 \(\tilde{C}'(\alpha_k) = \tilde{C}(\alpha_k)\),所以不会进入拒绝阶段,故每个诚实方 \(P_j\) 都会输出 \(C(\alpha_j)\),即所有诚实方都会输出常数项正确的 \(C(x)\) 的秘密份额。最后,根据上文中的分析,\(C(x)\) 的阶数不超过 \(t\) 且除了常数项外其他项的系数都是均匀随机的。综上所述,理想世界和真实世界中诚实方的输出具有相同的分布。

\[\Big\{ D_1(\alpha_i) \Big\}_{i \in I}, \dots, \Big\{ D_t(\alpha_i) \Big\}_{i \in I}, \Big\{ C(\alpha_i) \Big\}_{i \in I}\]

以及在投诉解决阶段收到的消息。在秘密分发者是诚实的情况下,敌手在投诉解决阶段得到的消息只是式(式 9.12)的子集,并且,诚实方的输出已经确定了 \(C(x)\),因此,我们只需要证明:在真实世界和理想世界中,\(\{D_1(\alpha_i), …, D_t(\alpha_i)\}_{i \in I}\) 具有相同的分布。

我们将模拟器 \(\mathcal{S}\) 选择的多项式记为 \(D_1^S(x), \dots, D_t^S(x)\),将真实协议中秘密分发者选择的多项式记为 \(D_1(x), \dots, D_t(x)\). 我们需要证明

\[\Big\{ D_1^S(\alpha_i), \dots, D_t^S(\alpha_i) \; | \; A(x), B(x), C(x) \Big\}_{i \in I} \stackrel{\mathrm{perf}}{=} \Big\{ D_1(\alpha_i), \dots, D_t(\alpha_i) \; | \; A(x), B(x), C(x) \Big\}_{i \in I}\]

为此,我们证明对于 \(\ell = 1, \dots, t\),有

\[\begin{aligned} \Big\{ D_\ell^S(\alpha_i) \; | \; & A(x), B(x), C(x), D_{\ell+1}^S(\alpha_i), \dots, D_t^S(\alpha_i) \Big\}_{i \in I} \\ & \stackrel{\mathrm{perf}}{=} \Big\{ D_\ell(\alpha_i) \; | \; A(x), B(x), C(x), D_{\ell+1}(\alpha_i), \dots, D_t(\alpha_i) \Big\}_{i \in I} \end{aligned}\]

综合上式取 \(\ell = t\) 到 \(\ell = 1\) 的情况可得式(式 9.13)。

我们首先证明式(式 9.14)对于 \(\ell > 1\) 的情况都成立。令 \(\ell \in \{2, \dots, t\}\). 显然,\(\{D_\ell^S(\alpha_i)\}\) 是均匀随机分布的,与 \(A(x), B(x), C(x), D_{\ell+1}^S(x), \dots, D_t^S(x)\) 无关。但是,真实协议中选取的 \(D_\ell(x)\) 似乎和 \(A(x), B(x), C(x), D_{\ell+1}(x), \dots, D_t(x)\) 存在依赖关系。下面我们证明 \(\{D_\ell(\alpha_i)\}\) 仍然是均匀随机值。注意到

\[D_\ell(x) = r_{\ell, 0} + r_{\ell, 1} \cdot x + \dots + r_{\ell, t-1} \cdot x^{t-1} + \Big( d_{\ell+t} - \sum\limits_{m=\ell+1}^t r_{m, t+\ell-m} \Big) \cdot x^t\]

其中 \(r_{\ell, 0}, …, r_{\ell, t-1}\) 都是均匀随机选取的,不会出现在 \(A(x), B(x), D_{\ell+1}(x), …, D_t(x)\) 的系数中(见表 9.1)。只有最后一个系数与其他多项式存在依赖关系。但是,根据引理 9.5,\(D_\ell(x)\) 是 \(t\) 阶多项式,除了最高次项的系数外其他系数都是均匀随机选择的,那么任意不超过 \(t\) 个点处的值 \(\{D_\ell(\alpha_i)\}_{i \in I}\) 是均匀随机值,与 \(A(x), B(x), D_{\ell+1}(x), …, D_t(x)\) 无关。然后,我们还要证明 \(\{D_\ell(\alpha_i)\}_{i \in I}\) 与 \(C(x)\) 无关。这是因为对于 \(1 \leq m \leq t\),\(C(x)\) 的第 \(m\) 个系数包含随机值 \(r_{1, m-1}\),这个值不出现在其他多项式中(\(r_{1, m-1}\)只出现在 \(D_1(x)\) 中,见表 9.1),且 \(C(x)\) 的常数项是 \(A(0) \cdot B(0)\). 故 \(D_\ell(x)\) 与 \(C(x)\) 无关。至此我们完成了式(式 9.14)在 \(\ell > 1\) 时的证明。

接下来证明式(式 9.14)对于 \(\ell = 1\) 也成立,即给定 \(A(x), B(x), C(x)\) 以及 \(\{D_2(\alpha_i), …, D_t(\alpha_i)\}_{i \in I}\),\(\{D_1^S(\alpha_i)\}_{i \in I}\) 与 \(\{D_1(\alpha_i)\}_{i \in I}\) 有相同的分布。在理想世界中,\(\{D_1^S(\alpha_i)\}_{i \in I}\) 满足 \(D_1^S(\alpha_i) = (\alpha_i)^{-1} \cdot ( A(\alpha_i) \cdot B(\alpha_i) - C(\alpha_i) - \sum\limits_{\ell=2}^t (\alpha_i)^\ell \cdot D_\ell(\alpha_i) )\);在真实协议中,\(D_1(\alpha_i)\) 也满足该式(将 \(C(x) = A(x) \cdot B(x) - \sum_{\ell=1}^t x^\ell \cdot D_\ell(x)\) 变形可得)。也就是说,\(\{D_1(\alpha_i)\}_{i \in I}\) 是由 \(A(x), B(x), C(x)\) 以及 \(\{D_2(\alpha_i), …, D_t(\alpha_i)\}_{i \in I}\) 唯一确定的,故两者分布相同。综上,式(式 9.14)成立。

我们前面已经证明了诚实方的输出分布相同。因此,真实世界和理想世界完美不可区分。

情况2:秘密分发者是被攻陷的。在这种情况下,模拟器 \(\mathcal{S}\) 可以向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送多项式 \(C(x)\). 如果 \(C(x)\) 的阶数不超过 \(t\) 且常数项为 \(A(0) \cdot B(0)\),那么 \(C(x)\) 决定了诚实方的份额;否则(\(C(x)\) 是不合法的),所有诚实方都会输出 \(A(0) \cdot B(0)\).

直观上看,因为所有投诉都通过调用 \(\mathcal{F}_{\mathsf{eval}}\) 明确地解决了,协议具有正确性。在 \(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{eval}}\}\)-混合模型下,敌手在投诉阶段外不会收到诚实方的消息;又因为敌手知道 \(A(x), B(x)\) 以及他分发的多项式 \(C(x), D_1(x), …, D_t(x)\),他本来就知道哪个诚实方会广播投诉,以及调用 \(\mathcal{F}_{\mathsf{eval}}\) 会输出什么结果。因此敌手也无法获得额外的信息。

形式化地,模拟器 \(\mathcal{S}\) 的工作方式如下。

  1. 当诚实方向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送输入后,\(\mathcal{S}\) 收到 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送的多项式 \((A(x), B(x))\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的步骤4(a))。

  2. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 的步骤1(e)和1(f):\(\mathcal{S}\) 记录 \(P_1\) 向 \(\mathcal{F}_{\mathsf{VSS}}\) 发送的输入 \(C(x), D_1(x), …, D_t(x)\).

  3. 如果 \(\text{deg}(C(x)) > t\) 或存在 \(1 \leq \ell \leq t\) 满足 \(\text{deg}(D_\ell(x)) > t\),跳到步骤7(模拟拒绝阶段)。

  4. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 的步骤2和3(诚实方):对于每个 \(k \notin I\),如果 \(C(\alpha_k) \neq A(\alpha_k) \cdot B(\alpha_k) - \sum_{\ell=1}^t (\alpha_k)^\ell \cdot D_\ell(\alpha_k)\),\(\mathcal{S}\) 模拟 \(P_k\) 广播 \((\mathsf{complaint}, k)\). 然后,\(\mathcal{S}\) 模拟投诉解决阶段:\(\mathcal{S}\) 使用多项式 \(A(x), B(x), C(x), D_1(x), …, D_t(x)\) 来模拟 \(\mathcal{F}_{\mathsf{eval}}^k\) 的输出。如果存在 \(k \notin I\) 满足 \(C(\alpha_k) \neq A(\alpha_k) \cdot B(\alpha_k) - \sum_{\ell=1}^t (\alpha_k)^\ell \cdot D_\ell(\alpha_k)\),跳到步骤7.

  5. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 的步骤2和3(被攻陷方):对于每个被攻陷方广播的 \((\mathsf{complaint}, k), \; k \in I\),\(\mathcal{S}\) 和步骤4中一样使用多项式 \(A(x), B(x), C(x), D_1(x), …, D_t(x)\) 来模拟 \(\mathcal{F}_{\mathsf{eval}}^k\) 的输出。如果 \(C(\alpha_k) \neq A(\alpha_k) \cdot B(\alpha_k) - \sum_{\ell=1}^t (\alpha_k)^\ell \cdot D_\ell(\alpha_k)\),跳到步骤7.

  6. 如果 \(\mathcal{S}\) 执行到了这里(没有跳到步骤7),它代表 \(P_1\) 向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送 \(C(x)\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的步骤4(b))。然后跳过步骤7.

  7. 模拟 \(\Pi_\mathsf{VSS}^\mathsf{mult}\) 的步骤4:\(\mathcal{S}\) 执行如下操作模拟拒绝阶段:

    1. 代表 \(P_1\) 向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送 \(\hat{C}(x) = x^{t+1}\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的步骤4(b))。

    2. 模拟每个诚实方 \(P_j\) 广播 \(a_j = A(\alpha_j)\) 和 \(b_j = B(\alpha_j)\).

因为模拟器从 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 处收到了 \(A(x), B(x)\),所以它可以模拟诚实方 \(P_j\) 广播秘密份额 \(a_j = A(\alpha_j)\) 和 \(b_j = B(\alpha_j)\). 显然,敌手在理想世界和真实世界的视图是相同的。我们只需要证明诚实方的输出是一致的。分两种情况讨论。

  1. 情况1:\(\mathcal{S}\) 没有模拟拒绝阶段(没有运行步骤7)。此时,以下条件成立
    1. 多项式 \(C(x), D_1(x), …, D_t(x)\) 不超过 \(t\) 阶;

    2. 对于 \(j \notin I\) 都有 \(C(\alpha_j) = A(\alpha_j) \cdot B(\alpha_j) - \sum_{\ell=1}^t (\alpha_j)^\ell \cdot D_\ell(\alpha_j)\);

    3. 如果某个被攻陷方 \(P_i\) 广播了 \((\mathsf{complaint}, i)\),有 \(C(\alpha_i) = A(\alpha_i) \cdot B(\alpha_i) - \sum_{\ell=1}^t (\alpha_i)^\ell \cdot D_\ell(\alpha_i)\).

    因为 \(\mathcal{S}\) 获得的多项式就是被攻陷方向 \(\mathcal{F}_{\mathsf{VSS}}\) 发送的输入,所以在真实世界中诚实方 \(P_j\) 显然会输出 \(C(\alpha_j)\). 在理想世界中,如果 \(\text{deg}(C(x)) \leq t\) 且 \(C(0) = A(0) \cdot B(0)\),那么诚实方 \(P_j\) 就会输出 \(C(\alpha_j)\). 我们证明 \(C(x)\) 满足这两个条件。首先,\(\text{deg}(C(x)) \leq t\) 已经满足了。令 \(C'(x) = A(x) \cdot B(x) - \sum_{\ell=1}^t x^\ell \cdot D_\ell(x)\). 因为 \(A(x), B(x), D_\ell(x)\) 都不超过 \(t\) 阶,故 \(C'(x)\) 不超过 \(2t\) 阶。又因为 \(C(\alpha_j) = A(\alpha_j) \cdot B(\alpha_j) - \sum_{\ell=1}^t (\alpha_j)^\ell \cdot D_\ell(\alpha_j)\) 对 \(j \notin I\) 都成立,所以 \(C'(x)\) 与 \(C(x)\) 相交于至少 \(2t + 1\) 个点,由此可知 \(C(x) = C'(x)\),因而 \(C(0) = C'(0) = A(0) \cdot B(0)\). 综上所述,理想世界中诚实方 \(P_j\) 也会输出 \(C(\alpha_j)\).
  2. 情况2:\(\mathcal{S}\) 模拟了拒绝阶段(运行了步骤7)。此时,条件(a)(b)(c)至少有一个不满足,而在真实协议中,出现这样的情况时,所有诚实方都会执行拒绝阶段并输出 \(A(0) \cdot B(0)\). 在理想世界中,此时 \(\mathcal{S}\) 发送了大于 \(t\) 阶的多项式 \(\hat{C}(x) = x^{t+1}\) 给 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\),故理想世界中的诚实方也会输出 \(A(0) \cdot B(0)\).

综上所述,我们构造了模拟器 \(\mathcal{S}\) 在秘密分发者诚实或被攻陷时,都使真实世界和理想世界不可区分。定理证毕。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\)

在实现了 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 和 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 之后,我们终于可以对于恶意敌手实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\). 整体思路正如「直观思想」一节中所讲,参与方首先使用 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 分发自己的输入份额的子份额,然后使用 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 分发输入份额乘积的子份额,最后,参与方在本地对子份额进行线性重组即可。

定义理想功能。我们首先在恶意敌手场景下定义理想功能。在半诚实场景下,\(\mathcal{F}_{\mathsf{mult}}\) 的函数表示如下:

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 公式

\[\mathcal{F}_{\mathsf{mult}}\Big( (f_a(\alpha_1), f_b(\alpha_1)), \dots, (f_a(\alpha_n), f_b(\alpha_n)) \Big) = \Big( f_{ab}(\alpha_1), \dots, f_{ab}(\alpha_n) \Big)\]

其中 \(f_{ab}\) 是常数项为 \(a \cdot b\) 的均匀随机 \(t\) 阶多项式。

在恶意敌手场景下,理想功能 \(\mathcal{F}_{\mathsf{mult}}\) 的定义需要更加小心。在协议中,每个参与方需要作为秘密分发者调用 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\),然后参与方在本地计算子份额的线性组合。当被攻陷方作为秘密分发者时,它可以选择使用 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 分享的多项式 \(C(x)\). 我们考虑rushing adversary,他首先收到诚实方分发的子份额,然后再选择要分享的多项式 \(C(x)\),因此,敌手可以控制被攻陷方在输出多项式 \(f_{ab}\) 中持有的份额。不过,此时并不存在 \(f_{ab}\) 的秘密分发者,因此敌手只能决定被攻陷方自己的份额,而不能决定多项式 \(f_{ab}\). 理想功能 \(\mathcal{F}_{\mathsf{mult}}\) 的定义如图 9.28所示。

乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\)

\(\mathcal{F}_{\mathsf{mult}}\) 接收被攻陷方的集合 \(I \subset [n]\),并执行如下操作:

  1. 对于每个诚实方 \(P_j, \; j \notin I\),\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 接收其输入 \((\beta_j, \gamma_j)\). 令 \(f_a(x)\) 和 \(f_b(x)\) 分别是由点集 \(\{(\alpha_j, \beta_j)\}_{j \notin I}\) 和 \(\{(\alpha_j, \gamma_j)\}_{j \notin I}\) 唯一确定的 \(t\) 阶多项式。

  2. \(\mathcal{F}_{\mathsf{mult}}\) 向敌手 \(\mathcal{S}\) 发送 \(\{(f_a(\alpha_i), f_b(\alpha_i))\}_{i \in I}\)(注:与 \(\mathcal{F}_{\mathsf{eval}}\) 和 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的情况类似,敌手本来就知道 \(\{(f_a(\alpha_i), f_b(\alpha_i))\}_{i \in I}\),这只是为了让模拟器能够模拟。).

  3. \(\mathcal{F}_{\mathsf{mult}}\) 从敌手 \(\mathcal{S}\) 处接收 \(\{\delta_i\}_{i \in I}\)(如果某些值没有收到,将其设置为0.)

  4. \(\mathcal{F}_{\mathsf{mult}}\) 基于以下约束条件均匀随机选择 \(t\) 阶多项式 \(f_{ab}(x)\):

    1. \(f_{ab}(0) = f_a(0) \cdot f_b(0)\);

    2. \(f_{ab}(\alpha_i) = \delta_i\) 对 \(i \in I\) 都成立。

    (当 \(| I | \leq t\) 时,这样的多项式一定存在。)
  5. \(\mathcal{F}_{\mathsf{mult}}\) 向 \(P_j, j \in [n]\) 发送输出 \(f_{ab}(\alpha_j)\).

乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\)

尽管 \(\mathcal{F}_{\mathsf{mult}}\) 的定义与半诚实的情况略有不同,但这个定义也足以实现安全的电路计算:这里敌手仅仅增加了决定被攻陷方的份额的能力,由于 \(f_{ab}\) 是 \(t\) 阶多项式,敌手决定 \(f_{ab}\) 的 \(t\) 个值不会泄露 \(f_{ab}(0) = a \cdot b\) 的任何信息。

协议构造。接下来,我们在 \(\{ \mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult} \}\) 混合模型下构造乘法协议。参与方持有两条输入导线的秘密份额,每个参与方首先通过 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 和 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 来分发秘密份额乘积的子份额,然后将这些子份额在本地线性重组,这与半诚实场景下的协议思路类似。具体而言,令 \(f_a(x)\) 和 \(f_b(x)\) 是两个 \(t\) 阶多项式,满足 \(f_a(0) = a, f_b(0) = b\). 令 \(h(x) = f_a(x) \cdot f_b(x) = a \cdot b + h_1 x + h_2 x^2 + … + h^{2t} x^{2t}\),令 \(V_{\boldsymbol{\alpha}}\) 是 \(\boldsymbol{\alpha}\) 的Vandermonde矩阵。因为Vandermonde矩阵是可逆的,我们有

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 公式

\[V_{\boldsymbol{\alpha}} \cdot \begin{pmatrix} ab \\ h_1 \\ \vdots \\ h_{2t} \\ 0 \\ \vdots \\ 0 \end{pmatrix} = \begin{pmatrix} h(\alpha_1) \\ h(\alpha_2) \\ \vdots \\ h(\alpha_n) \end{pmatrix} \text{,因而 } \begin{pmatrix} ab \\ h_1 \\ \vdots \\ h_{2t} \\ 0 \\ \vdots \\ 0 \end{pmatrix} = V_{\boldsymbol{\alpha}}^{-1} \cdot \begin{pmatrix} h(\alpha_1) \\ h(\alpha_2) \\ \vdots \\ h(\alpha_n) \end{pmatrix}\]

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 公式

令 \(\lambda_1, …, \lambda_n\) 是 \(V_{\boldsymbol{\alpha}}^{-1}\) 的第1行,我们有

\[a \cdot b = \lambda_1 \cdot h(\alpha_1) + \dots + \lambda_n \cdot h(\alpha_n) = \lambda_1 \cdot f_a(\alpha_1) \cdot f_b(\alpha_1) + \dots + \lambda_n \cdot f_a(\alpha_n) \cdot f_b(\alpha_n)\]

因此 \(a \cdot b\) 是 \(f_a(\alpha_\ell) \cdot f_b(\alpha_\ell), \; \ell = 1, …, n\) 的线性组合。参与方首先通过 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 和 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 分发 \(f_a(\alpha_\ell) \cdot f_b(\alpha_\ell)\) 的秘密份额,具体而言,令 \(C_1(x), …, C_n(x)\) 是满足 \(C_\ell(0) = f_a(\alpha_\ell) \cdot f_b(\alpha_\ell), \; \ell = 1, …, n\) 的随机 \(t\) 阶多项式,其中 \(C_\ell(x)\) 是 \(P_\ell\) 作为秘密分发者通过 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 分享的多项式。分享完成后,每个参与方 \(P_i\) 持有 \(C_1(\alpha_i), …, C_n(\alpha_i)\). 于是,每个参与方可以本地计算 \(Q(\alpha_i) = \sum_{\ell=1}^n \lambda_\ell \cdot C_\ell(\alpha_i)\),从而参与方持有了多项式 \(Q(x) = \sum_{\ell=1}^n \lambda_\ell \cdot C_\ell(x)\) 的秘密份额。因为 \(C_\ell(0) = f_a(\alpha_\ell) \cdot f_b(\alpha_\ell)\),故

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 公式

\[Q(0) = \sum\limits_{\ell=1}^n \lambda_\ell \cdot C_\ell(0) = \sum\limits_{\ell=1}^n \lambda_\ell \cdot f_a(\alpha_\ell) \cdot f_b(\alpha_\ell) = a \cdot b\]

此外,因为 \(C_\ell(x), \; \ell = 1, …, n\) 都是 \(t\) 阶多项式,所有 \(Q(x)\) 也是 \(t\) 阶多项式,即参与方持有了 \(a \cdot b\) 合法的秘密份额。完整的协议描述如图 9.29所示。

{\(\{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\}\)-混合模型下的 \(\Pi_\mathsf{mult}\) 协议

输入:\(P_i\) 的输入为 \(a_i, b_i\),其中 \(a_i = f_a(\alpha_i), b_i = f_b(\alpha_i)\),\(f_a(x), f_b(x)\) 是 \(t\) 阶多项式,\(f_a(0) = a, f_b(0) = b\).

公共输入:域 \(\mathbb{F}\),\(n\) 个互不相同的非0元素 \(\alpha_1, …, \alpha_n \in \mathbb{F}\).

协议:

  1. 每个参与方 \(P_i\) 以 \(a_i\) 为输入调用理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\),然后得到份额 \(A_1(\alpha_i), …, A_n(\alpha_i)\) 和多项式 \(A_i(x)\).

  2. 每个参与方 \(P_i\) 以 \(b_i\) 为输入调用理想功能 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\),然后得到份额 \(B_1(\alpha_i), …, B_n(\alpha_i)\) 和多项式 \(B_i(x)\).

  3. 对于 \(i = 1, \dots, n\),参与方通过如下方式调用 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\):

    1. 输入:在第 \(i\) 次调用中,\(P_i\) 是秘密分发者,所有参与方 \(P_j\)(\(1 \leq j \leq n\)) 向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 发送秘密份额 \(A_i(\alpha_j), B_i(\alpha_j)\).

    2. 输出:秘密分发者 \(P_i\) 得到 \(C_i(x)\)(其中 \(C_i(x) \leftarrow_{\$} \mathcal{P}^{A_i(0) \cdot B_i(0), t}\)),每个参与方 \(P_j\)(\(1 \leq j \leq n\)) 得到 \(C_i(\alpha_j)\).

  4. 每个参与方 \(P_i\) 持有 \(C_1(\alpha_i), …, C_n(\alpha_i)\). \(P_i\) 在本地计算 \(Q(\alpha_i) = \sum_{\ell=1}^n \lambda_\ell \cdot C_\ell(\alpha_i)\),其中 \((\lambda_1, …, \lambda_n)\) 是 \(V_{\boldsymbol{\alpha}}^{-1}\) 的第1行。

输出:\(P_i\) 输出 \(Q(\alpha_i)\).

\(\caption\){\(\{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\}\)-混合模型下的 \(\Pi_\mathsf{mult}\) 协议}

直观上看,\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 和 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 确保了参与方能获得正确的秘密份额且不泄露额外信息。不过,请注意,因为 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 会向敌手泄露向量 \(\boldsymbol{Y}(x) = (g_1(x), …, g_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\),其中 \(g_1, …, g_n\) 是定义了参与方的输入份额的多项式,\({\boldsymbol H}\) 是Reed-Solomon码的校验矩阵,所以在协议 \(\Pi_\mathsf{mult}\) 中敌手会获得 \(\boldsymbol{Y}_{A}(x) = (A_1(x), …, A_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\) 和 \(\boldsymbol{Y}_{B}(x) = (B_1(x), …, B_n(x)) \cdot {\boldsymbol H}^\mathrm{T}\). 模拟器需要模拟这两条消息。这与 \(\mathcal{F}_{\mathsf{eval}}\) 的情形类似,模拟器能够进行模拟,因为 \(\boldsymbol{Y}_{A}(x)\) 和 \(\boldsymbol{Y}_{B}(x)\) 是在约束条件下的随机多项式向量。

我们有以下定理。

定理

假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 图 9.29中的协议 \(\Pi_\mathsf{mult}\) 在 \(\{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{mult}}\)(图 9.28)。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 证明

要证明此定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

\[\operatorname{exec}_{\Pi_\mathsf{mult},\mathcal{A},\mathcal{Z}}^{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{mult}},\mathcal{S},\mathcal{Z}}\]

其中 \(\mathcal{A}\) 是平凡敌手。

模拟器 \(\mathcal{S}\). 模拟器 \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{Z}\) 与 \(\mathcal{A}\) 之间的消息。在 \(\{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\}\)-混合模型下,\(\mathcal{S}\) 还需要模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 和 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\). \(\mathcal{S}\) 的工作方式如下。

  1. 当诚实方向 \(\mathcal{F}_{\mathsf{mult}}\) 提供输入后,\(\mathcal{S}\) 接收 \(\mathcal{F}_{\mathsf{mult}}\) 发送的值 \(\{(f_a(\alpha_i), f_b(\alpha_i))\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{mult}}\) 的步骤2)。

  2. 模拟 \(\Pi_\mathsf{mult}\) 的步骤1:\(\mathcal{S}\) 通过如下方式模拟对 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的第一次调用:

    1. 对于 \(j \notin I\),\(\mathcal{S}\) 均匀随机选择多项式 \(A_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}\).

    2. 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤3:\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向敌手 \(\mathcal{A}\) 发送 \(\{A_j(\alpha_i)\}_{j \notin I, i \in I}\).

    3. 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤4:\(\mathcal{S}\) 记录敌手 \(\mathcal{A}\) 向 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 发送的多项式 \(\{A_i(x)\}_{i \in I}\). 如果某些多项式没有收到,将其设置为常数多项式0.

    4. 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤5:对于 \(i \in I\),\(\mathcal{S}\) 执行以下检查:

      1. \(A_i(0) \stackrel{?}{=} f_a(\alpha_i)\);

      2. \(A_i(x)\) 的阶数不超过 \(t\).

      如果检查都通过,那么设置 \(A'_i(x) = A_i(x)\);否则,设置 \(A'_i(x) = f_a(\alpha_i)\)(\(\mathcal{S}\) 在步骤1中从 \(\mathcal{F}_{\mathsf{mult}}\) 接收到了这个值)。 \\ 对于 \(j \notin I\),\(\mathcal{S}\) 设置 \(A'_i(x) = A_i(x)\).
    5. 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤6(a):首先,\(\mathcal{S}\) 按照如下方式计算错误向量 \(e^A = (e_1^A, …, e_n^A)\):对于 \(j \notin I\),设置 \(e_j^A = 0\);对于 \(i \in I\),设置 \(e_i^A = A_i(0) - f_a(\alpha_i)\). 然后,\(\mathcal{S}\) 基于以下两个约束条件(a) \(\boldsymbol{Y}_{A}(0) = (e_1^A, …, e_n^A) \cdot {\boldsymbol H}^\mathrm{T}\), (b) \(\boldsymbol{Y}_{A}(\alpha_i) = (A_1(\alpha_i), …, A_n(\alpha_i)) \cdot {\boldsymbol H}^\mathrm{T}, \; i \in I\),均匀随机选择多项式向量 \(\boldsymbol{Y}_{A}(x)\). \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向敌手 \(\mathcal{A}\) 发送 \(\boldsymbol{Y}_{A}(x)\).

    6. 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的步骤6(b):对于 \(i \in I\),\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向 \(P_i\) 发送输出 \(A'_i(x)\) 和 \(A'_1(\alpha_i), …, A'_n(\alpha_i)\).

  3. 模拟 \(\Pi_\mathsf{mult}\) 的步骤2:\(\mathcal{S}\) 模拟对 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的第二次调用:模拟的方式与步骤2完全相同,只是使用的点集为 \(\{f_b(\alpha_i)\}_{i \in I}\). 将 \(\mathcal{S}\) 在模拟中使用的多项式记为 \(B_1(x), …, B_n(x)\) 和 \(B'_1(x), …, B'_n(x)\),将 \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 向敌手或被攻陷方发送的值记为 \(\{B'_i(x)\}_{i \in I}\),\(\{B'_1(\alpha_i), …, B'_n(\alpha_i)\}_{i \in I}\) 和 \(\boldsymbol{Y}_{B}(x)\).
    此时,\(\mathcal{S}\) 持有 \(t\) 阶多项式集合 \(\{A'_\ell(x), B'_\ell(x)\}_{\ell \in [n]}\),其中,对于 \(j \notin I\) 有 \(A'_j(0) = B'_j(0) = 0\),对于 \(i \in I\) 有 \(A'_i(0) = f_a(\alpha_i), B'_i(0) = f_b(\alpha_i)\).

  4. 模拟 \(\Pi_\mathsf{mult}\) 的步骤3:对于 \(j \notin I\),\(\mathcal{S}\) 模拟诚实方 \(P_j\) 作为秘密分发者对 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的调用:

    1. \(\mathcal{S}\) 均匀随机选择多项式 \(C'_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}\).

    2. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 向敌手 \(\mathcal{A}\) 发送份额 \(\{(A'_j(\alpha_i), B'_j(\alpha_i), C'_j(\alpha_i))\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的步骤3(c))。

  5. (继续)模拟 \(\Pi_\mathsf{mult}\) 的步骤3:对于 \(i \in I\),\(\mathcal{S}\) 模拟被攻陷方 \(P_i\) 作为秘密分发者对 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的调用:

    1. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 向敌手 \(\mathcal{A}\) 发送多项式 \((A'_i(x), B'_i(x))\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的步骤4(a))。

    2. \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 接收 \(P_i\) 发送的多项式 \(C_i(x)\)(\(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\) 的步骤4(b)),然后执行如下操作:

      1. 如果 \(\text{deg}(C_i(x)) \leq t\) 且 \(C_i(0) = A'_i(0) \cdot B'_i(0) = f_a(\alpha_i) \cdot f_b(\alpha_i)\),那么 \(\mathcal{S}\) 设置 \(C'_i(x) = C_i(x)\).

      2. 否则,设置 \(C'_i(x) = f_a(\alpha_i) \cdot f_b(\alpha_i)\).

    此时,\(\mathcal{S}\) 持有 \(t\) 阶多项式 \(C'_1(x), \dots, C'_n(x)\),其中,对于 \(j \notin I\) 有 \(C'_j(0) = 0\),对于 \(i \in I\) 有 \(C'_i(0) = f_a(\alpha_i) \cdot f_b(\alpha_i)\).
  6. 对于 \(i \in I\),\(\mathcal{S}\) 计算 \(Q(\alpha_i) = \sum_{\ell=1}^n \lambda_\ell \cdot C'_\ell(\alpha_i)\),其中 \(C'_1(x), …, C'_n(x)\) 是上述定义的多项式。然后,\(\mathcal{S}\) 向 \(\mathcal{F}_{\mathsf{mult}}\) 发送 \(\{Q(\alpha_i)\}_{i \in I}\)(这是 \(\mathcal{F}_{\mathsf{mult}}\) 步骤3中的 \(\{\delta_i\}_{i \in I}\))。

不可区分性。真实世界与理想世界的不同之处如下:(1) 对于 \(j \notin I\),\(\mathcal{S}\) 选择的多项式 \(A'_j(x), B'_j(x), C'_j(x)\) 的常数项为0,而真实协议中它们的常数项分别为 \(f_a(\alpha_j), f_b(\alpha_j), f_a(\alpha_j) \cdot f_b(\alpha_j)\);(2) 理想世界中的 \(\boldsymbol{Y}_{A}(x)\) 和 \(\boldsymbol{Y}_{B}(x)\) 是 \(\mathcal{S}\) 根据错误向量计算的,而真实协议中它们是由 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 根据实际的多项式 \(A_1(x), …, A_n(x)\) 和 \(B_1(x), …, B_n(x)\) 来计算的;(3) 在理想世界中,\(P_i\) 的输出是 \(f_{ab}(\alpha_i)\),其中 \(f_{ab}(x)\) 是 \(\mathcal{F}_{\mathsf{mult}}\) 在约束条件 \(f_{ab}(0) = f_a(0) \cdot f_b(0)\) 和 \(f_{ab}(\alpha_i) = \delta_i, \; i \in I\) 下均匀随机选择的,而真实协议中的输出份额是由多项式 \(Q(x) = \sum_{\ell=1}^n \lambda_\ell \cdot C'_\ell(x)\) 决定的。我们需要通过一系列混合实验来证明真实世界与理想世界不可区分。

混合实验 \(\mathcal{H}_{0}\):这是理想世界的执行 \(\operatorname{exec}_{\mathcal{F}_{\mathsf{mult}},\mathcal{S},\mathcal{Z}}\).

混合实验 \(\mathcal{H}_{1}\):\(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 相同,除了模拟器 \(\mathcal{S}\) 为诚实方 \(P_j\) 选取多项式的方式变为 \(A'_j(x) \leftarrow_{\$} \mathcal{P}^{f_a(\alpha_j), t}, B'_j(x) \leftarrow_{\$} \mathcal{P}^{f_b(\alpha_j), t}, C'_j(x) \leftarrow_{\$} \mathcal{P}^{f_a(\alpha_j) \cdot f_b(\alpha_j), t}\) 而不是 \(A'_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}, B'_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}, C'_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}\).

断言1:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 完美不可区分。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 证明

\(\mathcal{H}_{1}\) 中的修改仅会影响敌手收到的份额 \(\{(A'_j(\alpha_i), B'_j(\alpha_i), C'_j(\alpha_i))\}_{j \notin I, i \in I}\)(模拟器 \(\mathcal{S}\) 的步骤4(b))。由于 \(| I | \leq t\),根据推论 multi_polynomial_distribution,\(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 中的敌手得到的秘密份额 \(\{(A'_j(\alpha_i), B'_j(\alpha_i), C'_j(\alpha_i))\}_{j \notin I, i \in I}\) 具有相同的分布,因此 \(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 完美不可区分。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 证明

混合实验 \(\mathcal{H}_{2}\):\(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 相同,除了 \(\boldsymbol{Y}_{A}(x)\) 与 \(\boldsymbol{Y}_{B}(x)\) 的计算方式改为真实世界中 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\) 的计算方式,即基于多项式 \(A_1(x), …, A_n(x)\) 和 \(B_1(x), …, B_n(x)\) 计算(注意在 \(\mathcal{H}_{1}\) 中,诚实方多项式的选取方式已经变为 \(A'_j(x) \leftarrow_{\$} \mathcal{P}^{f_a(\alpha_j), t}, B'_j(x) \leftarrow_{\$} \mathcal{P}^{f_b(\alpha_j), t}\))。

断言2:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 完美不可区分。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 证明

这与定理 9.6中的断言 2完全同理。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 证明

混合实验 \(\mathcal{H}_{3}\):这是真实世界的执行 \(\operatorname{exec}_{\Pi_\mathsf{mult},\mathcal{A},\mathcal{Z}}^{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}}\).

断言3:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{3}\) 与 \(\mathcal{H}_{2}\) 完美不可区分。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 证明

  • 理想世界:在约束条件 \(f_{ab}(0) = f_a(0) \cdot f_b(0)\) 和 \(f_{ab}(\alpha_i) = Q(\alpha_i) = \sum_{\ell=1}^n \lambda_\ell \cdot C'_\ell(\alpha_i), \; i \in I\) 下均匀随机选择 \(t\) 阶多项式 \(f_{ab}(x)\).

  • 真实世界:计算 \(f_{ab}(x) = Q(x) = \sum_{\ell=1}^n \lambda_\ell \cdot C'_\ell(x)\).

注意,在这两种情况下,多项式 \(C'_1(x), \dots, C'_n(x)\) 的分布是相同的。

首先,当 \(| I | = t\) 时,理想世界中的约束条件已经唯一确定了 \(f_{ab}(x)\),故它与真实世界的多项式一定相同。

如果 \(| I | < t\),在理想世界中,\(f_{ab}(x)\) 的选择方式等价于选择 \(t - | I |\) 个均匀随机值 \(\beta_\ell \leftarrow_{\$} \mathbb{F}\) (\(\ell \notin I\)),然后令 \(f_{ab}(x)\) 是经过 \((\alpha_\ell, \beta_\ell)\) 的唯一多项式。我们观察真实世界中的 \(f_{ab}(x)\). 给定任意 \(j \notin I\),根据协议 \(\Pi_\mathsf{mult}\) 的定义,\(C'_j(x)\) 是在约束条件 \(C'_j(0) = f_a(\alpha_j) \cdot f_b(\alpha_j)\) 下的均匀随机 \(t\) 阶多项式。根据引理 9.4,给定点集 \(\{(\alpha_i, C'_j(\alpha_i))\}_{i \in I}\) 和“秘密” \(s = C'_j(0)\),任意 \(t - | I |\) 个位置处的值 \(\{C'_j(\alpha_\ell)\}_{\ell \notin I}\) 都是 \(\mathbb{F}\) 上的均匀随机分布(注意,敌手没有看到这些值)。这意味着,在真实世界中,任意 \(t - | I |\) 个位置 \(\alpha_\ell\) (\(\ell \notin I\)) 处的值 \(f_{ab}(\alpha_\ell)\) 也是均匀随机的。因此,它等价于选择 \(t - | I |\) 个均匀随机值 \(\beta_\ell \leftarrow_{\$} \mathbb{F}\) (\(\ell \notin I\)),然后令 \(f_{ab}(x)\) 是满足 \(f_{ab}(\alpha_\ell) = \beta_\ell\) 的唯一多项式。综上,理想世界与真实世界中的 \(f_{ab}(x)\) 分布相同。

实现乘法理想功能 \(\mathcal{F}_{\mathsf{mult}}\) · 证明

定理证毕。

  • 定理 9.3(在朴素模型(plain model)下UC-安全实现 \(\mathcal{F}_{\mathsf{VSS}}\))

  • 定理 9.4(在 \(\mathcal{F}_{\mathsf{VSS}}^n\)-混合模型下UC-安全实现 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\))

  • 定理 9.5(在 \(\mathcal{F}_{\mathsf{mat}}^{\boldsymbol A}\)-混合模型下UC-安全实现 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\))

  • 定理 9.6(在 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}\)-混合模型下UC-安全实现 \(\mathcal{F}_{\mathsf{eval}}\))

  • 定理 9.7(在 \(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{eval}}\}\)-混合模型下UC-安全实现 \(\mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\))

  • 定理 9.8(在 \(\{\mathcal{F}_{\mathsf{VSS}}^\mathsf{subshare}, \mathcal{F}_{\mathsf{VSS}}^\mathsf{mult}\}\)-混合模型下UC-安全实现 \(\mathcal{F}_{\mathsf{mult}}\))

根据通用组合定理(定理 4.3),我们有以下结论。

定理

假设参与方之间存在点对点安全信道、认证的广播信道。假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 那么,在朴素模型(plain model)下存在协议对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{mult}}\).

\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全计算协议

现在,我们可以给出 \(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全计算协议,它对于控制了 \(t < n/3\) 个被攻陷方的静态恶意敌手UC-安全实现了函数计算功能。协议的思路与半诚实的情况非常类似,区别仅在于:(1) 在输入分享阶段,参与方调用理想功能 \(\mathcal{F}_{\mathsf{VSS}}\) 进行秘密分享;(2) 对于乘法门,参与方调用理想功能 \(\mathcal{F}_{\mathsf{mult}}\) 进行计算。 \(\mathcal{F}_{\mathsf{VSS}}\) 确保了恶意的被攻陷方也执行了正确的Shamir秘密分享,而 \(\mathcal{F}_{\mathsf{mult}}\) 确保了诚实方能获得乘法门的输出导线的正确份额。此外,根据 \(\mathcal{F}_{\mathsf{mult}}\) 的定义,它向敌手泄漏了被攻陷方在乘法门的输入导线上的份额,但是在协议中,敌手原本就知道这些信息,故 \(\mathcal{F}_{\mathsf{mult}}\) 不会造成任何额外的信息泄漏。最后,在输出重建阶段,对于每个输出值,参与方将秘密份额发送给输出值的接收方。此时,恶意的参与方可能会发送错误的份额(在半诚实场景下这不会发生),但是因为被攻陷方数量 \(t < n/3\),参与方可以调用Reed-Solomon解码算法重建正确的输出。

协议的形式化描述如图 9.30所示。

{\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全函数计算协议 \(\Pi_\mathsf{sfe}\)

输入:\(P_i\) 的输入是 \(x_i \in \mathbb{F}\).

公共输入:函数 \(f: \mathbb{F}^n \rightarrow \mathbb{F}^n\) 对应的算术电路 \(\mathcal{C}\),对于所有 \(\boldsymbol{x} \in \mathbb{F}^n\) 有 \(\mathcal{C}(\boldsymbol{x}) = f(\boldsymbol{x})\). 域 \(\mathbb{F}\),\(n\) 个互不相同的非0元素 \(\alpha_1, …, \alpha_n \in \mathbb{F}\).

协议:

  1. 输入分享阶段:
    1. 每个参与方 \(P_i\) 均匀随机选择常数项为 \(x_i\) 的 \(t\) 阶多项式 \(q_i(x) \leftarrow_{\$} \mathcal{P}^{x_i, t}\),然后作为秘密分发者以 \(q_i(x)\) 为输入调用 \(\mathcal{F}_{\mathsf{VSS}}\).

    2. 每个参与方记录从 \(\mathcal{F}_{\mathsf{VSS}}\) 处接收到的值 \(q_1(\alpha_i), …, q_n(\alpha_i)\). 如果某些值为 \(\bot\),将其替换为0.

  2. 计算阶段:令 \(G_1, \dots, G_m\) 是预先确定的电路门的一个拓扑顺序。对于 \(k = 1, \dots, m\),参与方根据门的类型执行以下操作之一:
    • 情况1:\(G_k\) 是加法门。令 \(\beta_i^k\) 和 \(\gamma_i^k\) 是 \(P_i\) 持有的输入导线份额。\(P_i\) 设置输出导线份额为 \(\delta_i^k = \beta_i^k + \gamma_i^k\).

    • 情况2:\(G_k\) 是带有常数 \(c\) 的常数乘法门。令 \(\beta_i^k\) 是 \(P_i\) 持有的输入导线份额。\(P_i\) 设置输出导线份额为 \(\delta_i^k = c \cdot \beta_i^k\).

    • 情况3:\(G_k\) 是乘法门。令 \(\beta_i^k\) 和 \(\gamma_i^k\) 是 \(P_i\) 持有的输入导线份额。\(P_i\) 以 \((\beta_i^k, \gamma_i^k)\) 为输入调用 \(\mathcal{F}_{\mathsf{mult}}\) 并得到 \(\delta_i^k\). \(P_i\) 设置输出导线份额为 \(\delta_i^k\).

  3. 输出重建阶段:
    1. 令 \(o_1, …, o_n\) 是电路的输出导线,其中 \(P_i\) 的输出是导线 \(o_i\) 上的值。对于 \(i = 1, …, n\),将参与方持有的导线 \(o_i\) 的份额记为 \(\beta_1^i, …, \beta_n^i\). 每个参与方 \(P_j\) 向 \(P_i\) 发送 \(\beta_j^i\).

    2. 当收到所有秘密份额后,\(P_i\) 以 \((\beta_1^i, …, \beta_n^i)\) 为输入运行Reed-Solomon解码算法得到正确的码字 \((\tilde{\beta}_1^i, …, \tilde{\beta}_n^i)\). 然后,\(P_i\) 使用 \((\tilde{\beta}_1^i, …, \tilde{\beta}_n^i)\) 中任意 \(t + 1\) 个点通过拉格朗日插值法计算出多项式 \(g_i(x)\) 并输出 \(g_i(0)\).

\(\caption\){\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全函数计算协议 \(\Pi_\mathsf{sfe}\)}

我们有以下定理。

定理

假设参与方之间存在点对点安全信道。假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 图 9.30中的协议 \(\Pi_\mathsf{sfe}\) 在 \(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{sfe}}\)(图 6.2)。

\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全计算协议 · 证明

要证明此定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

\[\operatorname{exec}_{\Pi_\mathsf{sfe},\mathcal{A},\mathcal{Z}}^{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}}} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{sfe}},\mathcal{S},\mathcal{Z}}\]

其中 \(\mathcal{A}\) 是平凡敌手。

模拟器 \(\mathcal{S}\). 模拟器 \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{Z}\) 与 \(\mathcal{A}\) 之间的消息。在 \(\{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}}\}\)-混合模型下,\(\mathcal{S}\) 还需要模拟 \(\mathcal{F}_{\mathsf{VSS}}\) 和 \(\mathcal{F}_{\mathsf{mult}}\). \(\mathcal{S}\) 的工作方式如下。

  • 首先,\(\mathcal{S}\) 选择大小为 \(t\) 的集合 \(\hat{I} \supseteq I\).

  • 输入分享阶段:
    1. 对于 \(j \notin I\),\(\mathcal{S}\) 均匀随机选择常数项为0的 \(t\) 阶多项式 \(q_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}\). 对于 \(i \in I\),\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}\) 向被攻陷方 \(P_i\) 发送份额 \(q_j(\alpha_i)\). 对于 \(i \in \hat{I} \setminus I\),\(\mathcal{S}\) 记录其秘密份额 \(q_j(\alpha_i)\).

    2. 对于 \(i \in I\),\(\mathcal{S}\) 记录 \(P_i\) 作为秘密分发者向 \(\mathcal{F}_{\mathsf{VSS}}\) 发送的多项式 \(q_i(x)\). 如果 \(\text{deg}(q_i(x)) \leq t\),\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}\) 向 \(P_\ell, \; \ell \in I\) 发送份额 \(q_i(\alpha_\ell)\);否则,\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{VSS}}\) 向 \(P_\ell, \; \ell \in I\) 发送 \(\bot\),并设置 \(q_i(x) = 0\).

    3. 对于 \(j \in [n]\),将 \(P_j\) 在电路中的输入导线记为 \(w_j\). 对于 \(i \in I\),\(\mathcal{S}\) 记录 \(q_j(\alpha_i)\),将其作为 \(P_i\) 在导线 \(w_j\) 上的秘密份额。

  • 与 \(\mathcal{F}_{\mathsf{sfe}}\) 的交互:
    1. \(\mathcal{S}\) 代表被攻陷方向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送输入 \(\{x_i = q_i(0)\}_{i \in I}\).

    2. \(\mathcal{S}\) 接收 \(\mathcal{F}_{\mathsf{sfe}}\) 向被攻陷方发送的输出 \(\{y_i\}_{i \in I}\).

  • 计算阶段:令 \(G_1, \dots, G_m\) 是预先确定的电路门的拓扑顺序。对于 \(k = 1, \dots, m\),\(\mathcal{S}\) 根据门的类型执行以下操作之一:
    1. 情况1:\(G_k\) 是加法门。令 \(\beta_i^k\) 和 \(\gamma_i^k\) 是 \(\mathcal{S}\) 为 \(P_i, \; i \in \hat{I}\) 存储的 \(G_k\) 的输入导线份额。对于 \(i \in \hat{I}\),\(\mathcal{S}\) 计算并存储 \(\delta_i^k = \beta_i^k + \gamma_i^k\),作为 \(P_i\) 在 \(G_k\) 的输出导线上的份额。

    2. 情况2:\(G_k\) 是带有常数 \(c\) 的常数乘法门。令 \(\beta_i^k\) 是 \(\mathcal{S}\) 为 \(P_i, \; i \in \hat{I}\) 存储的 \(G_k\) 的输入导线份额。对于 \(i \in \hat{I}\),\(\mathcal{S}\) 计算并存储 \(\delta_i^k = c \cdot \beta_i^k\),作为 \(P_i\) 在 \(G_k\) 的输出导线上的份额。

    3. 情况3:\(G_k\) 是乘法门。令 \(\beta_i^k\) 和 \(\gamma_i^k\) 是 \(\mathcal{S}\) 为 \(P_i, \; i \in I\) 存储的 \(G_k\) 的输入导线份额。首先,\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{mult}}\) 向敌手 \(\mathcal{A}\) 发送 \(\{(\beta_i^k, \gamma_i^k)\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{mult}}\) 的步骤2);然后,\(\mathcal{S}\) 记录敌手 \(\mathcal{A}\) 向 \(\mathcal{F}_{\mathsf{mult}}\) 发送的 \(\{\delta_i\}_{i \in I}\)(\(\mathcal{F}_{\mathsf{mult}}\) 的步骤3),如果某些值没有收到,将其设置为0. 最后,\(\mathcal{S}\) 存储 \(\delta_i^k\) 作为 \(P_i, \; i \in I\) 在 \(G_k\) 的输出导线上的份额,并模拟 \(\mathcal{F}_{\mathsf{mult}}\) 向 \(P_i, \; i \in I\) 发送 \(\delta_i\)(\(\mathcal{F}_{\mathsf{mult}}\) 的步骤5)。对于 \(i \in \hat{I} \setminus I\),\(\mathcal{S}\) 为其生成随机份额 \(\delta_i^k\).

  • 输出重建阶段:对于 \(i \in I\),\(\mathcal{S}\) 执行如下操作。令 \(o_i\) 是参与方 \(P_i\) 在电路中的输出导线,令 \(\{\beta_\ell^i\}_{\ell \in \hat{I}, i \in I}\) 是 \(\mathcal{S}\) 为 \(P_\ell, \; \ell \in \hat{I}\) 存储的导线 \(o_i\) 上的份额。然后,\(\mathcal{S}\) 在约束条件 \(q'_i(\alpha_\ell) = \beta_\ell^i, \; \ell \in \hat{I}\) 和 \(q'_i(0) = y_i\) 下计算唯一的 \(t\) 阶多项式 \(q'_i(x)\),其中 \(y_i\) 是 \(\mathcal{S}\) 从 \(\mathcal{F}_{\mathsf{sfe}}\) 处接收到的 \(P_i\) 的输出。最后,对于 \(j \notin I\),\(\mathcal{S}\) 模拟 \(P_j\) 向 \(P_i\) 发送 \(q'_i(\alpha_j)\).

不可区分性。我们通过一系列混合实验来证明真实世界与理想世界不可区分。

混合实验 \(\mathcal{H}_{0}\):这是理想世界的执行 \(\operatorname{exec}_{\mathcal{F}_{\mathsf{sfe}},\mathcal{S},\mathcal{Z}}\).

混合实验 \(\mathcal{H}_{1}\):\(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 相同,除了在输入分享阶段,模拟器 \(\mathcal{S}\) 为诚实方 \(P_j\) 选取多项式的方式变为 \(q_j(x) \leftarrow_{\$} \mathcal{P}^{x_j, t}\) 而不是 \(q_j(x) \leftarrow_{\$} \mathcal{P}^{0, t}\).

断言1:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 完美不可区分。

\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全计算协议 · 证明

\(\mathcal{H}_{1}\) 中的修改仅会影响敌手在输入分享阶段收到的份额 \(\{(q_j(\alpha_i)\}_{j \notin I, i \in I}\). 由于 \(| I | \leq t\),根据推论 multi_polynomial_distribution,\(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 中的敌手得到的秘密份额具有相同的分布,因此 \(\mathcal{H}_{1}\) 与 \(\mathcal{H}_{0}\) 完美不可区分。

\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全计算协议 · 证明

混合实验 \(\mathcal{H}_{2}\):这是真实世界的执行 \(\operatorname{exec}_{\Pi_\mathsf{sfe},\mathcal{A},\mathcal{Z}}^{\mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}}}\).

断言2:如果 \(| I | \leq t\),那么 \(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 完美不可区分。

\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全计算协议 · 证明

\(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 的区别在于输出重建阶段的计算方式。我们首先证明诚实方有相同的输出。在真实协议中,\(\mathcal{F}_{\mathsf{VSS}}\) 首先确保了输入向量 \(\boldsymbol{x}\) 是良好定义的;其次,\(\mathcal{F}_{\mathsf{mult}}\) 使参与方计算乘法门后能得到正确的输出导线份额。因此,当电路计算完成后,诚实方持有电路输出导线的正确份额。最后,Reed-Solomon解码算法可以纠正 \(\frac{n-t}{2} > \frac{3t - t}{2} = t\) 个错误,因此敌手在输出重建阶段无法影响诚实方的输出,故 \(\mathcal{H}_{2}\) 与 \(\mathcal{H}_{1}\) 中诚实方的输出相同。

接下来证明敌手 \(\mathcal{A}\) 有相同的视图。这与定理 9.8的断言 3同理。当 \(| I | = t\) 时,被攻陷方的份额和输出值唯一确定了 \(q'_i(x)\);当 \(| I | < t\) 时,\(\mathcal{S}\) 选择的多项式与真实协议中的多项式具有相同的分布。

注意,这里的证明为了简洁性,我们假设输出值都来自乘法门。如果输入值来自加法门或常数乘法门,协议也是安全的,但 \(\mathcal{S}\) 的模拟方式需要更加小心以满足一致性要求。我们在「安全性证明」一节的最后讨论过这一点。

\(\{ \mathcal{F}_{\mathsf{VSS}}, \mathcal{F}_{\mathsf{mult}} \}\)-混合模型下的安全计算协议 · 证明

定理证毕。

总结。在前文中,我们已经在朴素模型下实现了理想功能 \(\mathcal{F}_{\mathsf{VSS}}\) 和 \(\mathcal{F}_{\mathsf{mult}}\). 根据通用组合定理(定理 4.3),我们有以下结论。

定理

假设参与方之间存在点对点安全信道、认证的广播信道。假设被攻陷方的数量不超过 \(t\),\(t < n/3\). 那么,在朴素模型(plain model)下存在协议对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{sfe}}\)(图 6.2)。

至此,我们完成了BGW协议(恶意安全)的全部介绍与UC安全性证明。

BDOZ协议和SPDZ协议

「BGW协议(恶意安全)」一节的BGW协议在 \(t < n/3\)(诚实大多数)的场景下对于(静态)恶意敌手实现了完美的安全性。而BDOZ协议~[BDOZ, 2011]

和SPDZ协议~[DPSZ, 2012]能够对于控制 \(t = n - 1\) 个参与方的(静态)恶意敌手具有安全性。BDOZ协议和SPDZ协议都使用了Beaver三元组技术,在此基础上,通过消息认证码实现了恶意安全性。BDOZ协议的方法是对让每个参与方对每一个秘密份额都进行认证,即,当需要重建某个值时,各参与方公布自己的秘密份额以及它的 \(n - 1\) 个消息认证码标签,然后,每个参与方检查所有其他参与方的秘密份额的真实性(总通信量和计算量均为 \(O(n^2)\)). SPDZ消息认证码的设计更加巧妙,在重建某个值时,实现了线性的通信量和计算量。

下面,我们展开介绍。

BDOZ协议

直观思想

让我们以「基于Beaver三元组的MPC协议」一节的基于Beaver三元组的协议作为起点。为简单起见,我们先考虑两方计算的场景,并假设Beaver三元组是由可信第三方生成的。

敌手的攻击。我们已经证明,「基于Beaver三元组的MPC协议」一节的协议(图 7.1)是半诚实安全的。但是,如果参与方是恶意的,他可以进行怎样的攻击呢?假设参与方是 \(P_1\) 和 \(P_2\),其中 \(P_1\) 是恶意的被攻陷方。首先,对于输入分享阶段,假设 \(P_1\) 的输入为 \(x\),\(P_1\) 应该随机选取 \(x_1, x_2\),满足 \(x_1 + x_2 = x\),然后将 \(x_2\) 发给 \(P_2\). 恶意的 \(P_1\) 可以任意选取 \(x'_1, x'_2\),其中 \(x'_1 + x'_2 \neq x\),并将 \(x'_2\) 发给 \(P_2\). 但这不是问题,因为这等价于 \(P_2\) 将自己的输入替换为 \(x' = x'_1 + x'_2\). 我们之前讨论过,“输入替换”是敌手唯一被允许的影响。

然而,在计算乘法门和输出重建时,参与方需要公布自己的份额以进行秘密重建。此时,我们没有任何机制来确保恶意参与方公布正确的份额。以输出重建阶段为例,假设某个公共输出值为 \(y\),\(P_1\) 持有 \(y_1\),\(P_2\) 持有 \(y_2\),满足 \(y_1 + y_2 = y\). 此时,恶意的 \(P_1\) 可以发送另一个值 \(y'_1 \neq y_1\) 给 \(P_2\). 这样一来,\(P_2\) 得到的输出就变为 \(y' = y'_1 + y_2\). 这确实是一种对协议的攻击:该攻击使得 \(P_2\) 输出了错误的结果,但是在理想世界中,敌手无法做到这一点。在计算乘法门进行的秘密重建时,敌手也一样可以发起这种攻击,使参与方重建出错误的值。

因此,我们需要设计一种机制,使得参与方在秘密重建时必须公布正确的秘密份额。具体而言,假设参与方需要重建某个值 \(y\),其中 \(P_1\) 持有 \(y_1\),\(P_2\) 持有 \(y_2\). 当 \(P_1\)(\(P_2\)) 公布任何 \(y_1\)(\(y_2\)) 以外的其他值时都会被检测到,然后参与方终止协议。

消息认证码。回想一下,在「直观思想」一节的切分选择协议中,我们在实现输出真实性时也遇到了类似的问题,解决方法是使用消息认证码(Message Authentication Codes, MACs)。现在,我们再次使用该技术,让 \(P_2\) 对 \(P_1\) 的秘密份额进行认证(\(P_1\) 也对 \(P_2\) 的秘密份额进行认证)。我们使用的消息认证码的形式仍然是 \(\mathsf{Mac}_{\Delta, K}(x) = \Delta \cdot x + K\),其中 \(\Delta, K\) 是密钥,\(x\) 是认证的消息,\(\mathsf{Mac}_{\Delta, K}(x)\) 是标签,\(\Delta, K, x \in \mathbb{F}_p\). 不难看出,这是信息论安全的一次性消息认证码,敌手在不知道密钥的情况下成功伪造标签的概率为 \(1/p\)(“一次性”是因为如果敌手拥有同一密钥下的两个消息标签对 \((x_1, M_1), (x_2, M_2)\),他就可以求解密钥从而伪造标签)。

这个MAC的构造还具有一个很重要的性质。如果我们将不同密钥中的 \(\Delta\) 取相同的值(\(K\) 取不同的值),那么该MAC就具有了加法同态性。具体而言,设 \(M_1 = \mathsf{Mac}_{\Delta, K_1}(x_1) = \Delta \cdot x_1 + K_1, \; M_2 = \mathsf{Mac}_{\Delta, K_2}(x_2) = \Delta \cdot x_2 + K_2\),那么 \(M_1 + M_2 = \Delta \cdot (x_1 + x_2) + (K_1 + K_2)\),即 \(M_1 + M_2\) 是 \(x_1 + x_2\) 在密钥 \((\Delta, K_1 + K_2)\) 下合法的标签。而加法同态性正是我们计算算术电路时所需要的!

协议构造。让我们回到协议。我们称 \(\Delta\) 是全局MAC密钥,\(K\) 是本地MAC密钥。首先,\(P_1\) 应该持有全局密钥 \(\Delta_1\),\(P_2\) 持有全局密钥 \(\Delta_2\). 对于某个秘密值 \(x\),\(P_1\) 应该持有秘密份额 \((x_1, K_1, M_1)\),\(P_2\) 持有秘密份额 \((x_2, K_2, M_2)\),满足以下条件

  • \(x_1 + x_2 = x\)

  • \(M_1 = \Delta_2 \cdot x_1 + K_2\)

  • \(M_2 = \Delta_1 \cdot x_2 + K_1\)

即 \(x_1, x_2\) 是 \(x\) 的加法秘密分享,\(M_1\) 是 \(P_1\) 持有的(密钥 \((\Delta_2, K_2)\) 下的)\(x_1\) 的MAC标签,\(M_2\) 是 \(P_2\) 持有的(密钥 \((\Delta_1, K_1)\) 下的)\(x_2\) 的MAC标签。当需要重建 \(x\) 时,\(P_1\) 公布 \((x_1, M_1)\),\(P_2\) 公布 \((x_2, M_2)\),然后 \(P_1\) 检查 \(M_2 \stackrel{?}{=} \Delta_1 \cdot x_2 + K_1\),\(P_2\) 检查 \(M_1 \stackrel{?}{=} \Delta_2 \cdot x_1 + K_2\). 我们将该步骤称为秘密值的“打开”(可验证地)。如果需要将秘密值打开给某一个参与方而不是打开给所有人,只需将秘密份额和MAC标签发给那个参与方即可。

直观思想 · 公式

下面,我们用符号 \([x]\) 表示BDOZ认证秘密分享,在两方场景下,它的定义如下:

\[[x] = [ \{ x_i, K_i, M_i \}_{i=1, 2} ]\]

直观思想 · 公式

因为MAC满足加法同态性,我们可以定义如下的线性运算。对于 \([x] = [ \{ x_i, K_i, M_i \}_{i=1, 2} ], [x'] = [ \{ x'_i, K'_i, M'_i \}_{i=1, 2} ]\) 以及常数 \(\alpha \in \mathbb{F}_p\),加法和常数乘法定义如下:

\[\begin{aligned} [x] + [x'] & = [ \{ x_i + x'_i, K_i + K'_i, M_i + M'_i \}_{i=1, 2} ] \\ \alpha[x] & = [ \{ \alpha x_i, \alpha K_i, \alpha M_i \}_{i=1, 2} ] \end{aligned}\]

直观思想 · 公式

显然,该运算满足

\[\begin{aligned} [x] + [x'] & = [x + x'] \\ \alpha[x] & = [\alpha x] \end{aligned}\]

直观思想 · 公式

对于常数加法,当需要加常数 \(\alpha\) 时,\(P_1\) 需要将其秘密份额加上 \(\alpha\),此时,\(P_2\) 需要更新本地MAC密钥以满足MAC验证等式。其定义如下:

\[\begin{aligned} [x] + \alpha & = [ \{ x_1 + \alpha, K_1, M_1 \}, \{ x_2, K_2 - \Delta_2 \alpha, M_2 \} ] \end{aligned}\]

直观思想 · 公式

同样地,该运算满足

\[\begin{aligned} [x] + \alpha & = [x + \alpha] \end{aligned}\]

三元组的生成与输入分享。至此,我们对于BDOZ认证秘密分享成功实现了线性运算!并且MAC的加入使得秘密重建时参与方必须揭示正确的秘密份额,否则MAC验证将无法通过。如果我们还能够生成认证Beaver三元组和输入值的认证秘密分享,那么基于加法同态性和Beaver三元组的性质,我们就可以实现恶意安全的算术电路计算协议了!

在可信第三方的假设下,可以由可信第三方生成认证Beaver三元组 \(([a], [b], [c])\). 具体而言,可信第三方首先为 \(P_i\) 随机选择全局MAC密钥 \(\Delta_i, \; i = 1, 2\). 然后,他随机选择 \(a, b \leftarrow_{\$} \mathbb{F}\) 并计算 \(c = ab\). 接下来,可信第三方对 \(a, b, c\) 做加法秘密分享,并随机选择每一个本地MAC密钥,然后计算每一个秘密份额的MAC标签。最后,可信第三方向每个参与方分发全局MAC密钥 \(\Delta_i\) 以及认证秘密份额。

而对于输入值的分享,我们无法让参与方直接生成输入值的认证秘密分享。这里采取的方法是消耗一个随机值的认证秘密分享。协议如下:假设 \(P_1\) 的输入是 \(x_1\). 首先,可信第三方在生成认证Beaver三元组的同时还生成了足够的随机值的认证秘密分享。参与方选取一个随机值的认证秘密分享 \([a]\),然后将 \(a\) 打开给 \(P_1\). \(P_1\) 广播 \(\delta = x_1 - a\). 参与方计算 \([a] + \delta = [a + \delta] = [x_1]\),得到 \(x_1\) 的认证秘密分享。因为 \(a\) 是均匀随机的,所以 \(\delta = x_1 - a\) 不会泄漏 \(x_1\) 的任何信息。

两方协议小结。综上所述,假设由可信第三方生成Beaver三元组,在两方场景下,我们介绍了BDOZ协议的构造。我们做一个小结。

预处理(离线)阶段:

  • 可信第三方生成足够的认证Beaver三元组和随机值的认证秘密分享。

在线阶段:

  • 输入分享:设 \(P_i\) 的输入为 \(x_i\). 参与方取一个随机值的认证秘密分享 \([a]\),将 \(a\) 打开给 \(P_i\). \(P_i\) 广播 \(\delta = x_i - a\). 参与方计算 \([a] + \delta = [x_i]\).

  • 逐门计算:
    • 对于加法门、常数乘法门、常数加法门,分别计算

      \[[x] + [y] = [x + y], \; \alpha[x] = [\alpha x], \; [x] + \alpha = [x + \alpha]\]
    • 对于乘法门,执行如下操作

      • 取认证Beaver三元组 \(([a], [b], [c])\),本地计算 \([x] - [a] = [x - a], [y] - [b] = [y - b]\);

      • 向所有参与方打开 \(d = x - a, \; e = y - b\);

      • 参与方本地计算 \(d[b] + e[a] + [c] + de = [xy]\).

直观思想 · 公式

  • 输出重建:对于 \(P_i\) 的输出 \(y_i\),将 \(y_i\) 打开给 \(P_i\).

    \[[x] = [ \{ x_i, \{ K_{x_j}^i, M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ]\]
  • 其中 \(K_{x_j}^i\) 是 \(P_i\) 持有的对(\(P_j\) 的秘密份额)\(x_j\) 认证的密钥,\(M_j(x_i) = \Delta_j \cdot x_i + K_{x_i}^j\) 是 \(x_i\) 在 \(P_j\) 的密钥下的MAC标签,\(\{ x_i, \{ K_{x_j}^i, M_j(x_i) \}_{j \in [n], j \neq i} \}\) 是 \(P_i\) 持有的 \(x\) 的秘密份额。也就是说,\(P_i\) 需要对每个参与方的份额都进行认证,同时 \(P_i\) 的份额也需要被每个其他参与方认证。当需要将 \([x]\) 打开给 \(P_j\) 时,每个参与方 \(P_i\) 发送 \(x_i, M_j(x_i)\) 给 \(P_j\),\(P_j\) 检查 \(M_j(x_i) \stackrel{?}{=} \Delta_j \cdot x_i + K_{x_i}^j\). 如果检查均通过,\(P_j\) 计算 \(x = \sum_{i=1}^n x_i\);否则,\(P_j\) 广播 \(\mathsf{fail}\). 如果要将 \(x\) 打开给所有人,那么对每个参与方执行上述打开操作。

    直观思想 · 公式

    与两方场景类似,对于 \([x] = [ \{ x_i, \{ K_{x_j}^i, M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ], [x'] = [ \{ x'_i, \{ K_{x'_j}^i, M_j(x'_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ]\) 和常数 \(\alpha \in \mathbb{F}_p\),我们定义秘密份额的加法、常数乘法、常数加法运算:

    \[\begin{aligned} [x] + [x'] & = [ \{ x_i + x'_i, \{ K_{x_j}^i + K_{x'_j}^i, M_j(x_i) + M_j(x'_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ] \\ \alpha[x] & = [ \{ \alpha x_i, \{ \alpha K_{x_j}^i, \alpha M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ] \\ [x] + \alpha & = [ \{ x_1 + \alpha, \{ K_{x_j}^1, M_j(x_1) \}_{j \in [n], j \neq 1} \}, \{ x_i, \{ K_{x_1}^i - \Delta_i \alpha, \{K_{x_j}^i\}_{j=2, \dots, n, j \neq i} \}, \{ M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=2}^n ] \end{aligned}\]

    直观思想 · 公式

    注意,在常数加法中,\(P_1\) 将自己的秘密份额更新为 \(x_1 + \alpha\),其他参与方 \(P_i, \; i \neq 1\) 将认证 \(P_1\) 的份额所使用的本地密钥更新为 \(K_{x_1}^i - \Delta_i \alpha\).

    上述运算满足

    \[\begin{aligned} [x] + [x'] & = [x + x'] \\ \alpha[x] & = [\alpha x] \\ [x] + \alpha & = [x + \alpha] \end{aligned}\]

    在预处理阶段,由可信第三方生成所有认证Beaver三元组和随机值的认证秘密分享。在线阶段中,计算方式与两方场景完全相同。至此,我们在可信第三方生成认证Beaver三元组的假设下,完成了BDOZ协议的介绍。

    协议描述

    本节,我们给出BDOZ协议的形式化描述。这里,我们假设存在可信第三方生成Beaver三元组,并将其抽象为理想功能 \(\mathcal{F}_{\mathsf{prep}}\). 我们首先给出符号 \([\cdot]\) 的定义与运算规则,然后给出理想功能 \(\mathcal{F}_{\mathsf{prep}}\) 的定义,最后在 \(\mathcal{F}_{\mathsf{prep}}\)-混合模型下给出完整的协议描述。

    符号表示与线性运算。对于消息 \(x \in \mathbb{F}_p\),密钥 \((\Delta, K) \in \mathbb{F}_p^2\),消息验证码MAC的定义为 \(\mathsf{Mac}_{\Delta, K}(x) = \Delta \cdot x + K\). 我们将 \(\Delta\) 称为全局MAC密钥,\(K\) 称为本地MAC密钥。每个参与方 \(P_i\) 持有全局MAC密钥的份额 \(\Delta_i\).(注:原始论文 [BDOZ, 2011]中,\(P_i\) 对每个参与方 \(P_j, \; j \neq i\) 生成了全局MAC密钥 \(\Delta^i_j\). 这没有必要,\(P_i\) 对所有其他参与方 \(P_j, \; j \neq i\) 只需使用同一个全局MAC密钥 \(\Delta_i\) 即可,因此本教材作了简化。)

    协议描述 · 公式

    值 \(x\) 的认证秘密分享记为 \([x]\),定义如下:

    \[[x] = [ \{ x_i, \{ K_{x_j}^i, M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ]\]

    其中,\(x = x_1 + … + x_n, \; M_j(x_i) = \mathsf{Mac}_{\Delta_j, K_{x_i}^j}(x_i)\).

    对于秘密分享 \([ \cdot ]\),它的打开、加法、常数乘法、常数加法运算定义如图 9.12所示。

    {秘密分享 $[ \(\cdot\)

    $ 的运算}]

    打开:当需要将 \([x] = [ \{ x_i, \{ K_{x_j}^i, M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ]\) 打开给 \(P_j\) 时,每个参与方 \(P_i\) 发送 \(x_i, M_j(x_i)\) 给 \(P_j\),\(P_j\) 检查 \(M_j(x_i) \stackrel{?}{=} \Delta_j \cdot x_i + K_{x_i}^j\). 如果检查均通过,\(P_j\) 计算 \(x = \sum_{i=1}^n x_i\);否则,\(P_j\) 广播 \(\mathsf{fail}\). 如果要将 \(x\) 打开给所有人,那么对每个参与方执行上述打开操作。

    \[[x] + [x'] = [ \{ x_i + x'_i, \{ K_{x_j}^i + K_{x'_j}^i, M_j(x_i) + M_j(x'_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ]\]
    \[\alpha[x] = [ \{ \alpha x_i, \{ \alpha K_{x_j}^i, \alpha \cdot M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=1}^n ]\]
    \[[x] + \alpha = [ \{ x_1 + \alpha, \{ K_{x_j}^1, M_j(x_1) \}_{j \in [n], j \neq 1} \}, \{ x_i, \{ K_{x_1}^i - \Delta_i \alpha, \{K_{x_j}^i\}_{j=2, \dots, n, j \neq i} \}, \{ M_j(x_i) \}_{j \in [n], j \neq i} \}_{i=2}^n ]\]

    协议描述 · 公式

    不难看出,图 9.12中的运算满足

    \[\begin{aligned} [x] + [x'] & = [x + x'] \\ \alpha[x] & = [\alpha x] \\ [x] + \alpha & = [x + \alpha] \end{aligned}\]

    理想功能 \(\mathcal{F}_{\mathsf{prep}}\). 我们将预处理阶段中生成认证Beaver三元组(以及单个值的认证秘密分享)抽象为理想功能 \(\mathcal{F}_{\mathsf{prep}}\). \(\mathcal{F}_{\mathsf{prep}}\) 接受3种命令:\(\operatorname{Init}\), \(\operatorname{Singles}\), \(\operatorname{Triples}\),分别用于初始化、生成单个值的认证秘密分享、生成认证Beaver三元组。有两点需要注意:(1) \(\mathcal{F}_{\mathsf{prep}}\) 允许被攻陷方选择自己的秘密份额和MAC密钥,对于诚实方,这些值由 \(\mathcal{F}_{\mathsf{prep}}\) 随机选择;(2) \(\mathcal{F}_{\mathsf{prep}}\) 一次生成 \(u\) 个认证Beaver三元组(或单个值的认证秘密分享),其中 \(u\) 是一个参数。这是因为在实现 \(\mathcal{F}_{\mathsf{prep}}\) 的协议中,参与方一次生成 \(u\) 个认证Beaver三元组,\(\mathcal{F}_{\mathsf{prep}}\) 的定义需要与之吻合。

    \(\mathcal{F}_{\mathsf{prep}}\) 的定义如图 9.31所示。

    BDOZ预处理阶段理想功能 \(\mathcal{F}_{\mathsf{prep}}\)

    \(\small\)

    令 \(\mathsf{C}\) 为被攻陷方的集合。

    初始化:当收到来自每个参与方 \(P_i\) 的消息 \((\operatorname{Init}, \mathsf{sid}, p)\) 时,\(\mathcal{F}_{\mathsf{prep}}\) 记录域的模数 \(p\). 对于每个诚实方 \(P_i \notin \mathsf{C}\),随机选择 \(\Delta_i \leftarrow_{\$} \mathbb{F}_p\);对于每个被攻陷方 \(P_j \in \mathsf{C}\),记录其发送的 \(\Delta_j\).

    1. 执行期间,如果收到来自敌手 \(\mathcal{S}\) 的 \((\operatorname{Stop}, \mathsf{sid})\),那么终止并向所有参与方发送 \(\mathsf{fail}\).

    2. \(\mathcal{F}_{\mathsf{prep}}\) 随机选择 \(a \leftarrow_{\$} \mathbb{F}_p\),然后

      1. 对于每个被攻陷方 \(P_j \in \mathsf{C}\),记录其发送的 \(a_j\). 然后,为每个诚实方 \(P_i \notin \mathsf{C}\) 随机选择 \(a_i \leftarrow_{\$} \mathbb{F}_p\),满足 \(\sum_{i=1}^n a_i = a\).

      2. 对于每个被攻陷方 \(P_j \in \mathsf{C}\),记录其发送的 \(K^j_{a_i}, \; i = 1, …, n\). 对于每个诚实方 \(P_i \notin \mathsf{C}\),随机选择 \(K^i_{a_j}, \; j = 1, …, n\).

      3. 对于 \(i = 1, …, n, \; j = 1, …, n\),计算 \(M_j(a_i) = \Delta_j \cdot a_i + K_{a_i}^j\).

      4. 至此 \([a]\) 的所有数据均已生成。\(\mathcal{F}_{\mathsf{prep}}\) 向每个参与方 \(P_i\) 发送 \(\{ a_i, \{ K_{a_j}^i, M_j(a_i) \}_{j \in [n], j \neq i} \}\).

    1. 步骤1与“单个值”中相同。

    2. 随机选择 \(a, b \leftarrow_{\$} \mathbb{F}_p\),计算 \(c = ab\). 然后如“单个值”中的步骤2那样生成 \([a], [b], [c]\) 并分发。

    BDOZ预处理阶段理想功能 \(\mathcal{F}_{\mathsf{prep}}\)

    协议描述。下面,我们给出 \(\mathcal{F}_{\mathsf{prep}}\)-混合模型下,BDOZ协议的完整描述,如图 9.32所示。基于BDOZ认证秘密分享的线性同态性和可安全打开性,协议整体与基于Beaver三元组的协议非常类似,并实现了恶意安全性。

    {\(\mathcal{F}_{\mathsf{prep}}\)-混合模型下的BDOZ协议 \(\Pi_\mathsf{BDOZ}\)

    参与方 \(P_1, …, P_n\) 想要计算函数 \(f: \mathbb{F}^{M_\mathsf{in}^1} \times \cdots \times \mathbb{F}^{M_\mathsf{in}^n} \rightarrow \mathbb{F}^{M_\mathsf{out}^1} \times \cdots \times \mathbb{F}^{M_\mathsf{out}^n}\) 并已经将其转化成了包含加法门、常数乘法门、常数加法门、乘法门的算术电路。

    预处理阶段:

    参与方首先向 \(\mathcal{F}_{\mathsf{prep}}\) 发送 \((\operatorname{Init}, \mathsf{sid}, p)\). 然后,参与方向 \(\mathcal{F}_{\mathsf{prep}}\) 调用足够次数的 \((\operatorname{Triples}, \mathsf{sid}, u)\) 和 \((\operatorname{Singles}, \mathsf{sid}, u)\) 以获得足够的认证三元组以及单个值的认证秘密分享。

    在线阶段:

    • 输入分享:假设 \(P_i\) 的某个输入为 \(x_i\),取单个值的认证秘密分享 \([a]\),执行如下操作:
      1. 向 \(P_i\) 打开 \([a]\);

      2. \(P_i\) 广播 \(\delta = x_i - a\);

      3. 参与方计算 \([a] + \delta = [x_i]\).

      对于 \(P_i\) 的每一个输入,都执行上述操作。
    • 逐门计算:重复以下步骤,直到所有门都被计算。根据门的类型,执行以下操作之一:
      • 加法门。假设参与方持有 \([x], [y]\). 参与方计算 \([x] + [y] = [x+ y]\).

      • 常数乘法门。假设对应的常数为 \(\alpha\),参与方持有 \([x]\). 参与方计算 \(\alpha [x] = [\alpha x]\).

      • 常数加法门。假设对应的常数为 \(\alpha\),参与方持有 \([x]\). 参与方计算 \([x] + \alpha = [x + \alpha]\).

      • 乘法门。假设参与方持有 \([x], [y]\),执行以下操作:

        1. 取Beaver三元组 \(([a], [b], [c])\);

        2. 参与方本地计算 \([x] - [a] = [x - a], [y] - [b] = [y - b]\);

        3. 对所有参与方打开 \([x - a], [y - b]\),记为 \(d = x - a, \; e = y - b\);

        4. 参与方本地计算 \(d[b] + e[a] + [c] + de = [xy]\).

    • 输出重建:假设 \(P_i\) 的某个输出为 \(y_i\),将 \([y_i]\) 打开给 \(P_i\). 对于 \(P_i\) 的每一个输出,都执行该操作。

    安全性证明

    根据协议基于Beaver三元组的构造思想,不难发现,协议中泄漏的值都是均匀随机值。恶意敌手能够发动的攻击仅为公布错误的秘密份额。而根据MAC的构造,错误的秘密份额通过MAC验证的概率为 \(1/p\).

    我们给出恶意敌手模型下的安全函数计算理想功能 \(\mathcal{F}_{\mathsf{sfe}}\),如图 9.33所示. 它与半诚实版本有两点区别:(1) 敌手 \(\mathcal{S}\) 可以随时终止协议;(2) 在输出阶段,敌手 \(\mathcal{S}\) 可以阻止诚实方获得输出。(注:注意,「BGW协议(恶意安全)」一节的协议虽然也是在恶意敌手模型下的,但是由于存在诚实大多数(\(t < n/3\)),因此敌手不能在协议执行时终止协议,也不能阻止诚实方获得输出。)

    理想功能 \(\mathcal{F}_{\mathsf{sfe}}\)

    该理想功能 \(\mathcal{F}_{\mathsf{sfe}}\) 与参与方 \(P_1, …, P_n\) 以及敌手 \(\mathcal{S}\) 交互。它的参数是函数 \(f\) 满足 \((y_1, …, y_n) = f(x_1, …, x_n)\). 我们允许参与方有多个输入输出值,因此这里的 \(x_i, y_i\) 可以是多个(域 \(\mathbb{F}_p\) 上的)值。

    • 当收到来自每个参与方的消息 \((\operatorname{Init}, \mathsf{sid}, p)\) 时,初始化并记录模数 \(p\).

    • 当收到来自 \(P_i\) 的消息 \((\operatorname{Input}, \mathsf{sid}, x_i)\) 时,该理想功能 \(\mathcal{F}_{\mathsf{sfe}}\) 做如下操作:

      • 记录 \((\operatorname{Input}, \mathsf{sid}, x_i)\),并发送 \((\operatorname{Input}, \mathsf{sid}, P_i)\) 给敌手 \(\mathcal{S}\).

    • 当收到来自 \(\mathcal{S}\) 的消息 \((\operatorname{Abort}, \mathsf{sid})\) 时,向所有参与方发送 \(\bot\) 并终止。

    • 对于 \(P_i\) 的输出 \(y_i\),当收到来自 \(\mathcal{S}\) 的 \((\operatorname{OK}, \mathsf{sid}, P_i)\) 时,如果所有参与方均已提供输入,该理想功能 \(\mathcal{F}_{\mathsf{sfe}}\) 做如下操作:

      • 发送 \((\operatorname{Output}, \mathsf{sid}, y_i)\) 给接收方 \(P_i\).

    安全函数计算理想功能 \(\mathcal{F}_{\mathsf{sfe}}\)

    我们有以下定理。

    定理

    假设被攻陷方数量不超过 \(n - 1\),图 9.32中的协议 \(\Pi_\mathsf{BDOZ}\) 在 \(\mathcal{F}_{\mathsf{prep}}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{sfe}}\)(图 9.33)。

    安全性证明

    要证明该定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

    \[\operatorname{exec}_{\Pi_\mathsf{BDOZ}, \mathcal{A}, \mathcal{Z}}^{\mathcal{F}_{\mathsf{prep}}} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{sfe}}, \mathcal{S}, \mathcal{Z}}\]

    其中 \(\mathcal{A}\) 是平凡敌手。

    模拟器 \(\mathcal{S}\). 模拟器 \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{Z}\) 与 \(\mathcal{A}\) 之间的消息。此外,\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{prep}}\) 诚实地生成认证Beaver三元组和单个值的认证秘密分享。令 \(\mathsf{C}\) 为被攻陷方的集合。\(\mathcal{S}\) 的工作方式如下。

    • 模拟 \(\mathcal{F}_{\mathsf{prep}}\):
      • 当 \(\mathcal{F}_{\mathsf{prep}}\) 收到来自被攻陷方 \(P_i\) 的 \((\operatorname{Init}, \mathsf{sid}, p)\) 时,\(\mathcal{S}\) 在理想世界代表 \(P_i\) 向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Init}, \mathsf{sid}, p)\).

      • \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{prep}}\) 记录每个被攻陷方发送的秘密份额和MAC密钥,并为每个诚实方随机选择秘密份额和MAC密钥,然后,\(\mathcal{S}\) 诚实地计算认证Beaver三元组和单个值的认证秘密分享,并分发给参与方。

    • 输入阶段:
      • 对于诚实方 \(P_i \notin \mathsf{C}\),当从 \(\mathcal{F}_{\mathsf{sfe}}\) 收到 \((\operatorname{Input}, \mathsf{sid}, P_i)\) 时,\(\mathcal{S}\) 模拟 \(P_i\) 以 0 为输入遵循协议执行。如果将 \([a]\) 打开给 \(P_i\) 时MAC验证不通过,\(\mathcal{S}\) 模拟 \(P_i\) 广播 \(\mathsf{fail}\),并在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\).

      • 对于被攻陷方 \(P_j \in \mathsf{C}\),\(\mathcal{S}\) 记录其广播的 \(\delta\). 由于 \(\mathcal{S}\) 模拟了 \(\mathcal{F}_{\mathsf{prep}}\),因此知道 \(a\) 的值。\(\mathcal{S}\) 提取 \(P_j\) 的输入 \(x_j = a + \delta\),并在理想世界代表 \(P_j\) 发送给 \(\mathcal{F}_{\mathsf{sfe}}\).

      • 如果任何参与方广播 \(\mathsf{fail}\),\(\mathcal{S}\) 在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\).

    • 计算阶段:
      • 对于加法门、常数乘法门、常数加法门,\(\mathcal{S}\) 模拟诚实方遵循协议计算。

      • 对于乘法门,\(\mathcal{S}\) 模拟诚实方遵循协议执行。如果秘密打开时诚实方的MAC验证不通过,\(\mathcal{S}\) 模拟诚实方广播 \(\mathsf{fail}\),并在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\). 如果任何参与方广播 \(\mathsf{fail}\),\(\mathcal{S}\) 在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\).

    • 输出阶段:
      • 对于诚实方 \(P_i \notin \mathsf{C}\) 的输出,如果打开时MAC验证不通过,\(\mathcal{S}\) 模拟 \(P_i\) 广播 \(\mathsf{fail}\),并在理想世界阻止 \(P_i\) 获得输出。否则(MAC验证通过),\(\mathcal{S}\) 向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{OK}, \mathsf{sid}, P_i)\).

      • 对于被攻陷方 \(P_j \in \mathsf{C}\) 的输出,\(\mathcal{S}\) 首先在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{OK}, \mathsf{sid}, P_j)\) 得到 \(P_j\) 的输出 \(y\). 然后,\(\mathcal{S}\) 需要模拟诚实方的份额使其与 \(y\) 相一致。\(\mathcal{S}\) 的方法是只修改一个诚实方的份额,保持其他诚实方的份额不变。记这个诚实方为 \(P_k\). \(\mathcal{S}\) 计算 \(P_k\) 的新秘密份额为 \(y'_k = y - \sum_{i \neq k} y_i\)(因为 \(\mathcal{S}\) 模拟了 \(\mathcal{F}_{\mathsf{prep}}\),所以知道每个参与方的秘密份额)。然后,\(\mathcal{S}\) 计算 \(\mathsf{Mac}_{K^j_{y_k}}(y'_k)\) 作为 \(y'_k\) 的MAC标签(因为 \(\mathcal{S}\) 模拟了 \(\mathcal{F}_{\mathsf{prep}}\),所以知道 \(P_j\) 的全局MAC密钥 \(\Delta_j\),并且可以计算本地密钥 \(K^j_{y_k}\))。最后,\(\mathcal{S}\) 模拟诚实方向 \(P_j\) 发送秘密份额和MAC标签。

    1. 理想世界中诚实方的输入为0;

    2. 输出阶段,理想世界中的诚实方份额是 \(\mathcal{S}\) 模拟的。

    两者不可区分是因为:

    1. 协议中泄漏的值(包括输入分享阶段广播的 \(\delta\),计算乘法门时打开的 \(d, e\),以及秘密打开时公布的秘密份额和MAC标签)都是均匀随机值,与诚实方的输入无关;

    2. 输出阶段 \(\mathcal{S}\) 模拟的诚实方份额与真实世界的诚实方份额具有完全相同的分布(具体而言,设某个输出为 \(y\),无论在真实世界还是理想世界,参与方的份额都是在条件 \(\sum_{i=1}^n y_i = y\) 下的均匀随机值)。

    下面,我们论证敌手成功伪造MAC标签的概率是可忽略的。协议中MAC的定义为 \(\mathsf{Mac}_{\Delta, K}(x) = \Delta \cdot x + K\),其中 \(\Delta, K \leftarrow_{\$} \mathbb{F}_p\),\(\Delta\) 是全局密钥,\(K\) 是本地一次密钥。 敌手持有一些认证秘密份额,记为 \(x_1, x_2, …\),以及它们对应的MAC标签,记为 \(t_1, t_2, …\)(其中 \(t_i = \Delta \cdot x_i + K_i\),MAC密钥 \(\Delta, K_1, K_2, …\) 是均匀随机的);在进行秘密打开时,敌手应当发送的秘密份额一定是 \(x_1, x_2, …\) 的线性组合。对于 \(x_i\) 的任意线性组合,敌手能够声明一个错误的值但提供合法MAC标签的概率为 \(1/p\)(形式化地说,假设敌手持有的(正确的)秘密份额和MAC标签为 \(x\) 和 \(t\),满足 \(t = \Delta \cdot x + K\). 其中MAC密钥 \(\Delta\) 和 \(K\) 是均匀随机的,且敌手不知道它们的值。如果敌手能提供合法的 \(x', t'\) 满足 \(x' \neq x\) 且 \(t' = \Delta \cdot x' + K\),那么等价于敌手猜对 \(\Delta = (t - t')(x - x')^{-1}\).)。

    证毕。

    预处理阶段的实现

    本节,我们要移除可信第三方,通过安全多方计算的方式实现预处理阶段,即实现 \(\mathcal{F}_{\mathsf{prep}}\). 我们介绍BDOZ原文 [BDOZ, 2011]所提出的基于同态加密(semi-homomorphic encryption)(注:在学术界,同态加密(homomorphic encryption)通常指满足加法同态或乘法同态的加密方案,全同态加密(fully homomorphic encryption)指既满足加法同态又满足乘法同态的方案;在工业界,前者通常被称为半同态加密(partially homomorphic encryption)。这里的semi-homomorphic encryption实际上是homomorphic encryption,但额外要求被加密的值不能“太大”。我们仍将semi-homomorphic encryption称为同态加密而不是半同态加密,以避免混淆。)的方案。

    同态加密定义。同态加密方案 \(\mathsf{PKE}\) 包含三个算法 \((\mathsf{Gen}, \mathsf{Enc}, \mathsf{Dec})\),其中:

    • \(\mathsf{Gen}(1^\kappa, p)\) 是一个随机算法,以安全参数 \(\kappa\) 和模数 \(p\) 为输入,输出公私钥对 \((\mathsf{pk}, \mathsf{sk})\) 以及参数 \(\mathcal{P} = (p, M, R, \mathcal{D}^d_\sigma, \mathbb{G})\). 其中,\(M, R\) 是整数,\(\mathcal{D}^d_\sigma\) 是一个算法,其生成长度为 \(d\) 的随机向量(作为加密算法的随机数)。我们要求 \(\mathcal{D}^d_\sigma\) 输出的向量 \(\boldsymbol{{r}}\) 以压倒性的概率满足 \(\| \boldsymbol{{r}} \|_\infty \leq \sigma\),其中 \(\| \boldsymbol{{r}} \|_\infty = \max(| r_1 |, …, | r_d |), \; \sigma < R\). \(\mathbb{G}\) 是密文所在的阿贝尔群。

    • \(\mathsf{Enc}_{\mathsf{pk}}(x, \boldsymbol{{r}})\) 是一个确定性算法,以整数 \(x \in \mathbb{Z}\) 和向量 \(\boldsymbol{{r}} \in \mathbb{Z}^d\) 为输入,输出密文 \(C \in \mathbb{G}\). 当随机数不重要时,我们将其简写为 \(\mathsf{Enc}_{\mathsf{pk}}(x)\). 给定 \(C_1 = \mathsf{Enc}_{\mathsf{pk}}(x_1, \boldsymbol{{r}}_1)\) 和 \(C_2 = \mathsf{Enc}_{\mathsf{pk}}(x_2, \boldsymbol{{r}}_2)\),有 \(C_1 + C_2 = \mathsf{Enc}_{\mathsf{pk}}(x_1 + x_2, \boldsymbol{{r}}_1 + \boldsymbol{{r}}_2)\). 对于密文 \(C\),如果存在 \(x, \boldsymbol{{r}}\) 满足 \(C = \mathsf{Enc}_{\mathsf{pk}}(x, \boldsymbol{{r}})\) 且 \(|x| \leq \tau, \; \| \boldsymbol{{r}} \|_\infty \leq \rho\),那么我们说 \(C\) 是一个 \((\tau, \rho)\)-密文。

    • \(\mathsf{Dec}_{\mathsf{sk}}(C)\) 是一个确定性算法,以密文 \(C \in \mathbb{G}\) 为输入,输出 \(x' \in \mathbb{Z}_p \cup \{ \bot \}\).

    预处理阶段的实现 · 公式

    \[\Pr\left[ \begin{array}{l} (\mathsf{pk}, \mathsf{sk}, \mathbb{P}) \leftarrow \mathsf{Gen}(1^\kappa, p); \\ x \in \mathbb{Z}, |x| \leq M; \boldsymbol{{r}} \in \mathbb{Z}^d, \| \boldsymbol{{r}} \|_\infty \leq R \end{array} : \begin{array}{l} \mathsf{Dec}_{\mathsf{sk}}(\mathsf{Enc}_{\mathsf{pk}}(x, \boldsymbol{{r}})) \neq x \bmod p \end{array} \right] < \mathsf{negl}(\kappa) \enspace,\]

    那么我们说它满足正确性。

    IND-CPA安全性:同态加密方案 \(\mathsf{PKE}\) 的IND-CPA安全性如定义 2.1所示。

    在实际使用中,Pailliar [Paillier, 1999]是一个著名的同态加密方案。

    • \(\Pi_\mathsf{PoPK}\)(Proof of Plaintext Knowledge):用于证明知道密文所加密的明文。

    • \(\Pi_\mathsf{PoCM}\)(Proof of Correct Multiplication):用于证明正确地进行了乘法运算。

    形式化地说,\(\Pi_\mathsf{PoPK}\) 的陈述(statement)是公钥 \(\mathsf{pk}_{P}\) 和 \(u\) 个密文 \(C_k, \; k = 1, …, u\). 证明者证明所有密文 \(C_k\) 都是 \((2^{2u + \log u} \tau, 2^{2u + \log u} \rho)\)-密文。也就是说,\(\Pi_\mathsf{PoPK}\) 证明的关系为:

    预处理阶段的实现 · 公式

    \[\begin{aligned} \mathcal{R}^{(u, \tau, \rho)}_\mathsf{PoPK} = \{ (x, w) \; | \; & x = (\mathsf{pk}_{P}, C_1, \dots, C_u); \\ & w = ((x_1, \boldsymbol{{r}}_1), \dots, (x_u, \boldsymbol{{r}}_u)): \; C_k = \mathsf{Enc}_{\mathsf{pk}_{P}}(x_k, \boldsymbol{{r}}_k), \\ & |x_k| \leq 2^{2u + \log u} \tau, \| \boldsymbol{{r}}_k \|_\infty \leq 2^{2u + \log u} \rho \} \end{aligned}\]

    \(\Pi_\mathsf{PoCM}\) 的陈述是公钥 \(\mathsf{pk}_{P}, \mathsf{pk}_{V}\) 和 \(u\) 个密文三元组 \((A_k, B_k, C_k), \; k = 1, …, u\),其中 \(A_k\) 用 \(\mathsf{pk}_{P}\) 加密,\(B_k, C_k\) 用 \(\mathsf{pk}_{V}\) 加密(因此它们属于 \(\mathbb{G}_V\))。证明者证明 \(A_k = \mathsf{Enc}_{\mathsf{pk}_{P}}(a_k, \boldsymbol{{h}}_k)\),\(C_k = a_k B_k + \mathsf{Enc}_{\mathsf{pk}_{V}}(r_k)\),其中 \(r_k\) 为随机数。也就是说,\(\Pi_\mathsf{PoCM}\) 证明的关系为:

    预处理阶段的实现 · 公式

    \[\begin{aligned} \mathcal{R}^{(u, \tau, \rho)}_\mathsf{PoCM} = \{ (x, w) \; | \; & x = ( \mathsf{pk}_{P}, \mathsf{pk}_{V}, (A_1, B_1, C_1), \dots, (A_u, B_u, C_u) ); \\ & w = ((a_1, \boldsymbol{{h}}_1, r_1, \boldsymbol{{t}}_1), \dots, (a_u, \boldsymbol{{h}}_u, r_u, \boldsymbol{{t}}_u)): \\ & A_k = \mathsf{Enc}_{\mathsf{pk}_{P}}(a_k, \boldsymbol{{h}}_k), B_k \in \mathbb{G}_V, C_k = a_k B_k + \mathsf{Enc}_{\mathsf{pk}_{V}}(r_k, \boldsymbol{{t}}_k), \\ & |a_k| \leq 2^{3u + \log u} \tau, \| \boldsymbol{{h}}_k \|_\infty \leq 2^{3u + \log u} \rho, \\ & |r_k| \leq 2^{4u + \log u} \tau^2, \| \boldsymbol{{t}}_k \|_\infty \leq 2^{4u + \log u} \tau \rho \} \end{aligned}\]

    预处理阶段的实现 · 公式

    我们暂时将这两个零知识证明协议当作黑盒,不关注其实现细节。

    直观思想。在「分布式生成方式」一节,我们介绍过半诚实场景下Beaver三元组的分布式生成方式。假设参与方是半诚实的,基于同态加密方案,参与方显然可以生成Beaver三元组(注:如果读者不清楚如何生成,可以回顾一下「分布式生成方式」一节以及「协议描述」一节“OLE的实现”。)。我们用符号 \(\langle \cdot \rangle\) 表示未认证的秘密分享,即

    \[\langle a \rangle = \{a_1, \dots, a_n\}\]

    其中 \(\sum_{i=1}^n a_i = a\). 于是,参与方可以首先生成未认证的Beaver三元组 \(\langle a \rangle, \langle b \rangle, \langle c \rangle\).

    接下来,参与方需要对秘密份额进行认证。参与方可以自行选择自己的全局MAC密钥和本地MAC密钥。然后,对于每一个份额,参与方需要获得其MAC标签 \(M_j(a_i) = \mathsf{Mac}_{\Delta_j, K_{a_i}^j}(a_i) = \Delta_j \cdot a_i + K_{a_i}^j\),其中 \(P_i\) 知道 \(a_i\),\(P_j\) 知道 \(\Delta_j, K_{a_i}^j\). 由于MAC标签的计算实质上也是OLE,我们似乎可以再次基于同态加密来实现。

    然而,请注意,我们这里考虑的是恶意敌手场景,敌手可以任意地违背协议。因此,敌手不一定会将正确的秘密份额 \(a_i\) 作为OLE的输入。具体而言,对于被攻陷方 \(P_j\),假设他秘密份额是 \(a_j\),在为 \(a_j\) 计算MAC标签时,他首先可以向不同的参与方发送不同的值,此时,认证秘密分享 \([a]\) 就不是被良好定义的。

    为此,我们可以要求 \(P_j\) 先对 \(a_j\) 进行承诺(或者加密,加密也是一种承诺的方式),从而强制 \(P_j\) 使用对不同参与方使用同样的值。但是,对于认证Beaver三元组,敌手仍然存在攻击的方式。考虑未认证的Beaver三元组 \(\langle a \rangle, \langle b \rangle, \langle c \rangle\),假设 \(P_j\) 持有 \(a_j, b_j, c_j\),满足 \(\sum a_i = a, \; \sum b_i = b, \; \sum c_i = c, \; c = ab\). 恶意的 \(P_j\) 可以不对 \(c_j\) 进行承诺,而是将其替换为 \(c'_j\),然后其他参与方都会对份额 \(c'_j\) 进行认证。这就使参与方实际上分享了 \(c' = c_1 + … + c'_j + … + c_n \neq c\),于是破坏了条件 \(c = ab\),也破坏了协议的正确性。

    上述攻击表明,敌手有能力对Beaver三元组中的 \([c]\) 制造偏移量 \(\Delta\),使得 \(c = ab + \Delta\). 为了解决这个问题,协议通过“消耗”一个Beaver三元组来验证另一个Beaver三元组的正确性。具体如下。参与方取(不一定正确的)认证Beaver三元组 \(([a], [b], [c])\) 和 \(([f], [g], [h])\),他们希望验证 \(c = ab\). 首先,参与方产生(长度为 \(u\) 位)随机挑战值 \(e\),然后(可验证地)打开 \(\varepsilon = e[a] - [f], \; \delta = [b] - [g]\). 最后,参与方打开 \(e[c] - [h] - \delta[f] -\varepsilon[g] - \varepsilon \delta\),如果为0,那么输出 \(([a], [b], [c])\),否则,丢弃 \(([a], [b], [c])\). 上述检查的思路是:验证的式子 \(ec - h - \delta f -\varepsilon g - \varepsilon \delta\) 等于 \(e(c - ab) - (h - fg)\),如果 \(c = ab\) 且 \(h = fg\),那么验证一定通过;如果 \(c \neq ab\),那么验证通过等价于 \(e = (h - fg) / (c - ab)\),\(e\) 只有一个值能够满足该式,而 \(e\) 是长度为 \(u\) 的随机值,故上式成立的概率为 \(2^{-u}\).

    协议描述。下面,我们给出预处理阶段的协议描述。

    预处理阶段需要用到两个理想功能:

    • \(\mathcal{F}_{\mathsf{KeyReg}}\):用于参与方注册公私钥,如图 9.34所示。

    • \(\mathcal{F}_{\mathsf{Rand}}\):用于生成随机挑战值,如图 9.35所示。

    理想功能 \(\mathcal{F}_{\mathsf{KeyReg}}\)

    该理想功能 \(\mathcal{F}_{\mathsf{KeyReg}}\) 的参数是密钥生成算法 \(\mathsf{Gen}\) 和安全参数 \(1^\kappa\).

    诚实方注册:当从诚实方 \(P_i\) 收到 \((\operatorname{Reg}, \mathsf{sid}, p)\) 时,\(\mathcal{F}_{\mathsf{KeyReg}}\) 计算 \((\mathsf{pk}_{i}, \mathsf{sk}_{i}) \leftarrow \mathsf{Gen}(1^\kappa, p)\),然后向其他参与方 \(P_j, \; j \neq i\) 发送 \((\operatorname{Registered}, \mathsf{sid}, P_i, \mathsf{pk}_{i}, \bot)\),向 \(P_i\) 发送 \((\operatorname{Registered}, \mathsf{sid}, P_i, \mathsf{pk}_{i}, \mathsf{sk}_{i})\).

    被攻陷方注册:当从被攻陷方 \(P_i\) 收到 \((\operatorname{Reg}, \mathsf{sid}, p, r^*)\) 时,\(\mathcal{F}_{\mathsf{KeyReg}}\) 执行同样的操作,但是将 \(r^*\) 作为密钥生成算法 \(\mathsf{Gen}\) 的随机数.

    理想功能 \(\mathcal{F}_{\mathsf{KeyReg}}\)

    理想功能 \(\mathcal{F}_{\mathsf{Rand}}\)

    当从所有参与方收到 \((\operatorname{Rand}, \mathsf{sid}, u)\) 时,\(\mathcal{F}_{\mathsf{Rand}}\) 选取 \(r \leftarrow_{\$} \{0, 1\}^u\) 并向所有参与方发送 \((\operatorname{Rand}, \mathsf{sid}, r)\).

    理想功能 \(\mathcal{F}_{\mathsf{Rand}}\)

    {子协议 \(\Pi_\mathsf{share}\)

    1. 每个参与方 \(P_i\) 随机选择 \(x_{k, i} \leftarrow_{\$} \mathbb{F}_p, \; k = 1, …, u\),然后广播 \((\tau, \rho)\)-密文 \(\{ \mathsf{Enc}_{\mathsf{pk}_{i}}(x_{k, i}) \}_{k=1}^u\).

    2. 每两个参与方 \(P_i, P_j (i \neq j)\) 以 \(\{ \mathsf{Enc}_{\mathsf{pk}_{i}}(x_{k, i}) \}_{k=1}^u\) 为输入运行 \(\Pi_\mathsf{PoPK}(u, \tau, \rho)\),\(P_i\) 为证明者,证明密文是 \((2^{2u + \log u} \tau, 2^{2u + \log u} \rho)\)-密文。

    3. 所有参与方输出 \(\langle x_k \rangle = (\mathsf{Enc}_{\mathsf{pk}_{1}}(x_{k, 1}), …, \mathsf{Enc}_{\mathsf{pk}_{n}}(x_{k, n})), \; k = 1, …, u\),其中 \(x_k = \sum_{i=1}^n x_{k, i} \bmod p\). \(P_i\) 存储 \(x_{k, i}\) 以及加密使用的随机数,作为私有输出。

    {子协议 \(\Pi_\mathsf{2\text{-}mult}\)

    1. \(P_i\) 和 \(P_j\) 以 \((\tau, \rho)\)-密文 \(\{ \mathsf{Enc}_{\mathsf{pk}_{i}}(x_k) \}_{k=1}^u, \{ \mathsf{Enc}_{\mathsf{pk}_{j}}(y_k) \}_{k=1}^u\) 为输入(此时它们已被证明是 \((2^{2u + \log u} \tau, 2^{2u + \log u} \rho)\)-密文)。

    2. 对于 \(k = 1, …, u\),\(P_i\) 向 \(P_j\) 发送 \(C_k = x_k \mathsf{Enc}_{\mathsf{pk}_{j}}(y_k) + \mathsf{Enc}_{\mathsf{pk}_{j}}(r_k)\),其中 \(\mathsf{Enc}_{\mathsf{pk}_{j}}(r_k)\) 是用 \(\mathsf{pk}_{j}\) 加密的随机 \((2^{3u + \log u} \tau^2, 2^{3u + \log u} \tau \rho)\)-密文。\(P_i\) 以 \(\mathsf{Enc}_{\mathsf{pk}_{i}}(x_k), \mathsf{Enc}_{\mathsf{pk}_{j}}(y_k), C_k\) 作为输入调用 \(\Pi_\mathsf{PoCM}(u, \tau, \rho)\) 证明 \(C_k\) 的计算是正确的。

    3. 对于 \(k = 1, …, u\),\(P_j\) 解密 \(C_k\) 得到 \(v_k\),并输出 \(z_{k, j} = v_k \bmod p\). \(P_i\) 输出 \(z_{k, i} = -r_k \bmod p\).

    \(\caption\){子协议 \(\Pi_\mathsf{2\text{-}mult}\)}

    我们将预处理阶段协议 \(\Pi_\mathsf{prep}\) 的一些部分写成子协议,它们分别是:

    • \(\Pi_\mathsf{share}\):用于生成随机值的(未认证的)加法秘密分享,如图 9.36所示。

    • \(\Pi_\mathsf{2\text{-}mult}\):用于两个参与方计算乘法,即OLE,如图 9.37所示。

    • \(\Pi_\mathsf{n\text{-}mult}\):用于 \(n\) 个参与方两两计算乘法,构造(未认证的)Beaver三元组,如图 9.38所示。

    • \(\Pi_\mathsf{addMacs}\):用于计算MAC标签,构造认证秘密分享,如图 9.39所示。

    {子协议 \(\Pi_\mathsf{n\text{-}mult}\)

    1. 协议输入是子协议 \(\Pi_\mathsf{share}\) 生成的 \(\langle a_k \rangle, \langle b_k \rangle, \; k = 1, …, u\). 每个参与方 \(P_i\) 初始化变量 \(c_{k, i} = a_{k, i} b_{k, i} \bmod p, \; k = 1, …, u\).

    2. 每两个参与方 \(P_i, P_j (i \neq j)\) 以 \(\mathsf{Enc}_{\mathsf{pk}_{i}}(a_{k, i}), \mathsf{Enc}_{\mathsf{pk}_{j}}(b_{k, j}), \; k = 1, …, u\) 为输入运行 \(\Pi_\mathsf{2\text{-}mult}\),并将输出加在 \(c_{k, i}, c_{k, j}\) 上,即,令 \(z_{k, i}, z_{k, j}\) 分别是 \(P_i, P_j\) 在协议 \(\Pi_\mathsf{2\text{-}mult}\) 中的输出,\(P_i\) 设置 \(c_{k, i} = c_{k, i} + z_{k, i} \bmod p\),\(P_j\) 设置 \(c_{k, j} = c_{k, j} + z_{k, j} \bmod p\).

    3. 每个参与方 \(P_i\) 调用 \(\Pi_\mathsf{share}\),广播 \(\mathsf{Enc}_{\mathsf{pk}_{i}}(c_{k, i}), \; k = 1, …, u\). 参与方输出子协议 \(\Pi_\mathsf{share}\) 的输出,即 \(\langle c_k \rangle, \; k = 1, …, u\).

    \(\caption\){子协议 \(\Pi_\mathsf{n\text{-}mult}\)}

    {子协议 \(\Pi_\mathsf{addMacs}\)

    初始化:每个参与方 \(P_i\) 随机选取 \(\Delta_i \leftarrow_{\$} \mathbb{F}_p\),然后向每个其他参与方 \(P_j, \j j \neq i\) 发送 \(\mathsf{Enc}_{\mathsf{pk}_{i}}(\Delta_i)\) 并以 \((\mathsf{Enc}_{\mathsf{pk}_{i}}(\Delta_i), …, \mathsf{Enc}_{\mathsf{pk}_{i}}(\Delta_i))\) 为输入运行 \(\Pi_\mathsf{PoPK}(u, \tau, \rho)\),证明它是 \((2^{2u + \log u} \tau, 2^{2u + \log u} \rho)\)-密文。

    1. 协议输入为 \(\langle a_k \rangle, \; k = 1, …, u\). 每个参与方 \(P_i\) 持有 \(a_k\) 的份额 \(a_{k, i}\). \(P_i\) 将存储 \(a_{k, i}\) 作为 \([a_k]\) 的一部分。

    2. 每两个参与方 \(P_i, P_j (i \neq j)\) 调用 \(\Pi_\mathsf{2\text{-}mult}(u, \tau, \rho)\),\(P_i\) 的输入为 \(\mathsf{Enc}_{\mathsf{pk}_{i}}(\Delta_i), …, \mathsf{Enc}_{\mathsf{pk}_{i}}(\Delta_i)\),\(P_j\) 的输入是 \(\mathsf{Enc}_{\mathsf{pk}_{j}}(a_{k, j}), \; k = 1, …, u\). 然后,\(P_i\) 获得 \(z_{k, i}\),\(P_j\) 获得 \(z_{k, j}\). 因为 \(\Pi_\mathsf{2\text{-}mult}\) 保证了 \(\Delta_i \cdot a_{k, j} = z_{k, i} + z_{k, j}\),因此 \(P_i\) 存储用于认证 \(a_{k, j}\) 的MAC密钥 \(K^i_{a_{k, j}} = -z_{k, i} \bmod p\),\(P_j\) 存储 \(a_{k, j}\) 的MAC标签 \(M_i(a_{k, j}) = z_{k, j}\).

    最后,我们给出预处理阶段协议 \(\Pi_\mathsf{prep}\) 的描述,如图 9.40所示。

    {\(\{ \mathcal{F}_{\mathsf{KeyReg}}, \mathcal{F}_{\mathsf{Rand}} \}\)-混合模型下的协议 \(\Pi_\mathsf{prep}\)

    初始化:参与方首先向 \(\mathcal{F}_{\mathsf{KeyReg}}\) 发送 \((\operatorname{Reg}, \mathsf{sid}, p)\) 注册公私钥,然后调用 \(\Pi_\mathsf{addMacs}\) 的初始化过程。

    1. 参与方首先调用4次 \(\Pi_\mathsf{share}\),获得 \(\{ \langle a_k \rangle, \langle b_k \rangle, \langle f_k \rangle, \langle g_k \rangle \}_{k=1}^u\).

    2. 参与方对 \(\{ \langle a_k \rangle, \langle b_k \rangle \}_{k=1}^u\) 和 \(\{ \langle f_k \rangle, \langle g_k \rangle \}_{k=1}^u\) 分别调用 \(\Pi_\mathsf{n\text{-}mult}\),获得 \(\{ \langle c_k \rangle \}_{k=1}^u\) 和 \(\{ \langle h_k \rangle \}_{k=1}^u\).

    3. 参与方对每个秘密份额调用 \(\Pi_\mathsf{addMacs}\),获得 \(\{ [a_k], [b_k], [c_k], [f_k], [g_k], [h_k] \}_{k=1}^u\).

    4. 参与方通过“消耗” \(\{[f_k], [g_k], [h_k]\}\) 来检查 \(c_k = a_k b_k\) 是否满足:首先,参与方调用 \(\mathcal{F}_{\mathsf{Rand}}\) 获得长度为 \(u\) 位的随机挑战值 \(e\). 然后,参与方打开 \(e[a_k] - [f_k]\) 记为 \(\varepsilon_k\),打开 \([b_k] - [g_k]\) 记为 \(\delta_k\),最后打开 \(e[c_k] - [h_k] - \delta_k [f_k] - \varepsilon_k [g_k] - \varepsilon_k \delta_k\),检查是否为0. 如果这个值为0,参与方输出 \(\{ [a_k], [b_k], [c_k] \}_{k=1}^u\).

    1. 参与方调用 \(\Pi_\mathsf{share}\),获得 \(\{ \langle a_k \rangle \}_{k=1}^u\).

    2. 参与方对 \(\{ \langle a_k \rangle \}_{k=1}^u\) 调用 \(\Pi_\mathsf{addMacs}\),获得 \(\{ [a_k] \}_{k=1}^u\) 并输出。

    \(\caption\){\(\{ \mathcal{F}_{\mathsf{KeyReg}}, \mathcal{F}_{\mathsf{Rand}} \}\)-混合模型下的协议 \(\Pi_\mathsf{prep}\)}

    为了正确解密,我们对同态加密方案的参数有一定的要求。如果一个同态加密方案能确保所有的密文都能被正确地解密,那么我们称这个同态加密方案是可容许的(admissible),即 \(M \geq 2^{5u + 2 \log u} \tau^2, \; R \geq 2^{4u + \log u} \tau \rho\).

    我们有以下安全性定理。

    定理

    假设被攻陷方数量不超过 \(n - 1\),假设使用的加密方案是模 \(p\) 同态的(semi-homomorphic),可容许的,且具有IND-CPA安全性,那么图 9.40中的协议 \(\Pi_\mathsf{prep}\) 在 \(\{ \mathcal{F}_{\mathsf{KeyReg}}, \mathcal{F}_{\mathsf{Rand}} \}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{prep}}\)(图 9.31)。

    该定理的证明通过归约到同态加密方案的一个性质,较为抽象,感兴趣的读者可以自行阅读文献 [BDOZ, 2011]。

    最后,为了协议描述的完整性,我们给出零知识证明协议 \(\Pi_\mathsf{PoPK}\) 和 \(\Pi_\mathsf{PoCM}\) 的构造,如图 9.41和图 9.42所示。关于这两个协议的完备性、可靠性、零知识性的证明可参阅文献 [BDOZ, 2011]。

    {零知识证明协议 \(\Pi_\mathsf{PoPK}\)

    1. 输入是 \(u\) 个密文 \(\{ C_k = \mathsf{Enc}_{\mathsf{pk}_{P}}(x_k, \boldsymbol{{r}}_k) \}_{k=1}^u\). 定义向量 \(\boldsymbol{{c}} = (C_1, …, C_u), \; \boldsymbol{{x}} = (x_1, …, x_u)\) 以及矩阵 \(\boldsymbol{{R}} = (\boldsymbol{{r}}_1, …, \boldsymbol{{r}}_u)\),其中 \(\boldsymbol{{r}}_k\) 为矩阵的一行。

    2. 定义 \(m = 2u -1\). 证明者 \(P\) 构造 \(m\) 个 \((2^{u - 1 + \log u} \tau, 2^{u - 1 + \log u} \rho)\)-密文 \(\{ A_i = \mathsf{Enc}_{\mathsf{pk}_{P}}(y_i, \boldsymbol{{s}}_i) \}_{i=1}^m\) 并发送给验证者 \(V\). 与第1步中相同,定义向量 \(\boldsymbol{{a}} = (A_1, …, A_m), \; \boldsymbol{{y}} = (y_1, …, y_m)\) 以及矩阵 \(\boldsymbol{{S}} = (\boldsymbol{{s}}_1, …, \boldsymbol{{s}}_m)\),其中 \(\boldsymbol{{s}}_k\) 为矩阵的一行。

    3. \(V\) 均匀随机选择向量 \(\boldsymbol{{e}} = (e_1, …, e_u) \leftarrow_{\$} \{0, 1\}^u\) 并发送给 \(P\).

    4. \(P\) 计算 \(\boldsymbol{{z}} = \boldsymbol{{y}} + \boldsymbol{{M}}_{\boldsymbol{{e}}} \cdot \boldsymbol{{x}}\) 和 \(\boldsymbol{{T}} = \boldsymbol{{S}} + \boldsymbol{{M}}_{\boldsymbol{{e}}} \cdot \boldsymbol{{R}}\) 并发送给 \(V\),其中 \(\boldsymbol{{M}}_{\boldsymbol{{e}}}\) 是一个 \(m \times u\) 的矩阵,对于 \(1 \leq i - k + 1 \leq u\),\(\boldsymbol{{M}}_{\boldsymbol{{e}}}\) 的第 \((i, k)\) 个位置 \(\boldsymbol{{M}}_{\boldsymbol{{e}}, i, k} = \boldsymbol{{e}}_{i-k+1}\),其他位置为0.

    5. \(V\) 检查 \(\boldsymbol{{d}} \stackrel{?}{=} \boldsymbol{{a}} + \boldsymbol{{M}}_{\boldsymbol{{e}}} \cdot \boldsymbol{{c}}\),其中 \(\boldsymbol{{d}} = (\mathsf{Enc}_{\mathsf{pk}_{P}}(z_1, \boldsymbol{{t}}_1), …, \mathsf{Enc}_{\mathsf{pk}_{P}}(z_m, \boldsymbol{{t}}_m))\). 此外,\(V\) 检查 \(| z_i | \leq 2^{u - 1 + \log u} \tau\) 和 \(\| \boldsymbol{{t}}_i \|_\infty \leq 2^{u - 1 + \log u} \rho\).

    {零知识证明协议 \(\Pi_\mathsf{PoCM}\)

    1. 输入是 \(u\) 个密文三元组 \(\{(A_k, B_k, C_k)\}_{k=1}^u\),其中 \(A_k = \mathsf{Enc}_{\mathsf{pk}_{P}}(a_k, \boldsymbol{{h}}_k), \; C_k = a_k B_k + \mathsf{Enc}_{\mathsf{pk}_{V}}(r_k, \boldsymbol{{t}}_k)\).

    2. 证明者 \(P\) 构造 \(u\) 个均匀随机的 \((2^{3u - 1 + \log u} \tau, 2^{3u - 1 + \log u} \rho)\)-密文 \(\{ D_k = \mathsf{Enc}_{\mathsf{pk}_{P}}(d_k, \boldsymbol{{s}}_k) \}_{k=1}^u\) 和 \(u\) 个密文 \(F_k = d_k B_k + \mathsf{Enc}_{\mathsf{pk}_{V}}(f_k, \boldsymbol{{y}}_k), \; k = 1, …, u\) 并发送给验证者 \(V\),其中 \(\mathsf{Enc}_{\mathsf{pk}_{V}}(f_k, \boldsymbol{{y}}_k)\) 是均匀随机的 \((2^{4u - 1 + \log u} \tau^2, 2^{4u - 1 + \log u} \tau \rho)\)-密文。

    3. \(V\) 均匀随机选择向量 \(\boldsymbol{{e}} = (e_1, …, e_u) \leftarrow_{\$} \{0, 1\}^u\) 并发送给 \(P\).

    4. \(P\) 向 \(V\) 发送 \(\{(z_k, \boldsymbol{{v}}_k)\}_{k=1}^u\) 和 \(\{(x_k, \boldsymbol{{w}}_k)\}_{k=1}^u\),其中 \(z_k = d_k + e_k a_k, \; \boldsymbol{{v}}_k = \boldsymbol{{s}}_k + e_k \boldsymbol{{h}}_k, \; x_k = f_k + e_k r_k, \; \boldsymbol{{w}}_k = \boldsymbol{{y}}_k + e_k \boldsymbol{{t}}_k\).

    5. \(V\) 检查 \(D_k + e_k A_k \stackrel{?}{=} \mathsf{Enc}_{\mathsf{pk}_{P}}(z_k, \boldsymbol{{v}}_k)\) 和 \(F_k + e_k C_k \stackrel{?}{=} z_k B_k + \mathsf{Enc}_{\mathsf{pk}_{V}}(x_k, \boldsymbol{{w}}_k)\). 此外,\(V\) 检查 \(| z_k | \leq 2^{3u - 1 + \log u} \tau, \; \| \boldsymbol{{v}}_k \|_\infty \leq 2^{3u - 1 + \log u} \rho, | x_k | \leq 2^{4u - 1 + \log u} \tau^2, \; \| \boldsymbol{{w}}_k \|_\infty \leq 2^{4u - 1 + \log u} \tau \rho\).

    6. 步骤2~5并行重复 \(u\) 次。

    SPDZ协议

    BDOZ协议中,参与方需要两两检验对方的秘密份额的MAC标签,因此存储量与参与方的数量成线性关系。SPDZ协议(读作``speedz'')由Damgård, Pastro, Smart, Zakarias提出~[DPSZ, 2012]

    ,协议通过更巧妙的设计,将认证秘密份额的存储量降低为常数级。

    直观思想

    对秘密份额认证并无必要。BDOZ协议通过对秘密份额进行认证来确保秘密值打开时的正确性。然而,我们实际上并不关心秘密份额是否正确,我们只需要打开的秘密值是正确的就可以了。基于这个观察,SPDZ协议直接对秘密值进行认证,它的消息认证码定义为 \(\mathsf{Mac}_\Delta(x) = \Delta \cdot x\),其中 \(x\) 是秘密值,\(\Delta\) 是(全局)MAC密钥。

    不过,这样的改变带来了一个“先有鸡还是先有蛋”的问题——参与方必须知道MAC密钥才能检验MAC标签,但是知道了MAC密钥就可以任意地伪造MAC标签。为了解决这个问题,MAC密钥 \(\Delta\) 是被秘密分享的,参与方在重建密钥 \(\Delta\) 之前必须先对秘密份额和MAC标签进行承诺(commit)。这样一来,基于承诺的绑定性,当敌手知道 \(\Delta\) 时已经无法修改秘密份额和MAC标签,也就无法伪造MAC标签了。

    也就是说,SPDZ协议中,秘密值 \(x\) 是被分享的,MAC密钥 \(\Delta\) 是被分享的,由于 \(\mathsf{Mac}_\Delta(x) = \Delta \cdot x\) 即 \(\Delta = \mathsf{Mac}_\Delta(x) / x\),为了使打开秘密值时不泄露 \(\Delta\)(计算乘法门时要进行秘密打开),MAC标签也需要是被分享的。我们用符号 \(\langle \cdot \rangle\) 来表示SPDZ认证秘密分享(注:本节中使用的符号含义与上一节不同,请读者避免混淆。),它的定义如下:

    直观思想 · 公式

    \[\langle x \rangle = ((x_1, \dots, x_n), (M(x)_1, \dots, M(x)_n))\]

    其中 \(x = x_1 + … + x_n\),\(M(x)_1, …, M(x)_n\) 是 \(\mathsf{Mac}_\Delta(x)\) 的加法秘密分享,即 \(M(x)_1 + … + M(x)_n = \mathsf{Mac}_\Delta(x) = \Delta \cdot x, \; \Delta = \Delta_1 + … + \Delta_n\),\(P_i\) 持有 \((x_i, M(x)_i)\) 和MAC密钥的份额 \(\Delta_i\).(注:在原始论文 [DPSZ, 2012]中,秘密分享的定义还包含了一个公开值 \(\delta\). 但这个值是不必要的,因此本教材的描述中将其删除了。)这样一来,参与方对一个秘密份额的存储量降为了常数级。

    对于认证秘密分享 \(\langle x \rangle = ((x_1, \dots, x_n), (M(x)_1, \dots, M(x)_n)), \langle x' \rangle = ((x'_1, \dots, x'_n), (M(x')_1, \dots, M(x')_n))\) 和常数 \(\alpha \in \mathbb{F}_p\),定义加法、常数乘法、常数加法运算如下:

    直观思想 · 公式

    \[\begin{aligned} \langle x \rangle + \langle x' \rangle & = ((x_1 + x'_1, \dots, x_n + x'_n), (M(x)_1 + M(x')_1, \dots, M(x)_n + M(x')_n)) \\ \alpha \langle x \rangle & = ((\alpha x_1, \dots, \alpha x_n), (\alpha \cdot M(x)_1, \dots, \alpha \cdot M(x)_n)) \\ \langle x \rangle + \alpha & = ((x_1 + \alpha, \dots, x_n), (M(x)_1 + \Delta_1 \alpha, \dots, M(x)_n + \Delta_n \alpha)) \end{aligned}\]

    直观思想 · 公式

    上述运算满足

    \[\begin{aligned} \langle x \rangle + \langle x' \rangle & = \langle x + x' \rangle \\ \alpha \langle x \rangle & = \langle \alpha x \rangle \\ \langle x \rangle + \alpha & = \langle x + \alpha \rangle \end{aligned}\]

    于是,我们可以对SPDZ认证秘密分享进行线性运算,并通过Beaver三元组技术计算乘法门。

    部分打开。回想一下,在使用Beaver三元组计算乘法门时,假设两根输入导线上的值是 \(x\) 和 \(y\),计算过程是这样的:

    • 取认证Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\),参与方本地计算 \(\langle x \rangle - \langle a \rangle = \langle x - a \rangle, \langle y \rangle - \langle b \rangle = \langle y - b \rangle\);

    • 向所有参与方打开 \(d = x - a, \; e = y - b\);

    • 参与方本地计算 \(d \langle b \rangle + e \langle a \rangle + \langle c \rangle + de = \langle xy \rangle\).

    注意到,计算过程中需要打开 \(d = x - a, \; e = y - b\). 对于SPDZ认证秘密分享,检验打开的秘密值需要重建MAC密钥 \(\Delta\),但是一旦MAC密钥被重建,之后敌手就可以任意伪造MAC标签了。也就是说,如果重建了MAC密钥 \(\Delta\),之后的乘法门计算和输出重建就无法保证正确性。

    为了解决这个问题,SPDZ协议对乘法门中需要打开的值做“部分打开”,即,只重建秘密值,不重建MAC标签和MAC密钥。在协议最后的输出阶段,对所有打开过的值进行检验(这意味着协议过程中,参与方不一定正在对正确的值进行计算)。具体方式如下:

    • 假设乘法门计算时需要打开 \(\langle d \rangle\),参与方执行“部分打开”:\(P_i\) 将 \(d_i\) 发送给 \(P_1\),\(P_1\) 计算 \(d = \sum_{i=1}^n d_i\) 并广播。

    • 输出阶段,假设 \(a_1, …, a_T\) 是所有被部分打开的值,其中 \(\langle a_j \rangle = ((a_{j, 1}, …, a_{j, n}), (M(a_j)_1, …, M(a_j)_n))\). 参与方取一个随机值 \(e\),对于 \(i = 1, …, T\) 设置 \(e_i = e^i\),并计算 \(a = \sum_{j=1}^T e_j a_j\).

    • \(P_i\) 计算 \(M_i = \sum_{j=1}^T e_j \cdot M(a_j)_i\) 并对这个值进行承诺。

    • 参与方打开全局MAC密钥 \(\Delta\).

    • \(P_i\) 打开承诺值 \(M_i\). 参与方检查 \(\Delta \cdot a \stackrel{?}{=} \sum_{i=1}^n M_i\). 若不满足,则终止协议。

    直观思想 · 公式

    MAC密钥的打开。上述过程需要(可验证地)打开MAC密钥 \(\Delta\). 也就是说,\(\Delta\) 的打开也需要让所有参与方验证正确性。因此,\(\Delta\) 不能采用符号 \(\langle \cdot \rangle\) 定义的方式进行秘密分享。我们定义符号 \([\![ \cdot ]\!]\) 如下:

    \[[\![ \Delta ]\!] = ((\Delta_1, \dots, \Delta_n), (\beta_i, M(\Delta)_1^i, \dots, M(\Delta)_n^i)_{i \in [n]})\]

    其中 \(\Delta = \Delta_1 + … + \Delta_n, \; M(\Delta)_i^1 + … + M(\Delta)_i^n = \beta_i \Delta\). 参与方 \(P_i\) 持有 \(\Delta_i, \beta_i, M(\Delta)_1^i, …, M(\Delta)_n^i\). 这里,\(M(\Delta)_i = M(\Delta)_i^1 + … + M(\Delta)_i^n = \mathsf{Mac}_{\beta_i}(\Delta) = \beta_i \Delta\) 是 \(\Delta\) 在 \(P_i\) 的私有MAC密钥 \(\beta_i\) 下的MAC标签。因此,\([\![ \Delta ]\!]\) 可以向任一参与方可验证地打开:如果要向 \(P_i\) 打开 \([\![ \Delta ]\!]\),每个参与方 \(P_j\) 发送 \(\Delta_j, M(\Delta)_i^j\) 给 \(P_i\),然后 \(P_i\) 计算 \(\Delta = \Delta_1 + … + \Delta_n\) 并检查 \(\sum_{j=1}^n M(\Delta)_i^j \stackrel{?}{=} \beta_i \Delta\)(如果要打开给所有人,那么对每个参与方执行该操作)。注意,对于 \(\langle \cdot \rangle\) 秘密分享,每个参与方的存储量是常数;对于 \([\![ \cdot ]\!]\) 秘密分享,每个参与方的存储量是线性的。

    输入分享。我们还需要解决输入分享的问题。假设 \(P_i\) 的输入为 \(x_i\),在BDOZ协议中,参与方取一个随机值的秘密分享 \([a]\) 并打开给 \(P_i\),然后 \(P_i\) 广播 \(\delta = x_i - a\),参与方计算 \([a] + \delta\). 基于符号 \(\langle \cdot \rangle\) 和 \([\![ \cdot ]\!]\) 的定义,我们可以采用类似的方法,通过一对秘密分享 \(\langle r \rangle, [\![ r ]\!]\) 来实现输入分享。方法如下:

    • 设 \(P_i\) 的输入为 \(x_i\). 取随机值的一对秘密分享 \(\langle r \rangle, [\![ r ]\!]\).

    • 将 \([\![ r ]\!]\) 打开给 \(P_i\).

    • \(P_i\) 广播 \(\delta = x_i - r\).

    • 参与方计算 \(\langle r \rangle + \delta = \langle x_i \rangle\).

    三元组正确性检验。最后,与「预处理阶段的实现」一节中类似,因为考虑的是恶意敌手,预处理阶段产生的Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\) 不一定满足 \(c = ab\). 我们需要消耗另一个Beaver三元组 \((\langle f \rangle, \langle g \rangle, \langle h \rangle)\) 以检验其正确性。协议如下:

    • 取两个Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\) 和 \((\langle f \rangle, \langle g \rangle, \langle h \rangle)\);

    • 参与方取随机值 \(t\);

    • 部分打开 \(t \cdot \langle a \rangle - \langle f \rangle\),记为 \(\rho\);部分打开 \(\langle b \rangle - \langle g \rangle\),记为 \(\sigma\);

    • 计算 \(t \cdot \langle c \rangle - \langle h \rangle - \sigma \cdot \langle f \rangle - \rho \cdot \langle g \rangle - \sigma \cdot \rho\),并将结果部分打开;

    • 如果结果不为0,丢弃 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\);否则,输出 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\).

    在协议的输出阶段,所有部分打开的值都需要检验正确性。

    小结。我们对上述思路作一个小结,给出SPDZ协议的非形式化描述。

    • 生成MAC密钥的认证秘密分享 \([\![ \Delta ]\!]\),足够的认证Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\),足够的随机值的秘密分享对 \(\langle r \rangle, [\![ r ]\!]\),以及两个随机值的认证秘密分享 \([\![ t ]\!], [\![ e ]\!]\).

    • 输入分享:设 \(P_i\) 的输入为 \(x_i\). 取随机值的秘密分享对 \(\langle r \rangle, [\![ r ]\!]\),将 \([\![ r ]\!]\) 打开给 \(P_i\). \(P_i\) 广播 \(\delta = x_i - r\). 参与方计算 \(\langle r \rangle + \delta = \langle x_i \rangle\).

    • 逐门计算:
      • 对于加法门、常数乘法门、常数加法门,分别计算

        \[\langle x \rangle + \langle y \rangle = \langle x + y \rangle, \; \alpha\langle x \rangle = \langle \alpha x \rangle, \; \langle x \rangle + \alpha = \langle x + \alpha \rangle\]
      • 对于输入为 \(\langle x \rangle, \langle y \rangle\) 的乘法门,执行如下操作

        1. 检验三元组正确性:

          • 取两个Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\) 和 \((\langle f \rangle, \langle g \rangle, \langle h \rangle)\);

          • 打开随机值 \([\![ t ]\!]\);

          • 部分打开 \(t \cdot \langle a \rangle - \langle f \rangle\),记为 \(\rho\);部分打开 \(\langle b \rangle - \langle g \rangle\),记为 \(\sigma\);

          • 计算 \(t \cdot \langle c \rangle - \langle h \rangle - \sigma \cdot \langle f \rangle - \rho \cdot \langle g \rangle - \sigma \cdot \rho\),并将结果部分打开;

          • 如果结果不为0,丢弃 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\);否则,将 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\) 用于乘法门计算。

  • 计算乘法门:

    • 使用上一步检验过的三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\),部分打开 \(\langle x \rangle - \langle a \rangle\),记为 \(d\),部分打开 \(\langle y \rangle - \langle b \rangle\),记为 \(\epsilon\);

    • 参与方本地计算 \(d \langle b \rangle + \epsilon \langle a \rangle + \langle c \rangle + d \epsilon = \langle xy \rangle\).

  • 输出阶段:设 \(P_i\) 的输出为 \(y_i\). 参与方持有 \(\langle y_1 \rangle, \dots, \langle y_n \rangle\),其中 \(\langle y_j \rangle = ((y_{j, 1}, \dots, y_{j, n}), (M(y_j)_1, \dots, M(y_j)_n))\). 参与方执行如下操作:

    • 假设 \(a_1, …, a_T\) 是所有被部分打开的值,其中 \(\langle a_j \rangle = ((a_{j, 1}, …, a_{j, n}), (M(a_j)_1, …, M(a_j)_n))\). 参与方打开随机值 \([\![ e ]\!]\),对于 \(i = 1, …, T\) 设置 \(e_i = e^i\),并计算 \(a = \sum_{j=1}^T e_j a_j\).

    • \(P_i\) 计算 \(M_i = \sum_{j=1}^T e_j \cdot M(a_j)_i\) 并对这个值进行承诺。对于 \(j = 1, …, n\),\(P_i\) 对 \(y_{j, i}\) 和 \(M(y_j)_i\) 进行承诺。

    • 打开全局MAC密钥 \([\![ \Delta ]\!]\).

    • \(P_i\) 打开承诺值 \(M_i\). 参与方检查 \(\Delta \cdot a \stackrel{?}{=} \sum_{i=1}^n M_i\). 若不满足,则终止协议。

    • 对于 \(j = 1, …, n\),\(P_i\) 向 \(P_j\) 打开承诺值 \(y_{j, i}\) 和 \(M(y_j)_i\). \(P_j\) 计算 \(y_j = \sum_{i=1}^n y_{j, i}\) 并检查 \(\sum_{i=1}^n M(y_j)_i \stackrel{?}{=} \Delta \cdot y_j\). 若检查通过,则 \(P_j\) 输出 \(y_j\).

    协议描述

    本节,我们将预处理阶段抽象为理想功能 \(\mathcal{F}_{\mathsf{prep}}\),将承诺方案抽象为理想功能 \(\mathcal{F}_{\mathsf{com}}\),然后在 \(\{ \mathcal{F}_{\mathsf{prep}}, \mathcal{F}_{\mathsf{com}} \}\)-混合模型下给出SPDZ协议的形式化描述。

    符号表示。对于消息 \(x \in \mathbb{F}_p\),密钥 \(\Delta \in \mathbb{F}_p\),消息验证码MAC的定义为 \(\mathsf{Mac}_\Delta(x) = \Delta \cdot x\).

    秘密分享 \(\langle \cdot \rangle\) 的定义如下:

    协议描述 · 公式

    \[\langle x \rangle = ((x_1, \dots, x_n), (M(x)_1, \dots, M(x)_n))\]

    其中 \(x = x_1 + … + x_n, \; M(x)_1 + … + M(x)_n = \mathsf{Mac}_\Delta(x) = \Delta \cdot x\),\(P_i\) 持有 \((x_i, M(x)_i)\) 和MAC密钥的份额 \(\Delta_i\),满足 \(\Delta = \Delta_1 + … + \Delta_n\).

    秘密分享 \(\langle \cdot \rangle\) 的部分打开、加法、常数乘法、常数加法运算的定义如图 9.13所示。

    {秘密分享 \(\langle \cdot \rangle\) 的运算

    部分打开:当需要将 \(\langle x \rangle\) 部分打开时,每个参与方 \(P_i\) 将 \(x_i\) 发送给 \(P_1\),\(P_1\) 计算 \(x = \sum_{i=1}^n x_i\) 并广播。

    \[\langle x \rangle + \langle x' \rangle = ((x_1 + x'_1, \dots, x_n + x'_n), (M(x)_1 + M(x')_1, \dots, M(x)_n + M(x')_n))\]
    \[\alpha \langle x \rangle = ((\alpha x_1, \dots, \alpha x_n), (\alpha \cdot M(x)_1, \dots, \alpha \cdot M(x)_n))\]
    \[\langle x \rangle + \alpha = ((x_1 + \alpha, \dots, x_n), (M(x)_1 + \Delta_1 \alpha, \dots, M(x)_n + \Delta_n \alpha))\]

    协议描述 · 公式

    秘密分享 \([\![ \cdot ]\!]\) 的定义如下:

    \[[\![ x ]\!] = ((x_1, \dots, x_n), (\beta_i, M(x)_1^i, \dots, M(x)_n^i)_{i \in [n]})\]

    其中 \(x = x_1 + … + x_n, \; M(x)_i^1 + … + M(x)_i^n = \mathsf{Mac}_{\beta_i}(x) = \beta_i x\). 参与方 \(P_i\) 持有 \(x_i, \beta_i, M(x)_1^i, …, M(x)_n^i\).

    秘密分享 \([\![ \cdot ]\!]\) 的打开操作的定义如图 9.14所示。

    {秘密分享 \([\![ \cdot ]\!]\) 的运算

    打开:当需要将 \([\![ x ]\!] = ((x_1, …, x_n), (\beta_i, M(x)_1^i, …, M(x)_n^i)_{i \in [n]})\) 打开给 \(P_i\) 时,每个参与方 \(P_j\) 发送 \(x_j, M(x)_i^j\) 给 \(P_i\),然后 \(P_i\) 计算 \(x = x_1 + … + x_n\) 并检查 \(\sum_{j=1}^n M(x)_i^j \stackrel{?}{=} \beta_i x\). 如果检查不通过,\(P_i\) 广播 \(\mathsf{fail}\). 当需要将 \([\![ x ]\!]\) 打开给所有人时,对每个参与方执行该操作。

    理想功能 \(\mathcal{F}_{\mathsf{prep}}\). 我们将预处理阶段抽象为理想功能 \(\mathcal{F}_{\mathsf{prep}}\),它接受3种命令:\(\operatorname{Init}\), \(\operatorname{Pairs}\), \(\operatorname{Triples}\),分别用于初始化、生成认证秘密分享对、生成认证Beaver三元组。需要注意的是,\(\mathcal{F}_{\mathsf{prep}}\) 允许被攻陷方选择自己的秘密份额和MAC密钥份额,并且允许敌手在认证秘密分享中加入偏移量 \(\delta\). 也就是说,敌手有能力让 \(\mathcal{F}_{\mathsf{prep}}\) 生成错误的认证秘密分享,但是错误的认证秘密分享在协议运行中通过验证的概率是可忽略的。因此,这等价于敌手使协议终止。

    \(\mathcal{F}_{\mathsf{prep}}\) 的定义如图 9.44所示。为了表示的方便,我们定义两个函数 \(\mathsf{Bracket}\) 和 \(\mathsf{Angle}\),分别用于生成 \([\![ \cdot ]\!]\) 秘密分享和 \(\langle \cdot \rangle\) 秘密分享。

    理想功能 \(\mathcal{F}_{\mathsf{com}}\). 我们给出承诺理想功能 \(\mathcal{F}_{\mathsf{com}}\) 的定义,如图 9.43所示。\(\mathcal{F}_{\mathsf{com}}\) 允许参与方对某个值承诺,然后打开给所有参与方,或打开给某个指定参与方。其中,\(\mathsf{cid}\) 表示commitment id,用于给承诺编号。为了描述的简洁性,在协议描述中,我们直接称“\(P_i\) 调用 \(\mathcal{F}_{\mathsf{com}}\) 对 \(x_i\) 进行承诺”、“\(P_i\) 调用 \(\mathcal{F}_{\mathsf{com}}\) (向 \(P_i\))打开 \(x_i\)”。 \(\mathcal{F}_{\mathsf{com}}\) 可以通过任何UC安全的承诺方案来实现 [Dam et al.; Lindell, 2011]。

    理想功能 \(\mathcal{F}_{\mathsf{com}}\)

    理想功能 \(\mathcal{F}_{\mathsf{com}}\) 与参与方 \(P_1, …, P_n\) 以及敌手 \(\mathcal{S}\) 交互。

    1. 当从参与方 \(P_i\) 收到 \((\mathsf{Commit}, \mathsf{sid}, \mathsf{cid}, P_i, x)\) 时,记录 \((\mathsf{cid}, P_i, x)\),并向敌手 \(\mathcal{S}\) 和所有参与方发送 \((\operatorname{Receipt}, \mathsf{sid}, \mathsf{cid}, P_i)\).

    2. 当从参与方 \(P_i\) 收到 \((\mathsf{Open}, \mathsf{sid}, \mathsf{cid}, P_i)\) 时,如果 \((\mathsf{cid}, P_i, x)\) 已经被记录,那么向敌手 \(\mathcal{S}\) 和所有参与方发送 \((\operatorname{Open}, \mathsf{sid}, \mathsf{cid}, P_i, x)\).

    3. 当从参与方 \(P_i\) 收到 \((\mathsf{Open}, \mathsf{sid}, \mathsf{cid}, P_i, P_j)\) 时,如果 \((\mathsf{cid}, P_i, x)\) 已经被记录,那么向 \(P_j\) 发送 \((\operatorname{Open}, \mathsf{sid}, \mathsf{cid}, P_i, P_j, x)\),向敌手 \(\mathcal{S}\) 发送 \((\operatorname{Open}, \mathsf{sid}, \mathsf{cid}, P_i, P_j)\).

    理想功能 \(\mathcal{F}_{\mathsf{com}}\)

    协议描述。下面,我们给出 \(\{ \mathcal{F}_{\mathsf{prep}}, \mathcal{F}_{\mathsf{com}} \}\)-混合模型下,SPDZ协议的形式化描述,如图 9.45所示。

    SPDZ预处理阶段理想功能 \(\mathcal{F}_{\mathsf{prep}}\)

    \(\small\)

    令 \(\mathsf{C}\) 为被攻陷方的集合。

    1. 令 \(\boldsymbol{{v}} = \sum_{i=1}^n \boldsymbol{{v}}_i\).

    2. 对于 \(i = 1, \dots, n\)

      1. 计算MAC标签 \(\boldsymbol{M}(\boldsymbol{{v}})_i = \beta_i \cdot \boldsymbol{{v}}\),设置 \(\boldsymbol{M}_{i} = \boldsymbol{M}(\boldsymbol{{v}})_i + \boldsymbol{\delta}_{i}\).

      2. 对于每个被攻陷方 \(P_j \in \mathsf{C}\),记录其发送的 \(\boldsymbol{M}_{i}^j\).

      3. 对于每个诚实方 \(P_j \notin \mathsf{C}\),均匀随机选择 \(\boldsymbol{M}_{i}^j\),满足 \(\sum_{i=1}^n \boldsymbol{M}_{i}^j = \boldsymbol{M}_{i}\).

    3. 向每个参与方 \(P_i\) 发送 \((\boldsymbol{{v}}_i, (\beta_i, \boldsymbol{M}_{1}^i, …, \boldsymbol{M}_{n}^i))\).

    1. 令 \(\boldsymbol{{v}} = \sum_{i=1}^n \boldsymbol{{v}}_i\).

    2. 计算MAC标签 \(\boldsymbol{M}(\boldsymbol{{v}}) = \Delta \cdot \boldsymbol{{v}}\),设置 \(\boldsymbol{M} = \boldsymbol{M}(\boldsymbol{{v}}) + \boldsymbol{\delta}\).

    3. 对于每个被攻陷方 \(P_i \in \mathsf{C}\),记录其发送的 \(\boldsymbol{M}_{i}\).

    4. 对于每个诚实方 \(P_i \notin \mathsf{C}\),均匀随机选择 \(\boldsymbol{M}_{i}\),满足 \(\sum_{i=1}^n \boldsymbol{M}_{i} = \boldsymbol{M}\).

    5. 向每个参与方 \(P_i\) 发送 \((\boldsymbol{{v}}_i, \boldsymbol{M}_{i})\).

    1. 执行期间,如果收到来自敌手 \(\mathcal{S}\) 的 \((\operatorname{Stop}, \mathsf{sid})\),那么终止并向所有参与方发送 \(\mathsf{fail}\).

    2. 对于每个被攻陷方 \(P_i \in \mathsf{C}\),记录其发送的 \(\Delta_i\) 和 \(\beta_i\).

    3. 对于每个诚实方 \(P_i \notin \mathsf{C}\),均匀随机选择 \(\Delta_i, \beta_i \leftarrow_{\$} \mathbb{F}_p\). 令 \(\Delta = \sum_{i=1}^n \Delta_i\).

    4. 记录敌手 \(\mathcal{S}\) 发送的 \(\boldsymbol{\delta}_{1}, …, \boldsymbol{\delta}_{n} \in (\mathbb{F}_p)^s\).

    5. 执行 \(\mathsf{Bracket}(\mathsf{Diag}_{s}(\Delta_1), …, \mathsf{Diag}_{s}(\Delta_n), \boldsymbol{\delta}_{1}, …, \boldsymbol{\delta}_{n}, \beta_1, …, \beta_n)\),其中 \(\mathsf{Diag}_{s}(x) = (x, x, …, x) \in (\mathbb{F}_p)^s\).

    1. 执行期间,如果收到来自敌手 \(\mathcal{S}\) 的 \((\operatorname{Stop}, \mathsf{sid})\),那么终止并向所有参与方发送 \(\mathsf{fail}\).

    2. 对于每个被攻陷方 \(P_i \in \mathsf{C}\),记录其发送的 \(\boldsymbol{{r}}_i\).

    3. 对于每个诚实方 \(P_i \notin \mathsf{C}\),均匀随机选择 \(\boldsymbol{{r}}_i\).

    4. 记录敌手 \(\mathcal{S}\) 发送的 \(\boldsymbol{\delta}, \boldsymbol{\delta}_{1}, …, \boldsymbol{\delta}_{n} \in (\mathbb{F}_p)^s\).

    5. 执行 \(\mathsf{Bracket}(\boldsymbol{{r}}_1, …, \boldsymbol{{r}}_n, \boldsymbol{\delta}_{1}, …, \boldsymbol{\delta}_{n}, \beta_1, …, \beta_n)\) 和 \(\mathsf{Angle}(\boldsymbol{{r}}_1, …, \boldsymbol{{r}}_n, \boldsymbol{\delta}, \Delta)\).

    1. 执行期间,如果收到来自敌手 \(\mathcal{S}\) 的 \((\operatorname{Stop}, \mathsf{sid})\),那么终止并向所有参与方发送 \(\mathsf{fail}\).

    2. 对于每个被攻陷方 \(P_i \in \mathsf{C}\),记录其发送的 \(\boldsymbol{{a}}_i, \boldsymbol{{b}}_i\).

    3. 对于每个诚实方 \(P_i \notin \mathsf{C}\),均匀随机选择 \(\boldsymbol{{a}}_i, \boldsymbol{{b}}_i\). 令 \(\boldsymbol{{a}} = \sum_{i=1}^n \boldsymbol{{a}}_i, \boldsymbol{{b}} = \sum_{i=1}^n \boldsymbol{{b}}_i\).

    4. 记录敌手 \(\mathcal{S}\) 发送的 \(\boldsymbol{\delta}_{a}, \boldsymbol{\delta}_{b}, \boldsymbol{\delta} \in (\mathbb{F}_p)^s\). 设置 \(\boldsymbol{{c}} = \boldsymbol{{a}} \cdot \boldsymbol{{b}} + \boldsymbol{\delta}\),其中 \(\boldsymbol{{a}} \cdot \boldsymbol{{b}}\) 表示逐项乘法。

    5. 对于每个被攻陷方 \(P_i \in \mathsf{C}\),记录其发送的 \(\boldsymbol{{c}}_i\).

    6. 对于每个诚实方 \(P_i \notin \mathsf{C}\),均匀随机选择 \(\boldsymbol{{c}}_i\),满足 \(\sum_{i=1}^n \boldsymbol{{c}}_i = \boldsymbol{{c}}\).

    7. 记录敌手 \(\mathcal{S}\) 发送的 \(\boldsymbol{\delta}_{c} \in (\mathbb{F}_p)^s\).

    8. 执行 \(\mathsf{Angle}(\boldsymbol{{a}}_1, …, \boldsymbol{{a}}_n, \boldsymbol{\delta}_{a}, \Delta), \mathsf{Angle}(\boldsymbol{{b}}_1, …, \boldsymbol{{b}}_n, \boldsymbol{\delta}_{b}, \Delta), \mathsf{Angle}(\boldsymbol{{c}}_1, …, \boldsymbol{{c}}_n, \boldsymbol{\delta}_{c}, \Delta)\).

    SPDZ预处理阶段理想功能 \(\mathcal{F}_{\mathsf{prep}}\)

    {\(\{ \mathcal{F}_{\mathsf{prep}}, \mathcal{F}_{\mathsf{com}} \}\)-混合模型下的SPDZ协议 \(\Pi_\mathsf{SPDZ}\)

    \(\small\)

    参与方 \(P_1, …, P_n\) 想要计算函数 \(f: \mathbb{F}^{M_\mathsf{in}^1} \times \cdots \times \mathbb{F}^{M_\mathsf{in}^n} \rightarrow \mathbb{F}^{M_\mathsf{out}^1} \times \cdots \times \mathbb{F}^{M_\mathsf{out}^n}\) 并已经将其转化成了包含加法门、常数乘法门、常数加法门、乘法门的算术电路。

    预处理阶段:

    参与方首先向 \(\mathcal{F}_{\mathsf{prep}}\) 发送 \((\operatorname{Init}, \mathsf{sid}, p, s)\). 然后,参与方向 \(\mathcal{F}_{\mathsf{prep}}\) 调用足够次数的 \((\operatorname{Pairs}, \mathsf{sid})\) 和 \((\operatorname{Triples}, \mathsf{sid})\),获得足够的认证Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\),足够的随机值的秘密分享对 \(\langle r \rangle, [\![ r ]\!]\),两个随机值的认证秘密分享 \([\![ t ]\!], [\![ e ]\!]\).

    在线阶段:

    • 输入分享:假设 \(P_i\) 的某个输入为 \(x_i\),取随机值的秘密分享对 \(\langle r \rangle, [\![ r ]\!]\),执行如下操作:
      1. 向 \(P_i\) 打开 \([\![ r ]\!]\);

      2. \(P_i\) 广播 \(\delta = x_i - r\);

      3. 参与方计算 \(\langle r \rangle + \delta = \langle x_i \rangle\).

      对于 \(P_i\) 的每一个输入,都执行上述操作。
    • 逐门计算:重复以下步骤,直到所有门都被计算。根据门的类型,执行以下操作之一:
      • 加法门。假设参与方持有 \(\langle x \rangle, \langle y \rangle\). 参与方计算 \(\langle x \rangle + \langle y \rangle = \langle x+ y \rangle\).

      • 常数乘法门。假设对应的常数为 \(\alpha\),参与方持有 \(\langle x \rangle\). 参与方计算 \(\alpha \langle x \rangle = \langle \alpha x \rangle\).

      • 常数加法门。假设对应的常数为 \(\alpha\),参与方持有 \(\langle x \rangle\). 参与方计算 \(\langle x \rangle + \alpha = \langle x + \alpha \rangle\).

      • 乘法门。假设参与方持有 \(\langle x \rangle, \langle y \rangle\),执行以下操作:

        1. 检验三元组正确性(这一步实际上可以在预处理阶段完成):

          • 取两个Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\) 和 \((\langle f \rangle, \langle g \rangle, \langle h \rangle)\);

          • 打开随机值 \([\![ t ]\!]\);

          • 部分打开 \(t \cdot \langle a \rangle - \langle f \rangle\),记为 \(\rho\);部分打开 \(\langle b \rangle - \langle g \rangle\),记为 \(\sigma\);

          • 计算 \(t \cdot \langle c \rangle - \langle h \rangle - \sigma \cdot \langle f \rangle - \rho \cdot \langle g \rangle - \sigma \cdot \rho\),并将结果部分打开;

          • 如果结果不为0,丢弃 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\);否则,将 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\) 用于乘法门计算。

        2. 计算乘法门:

          • 使用上一步检验过的三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\),部分打开 \(\langle x \rangle - \langle a \rangle\),记为 \(d\),部分打开 \(\langle y \rangle - \langle b \rangle\),记为 \(\epsilon\);

          • 参与方本地计算 \(d \langle b \rangle + \epsilon \langle a \rangle + \langle c \rangle + d \epsilon = \langle xy \rangle\).

    • 输出阶段: 设 \(P_i\) 的输出为 \(y_i\). 参与方持有 \(\langle y_1 \rangle, \dots, \langle y_n \rangle\),其中 \(\langle y_j \rangle = ((y_{j, 1}, \dots, y_{j, n}), (M(y_j)_1, \dots, M(y_j)_n)), \; j \in [n]\). (如果每个参与方有多个输出,将 \(\langle y_1 \rangle, \dots, \langle y_n \rangle\) 相应地改为 \((\langle y_1^1 \rangle, \dots, \langle y_1^{M_\mathsf{out}^1} \rangle), \dots, (\langle y_n^1 \rangle, \dots, \langle y_n^{M_\mathsf{out}^n} \rangle)\).)参与方执行如下操作:
      1. 假设 \(a_1, …, a_T\) 是所有被部分打开的值,其中 \(\langle a_j \rangle = ((a_{j, 1}, …, a_{j, n}), (M(a_j)_1, …, M(a_j)_n))\). 参与方打开随机值 \([\![ e ]\!]\),对于 \(i = 1, …, T\) 设置 \(e_i = e^i\),并计算 \(a = \sum_{j=1}^T e_j a_j\).

      2. \(P_i\) 计算 \(M_i = \sum_{j=1}^T e_j \cdot M(a_j)_i\) 并调用 \(\mathcal{F}_{\mathsf{com}}\) 对这个值进行承诺。对于 \(j = 1, …, n\),\(P_i\) 调用 \(\mathcal{F}_{\mathsf{com}}\) 对 \(y_{j, i}\) 和 \(M(y_j)_i\) 进行承诺。

      3. 打开全局MAC密钥 \([\![ \Delta ]\!]\).

      4. \(P_i\) 调用 \(\mathcal{F}_{\mathsf{com}}\) 打开承诺值 \(M_i\). 参与方检查 \(\Delta \cdot a \stackrel{?}{=} \sum_{i=1}^n M_i\). 若不满足,则终止协议。

      5. 对于 \(j = 1, …, n\),\(P_i\) 调用 \(\mathcal{F}_{\mathsf{com}}\) 向 \(P_j\) 打开承诺值 \(y_{j, i}\) 和 \(M(y_j)_i\). \(P_j\) 计算 \(y_j = \sum_{i=1}^n y_{j, i}\) 并检查 \(\sum_{i=1}^n M(y_j)_i \stackrel{?}{=} \Delta \cdot y_j\). 若检查通过,则 \(P_j\) 输出 \(y_j\).

    \(\caption\){\(\{ \mathcal{F}_{\mathsf{prep}}, \mathcal{F}_{\mathsf{com}} \}\)-混合模型下的SPDZ协议 \(\Pi_\mathsf{SPDZ}\)}

    安全性证明

    我们给出SPDZ协议的安全性证明。因为SPDZ协议也是基于Beaver三元组技术构造的,所以证明思路以及模拟器的构造与BDOZ协议中类似。

    定理

    假设被攻陷方数量不超过 \(n - 1\),图 9.45中的协议 \(\Pi_\mathsf{SPDZ}\) 在 \(\{ \mathcal{F}_{\mathsf{prep}}, \mathcal{F}_{\mathsf{com}} \}\)-混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{sfe}}\)(图 9.33)。

    安全性证明

    要证明该定理,我们需要构造模拟器 \(\mathcal{S}\),使得对所有环境 \(\mathcal{Z}\),都有

    \[\operatorname{exec}_{\Pi_\mathsf{SPDZ}, \mathcal{A}, \mathcal{Z}}^{\mathcal{F}_{\mathsf{prep}}, \mathcal{F}_{\mathsf{com}}} \approx \operatorname{exec}_{\mathcal{F}_{\mathsf{sfe}}, \mathcal{S}, \mathcal{Z}}\]

    其中 \(\mathcal{A}\) 是平凡敌手。

    模拟器 \(\mathcal{S}\). 模拟器 \(\mathcal{S}\) 在内部运行 \(\mathcal{A}\),转发 \(\mathcal{Z}\) 与 \(\mathcal{A}\) 之间的消息。此外,\(\mathcal{S}\) 需要模拟 \(\mathcal{F}_{\mathsf{prep}}\) 生成认证Beaver三元组和认证秘密分享对,以及模拟 \(\mathcal{F}_{\mathsf{com}}\). 令 \(\mathsf{C}\) 为被攻陷方的集合。\(\mathcal{S}\) 的工作方式如下。

    • 模拟 \(\mathcal{F}_{\mathsf{prep}}\):
      • 当 \(\mathcal{F}_{\mathsf{prep}}\) 收到来自被攻陷方 \(P_i\) 的 \((\operatorname{Init}, \mathsf{sid}, p, s)\) 时,\(\mathcal{S}\) 在理想世界代表 \(P_i\) 向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Init}, \mathsf{sid}, p)\).

      • \(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{prep}}\) 诚实地执行初始化,它记录每个被攻陷方发送的秘密份额和MAC密钥份额,并为每个诚实方随机选择秘密份额和MAC密钥份额。然后,\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{prep}}\) 遵循描述计算认证Beaver三元组和认证秘密分享对,并分发给参与方。

    • 模拟 \(\mathcal{F}_{\mathsf{com}}\):\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{com}}\) 记录和打开承诺值。

    • 输入阶段:
      • 对于诚实方 \(P_i \notin \mathsf{C}\),当从 \(\mathcal{F}_{\mathsf{sfe}}\) 收到 \((\operatorname{Input}, \mathsf{sid}, P_i)\) 时,\(\mathcal{S}\) 模拟 \(P_i\) 以 0 为输入遵循协议执行。如果将 \([\![ r ]\!]\) 打开给 \(P_i\) 时MAC验证不通过,\(\mathcal{S}\) 模拟 \(P_i\) 广播 \(\mathsf{fail}\),并在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\).

      • 对于被攻陷方 \(P_j \in \mathsf{C}\),\(\mathcal{S}\) 记录其广播的 \(\delta\). 由于 \(\mathcal{S}\) 模拟了 \(\mathcal{F}_{\mathsf{prep}}\),因此知道 \(r\) 的值。\(\mathcal{S}\) 提取 \(P_j\) 的输入 \(x_j = r + \delta\),并在理想世界代表 \(P_j\) 发送给 \(\mathcal{F}_{\mathsf{sfe}}\).

      • 如果任何参与方广播 \(\mathsf{fail}\)(打开 \([\![ r ]\!]\) 时验证不通过),\(\mathcal{S}\) 在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\).

    • 计算阶段:
      • 对于加法门、常数乘法门、常数加法门、乘法门,\(\mathcal{S}\) 模拟诚实方遵循协议计算。

    • 输出阶段:
      • 输出阶段的步骤1~3中,\(\mathcal{S}\) 模拟诚实方遵循协议运行,并模拟 \(\mathcal{F}_{\mathsf{com}}\) 诚实地记录承诺值。如果步骤4的验证不通过,\(\mathcal{S}\) 模拟诚实方终止协议,并在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\).

      • 如果步骤4的验证通过,执行如下操作:

        • 对于诚实方 \(P_i \notin \mathsf{C}\) 的输出,如果打开承诺值时验证不通过,\(\mathcal{S}\) 在理想世界阻止 \(P_i\) 获得输出。否则(MAC验证通过),\(\mathcal{S}\) 向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{OK}, \mathsf{sid}, P_i)\).

        • 对于被攻陷方 \(P_j \in \mathsf{C}\) 的输出,\(\mathcal{S}\) 首先在理想世界向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{OK}, \mathsf{sid}, P_j)\) 得到 \(P_j\) 的输出 \(y\). 然后,\(\mathcal{S}\) 需要模拟诚实方的份额使其与 \(y\) 相一致。\(\mathcal{S}\) 的方法是只修改一个诚实方的份额,保持其他诚实方的份额不变。记这个诚实方为 \(P_k\). 假设当诚实方使用0作为输入得到的输出为 \(y'\). \(\mathcal{S}\) 将 \(P_k\) 的秘密份额加上 \(y - y'\),将 \(P_k\) 的MAC标签份额加上 \(\Delta \cdot (y - y')\)(因为 \(\mathcal{S}\) 模拟了 \(\mathcal{F}_{\mathsf{prep}}\),所以知道 \(\Delta\) 的值),然后,\(\mathcal{S}\) 模拟 \(\mathcal{F}_{\mathsf{com}}\) 向 \(P_j\) 打开秘密份额和MAC标签份额,其中 \(P_k\) 的份额是被修改过的。

    1. 输入阶段,诚实方广播的都是均匀随机值;

    2. 计算乘法门进行部分打开时,诚实方发送的也是均匀随机的秘密份额;

    3. 在输出阶段的步骤4,参与方打开的 \(M_i\) 是MAC标签份额的线性组合,其中敌手可能对MAC标签加入了偏移量 \(\delta\),因为这些MAC标签份额是随机的,所以在真实世界和理想世界 \(M_i\) 有相同的分布;

    4. 最后,如果真实世界中的验证不通过,协议终止,那么模拟的运行中验证也不通过,\(\mathcal{S}\) 会向 \(\mathcal{F}_{\mathsf{sfe}}\) 发送 \((\operatorname{Abort}, \mathsf{sid})\) 使参与方如真实世界那样不获得输出。

    如果协议进行到了输出阶段的步骤5,参与方会获得输出,并接收到来自其他参与方的秘密份额、MAC标签份额。如果真实世界和理想世界的输出是相同的,那么被攻陷方收到的秘密份额、MAC标签份额在真实世界和理想世界中具有相同的分布。因此,我们只需要证明:真实世界中协议运行完成,但输出值与理想世界不同的概率是可忽略的。

    显然,理想世界中的输出值一定是正确的。在真实世界中产生错误的输出只可能因为:(1) Beaver三元组是错误的;(2) 被攻陷方发送了错误的秘密份额。下面论证当这两种情况发生时,通过验证的概率是可忽略的。对于第一种情况,协议在计算乘法门时对Beaver三元组进行了检验,检验条件等价于 \(t (c - ab) = h - fg\). 如果 \(c \neq ab\),只有当 \(t = (h - fg) / (c - ab)\) 时该式成立,而 \(t\) 是随机的,因此等式满足的概率为 \(1 / p\). 对于第二种情况,首先考虑 \([\![ \cdot ]\!]\) 秘密分享,敌手对 \(P_i\) 作弊成功等价于猜到MAC密钥 \(\beta_i\),而 \(\beta_i\) 是均匀随机选择的,敌手猜对的概率为 \(1 / p\). 其次,考虑 \(\langle \cdot \rangle\) 秘密分享,将其抽象为如下的安全性游戏:

    1. Challenger生成密钥 \(\Delta\) 并计算 \(M_i = \Delta \cdot m_i, \; i = 1, …, T\). 将消息 \(m_1, …, m_T\) 发送给敌手。

    2. 敌手发送给Challenger消息 \(m'_1, …, m'_T\).

    3. Challenger生成随机值 \(e_1, …, e_T \leftarrow_{\$} \mathbb{F}_p\) 并发送给敌手。

    4. 敌手发送给Challenger偏移量 \(\delta\).

    5. 令 \(m = \sum_{i=1}^T e_i m'_i, M = \sum_{i=1}^T e_i M_i\). Challenger检查 \(\Delta \cdot m \stackrel{?}{=} M + \delta\).

    如果存在 \(i\) 满足 \(m'_i \neq m_i\) 且最终验证通过,那么敌手获胜。

    该游戏模拟了 \(\langle \cdot \rangle\) 秘密分享的验证:步骤2体现了被攻陷方可以发送错误的份额来改变打开的秘密值;步骤4体现了敌手有能力使 \(\mathcal{F}_{\mathsf{prep}}\) 生成的秘密分享中有偏移量 \(\delta\);注意,在这个游戏的步骤3中,\(e_i\) 都是随机选择的,而协议中 \(e_i = e^i\),其中 \(e\) 是随机选择的。我们先考虑 \(e_i\) 都随机时敌手的获胜概率,然后讨论 \(e_i = e^i\) 的情况。

    我们来计算敌手获胜的概率。最终验证通过意味着 \(\Delta \cdot \sum_{i=1}^T e_i (m'_i - m_i) = \delta\). 我们首先考虑 \(\sum_{i=1}^T e_i (m'_i - m_i) \neq 0\) 的情况,此时 \(\Delta = \delta / \sum_{i=1}^T e_i (m'_i - m_i)\). 该式成立等价于敌手猜对 \(\Delta\),而 \(\Delta\) 是均匀随机的,敌手猜对的概率为 \(1 / p\). 接着,我们证明 \(\sum_{i=1}^T e_i (m'_i - m_i) = 0\) 发生的概率也是可忽略的。因为敌手在选择 \(m'_i\) 的时候不知道 \(e_i\),而 \(e_i\) 都是均匀随机选择的,因此该式等于0的概率为 \(1 / p\). 综上,敌手获胜的概率不超过 \(2 / p\).

    在实际协议中,\(e_i = e^i\),其中 \(e\) 是随机选择的。我们要证明 \(\sum_{i=1}^T e_i (m'_i - m_i) = 0\) 发生的概率仍然是很小的。定义 \(\mu_i = m'_i - m_i, \boldsymbol{\mu} = (\mu_1, …, \mu_T), \boldsymbol{e} = (e, e^2, …, e^T), f_\mu(e) = \boldsymbol{e} \cdot \boldsymbol{\mu} = \sum_{i=1}^T e^i \mu_i\). 这里 \(f_\mu(e)\) 是 \(T\) 次多项式,最多有 \(T\) 个根,因为 \(e\) 是均匀随机的,故 \(f_\mu(e) = 0\) 的概率不超过 \(T / p\). 也就是说,在协议中,敌手将 \(\langle \cdot \rangle\) 秘密分享打开为错误的值且通过验证的概率不超过 \(T / p\),其中 \(T\) 是打开的 \(\langle \cdot \rangle\) 秘密分享的数量。

    证毕。

    预处理阶段的实现

    (注:此部分授课老师/读者可以选择性地教学/阅读。)

    本节将实现预处理阶段理想功能 \(\mathcal{F}_{\mathsf{prep}}\). 我们介绍SPDZ原文 [DPSZ, 2012]所提出的基于有限同态加密(somewhat homomorphic encryption)的方案。有限同态加密既满足加法同态也满足乘法同态,但是计算的次数是有限的,也就是要求计算的电路不能太大。因此它比较适合用于在预处理阶段计算大量的认证Beaver三元组。

    有限同态加密定义。首先,定义密文空间 \(M = (\mathbb{F}_p)^s\). 我们用 \(+\) 和 \(\cdot\) 表示 \(M\) 中元素的逐项加法和逐项乘法。假设存在单射的编码函数 \(\mathsf{encode}\) 将 \((\mathbb{F}_p)^s\) 映射到环 \(R = \mathbb{Z}^N\),其中 \(N\) 是一个整数;假设存在解码函数 \(\mathsf{decode}\) 以 \(\mathbb{Z}^N\) 上的元素为输入,输出 \((\mathbb{F}_p)^s\) 上的元素。并且,对于所有 \(\boldsymbol{{m}} \in M\) 满足 \(\mathsf{decode}(\mathsf{encode}(\boldsymbol{{m}})) = \boldsymbol{{m}}\). 此外,解密操作与域的参数是兼容的,即,对于所有 \(\boldsymbol{{x}} \in \mathbb{Z}^N\) 有 \(\mathsf{decode}(\boldsymbol{{x}}) = \mathsf{decode}(\boldsymbol{{x}} \; (\bmod \; p))\). 最后,编码算法生成的向量是“短的”,即,对于所有 \(\boldsymbol{{m}} \in (\mathbb{F}_p)^s\) 有 \(\| \mathsf{encode}(\boldsymbol{{m}}) \|_\infty \leq \tau\),其中 \(\tau = p / 2\).

    预处理阶段的实现 · 公式

    环 \(R\) 上的两个操作记为 \(+\) 和 \(\cdot\). 我们假设 \(R\) 上的加法操作是逐元素的加法,而对乘法操作没有假设。我们要求如下性质成立:对于所有元素 \(\boldsymbol{{m}}_1, \boldsymbol{{m}}_2 \in M\),满足

    \[\begin{aligned} \mathsf{decode}(\mathsf{encode}(\boldsymbol{{m}}_1) + \mathsf{encode}(\boldsymbol{{m}}_2)) & = \boldsymbol{{m}}_1 + \boldsymbol{{m}}_2 \\ \mathsf{decode}(\mathsf{encode}(\boldsymbol{{m}}_1) \cdot \mathsf{encode}(\boldsymbol{{m}}_2)) & = \boldsymbol{{m}}_1 \cdot \boldsymbol{{m}}_2 \end{aligned}\]

    接下来的介绍中,当我们讨论明文空间 \(M\) 时,我们默认它隐含地带有某个整数 \(N\) 所对应的编码函数 \(\mathsf{encode}\) 和解码函数 \(\mathsf{decode}\). 对于 \(x \in \mathbb{F}_p\),定义 \(\mathsf{Diag}_{s}(x) = (x, x, …, x) \in (\mathbb{F}_p)^s\).

    有限同态加密方案以 \(\kappa\) 为安全参数,包含5个算法 \((\mathsf{ParamGen}, \mathsf{KeyGen}, \mathsf{KeyGen}^*, \mathsf{Enc}, \mathsf{Dec})\).

    \(\mathsf{ParamGen}(1^\kappa, M)\): 这是参数生成算法,它输出整数 \(N\),函数 \(\mathsf{encode}\) 和 \(\mathsf{decode}\) 的定义,以及随机化算法 \(D_\rho^d\) 的描述,其中 \(D_\rho^d\) 的输出是 \(\mathbb{Z}^d\) 中的向量。我们假设 \(D_\rho^d\) 输出的 \(\boldsymbol{{r}}\) 以压倒性的概率满足 \(\| \boldsymbol{{r}} \|_\infty \leq \rho\). \(D_\rho^d\) 给加密算法提供所需的随机数。算法 \(\mathsf{ParamGen}\) 还输出一个加法阿贝尔群 \(\mathbb{G}\)。群 \(\mathbb{G}\) 同时拥有一个乘法运算(不一定封闭),该运算是交换的,并且对 \(\mathbb{G}\) 上的加法满足分配律。假设密文位于群 \(\mathbb{G}\) 中。我们用符号 \(\boxplus\) 和 \(\boxtimes\) 来表示 \(\mathbb{G}\) 上的加法和乘法运算,并将这些运算自然地扩展到 \(\mathbb{G}\) 中元素构成的向量和矩阵上。最后,\(\mathsf{ParamGen}\) 输出一个允许的算术电路集合 \(C\),这些电路定义了能够在密文上计算的函数集合。我们假设所有其他算法都隐含地把 \(\mathsf{ParamGen}\) 的输出 \(P = (1^\kappa, N, \mathsf{encode}, \mathsf{decode}, D_\rho^d, \mathbb{G}, C)\) 作为输入。

    \(\mathsf{KeyGen}()\): 该算法生成公钥 \(\mathsf{pk}\) 和私钥 \(\mathsf{sk}\).

    \(\mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{x}}, \boldsymbol{{r}})\): 这是一个确定性算法,输入是 \(\boldsymbol{{x}} \in \mathbb{Z}^N, \boldsymbol{{r}} \in \mathbb{Z}^d\),输出是密文 \(c \in \mathbb{G}\). 这里的 \(\boldsymbol{{x}}\) 是 \(\mathsf{encode}\) 的输出,\(\boldsymbol{{r}}\) 是 \(D_\rho^d\) 的输出。因此对于 \(\boldsymbol{{m}} \in M\),我们可以用 \(\mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{m}})\) 表示对其加密。当随机数不重要时,我们简写为 \(\mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{x}})\). 为了使后续的零知识证明能够成立,我们要求对 \(V\) 个“干净”的密文(即 \(V\) 的值“较小”)进行相加时,所得密文等于将明文相加后再进行加密的结果,即

    预处理阶段的实现 · 公式

    \[\mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{x}}_1 + \dots + \boldsymbol{{x}}_V, \boldsymbol{{r}}_1 + \dots + \boldsymbol{{r}}_n) = \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{x}}_1, \boldsymbol{{r}}_1) \boxplus \dots \boxplus \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{x}}_V, \boldsymbol{{r}}_V)\]

    \(\mathsf{Dec}_{\mathsf{sk}}(c)\): 解密算法以私钥 \(\mathsf{sk}\) 和密文 \(c\) 为输入,输出 \(\boldsymbol{{m}} \in M\) 或符号 \(\bot\).

    我们现在可以定义上述加密方案所需满足的各种性质。在此之前,先引入一些符号:对于某个函数 \(f \in C\),用 \(n(f)\) 表示函数 \(f\) 的变量个数,并用 \(\hat{f}\) 表示 \(f\) 在群 \(\mathbb{G}\) 上对应的函数。具体地说,给定 \(f\),我们将其表达式中的加法 \(+\) 替换为群 \(\mathbb{G}\) 上的加法运算 \(\boxplus\),乘法 \(\cdot\) 替换为群 \(\mathbb{G}\) 上的乘法运算 \(\boxtimes\),常数 \(c\) 替换为 \(\mathsf{Enc}_{\mathsf{pk}}(\mathsf{encode}(c), \boldsymbol{0})\) 得到 \(\hat{f}\). 此外,给定 \(n(f)\) 个向量 \(\boldsymbol{{x}}_1, …, \boldsymbol{{x}}_{n(f)}\)​,我们以自然的方式定义 \(f(\boldsymbol{{x}}_1, …, \boldsymbol{{x}}_{n(f)})\),指的是在每个索引上计算函数 \(f\).

    预处理阶段的实现 · 公式

    正确性:直观地说,正确性意味着:如果我们对一个函数 \(f \in C\) 的结果进行解密,该函数是作用在 \(n(f)\) 个加密向量上的,那么解密结果应当与该函数直接作用在 \(n(f)\) 个明文向量上的结果相一致。然而,为了在协议中使用该方案,我们需要放宽这一要求:即使我们所使用的密文并非由常规的加密算法生成,只要它们包含的编码和随机数不过大,并且这些编码可以被解码为合法的值,那么解密结果也是正确的。形式化地,如果一个有限同态加密方案满足以下条件

    \[\begin{aligned} \Pr [ & P \leftarrow \mathsf{ParamGen}(1^\kappa, M), (\mathsf{pk}, \mathsf{sk}) \leftarrow \mathsf{KeyGen}(), \text{ for any } f \in C, \\ & \text{any } \boldsymbol{{x}}_i, \boldsymbol{{r}}_i, \text{ with } \| \boldsymbol{{x}}_i \|_\infty \leq B_{plain}, \| \boldsymbol{{r}}_i \|_\infty \leq B_{rand}, \mathsf{decode}(\boldsymbol{{x}}_i) \in (\mathbb{F}_p)^s, \\ & i = 1, \dots, n(f), \text{ and } c_i \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{x}}_i, \boldsymbol{{r}}_i), c \leftarrow \hat{f}(c_1, \dots, c_{n(f)}): \\ & \mathsf{Dec}_{\mathsf{sk}}(c) \neq f(\mathsf{decode}(\boldsymbol{{x}}_1), \dots, \mathsf{decode}(\boldsymbol{{x}}_{n(f)})) ] < \mathsf{negl}(\kappa) \end{aligned}\]

    那么,我们称它满足 \((B_{plain}, B_{rand}, C)\)-正确性。

    如果一个密文可以在上述实验中作为密文 \(c\) 得到,那么我们称它是 \((B_{plain}, B_{rand}, C)\)-可容许的(admissible)。也就是说,该密文是通过将函数 \(f \in C\) 应用于(合法的)受 \(B_{plain}\) 限制的编码和 \(B_{rand}\)​ 限制的随机数生成的密文而得到的。

    \(\mathsf{KeyGen}^*()\): 这是一个随机算法,输出一个无意义的公钥 \(\widetilde{\mathsf{pk}}\),满足对于任意消息 \(\boldsymbol{{x}}\),\(\mathsf{Enc}_{\widetilde{\mathsf{pk}}​}(\boldsymbol{{x}})\) 与 \(\mathsf{Enc}_{\widetilde{\mathsf{pk}}​}(\boldsymbol{0})\) 是统计上不可区分的。此外,令 \((\mathsf{pk}, \mathsf{sk}) \leftarrow \mathsf{KeyGen}(), \widetilde{\mathsf{pk}} \leftarrow \mathsf{KeyGen}^*()\),那么 \(\mathsf{pk}\) 与 \(\widetilde{\mathsf{pk}}\) 在计算上也是不可区分的。此性质暗含了该加密方案是 IND-CPA 安全的。

    分布式解密:我们希望参与方能够实现分布式解密。对此,我们假设系统已经设置好了一个公钥,并且对应的私钥在参与方之间秘密分享(这是系统的初始设置(setup assumption)),使参与方可以共同对密文进行解密。我们假设参与方始终只对 \((B_{plain}, B_{rand}, C)\)-可容许的密文进行解密,这一约束由我们的协议所保证。

    具体而言,我们假设存在理想功能 \(\mathcal{F}_{\mathsf{KeyGen}}\)​,如图 9.46所示。它的基本功能是生成一个密钥对,并让私钥在参与方之间秘密分享。这个秘密分享方案可以认为是加密系统的一个参数。

    此外,我们还希望我们的加密系统能够实现理想功能 \(\mathcal{F}_{\mathsf{KeyGenDec}}\),如图 9.47所示​。通过调用该理想功能,参与方可以共同解密 \((B_{plain}, B_{rand}, C)\)-可容许的密文,但只在被动攻击下安全。也就是说:敌手能够获得正确的解密结果,并且有能力决定诚实方最终得到的结果是什么。

    理想功能 \(\mathcal{F}_{\mathsf{KeyGen}}\)

    1. 当从所有参与方收到 \((\operatorname{Start}, \mathsf{sid})\) 时,运行 \(P \leftarrow \mathsf{ParamGen}(1^\kappa, M)\),然后使用生成的参数运行 \((\mathsf{pk}, \mathsf{sk}) \leftarrow \mathsf{KeyGen}()\). 向敌手 \(\mathcal{S}\) 发送 \(\mathsf{pk}\).

    2. 假设已经给定一个秘密分享方案可以用于对 \(\mathsf{sk}\) 秘密分享。\(\mathcal{F}_{\mathsf{KeyGen}}\) 记录每个被攻陷方 \(P_j\) 发送的秘密份额 \(s_j\).

    3. \(\mathcal{F}_{\mathsf{KeyGen}}\) 构造与被攻陷方的份额相一致的 \(\mathsf{sk}\) 秘密份额集 \((s_1, …, s_n)\). 向所有参与方发送 \(\mathsf{pk}\),向每个诚实方 \(P_i\) 发送 \(s_i\).

    理想功能 \(\mathcal{F}_{\mathsf{KeyGen}}\)

    理想功能 \(\mathcal{F}_{\mathsf{KeyGenDec}}\)

    1. 当从所有参与方收到 \((\operatorname{Start}, \mathsf{sid})\) 时,运行 \(P \leftarrow \mathsf{ParamGen}(1^\kappa, M)\),然后使用生成的参数运行 \((\mathsf{pk}, \mathsf{sk}) \leftarrow \mathsf{KeyGen}()\). 向敌手 \(\mathcal{S}\) 发送 \(\mathsf{pk}\).

    2. 此后,当从所有参与方收到 \((\operatorname{Dec}, \mathsf{sid}, c)\) 时,如果 \(c\) 是 \((B_{plain}, B_{rand}, C)\)-可容许的密文,计算 \(m \leftarrow \mathsf{Dec}_{\mathsf{sk}}(c)\),并发送 \((c, m)\) 给敌手 \(\mathcal{S}\). 当从敌手 \(\mathcal{S}\) 收到 \(m'\) 时,向所有参与方发送 \((\operatorname{Result}, \mathsf{sid}, m')\). 这里的 \(m\) 和 \(m'\) 可能是符号 \(\bot\) 表示解密失败。

    3. 当从所有参与方收到 \((\operatorname{Dec}, \mathsf{sid}, P_j, c)\) 时(表示解密给 \(P_j\),其中 \(c\) 是 \((B_{plain}, B_{rand}, C)\)-可容许的密文),如果 \(P_j\) 是被攻陷的,计算 \(m \leftarrow \mathsf{Dec}_{\mathsf{sk}}(c)\),并发送 \((c, m)\) 给敌手 \(\mathcal{S}\);如果 \(P_j\) 是诚实的,向敌手 \(\mathcal{S}\) 发送 \(c\) 并等待敌手发回 \(\delta\),然后,如果 \(\delta \notin M\),向 \(P_j\) 发送 \((\operatorname{Result}, \mathsf{sid}, \bot)\),如果 \(\delta \in M\),向 \(P_j\) 发送 \((\operatorname{Result}, \mathsf{sid}, \mathsf{Dec}_{\mathsf{sk}}(c) + \delta)\).

    理想功能 \(\mathcal{F}_{\mathsf{KeyGenDec}}\)

    现在,我们终于可以给出底层加密系统性质的定义。这是要在协议中使用该加密系统,必须满足的基本性质。这里我们引入信息论安全参数 \(u\),用于控制零知识证明协议中出现的误差。

    定义

    (可容许加密系统)令 \(C\) 包含形式为 \((x_1 + \dots + x_n) \cdot (y_1 + \dots + y_n) + z_1 + \dots + z_n\) 或形式更简单的公式,“更简单的”指包含更少的加法、可能不包含乘法。如果一个加密系统由算法 \((\mathsf{ParamGen}, \mathsf{KeyGen}, \mathsf{KeyGen}^*, \mathsf{Enc}, \mathsf{Dec})\) 构成,满足上述定义的性质,满足 \((B_{plain}, B_{rand}, C)\)-正确性,其中

    \[B_{plain} = N \cdot \tau \cdot u^2 \cdot 2^{(1/2 + \nu) u}, \; B_{rand} = d \cdot \rho \cdot u^2 \cdot 2^{(1/2 + \nu) u}\]

    其中 \(\nu > 0\) 为任意常数。此外,存在满足 \(\mathcal{F}_{\mathsf{KeyGen}}\) 要求的秘密分享方案,存在协议 \(\Pi_\mathsf{KeyGenDec}\) 在 \(\mathcal{F}_{\mathsf{KeyGen}}\)-混合模型下UC-安全实现 \(\mathcal{F}_{\mathsf{KeyGenDec}}\). 那么,我们称该加密系统是可容许的(admmisible)。

    集合 \(C\) 是协议所需的所有对密文的计算操作。我们始终假定 \(B_{plain}\)​ 和 \(B_{rand}\)​ 以上述形式基于参数 \(\tau, \rho, u\) 所定义。这是因为我们能够通过零知识证明协议强制被攻陷方遵守这些约束。

    在实际使用中,BGV [Bra et al., 2012]是一个著名的有限同态加密/全同态加密方案。

    零知识证明。预处理阶段协议需要用到一个关于明文知识的零知识证明(zero-knowledge Proof of Plaintext Knowledge),它的陈述是公钥 \(\mathsf{pk}\) 和 \(u\) 个密文,证明者证明自己知道密文中的明文和随机数,且它们满足 \(B_{plain}, B_{rand}\) 的界限约束。形式化地说,它证明的关系为:

    预处理阶段的实现 · 公式

    \[\begin{aligned} \mathcal{R}_{\mathsf{PoPK}} = \{ (x, w) \; | \; & x = (\mathsf{pk}, \boldsymbol{{c}}), w = ((\boldsymbol{{x}}_1, \boldsymbol{{r}}_1), \dots, (\boldsymbol{{x}}_u, \boldsymbol{{r}}_u)): \\ & \boldsymbol{{c}} = (c_1, \dots, c_u), c_i \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{x}}_i, \boldsymbol{{r}}_i), \\ & \| \boldsymbol{{x}}_i \|_\infty \leq B_{plain}, \mathsf{decode}(\boldsymbol{{x}}_i) \in (\mathbb{F}_p)^s, \| \boldsymbol{{r}}_i \|_\infty \leq B_{rand} \} \end{aligned}\]

    零知识证明协议 \(\Pi_\mathsf{PoPK}\) 如图 9.48所示。

    {零知识证明协议 \(\Pi_\mathsf{PoPK}\)

    • 定义 \(V = 2u - 1\). 对于 \(i = 1, …, V\),证明者设置 \(\boldsymbol{{y}}_i \leftarrow \mathbb{Z}^N, \boldsymbol{{s}}_i \leftarrow \mathbb{Z}^d\),满足 \(\| \boldsymbol{{y}}_i \|_\infty \leq N \cdot \tau \cdot u^2 \cdot 2^{\nu u - 1}, \| \boldsymbol{{s}}_i \|_\infty \leq d \cdot \rho \cdot u^2 \cdot 2^{\nu u - 1}\). 对于 \(\boldsymbol{{y}}_i\),通过如下方式实现:选择随机消息 \(\boldsymbol{{m}}_i \leftarrow_{\$} (\mathbb{F}_p)^s\),设置 \(\boldsymbol{{y}}_i = \mathsf{encode}(\boldsymbol{{m}}_i) + \boldsymbol{{u}}_i\),其中 \(\boldsymbol{{u}}_i\) 的每个位置都是 \(p\) 的倍数,在 \(\| \boldsymbol{{y}}_i \|_\infty \leq N \cdot \tau \cdot u^2 \cdot 2^{\nu u - 1}\) 的条件下均匀随机选择。如果 \(\mathsf{diag}\) 被设置为true,那么选择 \(\boldsymbol{{m}}_i\) 时每个位置都相同。

    • 对于 \(i = 1, …, V\),证明者计算 \(a_i \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{y}}_i, \boldsymbol{{s}}_i)\),然后定义 \(\boldsymbol{{S}} \in \mathbb{Z}^{V \times d}\) 是第 \(i\) 行为 \(\boldsymbol{{s}}_i\) 的矩阵,并设置 \(\boldsymbol{{y}} = (\boldsymbol{{y}}_1, …, \boldsymbol{{y}}_V), \boldsymbol{{a}} = (a_1, …, a_V)\).

    • 证明者向验证者发送 \(\boldsymbol{{a}}\).

    • 验证者选择 \(\boldsymbol{{e}} \leftarrow_{\$} \{0, 1\}^u\) 并发送给证明者。

    • 证明者设置 \(\boldsymbol{{z}} = (\boldsymbol{{z}}_1, …, \boldsymbol{{z}}_V)\),其中 \(\boldsymbol{{z}}^\mathrm{T} = \boldsymbol{{y}}^\mathrm{T} + \boldsymbol{{M}}_{\boldsymbol{{e}}} \cdot \boldsymbol{{x}}^\mathrm{T}, \boldsymbol{{x}} = (\boldsymbol{{x}}_1, …, \boldsymbol{{x}}_u)\). 设置 \(\boldsymbol{{T}} = \boldsymbol{{S}} + \boldsymbol{{M}}_{\boldsymbol{{e}}} \cdot \boldsymbol{{R}}\). 这里的矩阵 \(\boldsymbol{{R}}\) 的第 \(i\) 行是 \(\boldsymbol{{r}}_i\);矩阵 \(\boldsymbol{{M}}_{\boldsymbol{{e}}}\) 是一个 \(V \times u\) 的矩阵,对于 \(1 \leq i - k + 1 \leq u\),它的第 \((i, k)\) 个位置是 \(\boldsymbol{{e}}_{i-k+1}\),其他位置为0. 证明者向验证者发送 \((\boldsymbol{{z}}, \boldsymbol{{T}})\).

    • 对于 \(i = 1, …, V\),验证者计算 \(d_i \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{z}}_i, \boldsymbol{{t}}_i)\),其中 \(\boldsymbol{{t}}_i\) 是矩阵 \(\boldsymbol{{T}}\) 的第 \(i\) 行。设置 \(\boldsymbol{{d}} = (d_1, …, d_V)\).

    • 验证者检查 \(\mathsf{decode}(\boldsymbol{{z}}_i) \in (\mathbb{F}_p)^s\) 以及以下3个条件,如果不成立则拒绝:

      \[\boldsymbol{{d}}^\mathrm{T} = \boldsymbol{{a}}^\mathrm{T} \boxplus (\boldsymbol{{M}}_{\boldsymbol{{e}}} \boxtimes \boldsymbol{{c}}^\mathrm{T}), \; \| \boldsymbol{{z}}_i \|_\infty \leq N \cdot \tau \cdot u^2 \cdot 2^{\nu u - 1}, \; \| \boldsymbol{{t}}_i \|_\infty \leq d \cdot \rho \cdot u^2 \cdot 2^{\nu u - 1}\]
    • 如果 \(\mathsf{diag}\) 被设置为true,额外检查 \(\mathsf{decode}(\boldsymbol{{z}}_i)\) 每个位置都相同,如果不成立则拒绝。

    直观思想。因为有限同态加密既满足加法同态也满足乘法同态,是一个非常强大的密码学原语,因此基于它实现预处理阶段并不困难。简单来说,当生成认证Beaver三元组 \((\langle a \rangle, \langle b \rangle, \langle c \rangle)\) 时,参与方 \(P_i\) 首先在本地随机生成 \(a\) 和 \(b\) 的秘密份额 \(a_i\) 和 \(b_i\),然后所有参与方公布 \(\mathsf{Enc}_{\mathsf{pk}}(a_1), …, \mathsf{Enc}_{\mathsf{pk}}(a_n), \mathsf{Enc}_{\mathsf{pk}}(b_1), …, \mathsf{Enc}_{\mathsf{pk}}(b_n)\),并通过零知识证明 \(\Pi_\mathsf{PoPK}\) 证明合法性。基于加密方案的同态性,可以计算 \(\mathsf{Enc}_{\mathsf{pk}}(c) = (\mathsf{Enc}_{\mathsf{pk}}(a_1) \boxplus … \boxplus \mathsf{Enc}_{\mathsf{pk}}(a_n) ) \boxtimes (\mathsf{Enc}_{\mathsf{pk}}(b_1) \boxplus … \boxplus \mathsf{Enc}_{\mathsf{pk}}(b_n))\),然后调用子协议 \(\mathsf{Reshare}\) 通过分布式解密获得 \(c\) 的秘密份额。对于秘密值的MAC标签,也可以通过类似的方法计算。

    协议描述。我们给出预处理阶段的协议描述,它需要调用两个理想功能:\(\mathcal{F}_{\mathsf{KeyGenDec}}\)(图 9.47)和 \(\mathcal{F}_{\mathsf{Rand}}\)(图 9.35)。

    我们将预处理阶段协议的一些部分写成子协议,它们分别是:

    • \(\Pi_\mathsf{Reshare}\):它的输入是 \(e_{\boldsymbol{{m}}} = \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{m}})\) 和 \(enc = \mathsf{NewCiphertext} / \mathsf{NoNewCiphertext}\). 协议使参与方获得 \(\boldsymbol{{m}}\) 的秘密分享,并且如果 \(enc = \mathsf{NewCiphertext}\),额外输出 \(e'_{\boldsymbol{{m}}}\),它将密文 \(e_{\boldsymbol{{m}}}\) 重随机化(re-randomize)。协议如图 9.49所示。

    • \(\Pi_\mathsf{PBracket}\):用于生成 \([\![ \cdot ]\!]\) 秘密分享,如图 9.50所示。

    • \(\Pi_\mathsf{PAngle}\):用于生成 \(\langle \cdot \rangle\) 秘密分享,如图 9.51所示。

    {子协议 \(\Pi_\mathsf{Reshare}\)

    1. 每个参与方 \(P_i\) 均匀随机选择 \(\boldsymbol{{f}}_i \leftarrow_{\$} (\mathbb{F}_p)^s\). 定义 \(\boldsymbol{{f}} = \sum_{i=1}^n \boldsymbol{{f}}_i\).

    2. 每个参与方 \(P_i\) 计算并广播 \(e_{\boldsymbol{{f}}_i} \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{f}}_i)\).

    3. 每个参与方 \(P_i\) 作为证明者以 \(e_{\boldsymbol{{f}}_i}\) 为陈述运行 \(\Pi_\mathsf{PoPK}\). 如果证明不通过则终止协议。

    4. 参与方计算 \(e_{\boldsymbol{{f}}} = e_{\boldsymbol{{f}}_1} \boxplus … \boxplus e_{\boldsymbol{{f}}_n}\) 以及 \(e_{\boldsymbol{{m}} + \boldsymbol{{f}}} = e_{\boldsymbol{{m}}} \boxplus e_{\boldsymbol{{f}}}\).

    5. 参与方调用 \(\mathcal{F}_{\mathsf{KeyGenDec}}\) 解密 \(e_{\boldsymbol{{m}} + \boldsymbol{{f}}}\) 得到 \(\boldsymbol{{m}} + \boldsymbol{{f}}\).

    6. \(P_1\) 设置 \(\boldsymbol{{m}}_1 = \boldsymbol{{m}} + \boldsymbol{{f}} - \boldsymbol{{f}}_1\),其他参与方 \(P_i, \; i \neq 1\) 设置 \(\boldsymbol{{m}}_i = - \boldsymbol{{f}}_i\) 作为输出.

    7. 如果 \(enc = \mathsf{NewCiphertext}\),参与方计算 \(e'_{\boldsymbol{{m}}} = \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{m}} + \boldsymbol{{f}}) \boxminus e_{\boldsymbol{{f}}_1} \boxminus … \boxminus e_{\boldsymbol{{f}}_n}\) 作为输出,其中 \(\mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{m}} + \boldsymbol{{f}})\) 在计算时使用默认的固定随机数。

    {子协议 \(\Pi_\mathsf{PBracket}\)

    1. 对于 \(i = 1, \dots, n\)

      1. 所有参与方设置 \(e_{M_i} = e_{\beta_i} \boxtimes e_{\boldsymbol{{v}}}\)(\(e_{\beta_i}\) 是在初始化阶段生成的公开值)。

      2. 参与方计算 \((M_i^1, …, M_i^n) \leftarrow \mathsf{Reshare}(e_{M_i}, \mathsf{NoNewCiphertext})\),每个参与方 \(P_j\) 获得 \(\beta_i \cdot \boldsymbol{{v}}\) 的份额 \(M_i^j\).

    2. 输出 \([\![ \boldsymbol{{v}} ]\!] = (\boldsymbol{{v}}_1, …, \boldsymbol{{v}}_n, (\beta_i, M_1^i, …, M_n^i)_{i \in [n]})\).

    {子协议 \(\Pi_\mathsf{PAngle}\)

    1. 所有参与方设置 \(e_{\Delta \cdot \boldsymbol{{v}}} = e_{\Delta} \boxtimes e_{\boldsymbol{{v}}}\)(\(e_{\Delta}\) 是在初始化阶段生成的公开值)。

    2. 参与方计算 \((M_1, …, M_n) \leftarrow \mathsf{Reshare}(e_{\Delta \cdot \boldsymbol{{v}} }, \mathsf{NoNewCiphertext})\),每个参与方 \(P_j\) 获得 \(\Delta \cdot \boldsymbol{{v}}\) 的份额 \(M_i\).

    3. 输出 \(\langle \boldsymbol{{v}} \rangle = (\boldsymbol{{v}}_1, …, \boldsymbol{{v}}_n, M_1, …, M_n)\).

    最后,我们给出预处理阶段协议 \(\Pi_\mathsf{prep}\) 的描述,如图 9.52所示。

    {\(\{ \mathcal{F}_{\mathsf{KeyGenDec}}, \mathcal{F}_{\mathsf{Rand}} \}\)-混合模型下的协议 \(\Pi_\mathsf{prep}\)

    1. 参与方向 \(\mathcal{F}_{\mathsf{KeyGenDec}}\) 发送 \((\mathsf{Start}, \mathsf{sid})\) 获得公钥 \(\mathsf{pk}\).

    2. 每个参与方 \(P_i\) 生成MAC密钥 \(\beta_i \leftarrow_{\$} \mathbb{F}_p\).

    3. 每个参与方 \(P_i\) 生成 \(\Delta_i \leftarrow_{\$} \mathbb{F}_p\). 令 \(\Delta = \sum_{i=1}^n \Delta_i\).

    4. 每个参与方 \(P_i\) 计算并广播 \(e_{\Delta_i} \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\mathsf{Diag}_{s}(\Delta_i)), e_{\beta_i} \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\mathsf{Diag}_{s}(\beta_i))\).

    5. 每个参与方 \(P_i\) 作为证明者分别以 \((e_{\Delta_i}, …, e_{\Delta_i})\) 和 \((e_{\beta_i}, …, e_{\beta_i})\) 为陈述运行 \(\Pi_\mathsf{PoPK}\)(\(\mathsf{diag}\) 设置为true),其中陈述中的 \(e_{\Delta_i}\) 和 \(e_{\beta_i}\) 有 \(u\) 个。

    6. 所有参与方计算 \(e_{\Delta} = e_{\Delta_1} \boxplus … \boxplus e_{\Delta_n}\),然后生成 \([\![ \mathsf{Diag}_{s}(\Delta) ]\!] \leftarrow \mathsf{PBracket}(\mathsf{Diag}_{s}(\Delta_1), …, \mathsf{Diag}_{s}(\Delta_n), e_{\Delta})\).

    1. 每个参与方生成 \(\boldsymbol{{r}}_i \leftarrow_{\$} (\mathbb{F}_p)^s\). 令 \(\boldsymbol{{r}} = \sum_{i=1}^n \boldsymbol{{r}}_i\).

    2. 每个参与方 \(P_i\) 计算并广播 \(e_{\boldsymbol{{r}}_i} \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{r}}_i)\). 令 \(e_{\boldsymbol{{r}}} = e_{\boldsymbol{{r}}_1} \boxplus … \boxplus e_{\boldsymbol{{r}}_n}\).

    3. 每个参与方 \(P_i\) 作为证明者以他生成的密文为陈述运行 \(\Pi_\mathsf{PoPK}\).

    4. 参与方生成 \(\langle \boldsymbol{{r}} \rangle \leftarrow \mathsf{PAngle}(\boldsymbol{{r}}_1, …, \boldsymbol{{r}}_n, e_{\boldsymbol{{r}}}), [\![ \boldsymbol{{r}} ]\!] \leftarrow \mathsf{PBracket}(\boldsymbol{{r}}_1, …, \boldsymbol{{r}}_n, e_{\boldsymbol{{r}}})\).

    1. 每个参与方生成 \(\boldsymbol{{a}}_i, \boldsymbol{{b}}_i \leftarrow_{\$} (\mathbb{F}_p)^s\). 令 \(\boldsymbol{{a}} = \sum_{i=1}^n \boldsymbol{{a}}_i, \boldsymbol{{b}} = \sum_{i=1}^n \boldsymbol{{b}}_i\).

    2. 每个参与方 \(P_i\) 计算并广播 \(e_{\boldsymbol{{a}}_i} \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{a}}_i), e_{\boldsymbol{{b}}_i} \leftarrow \mathsf{Enc}_{\mathsf{pk}}(\boldsymbol{{b}}_i)\).

    3. 每个参与方 \(P_i\) 作为证明者以他生成的密文为陈述运行 \(\Pi_\mathsf{PoPK}\).

    4. 参与方计算 \(e_{\boldsymbol{{a}}} = e_{\boldsymbol{{a}}_1} \boxplus … \boxplus e_{\boldsymbol{{a}}_n}, e_{\boldsymbol{{b}}} = e_{\boldsymbol{{b}}_1} \boxplus … \boxplus e_{\boldsymbol{{b}}_n}\).

    5. 参与方生成 \(\langle \boldsymbol{{a}} \rangle \leftarrow \mathsf{PAngle}(\boldsymbol{{a}}_1, …, \boldsymbol{{a}}_n, e_{\boldsymbol{{a}}}), \langle \boldsymbol{{b}} \rangle \leftarrow \mathsf{PAngle}(\boldsymbol{{b}}_1, …, \boldsymbol{{b}}_n, e_{\boldsymbol{{b}}})\).

    6. 参与方计算 \(e_{\boldsymbol{{c}}} = e_{\boldsymbol{{a}}} \boxtimes e_{\boldsymbol{{b}}}\).

    7. 参与方计算 \((\boldsymbol{{c}}_1, …, \boldsymbol{{c}}_n, e'_{\boldsymbol{{c}}}) \leftarrow \mathsf{Reshare}(e_{\boldsymbol{{c}}}, \mathsf{NewCiphertext})\).

    8. 参与方生成 \(\langle \boldsymbol{{c}} \rangle \leftarrow \mathsf{PAngle}(\boldsymbol{{c}}_1, …, \boldsymbol{{c}}_n, e'_{\boldsymbol{{c}}})\).

    \(\caption\){\(\{ \mathcal{F}_{\mathsf{KeyGenDec}}, \mathcal{F}_{\mathsf{Rand}} \}\)-混合模型下的协议 \(\Pi_\mathsf{prep}\)}

    我们有以下安全性定理。

    定理

    假设被攻陷方数量不超过 \(n - 1\). 图 9.52中的协议 \(\Pi_\mathsf{prep}\) 在

    定理(续 2)

    \(\{ \mathcal{F}_{\mathsf{KeyGen}}<span class="footnote">(注:因为 <span class="math notranslate nohighlight">\(\mathcal{F}_{\mathsf{KeyGenDec}}\)</span> 可以基于 <span class="math notranslate nohighlight">\(\mathcal{F}_{\mathsf{KeyGen}}\)</span> 实现,所以在定理中仅假设 <span class="math notranslate nohighlight">\(\mathcal{F}_{\mathsf{KeyGen}}\)</span>.)</span>, \mathcal{F}_{\mathsf{Rand}} \}\)

    定理(续 3)

    -混合模型下对于静态恶意敌手UC-安全实现了理想功能 \(\mathcal{F}_{\mathsf{prep}}\)(图 9.44)。

    该定理的证明请参阅文献 [DPSZ, 2012]。

    本章思考题

    1. 让参与方用零知识证明协议来证明一个永真式(例如一个Pedersen承诺 \(C\) 是对某个消息 \(m\) 的承诺)是否有意义?为什么?

    2. Shamir秘密分享和Reed-Solomon编码之间的关系是什么?

    3. 在朴素模型 (plain model,又叫做标准模型standard model)下是否存在恶意安全的两方OT协议,为什么?

    学习笔记

    记录协议细节、模拟器构造与图中记号对照。