隐私保护机器学习
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4.2 Shamir算法

回到本节开头的故事,冒险者们想到了在秘密分享中非常经典的Shamir算法[59]

1. 示例

这个算法可以分为两个阶段,即份额分发阶段和秘密重构阶段。

(1)份额分发阶段

1)确定NK的具体数值,比如N=5,K=3。

2)选择一个模数p,之后所有的计算都需要模这个数,比如p=17。

3)随机挑选打开保险箱需要的正确答案S,比如S=13。

4)随机挑选t-1个小于p的不相同的随机数,例如a1=10, a2=2。

5)分别计算,比如

6)将作为份额分给第个人,并且要求他不能分给其他人。

(2)秘密重构阶段

1)集齐任意K个人的份额,例如,(1, 8),(2, 7),(4, 0)。

2)列出方程组,其中是第i个人的份额,K是待解的答案,是未知量,解下列方程组

3)解上述方程组,可得S=13,a1=10,a2=2,打开保险箱的数字就是13。

2. 原理

现在,我们来介绍Shamir方案的原理。对于一个(KN)-秘密分享门限方案,我们假设需要共享的秘密为S,那么只需要构造一个常数项为SK-1次多项式,取任意N个不一样的点作为份额分给N个人,那么只要凑齐K个人,便可以解出系数和常数项。除了用示例中解方程组的方式以外,还可以用拉格朗日插值多项式的方式快速求解。

更加具体地说,Shamir方案是一个(KN)-秘密分享门限方案,假设秘密为Sp是一个大素数,是模p的有限域。那么Shamir方案可以表示为接下来两个阶段。

• 份额分发阶段:首先分发者在有限域上任意构造一个K-1次的多项式,使得,并且。然后分发者再随机选择N个非零的,且互不相同的数,其中,并且计算,并且把分发给成员,作为他们的秘密份额。

• 秘密重构阶段:任意K个成员合作可以重构出秘密。假设由任意K个成员所组成的集合为B={i1,i2,…,iK}(|B|=K),根据拉格朗日插值公式,可以计算出F(x):

其中,,那么秘密就是S=F(0)。