Feldman VSS 可验证的秘密分享
Feldman VSS 是一个常见的可验证秘密共享方案,由 Paul Feldman 提出(参见其论文:「A Practical Scheme for Non-interactive Verifiable Secret Sharing」)它在 Shamir 秘密共享 之上结合了同态加密方案。
伽罗法域
有限域
这里的域(Field)的定义是有如下特性的集合:
- 定义了加法和乘法
- 集合内的元素经过加法和乘法计算,结果仍然在集合内
- 计算符合交换率、结合率、分配率
- 加法和乘法有单位元素(所有的集合内的值都有对应的负数,所有集合内非零值都有倒数)
举个例子,我们常见的实数集是域,但整数值不是域(因为除了 1,其它数的倒数都不是整数)。
具有有限个元素的域就是有限域(下文以 GF 表示,GF 是 Galois Field 的缩写,这个名字纪念发明者 Evariste Galois)。这里有一个 有限域计算简述 本部分内容来自此文章。
GF(3) 是定义了模 3 加法和乘法的有限域,有三个元素:0、1、2。两个计算示例:
1+2=3\mod 3=0
2×2=4\mod3=1
(以上两个计算分别说明了 1、2 互为「负数 a+b=0」,2 是 2 的「倒数 a\cdot b = 0」)
有限域加法:
➕ | 0 | 1 | 2 |
---|---|---|---|
0 | 0 | 1 | 2 |
1 | 1 | 2 | 0 |
2 | 2 | 0 | 1 |
有限域乘法:
✖️ | 0 | 1 | 2 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 1 | 2 |
2 | 0 | 2 | 1 |
GF(4):不是有限域
➕ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 0 | 1 | 2 | 3 |
1 | 1 | 2 | 3 | 0 |
2 | 2 | 3 | 0 | 1 |
3 | 3 | 0 | 1 | 2 |
✖️ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 2 | 3 |
2 | 0 | 2 | 0 | 2 |
3 | 0 | 3 | 2 | 1 |
GF(4)并不是有限域的存在,因为它并不能满足所有有限域的定义要求,因为元素 2 没有倒数, 2n\mod4 \ne 1。
Feldman VSS
Feldman 可验证秘密分享,这里有一个 常见数学符号表 可助你理解文中出现的公式,本部分文章内容来自 「对可验证秘密共享的简单介绍」,如果没理解或者想做些拓展阅读可以去原文看一下。
示例
* 本示例旨在解析对承诺的验证过程,并不满足论文中的安全要求,不要参考
选择参数 p = 17, q = 8, g = 3,满足 q|{p-1},秘密值 K = 9,门限值 t=2
选取随机多项式 P(x) = K×x^0 + 5×x^1 + 7×x^2 \mod q,其中两个随机数 a1 = 5,a2 = 7 \in Z_q
则秘密共享
v_0 = P(0) = 9×0^0 + 5 × 0^1 + 7 × 0^2 \mod 8 = 1
v_1 = P(1) = 9×1^0 + 5 × 1^1 + 7 × 1^2 \mod 8 = 5
v_2 = P(2) = 9×2^0 + 5 × 2^1 + 7 × 2^2 \mod 8 = 7
给出的承诺为
c_0 = g^{K}\mod p = 3^9 \mod 17 = 14
c_1 = g^{a_1}\mod p = 3^{5} \mod 17 = 5
c_2 = g^{a_2}\mod p = 3^7 \mod 17 = 11
然后我们可以验证承诺
g^{v_1} \mod p= 5
c_0×c_1^{1^1}×c_2^{1^2} \mod p = 5
g^{v_1} \mod p = c_0 × c_1^{1^1}×c_2^{1^2} \mod p
由此,我们可以对共享内容的一致性进行验证,保证其内容是遵循方案协议的,剩下 recover 部分跟 Shamir 秘密分享是一样的了。