秘密分享的方式有很多种,我们根据论文《Publicly Verifiable Secret Sharing》中的描述,进行讨论。
\begin{equation}s_{A i}=\left\{\begin{array}{l}
\text { randomly chosen in } \mathbb{Z}_{p} \text { for } i=j_{1}, \ldots, j_{k-1} \\
s-\sum_{\ell=1}^{k-1} s_{A j_{\ell}}(\bmod p) \text { for } i=j_{k}
\end{array}\right.\end{equation}
对于秘密s,我们给产生k-1的随机数,然后用秘密减去这些随机数的和对p求余,产生一个k份的秘密。
只有k个用户同时合作,才能把秘密恢复。
同时,我们可以公开验证,分享秘密的人有没有将正确的si分享给每个用户。我们只需要将公开的加密得到的S进行累乘,则可以实现所有秘密的累加。而秘密分享者,需要公开对秘密进行加密的S。
另外一种秘密分享的方式可以让每个用户独立验证,si是否正确。下文中xi是每个人的公钥。dealer选择k-1个随机数,然后公开\begin{equation}S=g^{s} \text { and } F_{j}=g^{f}\end{equation}。
因此每个人的秘密被加密为si,之后我们可以用下面这种方式计算出Si。
\begin{equation}s_{i}=s+\sum_{j=1}^{k} f_{j} x_{i}^{j}(\bmod p)\end{equation}
然后我们可以验证,Si是否等于gsi。
\begin{equation}S_{i}=S \cdot \prod_{j=1}^{k-1} F_{j}^{\left(x_{i}^{j}\right)}\end{equation}
原文:https://www.cnblogs.com/siyuan-Jin/p/12871523.html