引言:
秘密分享(英语:Secret sharing),又称秘密拆分(英语:Secret splitting),是将秘密分散到人群的方法,每人得到秘密的一部分,称为份额(英文:Share)。只有集齐份额满足方案的要求,将其结合后,才能还原出秘密;每件份额各自则没有用途。
一种特殊的分享方案里,角色分为一名1荷官及n名玩家。荷官将秘密分配给玩家,但只有满足特定条件时,玩家可以还原出秘密。方案中每个玩家收到一件份额。只要有至少t(阈值,"threshold")个玩家合作,就可以还原出秘密,但不足t个人则不能。这样的秘密分享方案称为(t, n)—阈值方案(有时亦写成(n, t)—阈值方案)。
本文主要介绍两种秘密共享方案——Shamir秘密共享机制,Asmuth-Bloom门限机制,以及他们各自的数学原理。
1.1 秘密共享规定:
- 一保险柜内存有秘密文件,相关5人中有3人及以上在场才能打开。
- 保险柜上安装多把锁,没人拥有部分锁的钥匙
- 在保险柜上安装10把锁,每把锁配发三把钥匙,每人手中有六把锁的钥匙
- 任取3列,必有任何锁的钥匙
- 任取2列, 必缺一把锁的钥匙
1.2 少数与多数:
设相关人共有2n=1个,任意n个组成的少数团体不能打开保险柜,任意n+1个组成的多数团体可以打开保险柜。
两个不同的少数团体联合可成为多数团体。
每个人需拥有他所不属于的所有“少数”团体所打不开的锁的钥匙
每人拥有的钥匙数量:
1.3 拉格朗日插值定理
- 某个多项式函数,已知有给定的K+1个取值点:
其中,
1.4 Shamir 秘密共享机制:(基于拉格朗日线性插值)
一保险柜的开启密码为整数X,规定当且仅当相关的n个人中有k个或以上在场方可开启
随机选择K-1个整数
和n个互不相同的整数 。计算 将数ci和bi告知第i个人
由若干
值求X: 若有K人在场,线性方程组有唯一解
其系数矩阵为:
可以看到这个行列式为范德蒙行列式:
- 若在场人数小于k,系数矩阵行数小于列数,该线性方程组有无穷多解,无法得到X的值。
- 若k-1次多项式
经过点 ,
- 其中
- 计算在有限域
中进行 综上所述,若有k个人及以上在场时,该线性非齐次方程组有唯一解。即对应所有( ) 该方程组能求出x的值,否则该线性非齐次方程组有无穷多解。
1.5 中国剩余定理
- 中国剩余定理即线性同余方程组的求解
其中模数
若模数不是两两互质的则中国剩余定理失效。
中国剩余定理解题分为以下几个步骤
- 计算所有模数的乘积
- 计算第i个方程的
- 计算
在模 意义下的逆元 - 最后求出
例:
同理可得因 最后根据公式计算出
中国剩余定理的代码实现: 其中mi为模数列表,ai同上述r1,r2,r3列表。fast_pow与fast_mul为快速幂与快速乘。
1 | def CRT(ai, mi, len): #中国剩余定理 |
1.6 Asmuth-Bloom门限机制(基于中国剩余定理)
- 一次同于方程组
有唯一小于 的非负整数解 - t-1个人
共享秘密份额
该方案中,由秘密S得出的数y对于不同模数
在n个人中有t个及以上成员在场时才能解出秘密S
- 首先令
是满足下列条件的一组整数
且对所有的
- 秘密分发: 将k划分为n个共享,计算
,则 n个共享为 ,将子密钥 分配给共享者 - 秘密重构 若给定t个共享
,则由中国剩余定理可知,同余方程组
关于模
Eg: 设