Notes on a threshold encryption scheme: Simple and Efficient Threshold Cryptosystem from the Gap Diffie-Hellman Group from Baek and Zheng.

Lagrange interpolation

A polynomial of degree can be recovered with a set of of its evaluations at distinct points with the following linear combination (Lagrange interpolation polynomial),

using the Lagrange coefficient :

Here we’re taking .

Notations

  • for scalar and point in elliptic curve: scalar point multiplication
  • : sample uniformly at random from set

Setup

BLS curve with pairing where are subgroups (elliptic curves) of the same order , generators . The scalar field from BLS. A hash function , hash to curve function , message space .

A number of nodes indexed from 1 to (inclusive).

A threshold .

A polynomial of degree whose coefficients are not known and sampled uniformly at random.

An (unknown) secret master key , and corresponding public master key .

Each node possesses a share of the secret key (called secret key share) , with corresponding public verification keys for each node .

Deriving public key shares and public key in

Each node can compute a verification key share in by computing . And after posting them on-chain, the master public key on can be recovered like so:

One can check that the verification key share in matches the one in with the pairing check for :

Encrypt

If

Input: , a valid setup (provided by a DKG in our case).

  • Sample
  • Compute :
    • if :
    • if :
  • Ouput

Verify ciphertext

Input: ciphertext

  • Compute
  • Return

Create decryption key share

  • If ciphertext verification succeeds, , output

Verify decryption key share

if :

and

can be verified with two pairings:

Scaling with the number of ciphertexts

This works with public key shares in , which is doable as the keyholder can easily map their key shares from to with the mapping which preserves the properties of the public keys, and the key shares in can be checked against the key shares in with a pairing after the DKG phase: .

One can check for a threshold of keyholders indexed by ( is keyholder set):

the above predicate is equivalent to with high probability (for nonzero random scalar ):

Alpha can be sampled solely from ALL the arguments to the pairings (Fiat-Shamir transformation).

For kernel execution, the random scalar can be chosen as the hash of all the arguments to the pairings

So that we go (for ciphertexts) from pairings down to ( pairing checks instead of pairing checks).

Why is the above batching secure?

Let’s consider the simpler problem:

Let A be an adversary who outputs pairs of group
elements and wins iff where . Prove that either forall or A cannot win except with negligible probability.

We obtain thus which is a polynomial of degree (so has at most roots in the base finite field ) that vanishes at . Assuming forall (otherwise the equality holds for any choice of ), by the Schwartz-Zippel lemma, the probability that a uniformly random vanishes the polynomial is which is negligible when working in a big finite field . We can take by the Fiat-Shamir transform as the hash function uniformly distributes outputs, regardless of the inputs, so that the probability of success of the adversary would remain .

One can reduce the above predicate to this simpler problem with the following chain of equivalences:

Combine decryption key shares

Input: decryption key shares from a set of distinct nodes

  • Verify ciphertext
  • Verify decryption key shares
  • Recover plaintext :
    • if :
    • if :

Correctness:

For : by bilinearity of the pairing (and ):