| Can imagine a protocol for generating randomness to some arbitrary security level (at the expense of locking up security deposits): (1) Anyone can decide to become a 'randomness provider' by putting up a large security depsoit (2) Every epoch (some number of blocks), each provider chooses a private random number and commits to it by publishing its hash (3) During the next epoch but, each provider publishes the random they committed to earlier. (4) xor together all the random values. The result is a pseudorandom number everyone can agree on, and which should be sufficiently good for many applications include PoS selection If any provider fails to publish the random number they committed to, they lose their security deposit and there is no random value provided for the associated epoch. The process starts over. If you're worried about bribing attacks over all providers, recognize that all we need is a single altruistic provider to keep the system safe. Altruistic behavior may be rare compared to selfish behavior, but I think we can usually rely on its nonzero presence. If you're still really worried that collusion could be going on amongst ALL randomness providers, just become a provider yourself. It's possible for a provider to wait for all other providers to reveal their values, and then privately determine whether or not the final random value would be favorable to them; they then have the option of canceling the epoch by keeping their private value hidden and losing their security deposit. This option (in combination with a particular application, and the size of the security deposit of providers) puts a bound on what the random value can be safely used for (e.g., if it's for a lottery, the expected value of another truly random swing at the jackpot has to be lower than the value of a security deposit). |
You also need to be sure that the others don't ignore the single altruistic source.
In a byzantine system, you can't distinguish if somebody is offline or if the others are silencing him.