1 秘密共享问题模型
1.1 富翁和三个儿子的故事
问题: 富翁想在自己的三个儿子中找一个最聪明的来继承自己的遗产,在保护好财富的同时,让其他两个人也参与进来,使得兄弟间和睦相处,家庭和谐。
- 大儿子的方案: 找一个保险库将所有的财富锁起来,钥匙归我保管,弟弟们需要用钱的时候来找我,我开锁取给他们就好了。
- 二儿子的方案: 把钥匙分为三份,三兄弟一人一份,只有三个人同时到场,才能打开宝库拿取财宝。
- 小儿子的方案: 设计一把新锁,制作三把钥匙,三兄弟一人一把,任何一个人都不能单独用自己的钥匙打开宝库,只有两个人同时在场,才可以取出财宝。(关键问题:如何设计新锁?)
1.2 秘密共享系统
将要保存的秘密提供给一个参与方集合的所有成员,并分别保存。当且仅当集合的授权子集的所有成员都展示他们的秘密时,共享的秘密才能被恢复,而任何未授权的子集成员无法获取有关秘密的任何消息。
应用:
- 多方计算通用协议;
- 拜占庭协议;
- 阈值密码学;
- 访问控制;
- 基于属性的加密;
- 不经意传输;
- 联邦学习的安全聚合。
2 秘密共享定义
形式化定义如下:
S(s,t,n)→{⟨s1⟩,⟨s1⟩,...,⟨sn⟩}S(s,t,n) \rightarrow \{ \langle s_1\rangle, \langle s_1 \rangle ,..., \langle s_n \rangle \}S(s,t,n)→{⟨s1⟩,⟨s1⟩,...,⟨sn⟩}
其中sss表示需要拆分的秘密,ttt表示恢复门限,nnn为拆分数目。
存在恢复函数RRR, 对于任意m≥tm\ge tm≥t,有R(⟨s1⟩,⟨s1⟩,...,⟨sm⟩)→sR(\langle s_1\rangle,\langle s_1\rangle,...,\langle s_m\rangle) \rightarrow sR(⟨s1⟩,⟨s1⟩,...,⟨sm⟩)→s。
问题: 一个秘密信息,发布者具有秘密的使用权和共享权,即他有权利将秘密分享给别人。如何保证这个共享过程是安全的?
- 方案一: 对称加密,双方用约定的密钥进行加密解密通信;但存在一个问题:如何安全传递密钥?
- 方案二: 非对称加密解决了这个矛盾,发布方自己生成公私钥对,把公钥公开,然后用私钥加密,接收方用公钥解密,无需事先约定。非对称加密解决了绝大部分加密的问题,目前广泛应用的RSA就是明证。但其实它依赖了一个潜在假设(虽然这个假设很接近现实):公开环境是一个诚实信道,它不会篡改发布的共享信息。否则,中间人攻击就会破获秘密。
- 方案三: 发布者A与接受者B之间存在nnn条独立信道,在不清楚各信道信任度和稳定度的情况下,A如何将信息发送给B?秘密共享应运而生。它通过某种方法将秘密拆分,从nnn个信道同时发送,即使有信道存在恶意者,也无法恢复秘密。