比特比较

学习&&转载文章:

  • 通过共享随机数来实现比特分享,再通过比特分享来实现比特串比较
  • 利用比特分享的方式,可以对\(𝑙\)比特的一个数按比特进行多方分享,之后可以据此实现多方比较多方比较则可以用来构造安全多方计算的基础模块,无论是隐私保护的机器学习还是隐私保护的DNA比较等,都需要用到多方比较模块。

image-20230225105838890

安全模型

安全多方计算的安全显然是在有攻击者情况下的安全,在不同情形下,实现安全的难度也不同,最极端的例子是一个安全多方计算协议的所有参与者都是恶意参与者,那么这个协议的安全性就很难保证了。

要实现安全,首先应该针对不同的情况建立不同的模型,而后针对这些模型进行研究。

首先假设有攻击者(Adversary,攻击者可以通过各种手段收买或者控制(Corrupt部分参与者,而参与者一旦被收买或者控制,该参与者的所有通信历史信息和本地信息都会被攻击者掌握。

攻击者:

  • 攻击者可以实际理解成黑客,他通过黑客手段入侵到了参与者的计算机中,取得了参与者计算机的控制权,因此可以掌握所有该参与者掌握的信息;
  • 攻击者也可以理解成竞争公司的人,通过金钱来贿赂参与者,以此取得信息。
图片

那么显然,攻击者能够最大收买的参与者人数,很大程度上影响了协议是否安全。

(t,n)门限攻击者结构是指参与者总数是\(n\),攻击者最多能够收买\(t\)个参与者。对于攻击者结构,经常会说是\(Q^2,Q^3\)

  • \(Q^2\)的攻击者结构指攻击者收买的参与者的人数小于参与者总人数的 \(1/2\),即\(𝑡 < 1/2\)
  • \(Q^3\)的攻击者结构指攻击者收买的参与者的人数小于参与者总人数的\(1/3\),即\(𝑡 < 1/3\)

攻击者模型分为半诚实攻击者模型恶意攻击者模型

  • 在半诚实攻击者模型下,被攻击者收买的参与者遵守协议,不会在协议执行中途退出,也会诚实地发送自己的计算结果,不会篡改协议计算结果,但是被收买的参与者的所有信息,包括历史通讯信息、计算结果等都会被攻击者得知
  • 在恶意攻击者模型下,被攻击者收买的参与者不会再诚实地遵守协议,可能会篡改协议计算结果,其发送给其他参与者的信息有可能是虚假和伪造的

攻击者的能力还可以根据其计算能力进行划分:

  • 计算意义下安全的模型中,攻击者的计算能力是概率多项式时间的,意味着攻击者无法解决常见的困难问题,即使计算出来,所花费的时间也已经超过了信息的有效期,获得的信息已经是过时的信息。
  • 另一种模型为信息论意义下安全的模型,在这种模型下,攻击者的计算能力是无限的。

Shamir秘密分享

设$ t $和 \(n\) 为两个正整数,且 \(t≤n\)\(n\)个需要共享秘密的参与者集合为\(𝑃 =\left \{P_1,...,P_n \right \}\)

原理介绍

一个\((t,n)\)门限秘密共享体制是指:假设\(\left \{P_1,...,P_n \right \}\)要共享同一个秘密\(s\), 将\(s\)称为主秘密,有一个秘密管理中心\(𝑃_0\)来负责对\(s\)进行管理和分配,秘密管理中心\(𝑃_0\)掌握有秘密分配算法和秘密重构算法,这两个算法均满足重构要求和安全性要求。

  • 秘密分配

秘密管理中心\(𝑃_0\)首先通过将主秘密\(s\)输入秘密分配算法,生成\(n\)个值,分别为\(𝑠_1,… ,𝑠_𝑛\),称\(𝑠_1,… ,𝑠_𝑛\)为子秘密。然后秘密管理中心\(𝑃_0\)分别将秘密分配算法产生的子秘密\(𝑠_1,… ,𝑠_𝑛\)通过\(𝑃_0\)\(𝑃_𝑖\)之间的安全通信信道秘密地传送给参与者\(𝑃_𝑖\),参与者\(𝑃_𝑖\)不得向任何人泄露自己所收到的子秘密\(𝑠_𝑖\)

图片
  • 秘密重构

门限值\(t\)指的是任意大于或等于\(t\)个参与者\(𝑃_𝑖\),将各自掌握的子秘密\(𝑠_𝑖\)进行共享,任意的一个参与者\(𝑃_𝑖\)在获得其余\(𝑡−1\)个参与者所掌握的子秘密后,都可独立地通过秘密重构算法恢复出主秘密\(s\)。而即使有任意的\(𝑛−𝑡个\)参与者丢失了各自所掌握的子秘密,剩下的$ t \(个参与者依旧可以通过将各自掌握的子秘密与其他参与者共享,再使用秘密重构算法来重构出主秘密\)s$。

图片
  • 安全性要求是指任意攻击者通过收买等手段获取了少于$ t\(个的子秘密,或者任意少于\) t$ 个参与者串通都无法恢复出主秘密$ s\(,也无法得到主秘密\) s $的信息。

方案介绍

Shamir于1979年,基于多项式插值算法设计了\(Shamir(t,n)\)门限秘密共享体制,它的秘密分配算法如下:

\(𝑃 =\left \{P_1,...,P_n \right \}\)是参与者集合,\(P\)共享主秘密\(𝑠,𝑠\in F𝑞\),秘密管理中心\(𝑃_0\)按如下所述的步骤对主秘密\(𝑠\)进行分配,(为了可读性起见,以下公式均略去了模\(q\)操作):

  • 秘密分享:

    • 参与者\(𝑃_0\)秘密的在有限域\(F_q\)中随机选取\(𝑡−1\)个元素,记为\(a_1,...,a_{t-1}\),并取以\(𝑥\)为变元的多项式\(f(x)=a_{t-1} x^{t-1}+\cdots+a_{1} x^{1}+s=s+\sum_{i=1}^{t-1} a_{i} x^{i}\)

    • 对于\(1≤𝑖≤ 𝑛\)\(𝑃_0\)秘密计算\(𝑦_𝑖=𝑓(𝑖)\)

    • 对于\(1≤𝑖≤𝑛\)\(𝑃_0\)通过安全信道秘密地将\((𝑖,𝑦_𝑖)\)分配给\(𝑃𝑖\)

图片

  • 秘密重构:

(1)\(Shamir(t,n)\)门限共享体制的秘密重构可以使用通俗的解方程法,即\(t\)个方程可以确定\(t\)个未知数,而这\(t\)个未知数即为包括主秘密\(𝑠\)在内的多项式\(𝑓(𝑥)\)的各项系数,如参与者\(𝑃_1,… ,𝑃_𝑡\)掌握了子秘密\(𝑓(1),…,𝑓(𝑡)\),解方程:

\(\begin{array}{c} a_{t-1} 1^{t-1}+\cdots+a_{1} 1^{1}+s=f(1) \\ a_{t-1} 2^{t-1}+\cdots+a_{1} 2^{1}+s=f(2) \\ \vdots \\ a_{t-1} n^{t-1}+\cdots+a_{1} n^{1}+s=f(n) \end{array}\)

即可求解出系数\(a_{t-1},...,a_1,s\)

(2)另一种方式是使用多项式插值法进行重构主秘密,假设这$ t \(个子秘钥分别为\)(𝑥_𝑖 ,𝑦_𝑖)$ ,其中\(𝑦_𝑖=𝑓(𝑥_𝑖),𝑖=1,…, 𝑡\)\(𝑖 ≠ 𝑗\) 时$ 𝑥_𝑖 ≠ 𝑥_𝑗$。

参与者\(𝑃_1,… ,𝑃_𝑡\)共同计算\(\begin{array}{c} h(x)=y_{1} \frac{\left(x-x_{2}\right)\left(x-x_{3}\right) \ldots\left(x-x_{t}\right)}{\left(x_{1}-x_{2}\right)\left(x_{1}-x_{3}\right) \ldots\left(x_{1}-x_{t}\right)}+y_{2} \frac{\left(x-x_{1}\right)\left(x-x_{3}\right) \ldots\left(x-x_{t}\right)}{\left(x_{2}-x_{1}\right)\left(x_{2}-x_{3}\right) \ldots\left(x_{2}-x_{t}\right)}+\cdots+ \\ y_{t} \frac{\left(x-x_{1}\right)\left(x-x_{3}\right) \ldots\left(x-x_{t-1}\right)}{\left(x_{t}-x_{1}\right)\left(x_{t}-x_{2}\right) \ldots\left(x_{t}-x_{t-1}\right)} \end{array}\)

显然,\(ℎ(𝑥)\)是一个\(𝑡−1\)次的多项式,且因为\(𝑖≠𝑗\)\(𝑥_𝑖≠𝑥_𝑗\),每个加式的分母均不为零,因此对于\(𝑖=1,…,𝑡,𝑦_𝑖=ℎ(𝑥_𝑖)=𝑓(𝑥_𝑖)\) ,又根据多项式的性质,如果存在两个最高次均为\(𝑡−1\)次的多项式,这两个多项式在\(𝑡\)个互不相同的点所取的值均相同,那么这两个多项式相同,即\(ℎ(𝑥)=𝑓(𝑥)\),进而参与者\(𝑃_𝑖\)计算\(ℎ(0)=𝑓(0)=𝑠\),即可恢复主秘密\(𝑠\)

定理:对于有限域\(F_q\)\(n-1\)次的多项式,设为\(𝑓(𝑥)\),存在有限域\(F_q\)上的\(n\)个元,记为\(𝜆_1,…,𝜆_𝑛\),使得:$f(0)= {\textstyle \sum_{i=1}^{n}\lambda _if(i)} \(,称\)(𝜆_1,…,𝜆_𝑛)$为重组向量(recombinationn vector)

证明:

\(f(x)= {\textstyle \sum_{i=0}^{n-1}a_ix^i}\),则\(f(0)=a_0\),且\(a_0\)可以被表示为:\(a_0=(1,0,0,...,0)(a_0,a_1,...,a_{n-1})^T\)

考虑一个\(n\)阶矩阵:\(M=\left(\begin{array}{cccc} 1 & 1 & \cdots & 1 \\ 1 & 2^{1} & \cdots & 2^{n-1} \\ \vdots & \vdots & \vdots & \vdots \\ 1 & n^{1} & \cdots & n^{n-1} \end{array}\right)\),由于矩阵\(M\)是满秩矩阵,因此存在\(𝜆_1,…,𝜆_𝑛\in F_q\),使得\((𝜆_1,…,𝜆_𝑛)M=(1,0,...,0)\)

因此有:\(f(0)=a_0=(𝜆_1,…,𝜆_𝑛)M(a_0,a_1,...,a_{n-1})^T=(𝜆_1,…,𝜆_𝑛)(f(1),f(2),...,f(n))^T= {\textstyle \sum_{i=1}^{n}\lambda _if(i)}\)

对于矩阵\(M=\left(\begin{array}{cccc} 1 & 1 & \cdots & 1 \\ 1 & 2^{1} & \cdots & 2^{n-1} \\ \vdots & \vdots & \vdots & \vdots \\ 1 & n^{1} & \cdots & n^{n-1} \end{array}\right)\),设秘密分配多项式为\(𝑓(𝑥)\),参与者\(𝑃_𝑖\)掌握的子秘密为\(𝑓(𝑖)\),因为存在重组向量\((𝜆_1,…,𝜆_𝑛)\),因此有:\(f(0)=s=\left(\lambda_{1}, \ldots, \lambda_{n}\right) M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}=\lambda_{1} \cdot f(1)+\cdots+\lambda_{n} \cdot f(n)\)

证明:

这里把$$\begin{array}{c}
a_{t-1} 1^{t-1}+\cdots+a_{1} 1^{1}+s=f(1) \
a_{t-1} 2^{t-1}+\cdots+a_{1} 2^{1}+s=f(2) \
\vdots \
a_{t-1} n^{t-1}+\cdots+a_{1} n^{1}+s=f(n)
\end{array}$$看作是\(M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}=(f(1),f(2),...,f(n))\),然后两边再乘\(\left(\lambda_{1}, \ldots, \lambda_{n}\right)\),所以得到了\(\left(\lambda_{1}, \ldots, \lambda_{n}\right) M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}=\lambda_{1} \cdot f(1)+\cdots+\lambda_{n} \cdot f(n)=f(0)=s\)

