# Publicly Verifiable Secret Sharing

In cryptography, a secret sharing scheme is publicly verifiable (PVSS) if it is a verifiable secret sharing scheme and if any party (not just the participants of the protocol) can verify the validity of the shares distributed by the dealer.

In verifiable secret sharing (VSS) the object is to resist malicious players, such as
(i) a dealer sending incorrect shares to some or all of the participants, and
(ii) participants submitting incorrect shares during the reconstruction protocol,cf. [CGMA85].
In publicly verifiable secret sharing (PVSS), as introduced by Stadler [Sta96], it is an explicit goal that not just the participants can verify their own shares, but that anybody can verify that the participants received correct shares. Hence, it is explicitly required that (i) can be verified publicly.

— Berry Schoenmakers. A Simple Publicly Verifiable Secret Sharing Scheme and its Application to Electronic Voting .

The method introduced here according to the paper by Chunming Tang, Dingyi Pei, Zhuo Liu, and Yong He is non-interactive and maintains this property throughout the protocol.

## Initialization

The PVSS scheme dictates an initialization process in which:

1. All system parameters are generated.
2. Each participant must have a registered public key.

Excluding the initialization process, the PVSS consists of two phases:

## Distribution

1.Distribution of secret ${\displaystyle s}$ shares is performed by the dealer ${\displaystyle D}$, which does the following:

• The dealer creates ${\displaystyle s_{1},s_{2}...s_{n}}$ for each participant ${\displaystyle P_{1},P_{2}...P_{n}}$ respectively.
• The dealer publishes the encrypted share ${\displaystyle E_{i}(s_{i})}$ for each ${\displaystyle P_{i}}$.
• The dealer also publishes a string ${\displaystyle \mathrm {proof} _{D}}$ to show that each ${\displaystyle E_{i}}$ encrypts ${\displaystyle s_{i}}$

(note: ${\displaystyle \mathrm {proof} _{D}}$ guarantees that the reconstruction protocol will result in the same ${\displaystyle s}$.

2. Verification of the shares:

• Anybody knowing the public keys for the encryption methods ${\displaystyle E_{i}}$, can verify the shares.
• If one or more verifications fails the dealer fails and the protocol is aborted.

## Reconstruction

1. Decryption of the shares:

• The Participants ${\displaystyle P_{i}}$ decrypts their share of the secret ${\displaystyle s_{i}}$ using ${\displaystyle E_{i}(s_{i})}$.

(note: fault-tolerance can be allowed here: it's not required that all participants succeed in decrypting ${\displaystyle E_{i}(s_{i})}$ as long as a qualified set of participants are successful to decrypt ${\displaystyle s_{i}}$).

• The participant release ${\displaystyle s_{i}}$ plus a string ${\displaystyle \mathrm {proof} _{P_{i}}}$ this shows the released share is correct.

2. Pooling the shares:

• Using the strings ${\displaystyle \mathrm {proof} _{P_{i}}}$ to exclude the participants which are dishonest or failed to decrypt ${\displaystyle E_{i}(s_{i})}$.
• Reconstruction ${\displaystyle s}$ can be done from the shares of any qualified set of participants.

## Chaum-Pedersen Protocol

A proposed protocol proving: ${\displaystyle \log _{_{g1}}h_{1}=\log _{_{g2}}h_{2}}$ :

1. The prover chooses a random ${\displaystyle r\in {\boldsymbol {\mathrm {Z} }}_{q^{*}}}$
2. The verifier sends a random challenge ${\displaystyle c\in _{R}{\boldsymbol {\mathrm {Z} }}_{q}}$
3. The prover responds with ${\displaystyle s=r-cx(\mathrm {mod} \,q)}$
4. The verifier checks ${\displaystyle \alpha _{1}=g_{1}^{s}h_{1}^{c}}$ and ${\displaystyle \alpha _{2}=g_{2}^{s}h_{2}^{c}}$

Denote this protocol as: ${\displaystyle \mathrm {dleq} (g_{1},h_{1},g_{2},h_{2})}$
A generalization of ${\displaystyle \mathrm {dleq} (g_{1},h_{1},g_{2},h_{2})}$ is denoted as: ${\displaystyle {\text{dleq}}(X,Y,g_{1},h_{1},g_{2},h_{2})}$ where as: ${\displaystyle X=g_{1}^{x_{1}}g_{2}^{x_{2}}}$ and ${\displaystyle Y=h_{1}^{x_{1}}h_{2}^{x_{2}}}$:

1. The prover chooses a random ${\displaystyle r_{1},r_{2}\in Z_{q}^{*}}$ and sends ${\displaystyle t_{1}=g_{1}^{r_{1}}g_{2}^{r_{2}}}$ and ${\displaystyle t_{2}=h_{1}^{r_{1}}h_{2}^{r_{2}}}$
2. The verifier sends a random challenge ${\displaystyle c\in _{R}{\boldsymbol {\mathrm {Z} }}_{q}}$.
3. The prover responds with ${\displaystyle s_{1}=r_{1}-cx_{1}(\mathrm {mod} \,q)}$ , ${\displaystyle s_{2}=r_{2}-cx_{2}(\mathrm {mod} \,q)}$.
4. The verifier checks ${\displaystyle t_{1}=X^{c}g_{1}^{s_{1}}g_{2}^{s_{2}}}$ and ${\displaystyle t_{2}=Y^{c}h_{1}^{s_{1}}h_{2}^{s_{2}}}$

The Chaum-Pedersen protocol is an interactive method and needs some modification to be used in a non-interactive way: Replacing the randomly chosen ${\displaystyle c}$ by a 'secure hash' function with ${\displaystyle m}$ as input value.