Asmuth-Bloom 方案
Asmuth-Bloom 方案是一种基于中国剩余定理(CRT)的门限秘密共享方案
它的核心思想是:将一个秘密 S 拆分成 n 个份额,只有当凑齐至少 t 个份额时,才能恢复出 S;任意少于 t 个份额不会泄露关于 S 的任何信息
方案参数设定
需要一组整数满足以下条件:
- 模数选择:
m1, m2, ..., mn两两互质
- 模数选择:
- 大小约束:对于门限
t,要求前t个最小的模数之积大于m0乘以后t-1个最大的模数之积
- 大小约束:对于门限
1 | m1 * m2 * ... * mt > m0 * m_{n-t+2} * ... * m_n |
这个条件保证了任何 t 个份额用 CRT 恢复的 x 落在正确范围内,且模 m0 后能唯一确定秘密;而任意 t-1 个份额会导致 x 的取值范围大于模数积,信息论上无法确定秘密
- 秘密范围:秘密
S必须小于m0:
- 秘密范围:秘密
1 | 0 <= S < m0 |
份额生成
输入:秘密 S,公共参数 m0, m1, ..., mn,门限 t
- 随机选取一个整数
A,使得构造的x满足:
- 随机选取一个整数
1 | x = S + A * m0 |
并且 x 落在区间 [0, m1*m2*...*mt) 内,通常取随机 A 足够大以保证安全性
- 为每个参与者计算份额
s_i:
- 为每个参与者计算份额
1 | s_i = x mod m_i, (i = 1, 2, ..., n) |
每个份额就是一个余数对 (s_i, m_i)
秘密恢复(任意 t 个份额)
输入:任意 t 个份额,假设选择的是 s_{i1}, s_{i2}, ..., s_{it},对应的模数为 m_{i1}, ..., m_{it}
- 用 CRT 求解同余方程组
1 | x ≡ s_{i1} (mod m_{i1}) |
得到唯一解 x' 在模 M = m_{i1} * ... * m_{it} 下
- 恢复秘密
1 | S = x' mod m0 |
因为 x' = x(原构造值),而 x = S + A*m0,模 m0 自然得到 S
详细案例
设定参数
设定:门限 t=2,n=3,秘密 S=42
- 选取公开素数
m0=7(让S=5,m0=7,满足0 <= S < 7)
- 选取公开素数
- 选模数序列:找 3 个两两互质的整数且满足大小约束(取
m1=11, m2=13, m3=17)
- 选模数序列:找 3 个两两互质的整数且满足大小约束(取
- 检查条件:
t=2,前 2 个乘积11*13 = 143,后t-1=1个最大模数乘积乘m0:m0 * m3 = 7 * 17 = 119;因为143 > 119,满足条件,若小于则需重新选取
- 检查条件:
- 构造
x:选取随机A。通常A需要足够大使得x在[0, m1*m2)内且不可预测。这里简单起见取A=9
- 构造
1 | x = S + A * m0 = 5 + 9 * 7 = 5 + 63 = 68 |
- 生成份额
1 | s1 = 68 mod 11 = 2 |
- 恢复秘密(假设获得前两份额)
1 | x ≡ 2 (mod 11) |
- 求 CRT 解
1 | N1 = 143 / 11 = 13 |
- 提取秘密
1 | S = x' mod 7 |