密钥分享(secret sharing)算法
密钥分享(secret sharing)算法
- 将每条信息 x 拆散成多个部分 x1,x2,……,xn ,并将它们分发给多个参与方 S1,S2,……,Sn ,每个参与方拿到的都是原始数据的一部分;
- 一个或少数几个参与方无法还原出原始信息,只有大家把各自的数据凑在一起时才能还原真实数据
Shamir 密钥分享算法
- 分发者将密钥 x 分解为 n 份,分发给 n 个持有者;
- 任意不少于 k 个持有者均能恢复密钥,而任意少于 k 个持有者均无法得到密文。
核心思想
- 将密钥的值设为一个 N 阶随机多项式中的常量参数(a0),然后在该随机多项式上随机选 K 个点的坐标,这些坐标就是关于密钥的分片。
加密
- 对于以上的多项式,任取 n 个数 x1,x2,……,xn,分别带入多项式,得到 n 个密钥对,分发给 n 个持有者;
解密
- 假设取得了 k ( k<n )个密钥对{x1,y1},{x2,y2},……,{xk,yk},可以得到如下的方程:
- 由矩阵乘法或者 Lagrange 插值法均可求的 a0,即为明文;
实际使用
- 重要场所的管理:通行密码通常不能由单个持有者保存,而是多个持有者分别持有部分;
- 遗嘱生效:将密钥分给多人保管,只有当大多数人到场时,遗嘱才会生效;