若要计算重组向量,可通过计算矩阵\(𝑀\)的逆矩阵\(M^{-1}\)计算重组向量\((𝜆_1,…,𝜆_𝑛)=(1,0...,0)M^{-1}\),在获得重组向量后,可构建基于Shamir门限体制的安全多方计算协议

证明:\(s=f(0)=a=(1,0,0,...,0)(a_0,a_1,...,a_{n-1})^T=\left(\lambda_{1}, \ldots, \lambda_{n}\right) M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}\\ \to \left(\lambda_{1}, \ldots, \lambda_{n}\right)=M^{-1}(1,0...,0)\)

  • 首先假设\(𝑃={𝑃_1,…,𝑃_𝑛 }\)是参与者集合,\(𝑃_𝑖\)掌握输入\(𝑥_𝑖(1≤𝑖≤𝑛)\),需要共同计算的函数为\(𝑓(𝑥_1,…,𝑥_𝑛)\)

  • 有限域\(F_q\)上的\(𝑆ℎ𝑎𝑚𝑖𝑟(𝑡+1,𝑛)\)门限体制主要流程为:

    • 输入阶段,每个参与者\(𝑃_𝑖\)将自己的输入\(𝑥_𝑖\),利用\(𝑆ℎ𝑎𝑚𝑖𝑟(𝑡+1, 𝑛)\)门限秘密共享体制,秘密选取最高\(t\)次的随机多项式\(𝑓_𝑖(𝑥)\),满足\(𝑓_𝑖(0)=𝑥_𝑖\) ,然后\(𝑃_𝑖\)\(𝑓_𝑖(𝑗)\)发送给参与者\(𝑃_𝑗\)
    • 计算阶段,假设输入的\(𝑎\)\(𝑏\)已经通过至多\(t\)次的随机多项式\(𝑓_𝑎(𝑥)\)\(𝑓_𝑏(𝑥)\)通过Shamir门限体制共享给了各个参与者,\(f_a(x)=m_tx^t+...+m_1x+a,f_b(x)=n_tx^t+...+n_1x+b\),其中\((m_t,...,m_1),(n_t,...,n_1)\)是随机的多项式系数,参与者\(𝑃_𝑖\)掌握输入\(𝑎\)的子秘密\(𝑎_𝑖\)和输入\(𝑏\)的子秘密\(𝑏_𝑖\),至多\(t\)次的原因是多项式的系数是随机产生的,因此\(t\)次的系数也有可能是0。
  • 加法(多方计算\(𝑎+𝑏\)

    • 每个参与者\(𝑃_𝑖\)独立计算\(𝑐_𝑖 =𝑎_𝑖+𝑏_𝑖,1≤𝑖 ≤𝑛\)\(𝑐_1,…,𝑐_𝑛\) 即为\(𝑎+𝑏\)通过随机多项式共享后的结果,通过多项式插值法或者解方程即可恢复秘密\(s\)
    • 子秘密可以直接相加,是因为对于\(𝑐_𝑖=𝑎_𝑖+𝑏_𝑖=𝑓_𝑎(𝑖)+𝑓_𝑏(𝑖)=(𝑚_𝑡+𝑛_𝑡)i^t+⋯+(𝑚_1+𝑛_1)𝑖+𝑎+𝑏\),多项式的次数并没有发生变化,新的多项式\(𝑓_𝑎(𝑥)+𝑓_𝑏(𝑥)\)的最高次数依旧为 \(t\)\(t+1\)个参与者共享他们所掌握的\(𝑐_𝑖\),即可根据\(t+1\)个方程解\(t+1\)个未知数,解出\(𝑎+𝑏\),或者也可直接使用拉格朗日插值法求解出\(𝑎+𝑏\)
图片
  • 乘法(多方计算\(ab\)
    • 首先每个参与者计算\(d_i=a_ib_i\),接着每个\(𝑃_𝑖\)独自选取次数为\(t\)次的随机多项式\(ℎ_𝑖(𝑥)\) ,且满足\(h_i(0)=d_i,1\le i\le n,t< \frac{n}{2}\)。向各个参与者分配\(𝑑_𝑖\),且\(c_{ij}=h_i(j),1\le i,j\le n\)
    • 所有参与者分配结束后,\(𝑃_𝑖\)掌握了信息\(c_{1i},c_{2i},...,c_{ni}\),同时\(𝜆_1,…,𝜆_𝑛\)是公开的重组向量,即\((𝜆_1,…,𝜆_𝑛)\)满足\(ab=h(0)=\sum_{i=1}^{n}\lambda _id_i\),因此\(𝑃_𝑖\)可计算\(c_i= {\textstyle \sum_{j=1}^{n}\lambda _j c_{ji}}\),再利用多项式插值法,即可获得\(𝑎𝑏\)。【即只需要\(t+1\)方就可以获得秘密\(ab\)
图片

共享随机数

本次主要介绍多方比较的实现方法,用之前介绍过的\(Shamir(t,n)\)秘密分享协议可以实现共享随机数。

\(Shamir(t,n)\)协议主要基于拉格朗日插值,也可以通俗地理解成\(𝑛\)个方程求解\(𝑛\)个未知数。

BGW协议可以实现单比特分享,本次要介绍另一个比特分享方式

图片

按比特分享

如有一个比特串\(𝑎 =𝑎_𝑙a_{𝑙-1}…𝑎_1\),即𝑎的值为\(a= {\textstyle \sum_{i=1}^{l}z^{i-1}a_i}\)\(𝑎\)进行比特分享即对\(𝑎\)的各个比特进行分享,每个参与者拿到\(𝑎_1,…,𝑎_𝑙\)\(𝑙\)个子秘密,将参与者\(𝑃_𝑖\)拿到的\(𝑎_𝑗\)的子秘密记为\(𝑎_{𝑗,𝑖}\),则对\(𝑙\)比特长的\(𝑎\)进行比特分享后参与者\(𝑃_𝑖\)能够获得\(𝑎_{1,𝑖},𝑎_{2,𝑖},…,𝑎_{𝑙,𝑖}\)

首先简要介绍一个多个参与者共同产生同一个随机数的方式

假设有\(𝑛\)个参与者\(𝑃_1,…,𝑃_𝑛\),每个参与者\(𝑃_𝑖\)都产生一个随机数\(𝑟_𝑖\),并通过\(Shamir(t,n)\)秘密分享机制将\(𝑟_𝑖\)进行分享,记\(𝑟_{𝑖,𝑗}\)为参与者\(𝑃_𝑗\)获得的\(𝑟_𝑖\)的子秘密。因此当每个参与者都产生随机数并分享后,参与者\(𝑃_𝑖\)可以获得\(𝑟_{1,𝑖},…,𝑟_{𝑛,𝑖}\)

图片

多方随机数生成

本质上就是秘密分享-加法运算的应用,共同生成一个随机数。

参与者\(𝑃_𝑖\)获得子秘密\(𝑟_{1,𝑖},…,𝑟_{𝑛,𝑖}\)之后,将它们进行累加,将累加结果记为\(r_{i}^{\prime}=\sum_{j=1}^{n} r_{j, i}\)。用符号\(𝑟\)表示\(𝑟_1,…,𝑟_𝑛\)之和,即\(r=\sum_{j=1}^{n} r_{j, i}\),则\(r_{i}^{\prime}\)就是\(𝑟\)的一个子秘密。因为\(𝑟_{1,𝑖}\)\(𝑟_1\)的一个子秘密,\(𝑟_{𝑗,𝑖}\)\(𝑟_𝑖\)的一个子秘密,由于\(Shamir(t,n)\)具有可加性。

假设参与者\(𝑃_1\)\(𝑟_1\)的秘密分配函数是\(𝑓_1(𝑥) =𝑎_{t-1}𝑥_{t-1}+⋯+𝑎_1𝑥+𝑟_1\),参与者\(𝑃_2\)\(𝑟_2\)的秘密分配函数是\(𝑓_2(𝑥)=𝑏_{t-1}𝑥_{t-1}+⋯+𝑏_1𝑥+𝑟_2\),则参与者\(𝑃_1\)\(𝑃_2\)分配给参与者\(𝑃_𝑗\)的子秘密分别为\(𝑟_{1,𝑗}=𝑓_1(𝑗)\)\(𝑟_{2,𝑗}=𝑓_2(𝑗)\),二者相加为:\(𝑟_{1,𝑗}+𝑟_{2,𝑗}=𝑓_1(𝑗)+𝑓_2(𝑗)=(𝑎_{t-1}+𝑏_{t-1})𝑗^{t-1}+⋯+(𝑎_1+𝑏_1)𝑗+𝑟_1+𝑟_2\),即\(𝑟_{1,𝑗}+𝑟_{2,𝑗}\)也是\(𝑟_1+𝑟_2\)的一个子秘密,\(𝑟_{1,1}+𝑟_{2,1},𝑟_{1,2}+ 𝑟_{2,2},…,𝑟_{1,𝑛}+𝑟_{2,𝑛}\)也是\(𝑟_1+𝑟_2\)的子秘密。

同理\(𝑟_1'=𝑟_{1,1}+⋯+𝑟_{𝑛,1}, 𝑟_2'=𝑟_{1,2}+⋯+𝑟_{𝑛,2}, 𝑟_𝑛'=𝑟_{1,𝑛}+⋯+𝑟_{𝑛,𝑛}\)\(r=\sum_{i=1}^{n} r_{i}=r_{1}+\cdots+r_{n}\)的子秘密。

注意此时每个参与者\(𝑃_𝑖\)都不知道其他参与者产生的随机数\(𝑟_𝑗\),因此参与者\(𝑃_𝑖\)也无法计算出\(𝑟\)的具体值「只能计算出子秘密」,但是他通过计算\(r_{i}^{\prime}=\sum_{j=1}^{n} r_{j, i}\),可以计算出\(𝑟\)的一个子秘密\(𝑟_𝑖'\)

通过每个参与者都产生一个随机数并进行秘密共享,所有参与者共同协作产生了一个随机数\(r=\sum_{i=1}^{n}r_i\),但是每个参与者\(𝑃_𝑖\)都不知道\(𝑟\)的具体值,都只掌握\(𝑟\)的一个子秘密\(𝑟_𝑖'\)

随机单比特分享(Joint Random Bit Sharing)

本质上是秘密分享-乘法运算的应用

在学习了多方共同产生随机数后,可以利用此来实现多方的随机单比特分享,每个参与者拿到一个随机比特的Share,在重构之前每个参与者都不知道该随机比特的具体值。

  • 首先所有参与者利用上节所讲述的共享随机数生成方式共同生成一个随机数,将其记为\(𝑟\),将参与者\(𝑃_𝑖\)拿到\(𝑟\)的子秘密记为\(𝑟_𝑖'\)(保持与上节的符号统一),用\([𝑟]\)表示\(𝑟\)处于被分享成子秘密的状态,\([𝑟]\)\(𝑟_1',…,𝑟_𝑛'\)组成。

每个参与者只知道自己的子秘密\(r_i'\)

  • 之后通过第二次科普介绍的Shamir多方乘法,计算\([𝑟^2\)],参与者\(𝑃_𝑖\)能够计算出\(𝑟^2\)的一个子秘密,之后所有参与者分享自己计算出的\(𝑟^2\)的子秘密,即公开\([𝑟^2\)]【即每个参与者都共享自己的子秘密】,每个参与者通过公开的\([𝑟^2]\)都可使用拉格朗日插值法重构出\(𝑟^2\)【即每个参与者都可以计算出\(r^2\)】,若重构出的\(,\)则各方再重新生成随机数\(𝑟\)

每个参与者都能计算出\(r^2\)

  • 参与者\(𝑃_𝑖\)在计算出\(𝑟^2\)后,计算\(𝑟=\sqrt{r^2}\) ,由于这些操作都是在有限域\(𝐹_𝑞\)内进行,因此\(0<𝑟<𝑞\),此时能够计算出两个\(𝑟′′\)\(𝑟′′=𝑞−𝑟\)\(𝑟′′=𝑟\),则\((𝑟′′)^{-1}\)的逆乘上\(𝑟\)有两种结果:\((𝑟′′)^{-1}𝑟=𝑞−1\)或者\((𝑟′′)^{-1}𝑟=1\)
    • 因为\(𝑟′′∙(𝑟′′)^{-1}=1\),当\(𝑟′′=𝑟\)时,\((𝑟′′)^{-1}𝑟=𝑟^{-1}𝑟=1\)
    • \(𝑟′′=𝑞−𝑟\)时,\((𝑟′′)^{-1}𝑟= (−𝑟)^{-1}𝑟 =(−1)∙𝑟^{-1}𝑟=𝑞−1\)
    • 所以参与者可以约定选取\(0<𝑟′′<q/2\),那么所有参与者就可以计算出相同的\(𝑟′′\),参与者\(𝑃_𝑖\)设置\(𝑟^{-1}=(𝑟′′)^{-1}\)

在约定好范围后,每个参与者能够计算出\(𝑟=\sqrt{r^2}\)

  • 对于参与者\(𝑃_𝑖\)来说,\(𝑃_𝑖\)掌握\(𝑟\)的子秘密\(𝑟_𝑖'\)\(𝑃_𝑖\)设置\(𝑎_𝑖=2^{-1}((𝑟^{-1})𝑟_𝑖'+1)\)\(𝑎_𝑖\)即为\(𝑃_𝑖\)获得的随机比特\(𝑎\)的一个子秘密
    • 因为参与者\(𝑃_𝑖\)只知道\(𝑟\),对于\(𝑃_𝑖\)来说\(𝑟\)依旧有两种可能,分别是\(±\sqrt{r^2}\) ,因此\(𝑃_𝑖\)无法确定\(𝑎_i\)的值是0还是1,只有所有参与者对\(𝑟\)进行重构才能确定\(𝑟\)的值,从而计算出\(𝑎_i\)
    • \(𝑟\)是所有参与者共同产生的随机数,因此\(𝑎\)的值也是随机的,且在重构之前每个参与者都只掌握随机比特\(𝑎\)的一个子秘密\(a_i\),不知道\(𝑎\)的具体值。

利用秘密分享的乘法,构造更多计算

疑问:\(r_i'/r\)为什么会等于\(±1\)

比特比较

比特或

上次介绍了共享随机数和比特分享,通过共享随机数来实现比特分享,再通过比特分享来实现本次要介绍的比特串比较。

  • 在介绍比特比较之前先简单介绍一下比特或
    • 比特异或的实现方法较为简单,利用之前介绍过的\(𝐹_2\)Shamir共享机制的加法就能实现
    • 比特或则无法直接通过Shamir共享机制的加法或者乘法实现。
图片

注意之前介绍过,在算数电路上实现乘法和加法即可实现任意函数,而在布尔电路上实现异或和或即可实现任意函数。安全多方计算就是为了在保护隐私信息下共同计算目标函数,如果把比特或通过使用加法和乘法的函数表示,那么即可通过加法和乘法实现或门的功能。

图片

上图有误:应该是异或和或可以实现任意函数

思考一下与的特点,当多个比特相或时,其中只要有一个比特的值为1,或的结果就是1,因此可以统计出现1的个数,只要超过0次,最后的值就为1。

可以设计出这样一个函数:若函数有个\(𝑙\)输入,分别为\(𝑥_1,…,𝑥_𝑙\),则让\(g=1+\sum_{i=1}^{l}x_i\),让实现或的函数为\(𝑓(𝑥_1,…,𝑥_𝑙)\)

\(f(g)=\left\{\begin{matrix} 0&,g=1 \\ 1&,g> 1 \end{matrix}\right.\)

\(g=1+\sum_{i=1}^{l}x_i\),是因为\(\sum_{i=1}^{l}x_i=0\)时会泄露信息

回忆一下,在Shamir秘密分享机制中,当秘密分享函数的输入为0时,得到0的就是秘密,因此需要避免输入为0。

\(g=1+\sum_{i=1}^{l}x_i\),可以使得函数\(𝑓(𝑔)\)的定义域从\([0,𝑙]\)变为\([1,𝑙+1]\),从而避免出现输入𝑔为0的情况。\(𝑓(𝑔)\)的具体实现则可通过有𝑛个未知系数的方程,𝑛个方程解𝑛个未知数即可【插值法】,即\(𝑓(1)=0,𝑓(2)=⋯=𝑓(𝑙+1)=1\)

设计函数来模拟异或,使用秘密分享的加法和乘法可以计算函数。

\(g=1+\sum_{i=1}^{l}x_i\)\(𝑓(𝑔)\)映射到Shamir秘密共享机制上,加法和乘法对应Shamir中的加和乘,即可实现在共享比特上的异或计算

下面开始介绍比特比较

具体要介绍的比较为小于,即如果比特串\(𝑎<𝑏\),则得到的结果为1,如果\(𝑎>𝑏\),则得到的结果为0。

比特比较:\(\left\{\begin{matrix} 1&,a<b \\ 0&,a>=b \end{matrix}\right.\)

假设有两个𝑙比特长的比特串\(𝑎\)\(𝑏\),分别为\(𝑎=𝑎_0𝑎_1⋯𝑎_{𝑙-1}\)\(𝑏=𝑏_0𝑏_1⋯𝑏_{𝑙-1}\),首先将比特串\(𝑎\)\(𝑏\)按比特进行异或,得到比特串\(𝑐=𝑐_0⋯𝑐_{𝑙-1}\),其中\(𝑐_𝑖=𝑎_𝑖⨁𝑏_𝑖,0≤𝑖≤𝑙−1\)。再计算比特串\(𝑑=𝑑_0⋯𝑑_{𝑙-1}\),其中,\(0≤𝑗≤𝑙−1\),即比特串\(𝑑\)的第\(𝑗\)位比特是比特串\(𝑐\)从高位起前\(𝑗\)位比特的或「左起为0」。

比如,比特串\(𝑎=100 101\) ,比特串\(𝑏=101 011\),比特串\(𝑐\)为比特串\(𝑎\)\(𝑏\)按位异或的结果,即比特串\(𝑐=001 110\)

比特串\(d=d_0...d_{l-1}\),可以得到比特串\(𝑑=001 111\)

\(d_0=c_0=0 \\ d_1=c_0\vee c_1=0 \\ d_2=c_0\vee c_1\vee c_2=1 \\ d_3=c_0\vee c_1\vee c_2\vee c_3=1\\ d_4=c_0\vee c_1\vee c_2\vee c_3\vee c_4=1 \\ d_5=c_0\vee c_1\vee c_2\vee c_3\vee c_4\vee c_5=1\)

比特串\(𝑑\)的第\(𝑗\)位比特是比特串\(𝑐\)从高位起前\(𝑗\)位比特的或,可以观察到当比特串\(𝑐\)中某个比特是整个比特串中第一位为1的时候,比特串\(𝑑\)从那位起之后都为\(1\)。如例子中,\(𝑐_2\)为比特串\(𝑐\)中第一个出现\(1\)的比特,则比特串\(𝑑\)\(𝑑_2\)以及\(𝑑_2\)之后都为1,之前都为0。

\(e_0=d_0=0 \\ e_1=d_0-d_1=0\\ e_2=d_1-d_2=1 \\e_3=d_2-d_3=0 \\ e_4=d_3-d_4=0 \\ e_5=d_4-d_5=0\)

再接着让\(𝑒_𝑗=𝑑_{𝑗-1}−𝑑_𝑗, 1≤𝑗≤𝑙−1, 𝑒_0=𝑑_0\),因此可以得到比特串\(𝑒=001 000\),即比特串\(𝑒\)会保留比特串\(𝑑\)中第一位出现1的那位,其余位均为0。

最后,计算\(\sum_{i=0}^{l}b_ie_i\)即为最后的结果,在上面这个例子中结果为1,所以比特串\(𝑎<𝑏\)

它所使用的原理是,如果比特串\(𝑏>𝑎\),那么比特串𝑏中第一位1出现的一定比比特串𝑎中的第一位1要早,否则比特串𝑏就小于等于比特串𝑎【例子中\(a\)\(b\)的第一位都是1,所以比较第二个1】

将比特串\(𝑎\)\(𝑏\)按位进行异或得到\(𝑐\)后,比特串\(𝑐\)中第一位1出现的位置就是比特串\(𝑎\)\(𝑏\)中最早的第一位1出现的位置。那么如果比特串\(𝑐\)中第一位1出现的位置和\(𝑏\)中最早的第一位1出现的位置相同【即第三位】,就说明\(𝑏>𝑎\)。而接下去做的步骤就是为了证明比特串\(𝑐\)中第一位1出现的位置和\(𝑏\)中最早的第一位1【其实是第三位】出现的位置是否相同。

在上面的例子中,用橘色表示1,蓝色表示0,则\(𝑎、𝑏、𝑐\)为:

图片

比特串\(𝑑\)是从\(𝑐\)第一位1出现起,之后都为1。比特串\(𝑒\)是除了\(𝑐\)第一位1出现的位置为1,其余位都为0,即成功将\(𝑐\)中第一位出现1的位置提取了出来。\(𝑑\)\(𝑒\)用图形表示为:

图片

现在比特串\(𝑒\)中1的位置即为\(𝑐\)中第一次出现1的位置,\(e\)\(𝑏\)进行按位与,如果\(𝑏\)第一次出现1的位置和\(𝑒\)中1的位置相同,那么该位按位与的结果就是1,其余位均为0,所有位相与结果之和就是1。反之,\(𝑏\)第一次出现1的位置和\(𝑒\)中1的位置不同,则为0。

将上述比较方式中的\(𝑎, 𝑏\)的各个比特都采用比特分享的方式进行分享,后续的「异或」以及「或」操作都采用我们之前介绍过的对子秘密的「比特异或」和「比特或」操作,即可实现对\(𝑎,𝑏\)的多方比较,且不向任何参与者泄露\(𝑎,𝑏\)的具体值。

图片

执行两个数的比较,转换为函数,函数计算通过秘密分享的方式实现!

posted @ 2023-03-04 20:50  PamShao  阅读(286)  评论(0编辑  收藏  举报