![隐私保护机器学习](https://wfqqreader-1252317822.image.myqcloud.com/cover/48/43738048/b_43738048.jpg)
3.4.2 Shamir算法
回到本节开头的故事,冒险者们想到了在秘密分享中非常经典的Shamir算法[59]。
1. 示例
这个算法可以分为两个阶段,即份额分发阶段和秘密重构阶段。
(1)份额分发阶段
1)确定N和K的具体数值,比如N=5,K=3。
2)选择一个模数p,之后所有的计算都需要模这个数,比如p=17。
3)随机挑选打开保险箱需要的正确答案S,比如S=13。
4)随机挑选t-1个小于p的不相同的随机数,例如a1=10, a2=2。
5)分别计算,比如
![](https://epubservercos.yuewen.com/352BD0/23020639401645206/epubprivate/OEBPS/Images/41207-00-84-1.jpg?sign=1738847956-vHyzLdxIfwUOpepbxXP4YVHiJfrIDU5v-0-5635fe694ee71518025abf72d64b809d)
6)将作为份额分给第个人,并且要求他不能分给其他人。
(2)秘密重构阶段
1)集齐任意K个人的份额,例如,(1, 8),(2, 7),(4, 0)。
2)列出方程组,其中
是第i个人的份额,K是待解的答案,
是未知量,解下列方程组
![](https://epubservercos.yuewen.com/352BD0/23020639401645206/epubprivate/OEBPS/Images/41207-00-84-5.jpg?sign=1738847956-L1tkfNQkVal4ku4WkevoGmtQtTydXMfB-0-2d576ed50bb639de87ad3dd2a45b64ed)
3)解上述方程组,可得S=13,a1=10,a2=2,打开保险箱的数字就是13。
2. 原理
现在,我们来介绍Shamir方案的原理。对于一个(K,N)-秘密分享门限方案,我们假设需要共享的秘密为S,那么只需要构造一个常数项为S的K-1次多项式,取任意N个不一样的点
作为份额分给N个人,那么只要凑齐K个人,便可以解出系数和常数项。除了用示例中解方程组的方式以外,还可以用拉格朗日插值多项式的方式快速求解。
更加具体地说,Shamir方案是一个(K,N)-秘密分享门限方案,假设秘密为S,p是一个大素数,是模p的有限域。那么Shamir方案可以表示为接下来两个阶段。
• 份额分发阶段:首先分发者在有限域上任意构造一个K-1次的多项式
,使得
,并且
。然后分发者再随机选择N个非零的,且互不相同的数
,其中
,并且计算
,并且把
分发给成员,作为他们的秘密份额。
• 秘密重构阶段:任意K个成员合作可以重构出秘密。假设由任意K个成员所组成的集合为B={i1,i2,…,iK}(|B|=K),根据拉格朗日插值公式,可以计算出F(x):
![](https://epubservercos.yuewen.com/352BD0/23020639401645206/epubprivate/OEBPS/Images/41207-00-85-3.jpg?sign=1738847956-ofcWV4p6qhwJ6lPq17TWJKf3sFcl1JMw-0-24962da6b9fc03d94936d71f4fa4efd2)
其中,,那么秘密就是S=F(0)。