在保护输入隐私的情况下求n个数的积(基于安全多方计算)

问题描述与假设

n n n个数 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an分别属于 n n n个人 p 1 , p 2 , ⋯   , p n p_1,p_2,\cdots,p_n p1,p2,,pn.在不泄漏 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an的情况下,求这n个数的乘积 p r o d c u t = ∏ i = 1 n a i prodcut=\prod_{i=1}^na_i prodcut=i=1nai.

使用秘密分享

每两个人之间首先通过密钥协商等方法,获得一个秘密的随机数。假设 p i p_i pi p j ( i ≠ j ) p_j(i \neq j) pj(i=j)之间的秘密随机数为 s i j s_{ij} sij.值得注意的是秘密的随机数不应该为0.
首先,每个人 p i ( i ∈ [ 1 , n ] ) p_i(i \in [1,n]) pi(i[1,n])都在本地计算一个乘积 b i = a i ⋅ ∏ u = 1 i − 1 s u i ∏ v = i + 1 n s i v b_i=a_i \cdot \frac{\prod_{u=1}^{i-1} s_{ui}}{\prod_{v=i+1}^{n}s_{iv}} bi=aiv=i+1nsivu=1i1sui.
然后,由于从 b i b_i bi不能得到 a i a_i ai,除非所有的秘密随机数暴露。所以,可以将 b i b_i bi公布,然后求得 p r o d u c t ′ = ∏ i = 1 n b i product^\prime=\prod_{i=1}^{n}b_i product=i=1nbi.
这是很容易证明的,每一个秘密随机数 s i j s_{ij} sij在最终的结果中都出现两次,一次在分子上,一次在分母上,刚好可以约掉。所以最后的结果就是 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an的乘积。
p r o d u c t ′ = ∏ i = 1 n b i = ∏ i = 1 n a i ⋅ ∏ u = 1 i − 1 s u i ∏ v = i + 1 n s i v = ( ∏ i = 1 n a i ) ⋅ ( ∏ i = 1 n ∏ u = 1 i − 1 s u i ∏ i = 1 n ∏ v = i + 1 n s i v ) = ( ∏ i = 1 n a i ) ⋅ ( ∏ j = n 1 ∏ u = 1 j − 1 s u j ∏ i = 1 n ∏ v = i + 1 n s i v ) = ∏ i = 1 n a i = p r o d u c t \begin{aligned} product^\prime&=\prod_{i=1}^{n}b_i\\ &=\prod_{i=1}^{n}a_i \cdot \frac{\prod_{u=1}^{i-1} s_{ui}}{\prod_{v=i+1}^{n}s_{iv}}\\ &=(\prod_{i=1}^{n}a_i) \cdot (\frac{\prod_{i=1}^{n}\prod_{u=1}^{i-1} s_{ui}}{\prod_{i=1}^{n}\prod_{v=i+1}^{n}s_{iv}})\\ &=(\prod_{i=1}^{n}a_i) \cdot (\frac{\prod_{j=n}^{1}\prod_{u=1}^{j-1} s_{uj}}{\prod_{i=1}^{n}\prod_{v=i+1}^{n}s_{iv}})\\ &=\prod_{i=1}^{n}a_i\\ &=product \end{aligned} product=i=1nbi=i=1naiv=i+1nsivu=1i1sui=(i=1nai)(i=1nv=i+1nsivi=1nu=1i1sui)=(i=1nai)(i=1nv=i+1nsivj=n1u=1j1suj)=i=1nai=product

安全要求

在计算之前和计算之后,除了 p i p_i pi其他人无法得知 a i a_i ai值。

猜你喜欢

转载自blog.csdn.net/watqw/article/details/124001772
今日推荐