Decentralized Randomness Beacon: drand

Jun 18, 2019  

Contributed by Kelong Cong

Decentralized randomness

The drand beacon is a decentralized system that periodically generates publicly verifiable randomness. At the moment the period is configured to 60 seconds. To understand what it does and why it is useful, let’s explain the important terms individually.

  1. Public randomness, unlike private randomness which is often used for generating cryptographic keys, is always revealed to the public at the end of every time period and nobody can predict the randomness before it is revealed. It is important in many applications such as lotteries and distributed ledgers. For example, the randomness that selects the winner of a lottery needs to be public so that every participant can convince themselves who the winner is.
  2. Verifiability goes hand in hand with the public randomness property above. Continuing with the lottery example, the participants not only need to see the randomness, they also want to verify that it is trustworthy. That is, there is no bias in the randomness. The verification is performed by verifying a threshold signature signed by the drand nodes.
  3. The drand nodes are decentralized and run around the world. We assume a threshold of them are honest. Thus even if some nodes go offline, or fall under control of attackers in order to attempt to bias the randomness, drand will continue generating unbiased publicly verifiable randomness.

History of drand

The drand project started as a research project at DEDIS which was named RandHound/RandHerd. The scientific contributions resulted in a publication in the IEEE S&P 2017 conference. In the publication, the authors noted that using the BLS signature scheme instead of collective Schnorr signatures would be an improvement (Section IV.E.2), which marked the beginning of drand.

Nicolas Gailly, who is a co-author in the IEEE S&P 2017 publication, started the drand development while he was a PhD student at DEDIS. Today, Nicolas continues to work on drand with the help of Philipp Jovanovic and Mathilde Raynal. The code is open source and contributors are welcome!

League of Entropy

The League of Entropy is a group of organizations and individuals that run drand nodes. The members are listed below with their corresponding node addresses and blog posts.

More nodes makes the system harder to attack, so anyone who can run and maintain a node is welcome to join! You can reach us at leagueofentropy@googlegroups.com.

Using drand

You can query the public API of any node for the current randomness by simply sending an HTTP GET request to the end point. For example:

curl https://drand.cothority.net:7003/api/public

If you are interested in the randomness in a particular round (21563 in this example), then add the round number to the end point above. For example:

curl https://drand.cothority.net:7003/api/public/21563

If you are looking for a way for clients to verify the randomness, please head over to drandjs. The example in the README is a good place to start. Contributions are welcome in drandjs too!