Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

VRF

2022-11-11


API

VRF=(KeyGen,Prove,Hash,Verify)
VRF.KeyGen()(sk,pk)

VRF.Prove(sk,α)π

VRF.Hash(π)rnd

VRF.Verify(pk,α,π)2


Security properties*

  • uniqueness:
    pk,α!πVRF.Verify(pk,α,π)=1
  • collision resistance:
    sk,α1α2rnd1rnd2
  • pseudorandomness (
    VRF.Verify
    distinguisher):
    fix
    sk
    (
    sk
    and
    π
    are unknown!),
    αrnd
    "looks" random
  • unpredictability under malicious key gen (for leader selection!):
    fix
    sk
    ,
    pk
    chosen by attacker,
    αrandomrndrandom

* hard to compute, in addition to NIZKP properties, non-malleability


ECVRF

  • sk,sk\textcolorlightgreenG
    keypair
  • rnd=Hrnd(sk\textcolorredHα(α))
  • π=DlEq{(\textcolorlightgreenG,\textcolorredHα(α),sk\textcolorlightgreenG,sk\textcolorredHα(α);sk):DL\textcolorlightgreenG(sk\textcolorlightgreenG)=DL\textcolorredHα(α)(sk\textcolorredHα(α))}

Variants of

DlEq proofs:

  • Schnoor preimage proof (eg. ed25519 "compatible")
  • pairing-based proof (eg. BLS "compatible")

ECVRF-EDWARDS25519-SHA512-ELL2

  • Curve25519, Ristretto subgroup(?)
  • Elligator2 for hash-to-curve
    Hα
  • SHA512 for hash-to-rnd
    Hrnd
  • nonce_gen, challenge_gen, salt, domain separation
  • point/int (de)serialization
  • verify: canonical encoding, low-/mixed-order points
  • third-party non-malleability
  • adversarial prover

What's next?

  • Distributed VRF:

    • Async network
    • Robustness
    • Threshold property
    • ADKG
  • Decentralized Random Beacon: DVRF + state


Thanks

Questions?