# Feldman VSS 可验证的秘密分享

Original: <https://lifelonglearn.ing/feldman-vss>

Author: [奶爸](https://lifelonglearn.ing/users/3b04650c-8231-499b-8ef0-381fc4d7efb0)

Published: 2022-10-31T15:41:32Z

Updated: 2026-09-27T06:57:43Z

Version: 1

**Feldman VSS** 是一个常见的可验证秘密共享方案，由 Paul Feldman 提出（参见其论文：「A Practical Scheme for Non-interactive Verifiable Secret Sharing」）它在 [Shamir 秘密共享](https://lifelonglearn.ing/shamir-secret-sharing) 之上结合了同态加密方案。

## 伽罗法域

### 有限域

这里的域（Field）的定义是有如下特性的​**集合**​：

* 定义了加法和乘法
* 集合内的元素经过加法和乘法计算，结果仍然在集合内
* 计算符合交换率、结合率、分配率
* 加法和乘法有单位元素（所有的集合内的值都有对应的负数，所有集合内非零值都有倒数）

举个例子，我们常见的实数集是域，但整数值不是域（因为除了1，其它数的倒数都不是整数）。

​**具有有限个元素的域就是有限域**​（下文以GF表示，GF是Galois Field的缩写，这个名字纪念发明者Evariste Galois)。这里有一个 [有限域计算简述](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly96aHVhbmxhbi56aGlodS5jb20vcC8yNjIyNjcxMjE=) 本部分内容来自此文章。

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 可验证秘密分享](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmVyaWZpYWJsZV9zZWNyZXRfc2hhcmluZyNGZWxkbWFuJUUyJTgwJTk5c19zY2hlbWU=)，这里有一个 [常见数学符号表](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly96aC53aWtpcGVkaWEub3JnL3poLWhhbnMvJUU2JTk1JUIwJUU1JUFEJUE2JUU3JUFDJUE2JUU1JThGJUI3JUU4JUExJUE4) 可助你理解文中出现的公式，本部分文章内容来自 「[对可验证秘密共享的简单介绍](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly93d3cuamlhbnNodS5jb20vcC83ZTVkM2ZmMWEyODk=)」，如果没理解或者想做些拓展阅读可以去原文看一下。

### 示例

*\* 本示例旨在解析对承诺的验证过程，并不满足论文中的安全要求，不要参考*

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