$Setup$:
- Let's assume a quorum of $n$ nodes where each have a secret share $y_i$ from a know and safe leaderless DKG protocol.
- Define $\mathcal{L}^i(y_i) = y$ as the lagrange interpolation for $x=0$, giving $y$ as the secret that can only be known from at least $f + 1$ shares.
- Define $y \times G = Y$ as the public key (EC point) for the scalar $y$ and base point $G$. This can also be derived from $\mathcal{L}^i(Y_i) = Y$. Confirmed here.
- Define $H_c(r) = R$ as the hash-to-curve function on $r$ that gives R. $r$ is a public deterministic value that is known by all nodes. For instance, the round number in a blockchain consensus protocol.
The goal is to find a random value $V$ for the round $r$ that cannot be known or predicted in advance. The oracle value for a round $r$ is given by $y \times R = V$. Such value cannot be derived in this way because $(y, \alpha)$ are not known. Where $\alpha \times G = R$, but $R$ is derived from $H_c(r) = R$.
$Derive(V)$:
- Each node calculates $y_i \times R = V_i$ and broadcasts $V_i$.
- The value can be derived from $\mathcal{L}^i(V_i) = V$
$SignInterlaced(V_i)$:
- Each node can sign $V_i$ with a Schnorr's Signature (SS) (a double interlaced signature).
- From SS definition we start by deriving a local random nonce $m \in \mathcal{Z}_p$.
- Define $m_i \times G = M_i$ and $m_i \times R = M_{r,i}$
- Define $c_i = H(Y_i||V_i||M_i||M_{r,i}||r)$
- Sign with $p_i = m_i - c_i * y_i$ where $\sigma_i = (p_i, c_i)$
- Broadcast $\sigma_i$ and $V_i$
$CheckShare(V_i)$
- On each node we can verify that $V_i$ is derived from $y_i \times R$ if we:
- Get $p_i \times G + c_i \times Y_i = M_i$
- Get $p_i \times R + c_i \times V_i = M_{r,i}$
- Check that $c_i = H(Y_i||V_i||M_i||M_{r,i}||r)$
Informal Validation
Note that, if we try to fake $y^{'}_i \times R = V^{'}_i$ it will fail because $p_i$ is always derived from the same $y^{'}_i$.
- It will result in an incorrect $M_i$ if $p_i$ is derived from $y^{'}_i$ (on $SignInterlaced$) and then calculated with $Y_i$ (on $CheckShare$).
- It will result in an incorrect $M_{r,i}$ if $p_i$ is derived from $y_i$ (on $SignInterlaced$) and then calculated with $V^{'}_i$ (on $CheckShare$).
We cannot detach both verifications because they use the same $\sigma_i = (p_i, c_i)$, and $(G, R, Y_i)$ are known and forced EC points. Incorrect $(M_i, M_{r,i})$ will fail due to Fiat–Shamir heuristics.
If this really works, then we are "checking" a second degree constraint without Pairing-Based Cryptography! In PBC, normally this would be checked via $ê(V_i, G) = ê(y_i \times R, G) = ê(R, y_i \times G) = ê(R, Y_i)$
However, this is a naive security proof. So I'm posting this here for better scrutiny, if you can help me?
Edit: I saw that this is much similar to what is done here. I think this kind of proves that it works.
From here I can use it for different use-cases:
- Generate a pseudonym from a piece of public information.
- Build a distributed key escrow.