最近风靡的机器学习模式 federated learning 的一个核心技术是 multiple party computing(MPC)—— 几个互不信任的人如何合作计算一个函数得到结果。
MPC 有多种实现方式(协议)。常见的包括 garbled circuit 和 secret sharing。知乎上 https://zhuanlan.zhihu.com/p/44999983 这篇文章介绍的很好。我想试试能否用更简单的语言,解释 secret sharing 给初中生听。
Secret sharing 用汉语说是“分享秘密”或者“共享秘密”。意思是有一个秘密,是一个整数 D。有 n 个人,如果每个人都知道 D,那么这也太不安全,不成其为秘密了。如果 n 个人把各自知道的信息凑一起,才能知道 D 的值,那么确实很安全,但是也很脆弱 —— 万一一个人挂了,D 就成为永远无法被揭示的秘密了。
有没有一个方法,需要凑齐 k(
这个解法把每个人 i 手里的信息记为
加密的办法是随机生成 k-1 个数
解密的过程很简单,凑齐 k 个人,每个人手里有 i 和
这里方程组中未知数的个数是 k,所以需要 k 个不同的方程才能明确这些未知数的值。如果凑的人数少于 k,是没法求解出
接下来,我们验证一下上述方法。假设秘密 D=7 ,并且我们希望凑齐 k=3 个人才能揭示 D 的值。我们需要构造 k 个系数,其中
假设我们有n个人有可能需要了解秘密D,我们给他们每个人的信息如下:
假设现在第 1, 3, 10 三个人凑到一起了,他们可以凑出来以下方程组
求解这个方程组,我们得到
这里为什么每个函数都是一个多项式呢?另外,如果要写一个程序求解上述线性方程组,应该怎么写呢?请看下文。
王益:Secret Sharing 为什么要用多项式zhuanlan.zhihu.com