<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Verifiable_random_function</id>
	<title>Verifiable random function - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Verifiable_random_function"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Verifiable_random_function&amp;action=history"/>
	<updated>2026-05-04T15:47:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Verifiable_random_function&amp;diff=1733463&amp;oldid=prev</id>
		<title>imported&gt;OAbot: Open access bot: url-access updated in citation with #oabot.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Verifiable_random_function&amp;diff=1733463&amp;oldid=prev"/>
		<updated>2025-05-26T13:21:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/OABOT&quot; class=&quot;extiw&quot; title=&quot;wikipedia:OABOT&quot;&gt;Open access bot&lt;/a&gt;: url-access updated in citation with #oabot.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Public-key cryptographic pseudorandom function}}&lt;br /&gt;
In [[cryptography]], a &amp;#039;&amp;#039;&amp;#039;verifiable random function&amp;#039;&amp;#039;&amp;#039; (VRF) is a public-key [[pseudo-random function|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 &amp;#039;&amp;#039;verification key&amp;#039;&amp;#039;&amp;lt;ref name=&amp;quot;:9&amp;quot; /&amp;gt;), can check that this value was indeed calculated correctly, yet this information cannot be used to find the secret key.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;{{Cite tech report|last=Goldberg|first=Sharon|last2=Vcelak|first2=Jan|last3=Papadopoulos|first3=Dimitrios|last4=Reyzin|first4=Leonid|date=5 March 2018|title=Verifiable Random Functions (VRFs)|url=https://open.bu.edu/bitstream/handle/2144/29225/draft-irtf-cfrg-vrf-01.pdf?sequence=2&amp;amp;isAllowed=y|journal=|language=en|access-date=15 August 2021}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A verifiable random function can be viewed as a public-key analogue of a [[Hash function|keyed cryptographic hash]]&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; and as a [[cryptographic commitment]] to an exponentially large number of seemingly random bits.&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt; The concept of a verifiable random function is closely related to that of a &amp;#039;&amp;#039;&amp;#039;verifiable unpredictable function&amp;#039;&amp;#039;&amp;#039; (VUF), whose outputs are hard to predict but do not necessarily seem random.&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:8&amp;quot;&amp;gt;{{cite conference|last1=Micali|first1=Silvio|author-link=Silvio Micali|last2=Rabin|first2=Michael O.|author-link2=Michael Rabin|last3=Vadhan|first3=Salil P.|author-link3=Salil Vadhan|year=1999|title=Verifiable random functions|url=https://dash.harvard.edu/bitstream/handle/1/5028196/Vadhan_VerifRandomFunction.pdf|conference=40th Annual Symposium on Foundations of Computer Science|pages=120–130|doi=10.1109/SFFCS.1999.814584|isbn=0-7695-0409-4|book-title=Proceedings of the 40th IEEE Symposium on Foundations of Computer Science}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The concept of a VRF was introduced by [[Silvio Micali|Micali]], [[Michael O. Rabin|Rabin]], and [[Salil Vadhan|Vadhan]] in 1999.&amp;lt;ref name=&amp;quot;:8&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:11&amp;quot;&amp;gt;{{Cite web|last=Potter|first=John|date=9 September 2021|title=How Can Value Investors Profit in the Crypto Ecosystem?|url=https://finance.yahoo.com/news/value-investors-profit-crypto-ecosystem-121413276.html|access-date=19 September 2021|website=finance.yahoo.com|language=en-US}}&amp;lt;/ref&amp;gt; Since then, verifiable random functions have found widespread use in cryptocurrencies, as well as in proposals for protocol design and cybersecurity.&amp;lt;!-- This statement is sourced/verified in the body of this article; no need to add a cite. ~Duckmather --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Constructions ==&lt;br /&gt;
In 1999, Micali, Rabin, and Vadhan introduced the concept of a VRF and proposed the first such one.&amp;lt;ref name=&amp;quot;:8&amp;quot; /&amp;gt; The original construction was rather inefficient: it first produces a &amp;#039;&amp;#039;verifiable unpredictable function&amp;#039;&amp;#039;, 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 [[Primality test|probabilistic primality test]].&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:8&amp;quot; /&amp;gt; The verifiable unpredictable function thus proposed, which is provably secure if a variant of the [[RSA (cryptosystem)|RSA problem]] is hard, is defined as follows: The public key &amp;#039;&amp;#039;PK&amp;#039;&amp;#039; is &amp;lt;math&amp;gt;(m, r, Q, coins)&amp;lt;/math&amp;gt;, where &amp;#039;&amp;#039;m&amp;#039;&amp;#039; is the product of two random primes, &amp;#039;&amp;#039;r&amp;#039;&amp;#039; is a number randomly selected from &amp;lt;math&amp;gt;\mathbb{Z}_m^*&amp;lt;/math&amp;gt;, &amp;#039;&amp;#039;coins&amp;#039;&amp;#039; is a randomly selected set of bits, and &amp;#039;&amp;#039;Q&amp;#039;&amp;#039; a function selected randomly from all polynomials of degree &amp;lt;math&amp;gt;2k^2 - 1&amp;lt;/math&amp;gt; over the field &amp;lt;math&amp;gt;GF(2^k)&amp;lt;/math&amp;gt;. The secret key is &amp;lt;math&amp;gt;(PK, \phi(m))&amp;lt;/math&amp;gt;. Given an input &amp;#039;&amp;#039;x&amp;#039;&amp;#039; and a secret key &amp;#039;&amp;#039;SK&amp;#039;&amp;#039;, the VUF uses the prime sequence generator to pick a corresponding prime &amp;lt;math&amp;gt;p_x&amp;lt;/math&amp;gt; (the generator requires auxiliary inputs &amp;#039;&amp;#039;Q&amp;#039;&amp;#039; and &amp;#039;&amp;#039;coins&amp;#039;&amp;#039;), and then computes and outputs &amp;lt;math&amp;gt;r^{1/p_x} \pmod{m}&amp;lt;/math&amp;gt;, which is easily done by knowledge of &amp;lt;math&amp;gt;\phi(m)&amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;:8&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 2005, an efficient and practical verifiable random function was proposed by Dodis and Yampolskiy.&amp;lt;ref name=&amp;quot;:7&amp;quot;&amp;gt;{{cite conference|last1=Dodis|first1=Yevgeniy|last2=Yampolskiy|first2=Aleksandr|author-link2=Aleksandr Yampolskiy|date=16 November 2004|title=A Verifiable Random Function With Short Proofs and Keys|url=https://eprint.iacr.org/2004/310.pdf|conference=International Workshop on Public Key Cryptography|publisher=Springer, Berlin, Heidelberg|publication-date=2005|pages=416–431|isbn=978-3-540-30580-4|access-date=26 August 2021|book-title=8th International Workshop on Theory and Practice in Public Key Cryptography}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;{{Cite thesis|last=Nountu|first=Thierry Mefenza|title=Pseudo-Random Generators and Pseudo-Random Functions: Cryptanalysis and Complexity Measures|date=28 November 2017|degree=Thèse de doctorat|url=https://hal.inria.fr/tel-01667124v1/document}}&amp;lt;/ref&amp;gt; When the input &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; is from a small domain (the authors then extend it to a larger domain), the function can be defined as follows:&lt;br /&gt;
:&amp;lt;math&amp;gt; F_{SK}(x) = e(g, g)^{1/(x+SK)} \quad\mbox{and}\quad p_{SK}(x) = g^{1/(x+SK)}, &amp;lt;/math&amp;gt;&lt;br /&gt;
where &amp;#039;&amp;#039;e&amp;#039;&amp;#039;(·,·) is a [[bilinear map]]. To verify whether &amp;lt;math&amp;gt;F_{SK}(x)&amp;lt;/math&amp;gt; was computed correctly or not, one can check&lt;br /&gt;
if &amp;lt;math&amp;gt;e(g^x PK, p_{SK}(x))=e(g,g)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;e(g, p_{SK}(x))=F_{SK}(x)&amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; To extend this to a larger domain, the authors use a tree construction and a [[universal hash function]].&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt; This is secure if it is hard to break the &amp;quot;q-Diffie-Helman inversion assumption&amp;quot;, which states that no algorithm given &amp;lt;math&amp;gt;(g, g^x, \dots, g^{x^q})&amp;lt;/math&amp;gt; can compute &amp;lt;math&amp;gt;g^{1/x}&amp;lt;/math&amp;gt;, and the &amp;quot;[[q-decisional bilinear Diffie-Helman inversion assumption]]&amp;quot;, which states that it is impossible for an efficient algorithm given &amp;lt;math&amp;gt;(g, g^{x}, \ldots, g^{(x^q)}, R)&amp;lt;/math&amp;gt; as input to distinguish &amp;lt;math&amp;gt;R=e(g,g)^{1/x}&amp;lt;/math&amp;gt; from random, in the group &amp;lt;math&amp;gt;\mathbb{G}&amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 2015, Hofheinz and Jager constructed a VRF which is provably secure given any member of the &amp;quot;(n − 1)-linear assumption family&amp;quot;, which includes the [[Decision Linear assumption|decision linear assumption]].&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;{{Cite conference|last1=Hofheinz|first1=Dennis|last2=Jager|first2=Tibor|date=30 October 2015|title=Verifiable Random Functions from Standard Assumptions|url=http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.738.9975&amp;amp;rep=rep1&amp;amp;type=pdf|conference=Theory of Cryptography Conference|publication-date=19 December 2015|pages=336–362|doi=10.1007/978-3-662-49096-9_14|citeseerx=10.1.1.738.9975 |isbn=978-3-662-49096-9}}&amp;lt;/ref&amp;gt; This is the first such VRF constructed that does not depend on a &amp;quot;Q-type complexity assumption&amp;quot;.&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 2019, Bitansky showed that VRFs exist if non-interactive witness-indistinguishable proofs (that is, weaker versions of [[non-interactive zero-knowledge proof]]s for [[NP (complexity)|NP problems]] that only hide the witness that the prover uses&amp;lt;ref name=&amp;quot;:9&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;{{Cite journal|last1=Barak|first1=Boaz|last2=Ong|first2=Shien Jin|last3=Vadhan|first3=Salil|date=2007-01-01|title=Derandomization in Cryptography|url=https://dash.harvard.edu/bitstream/handle/1/41467486/86374%2010.1.1.91.2701.pdf|journal=SIAM Journal on Computing|volume=37|issue=2|pages=380–400|doi=10.1137/050641958|issn=0097-5397|access-date=2 September 2021}}&amp;lt;/ref&amp;gt;), 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&amp;lt;ref&amp;gt;{{Cite book|last1=Boneh|first1=Dan|last2=Waters|first2=Brent|title=Advances in Cryptology - ASIACRYPT 2013 |chapter=Constrained Pseudorandom Functions and Their Applications |date=2013|editor-last=Sako|editor-first=Kazue|editor2-last=Sarkar|editor2-first=Palash|chapter-url=https://eprint.iacr.org/2013/352|series=Lecture Notes in Computer Science|volume=8270 |language=en|location=Berlin, Heidelberg|publisher=Springer|pages=280–300|doi=10.1007/978-3-642-42045-0_15|isbn=978-3-642-42045-0|access-date=2 September 2021|doi-access=free}}&amp;lt;/ref&amp;gt;) also do.&amp;lt;ref name=&amp;quot;:9&amp;quot;&amp;gt;{{Cite journal|last=Bitansky|first=Nir|date=2020-04-01|title=Verifiable Random Functions from Non-interactive Witness-Indistinguishable Proofs|url=https://doi.org/10.1007/s00145-019-09331-1|journal=Journal of Cryptology|language=en|volume=33|issue=2|pages=459–493|doi=10.1007/s00145-019-09331-1|s2cid=253636177 |issn=1432-1378|url-access=subscription}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When an [[Oblivious Pseudorandom Function]] is based on [[asymmetric cryptography]], possession of the public key can allow the client to verify the output of the function, by checking a [[digital signature]] or a [[zero-knowledge proof]].&lt;br /&gt;
&lt;br /&gt;
In 2020, Esgin et al. proposed a [[Post-quantum cryptography|post-quantum secure]] VRF based on [[lattice-based cryptography]].&amp;lt;ref name=&amp;quot;:10&amp;quot;&amp;gt;{{Cite journal|last1=Esgin|first1=Muhammed F.|last2=Kuchta|first2=Veronika|last3=Sakzad|first3=Amin|last4=Steinfeld|first4=Ron|last5=Zhang|first5=Zhenfei|last6=Sun|first6=Shifeng|last7=Chu|first7=Shumo|date=24 March 2021|title=Practical Post-Quantum Few-Time Verifiable Random Function with Applications to Algorand|url=https://eprint.iacr.org/2020/1222|journal=Cryptology ePrint Archive|access-date=26 August 2021}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uses and applications==&lt;br /&gt;
&lt;br /&gt;
VRFs provide deterministic pre-commitments for low entropy inputs which must be resistant to brute-force [[Preimage attack|pre-image attacks]].&amp;lt;ref&amp;gt;{{Cite web|last=Schorn|first=Eric|date=2020-02-24|title=Reviewing Verifiable Random Functions|url=https://research.nccgroup.com/2020/02/24/reviewing-verifiable-random-functions/|access-date=2021-09-04|website=NCC Group Research|language=en-US}}&amp;lt;/ref&amp;gt;{{Better source needed|date=September 2021}} VRFs can be used for defense against offline enumeration attacks (such as [[dictionary attack]]s) on data stored in hash-based data structures.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== In protocol design ===&lt;br /&gt;
VRFs have been used to make:&lt;br /&gt;
&lt;br /&gt;
* Resettable [[zero-knowledge proofs]] (i.e. one that remains zero-knowledge even if a malicious verifier is allowed to &amp;#039;&amp;#039;reset&amp;#039;&amp;#039; the honest prover and query it again&amp;lt;ref&amp;gt;{{Cite book|last1=Micali|first1=Silvio|last2=Reyzin|first2=Leonid|title=Advances in Cryptology — CRYPTO 2001 |chapter=Soundness in the Public-Key Model |date=2001|editor-last=Kilian|editor-first=Joe|series=Lecture Notes in Computer Science|volume=2139 |language=en|location=Berlin, Heidelberg|publisher=Springer|pages=542–565|doi=10.1007/3-540-44647-8_32|isbn=978-3-540-44647-7|doi-access=free}}&amp;lt;/ref&amp;gt;) with three rounds in the bare model&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
* Non-interactive lottery systems&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
* Verifiable transaction escrow schemes&amp;lt;ref name=&amp;quot;:7&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
*Updatable zero-knowledge databases&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
*E-cash&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
VRFs can also be used to implement [[random oracle]]s.&amp;lt;ref&amp;gt;{{Cite book|last=Dodis|first=Yevgeniy|title=Public Key Cryptography — PKC 2003 |chapter=Efficient Construction of (Distributed) Verifiable Random Functions |date=2002|editor-last=Desmedt|editor-first=Yvo G.|series=Lecture Notes in Computer Science|volume=2567 |language=en|location=Berlin, Heidelberg|publisher=Springer|pages=1–17|doi=10.1007/3-540-36288-6_1|isbn=978-3-540-36288-3|doi-access=free}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== In Internet security ===&lt;br /&gt;
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{{How|date=August 2021}}, provably prevents this type of attack.&amp;lt;ref&amp;gt;{{Cite web|last=Goldberg|first=Sharon|title=NSEC5: Provably Preventing DNSSEC Zone Enumeration|url=https://www.cs.bu.edu/~goldbe/papers/nsec5.html|access-date=2021-08-26|website=www.cs.bu.edu}}&amp;lt;/ref&amp;gt;{{Importance inline|date=August 2021|reason=Has NSEC5 been used in any notable instance?}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Cryptographic algorithms]]&lt;br /&gt;
[[Category:Cryptographic primitives]]&lt;br /&gt;
[[Category:Pseudorandomness]]&lt;/div&gt;</summary>
		<author><name>imported&gt;OAbot</name></author>
	</entry>
</feed>