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 秘密分享是一样的了。

Comments

lili ·v1 Reply

Feldman中的q不是应该是个素数吗

奶爸 👲 ·v1 Reply

@lili 本文旨在拿出实际例子,用小学数学展示计算步骤,你应该去看论文的定义和证明过程。