Verifiable random function
In cryptography, a verifiable random function (VRF) is a public-key pseudorandom function that provides proofs that its outputs were calculated correctly. The owner of the secret key can compute the function value as well as an associated proof for any input value. Everyone else, using the proof and the associated public key (or "verification key"), can check that this value was indeed calculated correctly, yet this information cannot be used to find the secret key. A verifiable random function can be viewed as a public-key analogue of a keyed cryptographic hash and as a  cryptographic commitment to an exponentially large number of seemingly random bits. The concept of a verifiable random function is closely related to that of a verifiable unpredictable function (VUF), whose outputs are hard to predict but do not necessarily seem random. The concept of a VRF was introduced by Micali, Rabin, and Vadhan in 1999. Since then, verifiable random functions have found widespread use in cryptocurrencies, as well as in proposals for protocol design and cybersecurity. Constructions. In 1999, Micali, Rabin, and Vadhan introduced the concept of a VRF and proposed the first such one. The original construction was rather  inefficient: it first produces a "verifiable unpredictable function", then uses a hard-core bit to transform it into a VRF; moreover, the inputs have to be mapped to primes in a complicated manner: namely, by using a prime sequence generator that generates primes with overwhelming probability using a probabilistic primality test. The verifiable unpredictable function thus proposed, which is provably secure if a variant of the RSA problem is hard, is defined as follows: The public key "PK" is formula_1, where "m" is the product of two random primes, "r" is a number randomly selected from formula_2, "coins" is a  randomly selected set of bits, and "Q" a function selected randomly from all polynomials of degree formula_3 over the field formula_4. The secret key is formula_5. Given an input "x" and a secret key "SK", the VUF uses the prime sequence generator to pick a corresponding prime formula_6 (the generator requires auxiliary inputs "Q" and "coins"), and then computes and outputs formula_7, which is easily done by knowledge of formula_8. In 2005, an efficient and practical verifiable random function was proposed by Dodis and Yampolskiy. When the input formula_9 is from a small domain (the authors then extend it to  a larger domain), the function can be defined as follows: where "e"(·,·) is a bilinear map. To verify whether formula_11 was computed correctly or not, one can check if formula_12 and formula_13. To extend this to a larger domain, the authors use a tree construction and a universal hash function. This is secure if it is hard to break the "q-Diffie-Helman inversion assumption", which states that no algorithm given formula_14 can compute formula_15, and the "q-decisional bilinear Diffie-Helman inversion assumption", which states that it is impossible for an efficient algorithm given formula_16 as input to distinguish  formula_17 from random, in the group formula_18. In 2015, Hofheinz and Jager constructed a VRF which is provably secure given any member of the "(n − 1)-linear assumption family", which includes the decision linear assumption. This is the first such VRF constructed that does not depend on a "Q-type complexity assumption". In 2019, Bitansky showed that VRFs exist if non-interactive witness-indistinguishable proofs (that is, weaker versions of non-interactive zero-knowledge proofs for NP problems that only hide the witness that the prover uses), non-interactive cryptographic commitments, and single-key constrained pseudorandom functions (that is, pseudorandom  functions that only allow the user to evaluate the function with a preset constrained subset of possible inputs) also do. In 2020, Esgin et al. proposed a post-quantum secure VRF based on lattice-based cryptography. Uses and applications. VRFs provide deterministic pre-commitments for low entropy inputs which must be resistant to brute-force pre-image attacks. VRFs can be used for defense against offline enumeration attacks (such as dictionary attacks) on data stored in hash-based data structures. In protocol design. VRFs have been used to make: VRFs can also be used to implement random oracles. In Internet  security. DNSSEC is a system that prevents attackers from tampering with Domain Name System messages, but it also suffers from the vulnerability of zone enumeration. The proposed NSEC5 system, which uses VRFs, provably prevents this type of attack. In cryptocurrency. Cardano and Polkadot implement VRFs for block production. The Internet Computer cryptocurrency uses a VRF to produce a decentralized random beacon whose output is unpredictable to anyone until they become available to everyone. More precisely, its protocol allows clients to agree on a VRF (i.e. a commitment to a deterministic pseudorandom sequence) and to produce one new output thereof every  round by using threshold signatures and distributed key generation. Algorand uses VRFs to perform cryptographic sortition. In this platform, every block produces a new random selection seed, and a user secretly checks whether they were selected to participate in the consensus protocol by evaluating a VRF with their secret participation key and the selection seed. (This also produces a proof, which the user can send to anyone to show that they have been selected to participate.) Thusly, accounts are selected to propose blocks for a given round. In this manner, VRFs prevent users from gaining staking advantages by registering multiple  accounts. The particular VRF that Algorand uses is based on elliptic-curve cryptography, specifically Curve25519; proposed by Sharon Goldberg, Moni Naor, Dimitris Papadopoulos, Leonid Reyzin, and Jan Včelák, the function is currently undergoing standardization as an IETF Internet Draft. Algorand's own implementation of this function has been open-source since October 2018. VRFs based on elliptic curve cryptography have been implemented in the programming language Solidity. In May 2020, Chainlink announced that it launched Chainlink VRF, a service that uses verifiable random functions to generate verifiable randomness on-chain. To use Chainlink VRF, a smart contract supplies a seed  (which should be unpredictable to the oracles to whom it is provided), and the seed in turn is used to generate a random number that is sent back to the contract; this is published on-chain along with a proof and verified using the oracle's public key and the application's seed. Each oracle, when generating randomness, uses its own secret key. In July 2021, Harmony, a cryptocurrency project that bridges between blockchains, and Oraichain, a cryptocurrency project involving artificial intelligence, announced that they had introduced VRFs.