学习&&转载文章:
安全多方计算的安全显然是在有攻击者情况下的安全,在不同情形下,实现安全的难度也不同,最极端的例子是一个安全多方计算协议的所有参与者都是恶意参与者,那么这个协议的安全性就很难保证了。
要实现安全,首先应该针对不同的情况建立不同的模型,而后针对这些模型进行研究。
首先假设有攻击者(Adversary),攻击者可以通过各种手段收买或者控制(Corrupt)部分参与者,而参与者一旦被收买或者控制,该参与者的所有通信历史信息和本地信息都会被攻击者掌握。
攻击者:
- 攻击者可以实际理解成黑客,他通过黑客手段入侵到了参与者的计算机中,取得了参与者计算机的控制权,因此可以掌握所有该参与者掌握的信息;
- 攻击者也可以理解成竞争公司的人,通过金钱来贿赂参与者,以此取得信息。
那么显然,攻击者能够最大收买的参与者人数,很大程度上影响了协议是否安全。
(t,n)门限攻击者结构是指参与者总数是\(n\),攻击者最多能够收买\(t\)个参与者。对于攻击者结构,经常会说是\(Q^2,Q^3\),
攻击者模型分为半诚实攻击者模型和恶意攻击者模型:
攻击者的能力还可以根据其计算能力进行划分:
设$ 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$。
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,𝑛)\)门限体制主要流程为:
加法(多方计算\(𝑎+𝑏\))
本次主要介绍多方比较的实现方法,用之前介绍过的\(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\),但是每个参与者\(𝑃_𝑖\)都不知道\(𝑟\)的具体值,都只掌握\(𝑟\)的一个子秘密\(𝑟_𝑖'\)。
本质上是秘密分享-乘法运算的应用
在学习了多方共同产生随机数后,可以利用此来实现多方的随机单比特分享,每个参与者拿到一个随机比特的Share,在重构之前每个参与者都不知道该随机比特的具体值。
每个参与者只知道自己的子秘密\(r_i'\)
每个参与者都能计算出\(r^2\)
在约定好范围后,每个参与者能够计算出\(𝑟=\sqrt{r^2}\)
利用秘密分享的乘法,构造更多计算
疑问:\(r_i'/r\)为什么会等于\(±1\)?
上次介绍了共享随机数和比特分享,通过共享随机数来实现比特分享,再通过比特分享来实现本次要介绍的比特串比较。
注意之前介绍过,在算数电路上实现乘法和加法即可实现任意函数,而在布尔电路上实现异或和或即可实现任意函数。安全多方计算就是为了在保护隐私信息下共同计算目标函数,如果把比特或通过使用加法和乘法的函数表示,那么即可通过加法和乘法实现或门的功能。
上图有误:应该是异或和或可以实现任意函数
思考一下与的特点,当多个比特相或时,其中只要有一个比特的值为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。
将上述比较方式中的\(𝑎, 𝑏\)的各个比特都采用比特分享的方式进行分享,后续的「异或」以及「或」操作都采用我们之前介绍过的对子秘密的「比特异或」和「比特或」操作,即可实现对\(𝑎,𝑏\)的多方比较,且不向任何参与者泄露\(𝑎,𝑏\)的具体值。
执行两个数的比较,转换为函数,函数计算通过秘密分享的方式实现!
C# 13 即 .Net 9 按照计划会在2024年11月发布,目前一些新特性已经定型,今天让我们来预览一个比较大型比较重要的新特性: 扩展类型 extension types