Can Verifiable Random Functions be used to pick a random node from a pool?

Let's say that I have a decentralized system and I have a list of nodes published on a public log like a blockchain. I want a node A to be able to connect to another node B. B should be chosen randomly from a subset S of the list of all nodes. Once B is chosen I want the other nodes in the system to verify whether B was actually chosen randomly. We can assume that every node is able to compute S so my question is: Can A use a verifiable random function to choose a node from S which we call B and have all the other nodes be able to verify that the node B I chose was the node that was supposed to be chosen?

• Sure sounds like you can do this, if every node reliably knows every other node's public VRF verification key. Mar 3 '18 at 21:28
• @SqueamishOssifrage Thank you. My idea was to use it as follows: Every element in S is assigned an index with some specific criteria so every node assigns the same indexes to the elements of S. Then the VRF is used to generate a random value a and the proof p. The element in S chosen is the one with index i = a % n where n is the max index. Other nodes then can use the proof to verify the correctness of the election. Is this the proper way of using VRF? Mar 6 '18 at 15:32
• I am highly interested in this problem as well, @David please let me know if you've made any progress on this =) Thanks! Mar 14 '18 at 21:13
• You may be interested to read about Algorand, which uses VRFs to pick which users get to propose a block in a particular round. Apr 11 '18 at 1:41