距阵乘以一个未知距阵得单位矩阵 怎么算_如何共享一个秘密

最近风靡的机器学习模式 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(

)个人,他们手中的信息拼凑起来,可以得到 D 呢?这就是 secret sharing 的问题。以下是 1979 年发表在 ACM Communication 杂志的一个解法。

这个解法把每个人 i 手里的信息记为

。从 D 计算出
的过程,我们称之为加密;从 k 个
揭示 D 的过程,我们称之为解密。

加密的办法是随机生成 k-1 个数

,加上
,凑齐了 k 个数。其中
。这个 公式如果看上去觉得复杂,其实就是多项式的定义:

解密的过程很简单,凑齐 k 个人,每个人手里有 i 和

。每个
是上述多项式算出来的,k 个多项式就凑齐了一个方程组,其中
是未知数。通过求解这个线性方程组就得到了这些未知数,其中
就是 D。

这里方程组中未知数的个数是 k,所以需要 k 个不同的方程才能明确这些未知数的值。如果凑的人数少于 k,是没法求解出

的。

接下来,我们验证一下上述方法。假设秘密 D=7 ,并且我们希望凑齐 k=3 个人才能揭示 D 的值。我们需要构造 k 个系数,其中

, 剩下的两个我们随机(随意)指定:

假设我们有n个人有可能需要了解秘密D,我们给他们每个人的信息如下:

假设现在第 1, 3, 10 三个人凑到一起了,他们可以凑出来以下方程组

求解这个方程组,我们得到

。其中
就是要揭示的秘密。

这里为什么每个函数都是一个多项式呢?另外,如果要写一个程序求解上述线性方程组,应该怎么写呢?请看下文。

王益:Secret Sharing 为什么要用多项式​zhuanlan.zhihu.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值