学习&&转载文章:

  • 通过共享随机数来实现比特分享,再通过比特分享来实现比特串比较
  • 利用比特分享的方式,可以对\(????\)比特的一个数按比特进行多方分享,之后可以据此实现多方比较多方比较则可以用来构造安全多方计算的基础模块,无论是隐私保护的机器学习还是隐私保护的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。

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

图片

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